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