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

presentation.tex 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. % Created 2016-07-12 Tue 21:51
  2. \documentclass[bigger]{beamer}
  3. \usepackage[utf8]{inputenc}
  4. \usepackage[T1]{fontenc}
  5. \usepackage{fixltx2e}
  6. \usepackage{graphicx}
  7. \usepackage{longtable}
  8. \usepackage{float}
  9. \usepackage{wrapfig}
  10. \usepackage{rotating}
  11. \usepackage[normalem]{ulem}
  12. \usepackage{amsmath}
  13. \usepackage{textcomp}
  14. \usepackage{marvosym}
  15. \usepackage{wasysym}
  16. \usepackage{amssymb}
  17. \usepackage{hyperref}
  18. \tolerance=1000
  19. \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Topic}\tableofcontents[currentsection]\end{frame}}
  20. \author{Lily Carpenter}
  21. \date{2016-07-14}
  22. \title{State of the Lisp Family}
  23. \hypersetup{
  24. pdfkeywords={},
  25. pdfsubject={},
  26. pdfcreator={Emacs 24.5.1 (Org mode 8.2.10)}}
  27. \begin{document}
  28. \maketitle
  29. \tableofcontents
  30. \section{Introduction}
  31. \label{sec-1}
  32. \subsection{All about me}
  33. \label{sec-1-1}
  34. \begin{itemize}
  35. \item I do NOT use lisp at work. I write ruby (on rails) and javascript
  36. \item I have only been part of the lisp community for a couple years
  37. \item I am most experienced with Common Lisp, Emacs Lisp, and Clojure
  38. \item I have played with Guile briefly
  39. \item I have a blog at \href{https://azrazalea.net}{azrazalea.net} and git repositories on \href{https://gitlab.com/azrazalea/}{gitlab}
  40. \item This presentation is on gitlab at \url{https://gitlab.com/azrazalea/state-of-lisp-family}
  41. \end{itemize}
  42. \subsection{A very very brief history}
  43. \label{sec-1-2}
  44. \begin{itemize}
  45. \item Lisp(NOT common lisp) was first specified in 1958
  46. \item Many many dialects of Lisp have appeared over the years. See \href{https://en.wikipedia.org/wiki/Lisp_(programming_language)}{wikipedia}
  47. \item The general hallmark of a Lisp is its s-expression based syntax (equal '(Lisp) '(Lots of Insipid, Stupid Parentheses))
  48. \item Originally heavily used in academic circles and AI
  49. \item Now mostly limited to small communities (Yes Clojure is still small)
  50. \end{itemize}
  51. \subsection{Why care about lisp?}
  52. \label{sec-1-3}
  53. \begin{itemize}
  54. \item First and foremost lisp is FUN
  55. \item Lack of syntax and s-expressions are very freeing once you get used to them (and have a good editor)
  56. \item A very smart community that can unfortunately sometimes be hard to get into
  57. \item Code as data is awesome
  58. \end{itemize}
  59. \section{Common Lisp}
  60. \label{sec-2}
  61. \subsection{Brief History}
  62. \label{sec-2-1}
  63. \begin{itemize}
  64. \item Work started in 1981, draft published 1984, 2nd draft 1990, final standard 1994
  65. \item Standard was a compromise/design by committee between the authors of various lisp implementations
  66. \item Standard came out of Interlisp, Maclisp, and others
  67. \item The language itself has not changed since this standard was published
  68. \item Language improvements done as implementation specific extensions
  69. \item Many things can be implemented as macros/reader-macros and shipped as libraries
  70. \item \href{https://www.quicklisp.org/beta/}{Quicklisp} (a library manager) released in October 2010
  71. \item \href{https://github.com/roswell/roswell}{Roswell} lisp implementation manager and script framework released very recently (not sure on date)
  72. \end{itemize}
  73. \subsection{Implementations}
  74. \label{sec-2-2}
  75. \begin{itemize}
  76. \item There are many different implementations of the CL standard
  77. \item Commercial: Allegro CL, LispWorks
  78. \item Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
  79. \item Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
  80. \end{itemize}
  81. \subsection{Features}
  82. \label{sec-2-3}
  83. \begin{itemize}
  84. \item CLOS (Common Lisp Object System)
  85. \item Pretty much every standard data structure
  86. \item Optional tail call optimization
  87. \item Robust package (think namespaces) system
  88. \item Build manager (asdf)
  89. \item Library manager (quicklisp)
  90. \item Fast with the right implementation
  91. \end{itemize}
  92. \subsection{Problems}
  93. \label{sec-2-4}
  94. \begin{itemize}
  95. \item Old and crotchety (community and language)
  96. \item Sometimes large differences between implementations (usually patched over with a cross-implementation library)
  97. \item Some simple things baked into most modern languages are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
  98. \end{itemize}
  99. \subsection{Projects}
  100. \label{sec-2-5}
  101. \begin{itemize}
  102. \item Pretty much everything new on my gitlab
  103. \item Mcclim \url{https://github.com/robert-strandh/McCLIM} cross platform GUI/Windowing library
  104. \item Cluffer text editor buffer \url{https://github.com/robert-strandh/Cluffer}
  105. \item Climacs emacs replacement \url{https://github.com/robert-strandh/Second-Climacs}
  106. \item Lots of game programming libraries at \url{https://github.com/lispgames}
  107. \item See \url{http://eudoxia.me/article/common-lisp-sotu-2015} "State of the Common Lisp Ecosystem, 2015"
  108. \item Libraries for almost everything you'll want to do
  109. \end{itemize}
  110. \subsection{Real world uses}
  111. \label{sec-2-6}
  112. \begin{itemize}
  113. \item Used at grammarly \url{https://www.grammarly.com/} \url{http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html}
  114. \item Open source Evernote alternative \url{https://turtl.it/}. Server is in Common Lisp
  115. \item Commercial examples at \url{http://franz.com/success/} and \url{http://www.lispworks.com/success-stories/index.html}
  116. \item There seems to actually be quite a bit of it, just not advertised and generally closed source.
  117. \item See \url{https://lispjobs.wordpress.com/}
  118. \end{itemize}
  119. \subsection{CLASP}
  120. \label{sec-2-7}
  121. \begin{enumerate}
  122. \item Purpose
  123. \label{sec-2-7-1}
  124. \begin{itemize}
  125. \item "Seamless" integration with C++ using LLVM.
  126. \item Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
  127. \end{itemize}
  128. \item Projects
  129. \label{sec-2-7-2}
  130. \begin{itemize}
  131. \item Mostly academic use so far.
  132. \item Read creator's blog here: \url{https://drmeister.wordpress.com/}
  133. \item Creator is implementing CANDO, a tool for biologists for molecular design
  134. \item I don't know of any production use cases yet, but it is pretty cool!
  135. \end{itemize}
  136. \end{enumerate}
  137. \subsection{ECL}
  138. \label{sec-2-8}
  139. \begin{enumerate}
  140. \item Purpose
  141. \label{sec-2-8-1}
  142. \begin{itemize}
  143. \item Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
  144. \item Extremely portable with small and fast binaries.
  145. \item Can be called like a C library with no FFI
  146. \item Can call C functions with no FFI
  147. \end{itemize}
  148. \item Projects
  149. \label{sec-2-8-2}
  150. \begin{itemize}
  151. \item ECL on Android with libsdl for game programming \url{https://gitlab.com/dto/ecl-android-games-src}
  152. \item Various people working on general purpose projects. ECL is a full common lisp
  153. \item See \url{https://common-lisp.net/project/ecl/}
  154. \end{itemize}
  155. \end{enumerate}
  156. \subsection{Resources}
  157. \label{sec-2-9}
  158. \begin{itemize}
  159. \item Practical Common Lisp \url{http://gigamonkeys.com/book/}
  160. \item Common Lisp Recipes (for after PCL) \url{http://weitz.de/cl-recipes/}
  161. \item Land of Lisp (fun alternative to PCL [love the comics]) \url{http://landoflisp.com/}
  162. \item Common lisp hyperspec \url{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}
  163. \item Duckduckgo hyperspec search with !clhs
  164. \item Articulate Common Lisp \url{http://articulate-lisp.com}
  165. \item \url{http://lisp-lang.org/}
  166. \item \#lisp and \#lispgames on freenode IRC
  167. \item For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
  168. \end{itemize}
  169. \section{Clojure}
  170. \label{sec-3}
  171. \subsection{Brief History}
  172. \label{sec-3-1}
  173. \begin{itemize}
  174. \item Created by Rich Hickey
  175. \item Original public release 2007-10-16
  176. \item First stable release (1.0) 2009-05-04
  177. \item Latest version 1.8
  178. \end{itemize}
  179. \subsection{Backends}
  180. \label{sec-3-2}
  181. \begin{itemize}
  182. \item Java, the original and most supported
  183. \item Javascript, (clojurescript) official and run by David Nolen
  184. \item Various others in various states of support
  185. \end{itemize}
  186. \subsection{Purpose}
  187. \label{sec-3-3}
  188. \begin{itemize}
  189. \item See \url{http://clojure.org/about/rationale}
  190. \item Basically wanted A lisp for functional programming symbiotic with Java and designed for concurrency.
  191. \end{itemize}
  192. \subsection{Features}
  193. \label{sec-3-4}
  194. \begin{itemize}
  195. \item Immutability focused
  196. \item Very good java/javascript interop
  197. \item All the bells and whistles you'd expect with a modern language
  198. \item Functional programming "only" (I consider this an anti-feature personally)
  199. \end{itemize}
  200. \subsection{Projects}
  201. \label{sec-3-5}
  202. \begin{itemize}
  203. \item Can you think of it? Someone has probably done it in Clojure
  204. \item Heavily used for backend web services so far
  205. \item Climate Corporation (our location sponsor) is a heavy user for production
  206. \item Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
  207. \item Lot of the cool stuff is in Clojurescript land like Om and Reagent
  208. \end{itemize}
  209. \subsection{Resources}
  210. \label{sec-3-6}
  211. \begin{itemize}
  212. \item Clojure for the Brave and True \url{http://www.braveclojure.com/}
  213. \item Cursive + IntelliJ IDE \url{https://cursive-ide.com/}
  214. \item Emacs + Cider IDE \url{https://github.com/clojure-emacs/cider}
  215. \item Clojurescript info \url{https://github.com/clojure/clojurescript/wiki}
  216. \item \#clojure on freenode IRC
  217. \end{itemize}
  218. \section{Racket}
  219. \label{sec-4}
  220. \subsection{Brief History}
  221. \label{sec-4-1}
  222. \begin{itemize}
  223. \item Originally PLT Scheme
  224. \item First appeared in 1994
  225. \item Renamed Racket 2010-06-07
  226. \end{itemize}
  227. \subsection{Features}
  228. \label{sec-4-2}
  229. \begin{itemize}
  230. \item Lots and lots of friendly libraries and documentation
  231. \item Ships with IDE Dr. Racket
  232. \item Lots of learning/teaching resources, especially for kids
  233. \item Designed to be very easy to get up and running and make simple programs
  234. \item General purpose, does not force you into a particular paradigm
  235. \item Scribble documentation language
  236. \end{itemize}
  237. \subsection{Projects}
  238. \label{sec-4-3}
  239. \begin{itemize}
  240. \item Naughty Dog uses Racket in Uncharted, The Last of Us, etc
  241. \item Racket controls a huge telescope in New Mexico
  242. \item Arc (see later slides) implemented in Racket
  243. \item John Carmack using Racket for Gear VR. \url{https://groups.google.com/d/msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J}
  244. \item Watch the Racketcon videos or go to Racketcon for more information!
  245. \item Racketcon is right after the STL Strangeloop Conference!
  246. \end{itemize}
  247. \subsection{Resources}
  248. \label{sec-4-4}
  249. \begin{itemize}
  250. \item Cool game creating book \url{http://realmofracket.com/}
  251. \item Awesome official docs \url{https://docs.racket-lang.org/}
  252. \item \#racket on freenode IRC
  253. \end{itemize}
  254. \section{Guile Scheme}
  255. \label{sec-5}
  256. \subsection{Brief History}
  257. \label{sec-5-1}
  258. \begin{itemize}
  259. \item Began work in 1993
  260. \item Originally GEL or GNU Extension Language
  261. \item Designed as a spiritual and cleaner successor to Emacs lisp
  262. \item Development languished until Andy Wingo took over in 2009/2010
  263. \item Guile 2.0 in 2011 revitalized the language with many improvements
  264. \item Since 2.0 there have been many incremental improvements to the language
  265. \end{itemize}
  266. \subsection{Features}
  267. \label{sec-5-2}
  268. \begin{itemize}
  269. \item Very embed-able, designed for a polyglot environment
  270. \item Full featured, lots of batteries included libraries
  271. \item Easy to use C API that goes both ways
  272. \item Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
  273. \item General purpose
  274. \end{itemize}
  275. \subsection{Projects}
  276. \label{sec-5-3}
  277. \begin{itemize}
  278. \item Mostly GNU projects as it is the official GNU extension language
  279. \item Project in progress to replace Emacs Lisp with guile, but community is split
  280. \item GNU Guix \& GuixSD (cool nix-like package manager and distribution)
  281. \item GnuCash
  282. \item gEDA
  283. \item GDB
  284. \item Artanis web framework (pretty new) \url{http://web-artanis.com/}
  285. \item Sly game programming framework \url{https://dthompson.us/pages/software/sly.html}
  286. \end{itemize}
  287. \subsection{Resources}
  288. \label{sec-5-4}
  289. \begin{itemize}
  290. \item Official tutorial \url{https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html}
  291. \item Manual \url{https://www.gnu.org/software/guile/manual/}
  292. \item List of resources \url{https://www.gnu.org/software/guile/learn/}
  293. \item \#guile on freenode IRC
  294. \end{itemize}
  295. \section{Chicken Scheme}
  296. \label{sec-6}
  297. \subsection{Purpose}
  298. \label{sec-6-1}
  299. \begin{itemize}
  300. \item Practical and portable
  301. \item Wants to bring Scheme out of the academic world and into the industry
  302. \item Focus on being simple, fast, and easy to learn
  303. \end{itemize}
  304. \subsection{Features}
  305. \label{sec-6-2}
  306. \begin{itemize}
  307. \item Compiles to standard C using the GNU toolchain
  308. \item Runs on x86, x86-64, ARM, MIPS, Sparc64, PowerPC, and more
  309. \item Well documented in the wiki and manual
  310. \item Plenty of libraries and a library manager
  311. \item Good FFI
  312. \end{itemize}
  313. \subsection{Projects}
  314. \label{sec-6-3}
  315. \begin{itemize}
  316. \item Tehila game engine \url{https://wiki.call-cc.org/tehila}
  317. \item Wiki software qwiki \url{https://wiki.call-cc.org/egg/qwiki}
  318. \item Really just see \url{https://wiki.call-cc.org/Software}
  319. \end{itemize}
  320. \subsection{Resources}
  321. \label{sec-6-4}
  322. \begin{itemize}
  323. \item Excellent official wiki \url{https://wiki.call-cc.org/}
  324. \item Official manual \href{http://wiki.call-cc.org/man/4/The\%2520User's\%2520Manual}{\url{http://wiki.call-cc.org/man/4/The\%20User's\%20Manual}}
  325. \item \#chicken on freenode IRC
  326. \end{itemize}
  327. \section{Emacs Lisp}
  328. \label{sec-7}
  329. \subsection{Brief History}
  330. \label{sec-7-1}
  331. \begin{itemize}
  332. \item First appeared in 1985
  333. \item Based off Maclisp (a now dead lisp dialect)
  334. \item Has gradually gained more and more features over the years but no major revisions really
  335. \item Considered outdated compared to modern Scheme or Common Lisp
  336. \item Some in GNU want to replace with Guile
  337. \end{itemize}
  338. \subsection{Purpose}
  339. \label{sec-7-2}
  340. \begin{itemize}
  341. \item Pretty much just for emacs
  342. \item Allows easier extensibility than C (which the rest of emacs is written in)
  343. \item Definitely NOT designed for general purpose programming
  344. \end{itemize}
  345. \subsection{Projects}
  346. \label{sec-7-3}
  347. \begin{itemize}
  348. \item Emacs of course
  349. \item Any of the hundreds (thousands?) of emacs packages
  350. \item Org mode (this presentation is Org Mode -> Latex + Beamer -> PDF)
  351. \item Web servers
  352. \item Games
  353. \item API glue
  354. \item All kinds of fancy IDE features
  355. \end{itemize}
  356. \subsection{Resources}
  357. \label{sec-7-4}
  358. \begin{itemize}
  359. \item Emacs Lisp Intro (C-h i and look for 'Emacs Lisp Intro' in emacs) \url{https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html}
  360. \item Emacs Lisp Reference (C-h i and look for 'Elisp' in emacs) \url{https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html}
  361. \item Learn emacs lisp in the Wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
  362. \item The emacs wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
  363. \item \#emacs in freenode IRC
  364. \end{itemize}
  365. \section{Picolisp}
  366. \label{sec-8}
  367. \subsection{General Notes}
  368. \label{sec-8-1}
  369. \begin{itemize}
  370. \item First appeared in 1988 for the Apple Macintosh
  371. \item Simplicity and minimalism
  372. \item Single internal data type (cell)
  373. \item Numbers, symbols, and lists are the ONLY built in data types
  374. \item Differs from other lisps in not having lambda, but does not require it due to the way its quote works
  375. \item Integrated database
  376. \item "Awesome" C/Java interop
  377. \end{itemize}
  378. \subsection{Resources}
  379. \label{sec-8-2}
  380. \begin{itemize}
  381. \item Official documentation \url{http://picolisp.com/wiki/?Documentation}
  382. \item \#picolisp on freenode IRC
  383. \end{itemize}
  384. \section{Shen}
  385. \label{sec-9}
  386. \subsection{General Notes}
  387. \label{sec-9-1}
  388. \begin{itemize}
  389. \item Originally called Qi
  390. \item Static types
  391. \item Optional laziness
  392. \item integrated prolog
  393. \item Macros
  394. \item Portability
  395. \item Runs on top of various languages including SBCL Common Lisp, Clojure, Scheme, Ruby, Python, JVM, Haskell, Javascript.
  396. \item Free learning resources are lacking
  397. \end{itemize}
  398. \subsection{Resources}
  399. \label{sec-9-2}
  400. \begin{itemize}
  401. \item Official wiki \url{https://github.com/Shen-Language/wiki/wiki}
  402. \item Two official books desribed at \url{http://shenlanguage.org/}
  403. \item \#shen on freenode IRC
  404. \end{itemize}
  405. \section{Arc}
  406. \label{sec-10}
  407. \subsection{General notes}
  408. \label{sec-10-1}
  409. \begin{itemize}
  410. \item Written by Paul Graham starting in 2001
  411. \item Written in Racket
  412. \item See essay \url{http://www.paulgraham.com/popular.html}
  413. \item Released in 2008
  414. \item Designed to be simple
  415. \item Seems to have a very small community
  416. \item Hackernews (\href{https://news.ycombinator.com}{news.ycombinator.com}) is implemented in Arc
  417. \end{itemize}
  418. \subsection{Resources}
  419. \label{sec-10-2}
  420. \begin{itemize}
  421. \item Seems to only have \url{http://www.arclanguage.org/tut.txt}
  422. \end{itemize}
  423. \section{Honorable Mentions}
  424. \label{sec-11}
  425. \subsection{Lisp Flavored Erlang}
  426. \label{sec-11-1}
  427. \begin{itemize}
  428. \item Written by Robert Virding
  429. \item Work begin in 2007
  430. \item Basically developed just because the author wanted to develop a language on top of erlang and likes lisp
  431. \item Author was one of the creators of Erlang
  432. \item Provides erlang with meta programming and a feature rich REPL
  433. \item \url{http://lfe.io/}
  434. \end{itemize}
  435. \subsection{Hy}
  436. \label{sec-11-2}
  437. \begin{itemize}
  438. \item Also called Hylang
  439. \item Written by Paul Tagliamonte
  440. \item Introduced at PyCon 2013
  441. \item Transparent Lisp front end to Python
  442. \item Extreme python interop, since it is basically python
  443. \item \url{http://docs.hylang.org/en/latest/#}
  444. \end{itemize}
  445. \subsection{Pixie}
  446. \label{sec-11-3}
  447. \begin{itemize}
  448. \item Heavily inspired by Clojure
  449. \item Written by Timothy Baldrige
  450. \item Our own Chris Gore has contributed
  451. \item First appeared in 2015
  452. \item Implemented in RPython and uses PyPy Garbage Collector and tracing JIT
  453. \item Basically a clojure dialect with fast startup and native code
  454. \item Very young, good for small scripts/programs
  455. \item \url{http://pixielang.org/}
  456. \end{itemize}
  457. \subsection{Kawa}
  458. \label{sec-11-4}
  459. \begin{itemize}
  460. \item Scheme on the JVM
  461. \item Many consider it to have better Java integration than Clojure or ABCL
  462. \item See \url{https://www.gnu.org/software/kawa/} and \url{http://lwn.net/Articles/623349/}
  463. \end{itemize}
  464. % Emacs 24.5.1 (Org mode 8.2.10)
  465. \end{document}