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

presentation.tex 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  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 (informally SO MANY PARENTHESES!!!)
  48. \item Originally heavily used in academic circles and AI
  49. \item Now, aside from Clojure, mostly limited to eccentrics
  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 S expressions are very freeing once you get used to them (and have a good editor)
  56. \item A very smart, though not always friendly, community
  57. \end{itemize}
  58. \section{Common Lisp}
  59. \label{sec-2}
  60. \subsection{Brief History}
  61. \label{sec-2-1}
  62. \begin{itemize}
  63. \item Work started in 1981, draft published 1984, 2nd draft 1990, final standard 1994
  64. \item The language itself has not changed since this standard was published
  65. \item Language improvements done as implementation specific extensions
  66. \item Many things can be implemented as macros/reader-macros and shipped as libraries
  67. \item \href{https://www.quicklisp.org/beta/}{Quicklisp} (a library manager) released in October 2010
  68. \end{itemize}
  69. \subsection{Implementations}
  70. \label{sec-2-2}
  71. \begin{itemize}
  72. \item There are many different implementations of the CL standard
  73. \item Commercial: Allergro CL, LispWorks
  74. \item Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
  75. \item Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
  76. \end{itemize}
  77. \subsection{Features}
  78. \label{sec-2-3}
  79. \begin{itemize}
  80. \item CLOS (Common Lisp Object System)
  81. \item Pretty much every standard data structure
  82. \item Optional tail call optimization
  83. \item Robust package (think namespace) system
  84. \item Build manager (asdf)
  85. \item Library manager (quicklisp)
  86. \item Fast with the right implementation
  87. \end{itemize}
  88. \subsection{Problems}
  89. \label{sec-2-4}
  90. \begin{itemize}
  91. \item Old and crotchety (community and language)
  92. \item Sometimes large differences between implementations (usually patched over with a cross-implementation library)
  93. \item Some simple things baked into most modern langs are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
  94. \end{itemize}
  95. \subsection{Projects}
  96. \label{sec-2-5}
  97. \begin{itemize}
  98. \item Pretty much everything new on my gitlab
  99. \item Mcclim \url{https://github.com/robert-strandh/McCLIM} cross platform GUI/Windowing library
  100. \item Lots of game programming libraries at \url{https://github.com/lispgames}
  101. \item See \url{http://eudoxia.me/article/common-lisp-sotu-2015} "State of the Common Lisp Ecosystem, 2015"
  102. \item Libraries for almost everything you'll want to do
  103. \end{itemize}
  104. \subsection{Real world uses}
  105. \label{sec-2-6}
  106. \begin{itemize}
  107. \item Used at grammarly \url{https://www.grammarly.com/} \url{http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html}
  108. \item Open source Evernote alternative \url{https://turtl.it/}. Server is in Common Lisp
  109. \item Commercial examples at \url{http://franz.com/success/} and \url{http://www.lispworks.com/success-stories/index.html}
  110. \item There seems to actually be quite a bit of it, just not advertised and generally closed source.
  111. \item See \url{https://lispjobs.wordpress.com/}
  112. \end{itemize}
  113. \subsection{Resources}
  114. \label{sec-2-7}
  115. \begin{itemize}
  116. \item Practical Common Lisp \url{http://gigamonkeys.com/book/}
  117. \item Common Lisp Recipes (for after PCL) \url{http://weitz.de/cl-recipes/}
  118. \item Land of Lisp (fun alternative to PCL [love the comics]) \url{http://landoflisp.com/}
  119. \item Common lisp hyperspec \url{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}
  120. \item Duckduckgo hyperspec search with !clhs
  121. \item For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
  122. \end{itemize}
  123. \subsection{CLASP}
  124. \label{sec-2-8}
  125. \begin{enumerate}
  126. \item Purpose
  127. \label{sec-2-8-1}
  128. \begin{itemize}
  129. \item "Seamless" integration with C++ using LLVM.
  130. \item Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
  131. \end{itemize}
  132. \item Projects
  133. \label{sec-2-8-2}
  134. \begin{itemize}
  135. \item Mostly academic use so far.
  136. \item Read creator's blog here: \url{https://drmeister.wordpress.com/}
  137. \item I don't know of any production use cases yet, but it is pretty cool!
  138. \end{itemize}
  139. \end{enumerate}
  140. \subsection{ECL}
  141. \label{sec-2-9}
  142. \begin{enumerate}
  143. \item Purpose
  144. \label{sec-2-9-1}
  145. \begin{itemize}
  146. \item Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
  147. \item Extremely portable with small and fast binaries.
  148. \item Can be called like a C library with no FFI
  149. \item Can call C functions with no FFI
  150. \end{itemize}
  151. \item Projects
  152. \label{sec-2-9-2}
  153. \begin{itemize}
  154. \item ECL on Android with libsdl for 3d game programming \url{https://gitlab.com/dto/ecl-android-games-src}
  155. \item Various people working on general purpose projects. ECL is a full common lisp
  156. \item See \url{https://common-lisp.net/project/ecl/}
  157. \end{itemize}
  158. \end{enumerate}
  159. \section{Clojure}
  160. \label{sec-3}
  161. \subsection{Brief History}
  162. \label{sec-3-1}
  163. \begin{itemize}
  164. \item Created by Rich Hickey
  165. \item Original public release 2007-10-16
  166. \item First stable release (1.0) 2009-05-04
  167. \item Latest version 1.8
  168. \end{itemize}
  169. \subsection{Backends}
  170. \label{sec-3-2}
  171. \begin{itemize}
  172. \item Java, the original and most supported
  173. \item Javascript, (clojurescript) official and run by David Nolen
  174. \item Various others in various states of support
  175. \end{itemize}
  176. \subsection{Purpose}
  177. \label{sec-3-3}
  178. \begin{itemize}
  179. \item See \url{http://clojure.org/about/rationale}
  180. \item Basically wanted A lisp for functional programming symbiotic with Java and designed for concurrency.
  181. \end{itemize}
  182. \subsection{Features}
  183. \label{sec-3-4}
  184. \begin{itemize}
  185. \item Immutability focused
  186. \item Very good java/javascript interop
  187. \item All the bells and whistles you'd expect with a modern language
  188. \item Functional programming "only" (I consider this an anti-feature personally)
  189. \end{itemize}
  190. \subsection{Projects}
  191. \label{sec-3-5}
  192. \begin{itemize}
  193. \item Can you think of it? Someone has probably done it in Clojure
  194. \item Heavily used for backend web services so far
  195. \item Climate Corporation (our location sponsor) is a heavy user for production
  196. \item Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
  197. \item Lot of the cool stuff is in Clojurescript land like Om and Reagent
  198. \end{itemize}
  199. \section{Racket Scheme}
  200. \label{sec-4}
  201. \subsection{Brief History}
  202. \label{sec-4-1}
  203. \begin{itemize}
  204. \item Originally PLT Scheme
  205. \item First appeared in 1994
  206. \item Renamed Racket 2010-06-07
  207. \end{itemize}
  208. \subsection{Features}
  209. \label{sec-4-2}
  210. \begin{itemize}
  211. \item Lots and lots of friendly libraries and documentation
  212. \item Ships with IDE Dr. Racket
  213. \item Lots of learning/teaching resources, especially for kids
  214. \item Designed to be very easy to get up and running and make simple programs
  215. \item General purpose, does not force you into a particular paradigm
  216. \end{itemize}
  217. \subsection{Projects}
  218. \label{sec-4-3}
  219. \begin{itemize}
  220. \item Naughty Dog uses Racket in Uncharted, The Last of Us, etc
  221. \item Racket controls a huge telescope in New Mexico
  222. \item Arc (see later slides) implemented in Racket
  223. \item Watch the Racketcon videos or go to Racketcon for more information!
  224. \item Racketcon is right after the STL Strangeloop Conference!
  225. \end{itemize}
  226. \section{Guile Scheme}
  227. \label{sec-5}
  228. \subsection{Brief History}
  229. \label{sec-5-1}
  230. \begin{itemize}
  231. \item Began work in 1993
  232. \item Originally GEL or GNU Extension Language
  233. \item Designed as a spiritual and cleaner successor to Emacs lisp
  234. \item Development languished until Andy Wingo took over in 2009/2010
  235. \item Guile 2.0 in 2011 revitalized the language with many improvements
  236. \item Since 2.0 there have been many incremental improvements to the language
  237. \end{itemize}
  238. \subsection{Features}
  239. \label{sec-5-2}
  240. \begin{itemize}
  241. \item Very embed-able, designed for a polyglot environment
  242. \item Full featured, lots of batteries included libraries
  243. \item Easy to use C API that goes both ways
  244. \item Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
  245. \end{itemize}
  246. \subsection{Projects}
  247. \label{sec-5-3}
  248. \begin{itemize}
  249. \item Mostly GNU projects as it is the official GNU extension language
  250. \item Project in progress to replace Emacs Lisp with guile, but community is split
  251. \item GNU Guix \& GuixSD (cool nix-like package manager and distribution)
  252. \item GnuCash
  253. \item gEDA
  254. \item GDB
  255. \item Artanis web framework (pretty new) \url{http://web-artanis.com/}
  256. \item Sly game programming framework \url{https://dthompson.us/pages/software/sly.html}
  257. \end{itemize}
  258. \section{Chicken Scheme}
  259. \label{sec-6}
  260. \subsection{Purpose}
  261. \label{sec-6-1}
  262. \begin{itemize}
  263. \item Practical and portable
  264. \item Wants to bring Scheme out of the academic world and into the industry
  265. \item Focus on being simple, fast, and easy to learn
  266. \end{itemize}
  267. \subsection{Features}
  268. \label{sec-6-2}
  269. \begin{itemize}
  270. \item Compiles to stand C using the GNU toolchain
  271. \item Runs on x86, x86-64, ARM, MIPS, Sparc64, PowerPC, and more
  272. \item Well documented in the wiki and manual
  273. \item Plenty of libraries and a library manager
  274. \item Good FFI
  275. \end{itemize}
  276. \subsection{Projects}
  277. \label{sec-6-3}
  278. \begin{itemize}
  279. \item Tehila game engine \url{https://wiki.call-cc.org/tehila}
  280. \item Wiki software qwiki \url{https://wiki.call-cc.org/egg/qwiki}
  281. \item Really just see \url{https://wiki.call-cc.org/Software}
  282. \end{itemize}
  283. \section{Emacs Lisp}
  284. \label{sec-7}
  285. \subsection{Brief History}
  286. \label{sec-7-1}
  287. \begin{itemize}
  288. \item First appeared in 1985
  289. \item Based off Maclisp (a now dead lisp dialect)
  290. \item Has gradually gained more and more features over the years but no major revisions really
  291. \item Considered outdated compared to modern Scheme or Common Lisp
  292. \item Some in GNU want to replace with Guile
  293. \end{itemize}
  294. \subsection{Purpose}
  295. \label{sec-7-2}
  296. \begin{itemize}
  297. \item Pretty much just for emacs
  298. \item Allows easier extensibility than C (which the rest of emacs is written in)
  299. \item Definitely NOT designed for general purpose programming
  300. \end{itemize}
  301. \subsection{Projects}
  302. \label{sec-7-3}
  303. \begin{itemize}
  304. \item Emacs of course
  305. \item Any of the hundreds (thousands?) of emacs packages
  306. \item Org mode (this presentation is Org Mode -> Latex + Beamer -> PDF)
  307. \item Web servers
  308. \item Games
  309. \item API glue
  310. \item All kinds of fancy IDE features
  311. \end{itemize}
  312. \section{Picolisp}
  313. \label{sec-8}
  314. \subsection{Purpose}
  315. \label{sec-8-1}
  316. \subsection{Projects}
  317. \label{sec-8-2}
  318. \section{Shen}
  319. \label{sec-9}
  320. \subsection{Purpose}
  321. \label{sec-9-1}
  322. \subsection{Thoughts}
  323. \label{sec-9-2}
  324. \section{Arc}
  325. \label{sec-10}
  326. \subsection{General notes}
  327. \label{sec-10-1}
  328. \begin{itemize}
  329. \item Written by Paul Graham
  330. \item Implements Hackernews (\href{https://news.ycombinator.com}{news.ycombinator.com})
  331. \end{itemize}
  332. % Emacs 24.5.1 (Org mode 8.2.10)
  333. \end{document}