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

presentation.org 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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 (equal '(Lisp) '(Lots of Insipid, Stupid 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 unfortunately 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. - Standard was a compromise/design by committee between the authors of various lisp implementations
  44. - Standard came out of Interlisp, Maclisp, and others
  45. - The language itself has not changed since this standard was published
  46. - Language improvements done as implementation specific extensions
  47. - Many things can be implemented as macros/reader-macros and shipped as libraries
  48. - [[https://www.quicklisp.org/beta/][Quicklisp]] (a library manager) released in October 2010
  49. - [[https://github.com/roswell/roswell][Roswell]] lisp implementation manager and script framework released very recently (not sure on date)
  50. ** Implementations
  51. - There are many different implementations of the CL standard
  52. - Commercial: Allegro CL, LispWorks
  53. - Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
  54. - Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
  55. ** Features
  56. - CLOS (Common Lisp Object System)
  57. - Pretty much every standard data structure
  58. - Optional tail call optimization
  59. - Robust package (think namespaces) system
  60. - Build manager (asdf)
  61. - Library manager (quicklisp)
  62. - Fast with the right implementation
  63. ** Problems
  64. - Old and crotchety (community and language)
  65. - Sometimes large differences between implementations (usually patched over with a cross-implementation library)
  66. - Some simple things baked into most modern languages are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
  67. ** Projects
  68. - Pretty much everything new on my gitlab
  69. - Mcclim [[https://github.com/robert-strandh/McCLIM]] cross platform GUI/Windowing library
  70. - Cluffer text editor buffer [[https://github.com/robert-strandh/Cluffer]]
  71. - Climacs emacs replacement [[https://github.com/robert-strandh/Second-Climacs]]
  72. - Lots of game programming libraries at [[https://github.com/lispgames]]
  73. - See [[http://eudoxia.me/article/common-lisp-sotu-2015]] "State of the Common Lisp Ecosystem, 2015"
  74. - Libraries for almost everything you'll want to do
  75. ** Real world uses
  76. - Used at grammarly [[https://www.grammarly.com/]] [[http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html]]
  77. - Open source Evernote alternative https://turtl.it/. Server is in Common Lisp
  78. - Commercial examples at [[http://franz.com/success/]] and [[http://www.lispworks.com/success-stories/index.html]]
  79. - There seems to actually be quite a bit of it, just not advertised and generally closed source.
  80. - See [[https://lispjobs.wordpress.com/]]
  81. ** CLASP
  82. *** Purpose
  83. - "Seamless" integration with C++ using LLVM.
  84. - Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
  85. *** Projects
  86. - Mostly academic use so far.
  87. - Read creator's blog here: [[https://drmeister.wordpress.com/]]
  88. - Creator is implementing CANDO, a tool for biologists for molecular design
  89. - I don't know of any production use cases yet, but it is pretty cool!
  90. ** ECL
  91. *** Purpose
  92. - Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
  93. - Extremely portable with small and fast binaries.
  94. - Can be called like a C library with no FFI
  95. - Can call C functions with no FFI
  96. *** Projects
  97. - ECL on Android with libsdl for game programming [[https://gitlab.com/dto/ecl-android-games-src]]
  98. - Various people working on general purpose projects. ECL is a full common lisp
  99. - See [[https://common-lisp.net/project/ecl/]]
  100. ** Resources
  101. - Practical Common Lisp [[http://gigamonkeys.com/book/]]
  102. - Common Lisp Recipes (for after PCL) [[http://weitz.de/cl-recipes/]]
  103. - Land of Lisp (fun alternative to PCL [love the comics]) http://landoflisp.com/
  104. - Common lisp hyperspec [[http://www.lispworks.com/documentation/HyperSpec/Front/index.htm]]
  105. - Duckduckgo hyperspec search with !clhs
  106. - Articulate Common Lisp [[http://articulate-lisp.com]]
  107. - [[http://lisp-lang.org/]]
  108. - #lisp and #lispgames on freenode IRC
  109. - For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
  110. * Clojure
  111. ** Brief History
  112. - Created by Rich Hickey
  113. - Original public release 2007-10-16
  114. - First stable release (1.0) 2009-05-04
  115. - Latest version 1.8
  116. ** Backends
  117. - Java, the original and most supported
  118. - Javascript, (clojurescript) official and run by David Nolen
  119. - Various others in various states of support
  120. ** Purpose
  121. - See [[http://clojure.org/about/rationale]]
  122. - Basically wanted A lisp for functional programming symbiotic with Java and designed for concurrency.
  123. ** Features
  124. - Immutability focused
  125. - Very good java/javascript interop
  126. - All the bells and whistles you'd expect with a modern language
  127. - Functional programming "only" (I consider this an anti-feature personally)
  128. ** Projects
  129. - Can you think of it? Someone has probably done it in Clojure
  130. - Heavily used for backend web services so far
  131. - Climate Corporation (our location sponsor) is a heavy user for production
  132. - Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
  133. - Lot of the cool stuff is in Clojurescript land like Om and Reagent
  134. ** Resources
  135. - Clojure for the Brave and True [[http://www.braveclojure.com/]]
  136. - Cursive + IntelliJ IDE [[https://cursive-ide.com/]]
  137. - Emacs + Cider IDE [[https://github.com/clojure-emacs/cider]]
  138. - Clojurescript info [[https://github.com/clojure/clojurescript/wiki]]
  139. - #clojure on freenode IRC
  140. * Racket
  141. ** Brief History
  142. - Originally PLT Scheme
  143. - First appeared in 1994
  144. - Renamed Racket 2010-06-07
  145. ** Features
  146. - Lots and lots of friendly libraries and documentation
  147. - Ships with IDE Dr. Racket
  148. - Lots of learning/teaching resources, especially for kids
  149. - Designed to be very easy to get up and running and make simple programs
  150. - General purpose, does not force you into a particular paradigm
  151. - Scribble documentation language
  152. ** Projects
  153. - Naughty Dog uses Racket in Uncharted, The Last of Us, etc
  154. - Racket controls a huge telescope in New Mexico
  155. - Arc (see later slides) implemented in Racket
  156. - John Carmack using Racket for Gear VR. [[https://groups.google.com/d/msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J]]
  157. - Watch the Racketcon videos or go to Racketcon for more information!
  158. - Racketcon is right after the STL Strangeloop Conference!
  159. ** Resources
  160. - Cool game creating book [[http://realmofracket.com/]]
  161. - Awesome official docs [[https://docs.racket-lang.org/]]
  162. - #racket on freenode IRC
  163. * Guile Scheme
  164. ** Brief History
  165. - Began work in 1993
  166. - Originally GEL or GNU Extension Language
  167. - Designed as a spiritual and cleaner successor to Emacs lisp
  168. - Development languished until Andy Wingo took over in 2009/2010
  169. - Guile 2.0 in 2011 revitalized the language with many improvements
  170. - Since 2.0 there have been many incremental improvements to the language
  171. ** Features
  172. - Very embed-able, designed for a polyglot environment
  173. - Full featured, lots of batteries included libraries
  174. - Easy to use C API that goes both ways
  175. - Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
  176. - General purpose
  177. ** Projects
  178. - Mostly GNU projects as it is the official GNU extension language
  179. - Project in progress to replace Emacs Lisp with guile, but community is split
  180. - GNU Guix & GuixSD (cool nix-like package manager and distribution)
  181. - GnuCash
  182. - gEDA
  183. - GDB
  184. - Artanis web framework (pretty new) [[http://web-artanis.com/]]
  185. - Sly game programming framework [[https://dthompson.us/pages/software/sly.html]]
  186. ** Resources
  187. - Official tutorial [[https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html]]
  188. - Manual [[https://www.gnu.org/software/guile/manual/]]
  189. - List of resources [[https://www.gnu.org/software/guile/learn/]]
  190. - #guile on freenode IRC
  191. * Chicken Scheme
  192. ** Purpose
  193. - Practical and portable
  194. - Wants to bring Scheme out of the academic world and into the industry
  195. - Focus on being simple, fast, and easy to learn
  196. ** Features
  197. - Compiles to standard C using the GNU toolchain
  198. - Runs on x86, x86-64, ARM, MIPS, Sparc64, PowerPC, and more
  199. - Well documented in the wiki and manual
  200. - Plenty of libraries and a library manager
  201. - Good FFI
  202. ** Projects
  203. - Tehila game engine [[https://wiki.call-cc.org/tehila]]
  204. - Wiki software qwiki [[https://wiki.call-cc.org/egg/qwiki]]
  205. - Really just see [[https://wiki.call-cc.org/Software]]
  206. ** Resources
  207. - Excellent official wiki [[https://wiki.call-cc.org/]]
  208. - Official manual [[http://wiki.call-cc.org/man/4/The%2520User's%2520Manual][http://wiki.call-cc.org/man/4/The%20User's%20Manual]]
  209. - #chicken on freenode IRC
  210. * Emacs Lisp
  211. ** Brief History
  212. - First appeared in 1985
  213. - Based off Maclisp (a now dead lisp dialect)
  214. - Has gradually gained more and more features over the years but no major revisions really
  215. - Considered outdated compared to modern Scheme or Common Lisp
  216. - Some in GNU want to replace with Guile
  217. ** Purpose
  218. - Pretty much just for emacs
  219. - Allows easier extensibility than C (which the rest of emacs is written in)
  220. - Definitely NOT designed for general purpose programming
  221. ** Projects
  222. - Emacs of course
  223. - Any of the hundreds (thousands?) of emacs packages
  224. - Org mode (this presentation is Org Mode -> Latex + Beamer -> PDF)
  225. - Web servers
  226. - Games
  227. - API glue
  228. - All kinds of fancy IDE features
  229. ** Resources
  230. - Emacs Lisp Intro (C-h i and look for 'Emacs Lisp Intro' in emacs) [[https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html]]
  231. - Emacs Lisp Reference (C-h i and look for 'Elisp' in emacs) [[https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html]]
  232. - Learn emacs lisp in the Wiki [[https://www.emacswiki.org/emacs/LearnEmacsLisp]]
  233. - The emacs wiki [[https://www.emacswiki.org/emacs/LearnEmacsLisp]]
  234. - #emacs in freenode IRC
  235. * Picolisp
  236. ** General Notes
  237. - First appeared in 1988 for the Apple Macintosh
  238. - Simplicity and minimalism
  239. - Single internal data type (cell)
  240. - Numbers, symbols, and lists are the ONLY built in data types
  241. - Differs from other lisps in not having lambda, but does not require it due to the way its quote works
  242. - Integrated database
  243. - "Awesome" C/Java interop
  244. ** Resources
  245. - Official documentation [[http://picolisp.com/wiki/?Documentation]]
  246. - #picolisp on freenode IRC
  247. * Shen
  248. ** General Notes
  249. - Originally called Qi
  250. - Static types
  251. - Optional laziness
  252. - integrated prolog
  253. - Macros
  254. - Portability
  255. - Runs on top of various languages including SBCL Common Lisp, Clojure, Scheme, Ruby, Python, JVM, Haskell, Javascript.
  256. - Free learning resources are lacking
  257. ** Resources
  258. - Official wiki [[https://github.com/Shen-Language/wiki/wiki]]
  259. - Two official books desribed at [[http://shenlanguage.org/]]
  260. - #shen on freenode IRC
  261. * Arc
  262. ** General notes
  263. - Written by Paul Graham starting in 2001
  264. - Written in Racket
  265. - See essay [[http://www.paulgraham.com/popular.html]]
  266. - Released in 2008
  267. - Designed to be simple
  268. - Seems to have a very small community
  269. - Hackernews ([[https://news.ycombinator.com][news.ycombinator.com]]) is implemented in Arc
  270. ** Resources
  271. - Seems to only have http://www.arclanguage.org/tut.txt
  272. * Honorable Mentions
  273. ** Lisp Flavored Erlang
  274. - Written by Robert Virding
  275. - Work begin in 2007
  276. - Basically developed just because the author wanted to develop a language on top of erlang and likes lisp
  277. - Author was one of the creators of Erlang
  278. - Provides erlang with meta programming and a feature rich REPL
  279. - [[http://lfe.io/]]
  280. ** Hy
  281. - Also called Hylang
  282. - Written by Paul Tagliamonte
  283. - Introduced at PyCon 2013
  284. - Transparent Lisp front end to Python
  285. - Extreme python interop, since it is basically python
  286. - [[http://docs.hylang.org/en/latest/#]]
  287. ** Pixie
  288. - Heavily inspired by Clojure
  289. - Written by Timothy Baldrige
  290. - Our own Chris Gore has contributed
  291. - First appeared in 2015
  292. - Implemented in RPython and uses PyPy Garbage Collector and tracing JIT
  293. - Basically a clojure dialect with fast startup and native code
  294. - Very young, good for small scripts/programs
  295. - [[http://pixielang.org/]]
  296. ** Kawa
  297. - Scheme on the JVM
  298. - Many consider it to have better Java integration than Clojure or ABCL
  299. - See [[https://www.gnu.org/software/kawa/]] and [[http://lwn.net/Articles/623349/]]