A likely to be continually updated presentation on the state of the lisp family. Check tags for past versions.

presentation.org 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #+TITLE: State of the Lisp Family
  2. #+DATE: 2016-07-14
  3. #+AUTHOR: Lily Carpenter
  4. #+EMAIL: lily-presentation@azrazalea.net
  5. #+OPTIONS: ':nil *:t -:t ::t <:t H:2 \n:nil ^:t arch:headline author:t c:nil
  6. #+OPTIONS: creator:comment d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t
  7. #+OPTIONS: num:t p:nil pri:nil stat:t tags:t tasks:t tex:t timestamp:t toc:t
  8. #+OPTIONS: todo:t |:t
  9. #+CREATOR: Emacs 24.5.1 (Org mode 8.2.10)
  10. #+DESCRIPTION:
  11. #+EXCLUDE_TAGS: noexport
  12. #+KEYWORDS:
  13. #+LANGUAGE: en
  14. #+SELECT_TAGS: export
  15. #+startup: beamer
  16. #+LaTeX_CLASS: beamer
  17. #+LaTeX_CLASS_OPTIONS: [bigger]
  18. #+BEAMER_FRAME_LEVEL: 2
  19. #+COLUMNS: %40ITEM %10BEAMER_env(Env) %9BEAMER_envargs(Env Args) %4BEAMER_col(Col) %10BEAMER_extra(Extra)
  20. #+latex_header: \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Topic}\tableofcontents[currentsection]\end{frame}}
  21. * Introduction
  22. ** All about me
  23. - I do NOT use lisp at work. I write ruby (on rails) and javascript
  24. - I have only been part of the lisp community for a couple years
  25. - I am most experienced with Common Lisp, Emacs Lisp, and Clojure
  26. - I have played with Guile briefly
  27. - I have a blog at [[https://azrazalea.net][azrazalea.net]] and git repositories on [[https://gitlab.com/azrazalea/][gitlab]]
  28. - This presentation is on gitlab at [[https://gitlab.com/azrazalea/state-of-lisp-family]]
  29. ** A very very brief history
  30. - Lisp(NOT common lisp) was first specified in 1958
  31. - Many many dialects of Lisp have appeared over the years. See [[https://en.wikipedia.org/wiki/Lisp_(programming_language)][wikipedia]]
  32. - The general hallmark of a Lisp is its s-expression based syntax (informally SO MANY PARENTHESES!!!)
  33. - Originally heavily used in academic circles and AI
  34. - Now mostly limited to small communities (Yes Clojure is still small)
  35. ** Why care about lisp?
  36. - First and foremost lisp is FUN
  37. - Lack of syntax and s-expressions are very freeing once you get used to them (and have a good editor)
  38. - A very smart community that can sometimes be hard to get into
  39. - Code as data is awesome
  40. * Common Lisp
  41. ** Brief History
  42. - Work started in 1981, draft published 1984, 2nd draft 1990, final standard 1994
  43. - The language itself has not changed since this standard was published
  44. - Language improvements done as implementation specific extensions
  45. - Many things can be implemented as macros/reader-macros and shipped as libraries
  46. - [[https://www.quicklisp.org/beta/][Quicklisp]] (a library manager) released in October 2010
  47. ** Implementations
  48. - There are many different implementations of the CL standard
  49. - Commercial: Allergro CL, LispWorks
  50. - Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
  51. - Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
  52. ** Features
  53. - CLOS (Common Lisp Object System)
  54. - Pretty much every standard data structure
  55. - Optional tail call optimization
  56. - Robust package (think namespace) system
  57. - Build manager (asdf)
  58. - Library manager (quicklisp)
  59. - Fast with the right implementation
  60. ** Problems
  61. - Old and crotchety (community and language)
  62. - Sometimes large differences between implementations (usually patched over with a cross-implementation library)
  63. - Some simple things baked into most modern langs are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
  64. ** Projects
  65. - Pretty much everything new on my gitlab
  66. - Mcclim [[https://github.com/robert-strandh/McCLIM]] cross platform GUI/Windowing library
  67. - Lots of game programming libraries at [[https://github.com/lispgames]]
  68. - See [[http://eudoxia.me/article/common-lisp-sotu-2015]] "State of the Common Lisp Ecosystem, 2015"
  69. - Libraries for almost everything you'll want to do
  70. ** Real world uses
  71. - Used at grammarly [[https://www.grammarly.com/]] [[http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html]]
  72. - Open source Evernote alternative https://turtl.it/. Server is in Common Lisp
  73. - Commercial examples at [[http://franz.com/success/]] and [[http://www.lispworks.com/success-stories/index.html]]
  74. - There seems to actually be quite a bit of it, just not advertised and generally closed source.
  75. - See [[https://lispjobs.wordpress.com/]]
  76. ** Resources
  77. - Practical Common Lisp [[http://gigamonkeys.com/book/]]
  78. - Common Lisp Recipes (for after PCL) [[http://weitz.de/cl-recipes/]]
  79. - Land of Lisp (fun alternative to PCL [love the comics]) http://landoflisp.com/
  80. - Common lisp hyperspec [[http://www.lispworks.com/documentation/HyperSpec/Front/index.htm]]
  81. - Duckduckgo hyperspec search with !clhs
  82. - For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
  83. ** CLASP
  84. *** Purpose
  85. - "Seamless" integration with C++ using LLVM.
  86. - Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
  87. *** Projects
  88. - Mostly academic use so far.
  89. - Read creator's blog here: [[https://drmeister.wordpress.com/]]
  90. - I don't know of any production use cases yet, but it is pretty cool!
  91. ** ECL
  92. *** Purpose
  93. - Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
  94. - Extremely portable with small and fast binaries.
  95. - Can be called like a C library with no FFI
  96. - Can call C functions with no FFI
  97. *** Projects
  98. - ECL on Android with libsdl for 3d game programming [[https://gitlab.com/dto/ecl-android-games-src]]
  99. - Various people working on general purpose projects. ECL is a full common lisp
  100. - See [[https://common-lisp.net/project/ecl/]]
  101. * Clojure
  102. ** Brief History
  103. - Created by Rich Hickey
  104. - Original public release 2007-10-16
  105. - First stable release (1.0) 2009-05-04
  106. - Latest version 1.8
  107. ** Backends
  108. - Java, the original and most supported
  109. - Javascript, (clojurescript) official and run by David Nolen
  110. - Various others in various states of support
  111. ** Purpose
  112. - See [[http://clojure.org/about/rationale]]
  113. - Basically wanted A lisp for functional programming symbiotic with Java and designed for concurrency.
  114. ** Features
  115. - Immutability focused
  116. - Very good java/javascript interop
  117. - All the bells and whistles you'd expect with a modern language
  118. - Functional programming "only" (I consider this an anti-feature personally)
  119. ** Projects
  120. - Can you think of it? Someone has probably done it in Clojure
  121. - Heavily used for backend web services so far
  122. - Climate Corporation (our location sponsor) is a heavy user for production
  123. - Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
  124. - Lot of the cool stuff is in Clojurescript land like Om and Reagent
  125. * Racket Scheme
  126. ** Brief History
  127. - Originally PLT Scheme
  128. - First appeared in 1994
  129. - Renamed Racket 2010-06-07
  130. ** Features
  131. - Lots and lots of friendly libraries and documentation
  132. - Ships with IDE Dr. Racket
  133. - Lots of learning/teaching resources, especially for kids
  134. - Designed to be very easy to get up and running and make simple programs
  135. - General purpose, does not force you into a particular paradigm
  136. ** Projects
  137. - Naughty Dog uses Racket in Uncharted, The Last of Us, etc
  138. - Racket controls a huge telescope in New Mexico
  139. - Arc (see later slides) implemented in Racket
  140. - Watch the Racketcon videos or go to Racketcon for more information!
  141. - Racketcon is right after the STL Strangeloop Conference!
  142. * Guile Scheme
  143. ** Brief History
  144. - Began work in 1993
  145. - Originally GEL or GNU Extension Language
  146. - Designed as a spiritual and cleaner successor to Emacs lisp
  147. - Development languished until Andy Wingo took over in 2009/2010
  148. - Guile 2.0 in 2011 revitalized the language with many improvements
  149. - Since 2.0 there have been many incremental improvements to the language
  150. ** Features
  151. - Very embed-able, designed for a polyglot environment
  152. - Full featured, lots of batteries included libraries
  153. - Easy to use C API that goes both ways
  154. - Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
  155. ** Projects
  156. - Mostly GNU projects as it is the official GNU extension language
  157. - Project in progress to replace Emacs Lisp with guile, but community is split
  158. - GNU Guix & GuixSD (cool nix-like package manager and distribution)
  159. - GnuCash
  160. - gEDA
  161. - GDB
  162. - Artanis web framework (pretty new) [[http://web-artanis.com/]]
  163. - Sly game programming framework [[https://dthompson.us/pages/software/sly.html]]
  164. * Chicken Scheme
  165. ** Purpose
  166. - Practical and portable
  167. - Wants to bring Scheme out of the academic world and into the industry
  168. - Focus on being simple, fast, and easy to learn
  169. ** Features
  170. - Compiles to standard C using the GNU toolchain
  171. - Runs on x86, x86-64, ARM, MIPS, Sparc64, PowerPC, and more
  172. - Well documented in the wiki and manual
  173. - Plenty of libraries and a library manager
  174. - Good FFI
  175. ** Projects
  176. - Tehila game engine [[https://wiki.call-cc.org/tehila]]
  177. - Wiki software qwiki [[https://wiki.call-cc.org/egg/qwiki]]
  178. - Really just see [[https://wiki.call-cc.org/Software]]
  179. * Emacs Lisp
  180. ** Brief History
  181. - First appeared in 1985
  182. - Based off Maclisp (a now dead lisp dialect)
  183. - Has gradually gained more and more features over the years but no major revisions really
  184. - Considered outdated compared to modern Scheme or Common Lisp
  185. - Some in GNU want to replace with Guile
  186. ** Purpose
  187. - Pretty much just for emacs
  188. - Allows easier extensibility than C (which the rest of emacs is written in)
  189. - Definitely NOT designed for general purpose programming
  190. ** Projects
  191. - Emacs of course
  192. - Any of the hundreds (thousands?) of emacs packages
  193. - Org mode (this presentation is Org Mode -> Latex + Beamer -> PDF)
  194. - Web servers
  195. - Games
  196. - API glue
  197. - All kinds of fancy IDE features
  198. * Picolisp
  199. ** General Notes
  200. - First appeared in 1988 for the Apple Macintosh
  201. - Simplicity and minimalism
  202. - Single internal data type (cell)
  203. - Numbers, symbols, and lists are the ONLY built in data types
  204. - Differs from other lisps in not having lambda, but does not require it
  205. - Integrated database
  206. - "Awesome" C/Java interop
  207. * Shen
  208. ** General Notes
  209. - Originally called Qi
  210. - Static types
  211. - Optional laziness
  212. - integrated prolog
  213. - Macros
  214. - Portability
  215. - Runs on top of various languages including SBCL Common Lisp, Clojure, Scheme, Ruby, Python, JVM, Haskell, Javascript.
  216. - Free learning resources are lacking
  217. * Arc
  218. ** General notes
  219. - Written by Paul Graham starting in 2001
  220. - Written in Racket Scheme
  221. - See essay [[http://www.paulgraham.com/popular.html]]
  222. - Released in 2008
  223. - Designed to be simple
  224. - Seems to have a very small community
  225. - Hackernews ([[https://news.ycombinator.com][news.ycombinator.com]]) is implemented in Arc
  226. * Honorable Mentions
  227. ** Lisp Flavored Erlang
  228. - Written by Robert Virding
  229. - Work begin in 2007
  230. - Basically developed just because the author wanted to develop a language on top of erlang and likes lisp
  231. - Author was one of the creators of Erlang
  232. - Provides erlang with meta programming and a feature rich REPL
  233. ** Hy
  234. - Also called Hylang
  235. - Written by Paul Tagliamonte
  236. - Introduced at PyCon 2013
  237. - Transparent Lisp front end to Python
  238. - Extreme python interop, since it is basically python
  239. ** Pixie
  240. - Heavily inspired by Clojure
  241. - Written by Timothy Baldrige
  242. - Our own Chris Gore has contributed
  243. - First appeared in 2015
  244. - Implemented in RPython and uses PyPy Garbage Collector and tracing JIT
  245. - Basically a clojure dialect with fast startup and native code
  246. - Very young, good for small scripts/programs