|
@@ -46,7 +46,7 @@
|
46
|
46
|
\begin{itemize}
|
47
|
47
|
\item Lisp(NOT common lisp) was first specified in 1958
|
48
|
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!!!)
|
|
49
|
+\item The general hallmark of a Lisp is its s-expression based syntax (equal '(Lisp) '(Lots of Insipid, Stupid Parentheses))
|
50
|
50
|
\item Originally heavily used in academic circles and AI
|
51
|
51
|
\item Now mostly limited to small communities (Yes Clojure is still small)
|
52
|
52
|
\end{itemize}
|
|
@@ -55,7 +55,7 @@
|
55
|
55
|
\begin{itemize}
|
56
|
56
|
\item First and foremost lisp is FUN
|
57
|
57
|
\item Lack of syntax and s-expressions are very freeing once you get used to them (and have a good editor)
|
58
|
|
-\item A very smart community that can sometimes be hard to get into
|
|
58
|
+\item A very smart community that can unfortunately sometimes be hard to get into
|
59
|
59
|
\item Code as data is awesome
|
60
|
60
|
\end{itemize}
|
61
|
61
|
\section{Common Lisp}
|
|
@@ -64,16 +64,19 @@
|
64
|
64
|
\label{sec-2-1}
|
65
|
65
|
\begin{itemize}
|
66
|
66
|
\item Work started in 1981, draft published 1984, 2nd draft 1990, final standard 1994
|
|
67
|
+\item Standard was a compromise/design by committee between the authors of various lisp implementations
|
|
68
|
+\item Standard came out of Interlisp, Maclisp, and others
|
67
|
69
|
\item The language itself has not changed since this standard was published
|
68
|
70
|
\item Language improvements done as implementation specific extensions
|
69
|
71
|
\item Many things can be implemented as macros/reader-macros and shipped as libraries
|
70
|
72
|
\item \href{https://www.quicklisp.org/beta/}{Quicklisp} (a library manager) released in October 2010
|
|
73
|
+\item \href{https://github.com/roswell/roswell}{Roswell} lisp implementation manager and script framework released very recently (not sure on date)
|
71
|
74
|
\end{itemize}
|
72
|
75
|
\subsection{Implementations}
|
73
|
76
|
\label{sec-2-2}
|
74
|
77
|
\begin{itemize}
|
75
|
78
|
\item There are many different implementations of the CL standard
|
76
|
|
-\item Commercial: Allergro CL, LispWorks
|
|
79
|
+\item Commercial: Allegro CL, LispWorks
|
77
|
80
|
\item Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
|
78
|
81
|
\item Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
|
79
|
82
|
\end{itemize}
|
|
@@ -83,7 +86,7 @@
|
83
|
86
|
\item CLOS (Common Lisp Object System)
|
84
|
87
|
\item Pretty much every standard data structure
|
85
|
88
|
\item Optional tail call optimization
|
86
|
|
-\item Robust package (think namespace) system
|
|
89
|
+\item Robust package (think namespaces) system
|
87
|
90
|
\item Build manager (asdf)
|
88
|
91
|
\item Library manager (quicklisp)
|
89
|
92
|
\item Fast with the right implementation
|
|
@@ -93,13 +96,15 @@
|
93
|
96
|
\begin{itemize}
|
94
|
97
|
\item Old and crotchety (community and language)
|
95
|
98
|
\item Sometimes large differences between implementations (usually patched over with a cross-implementation library)
|
96
|
|
-\item Some simple things baked into most modern langs are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
|
|
99
|
+\item Some simple things baked into most modern languages are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
|
97
|
100
|
\end{itemize}
|
98
|
101
|
\subsection{Projects}
|
99
|
102
|
\label{sec-2-5}
|
100
|
103
|
\begin{itemize}
|
101
|
104
|
\item Pretty much everything new on my gitlab
|
102
|
105
|
\item Mcclim \url{https://github.com/robert-strandh/McCLIM} cross platform GUI/Windowing library
|
|
106
|
+\item Cluffer text editor buffer \url{https://github.com/robert-strandh/Cluffer}
|
|
107
|
+\item Climacs emacs replacement \url{https://github.com/robert-strandh/Second-Climacs}
|
103
|
108
|
\item Lots of game programming libraries at \url{https://github.com/lispgames}
|
104
|
109
|
\item See \url{http://eudoxia.me/article/common-lisp-sotu-2015} "State of the Common Lisp Ecosystem, 2015"
|
105
|
110
|
\item Libraries for almost everything you'll want to do
|
|
@@ -113,39 +118,29 @@
|
113
|
118
|
\item There seems to actually be quite a bit of it, just not advertised and generally closed source.
|
114
|
119
|
\item See \url{https://lispjobs.wordpress.com/}
|
115
|
120
|
\end{itemize}
|
116
|
|
-\subsection{Resources}
|
117
|
|
-\label{sec-2-7}
|
118
|
|
-\begin{itemize}
|
119
|
|
-\item Practical Common Lisp \url{http://gigamonkeys.com/book/}
|
120
|
|
-\item Common Lisp Recipes (for after PCL) \url{http://weitz.de/cl-recipes/}
|
121
|
|
-\item Land of Lisp (fun alternative to PCL [love the comics]) \url{http://landoflisp.com/}
|
122
|
|
-\item Common lisp hyperspec \url{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}
|
123
|
|
-\item Duckduckgo hyperspec search with !clhs
|
124
|
|
-\item Articulate Common Lisp \url{http://articulate-lisp.com}
|
125
|
|
-\item For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
|
126
|
|
-\end{itemize}
|
127
|
121
|
\subsection{CLASP}
|
128
|
|
-\label{sec-2-8}
|
|
122
|
+\label{sec-2-7}
|
129
|
123
|
\begin{enumerate}
|
130
|
124
|
\item Purpose
|
131
|
|
-\label{sec-2-8-1}
|
|
125
|
+\label{sec-2-7-1}
|
132
|
126
|
\begin{itemize}
|
133
|
127
|
\item "Seamless" integration with C++ using LLVM.
|
134
|
128
|
\item Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
|
135
|
129
|
\end{itemize}
|
136
|
130
|
\item Projects
|
137
|
|
-\label{sec-2-8-2}
|
|
131
|
+\label{sec-2-7-2}
|
138
|
132
|
\begin{itemize}
|
139
|
133
|
\item Mostly academic use so far.
|
140
|
134
|
\item Read creator's blog here: \url{https://drmeister.wordpress.com/}
|
|
135
|
+\item Creator is implementing CANDO, a tool for biologists for molecular design
|
141
|
136
|
\item I don't know of any production use cases yet, but it is pretty cool!
|
142
|
137
|
\end{itemize}
|
143
|
138
|
\end{enumerate}
|
144
|
139
|
\subsection{ECL}
|
145
|
|
-\label{sec-2-9}
|
|
140
|
+\label{sec-2-8}
|
146
|
141
|
\begin{enumerate}
|
147
|
142
|
\item Purpose
|
148
|
|
-\label{sec-2-9-1}
|
|
143
|
+\label{sec-2-8-1}
|
149
|
144
|
\begin{itemize}
|
150
|
145
|
\item Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
|
151
|
146
|
\item Extremely portable with small and fast binaries.
|
|
@@ -153,13 +148,26 @@
|
153
|
148
|
\item Can call C functions with no FFI
|
154
|
149
|
\end{itemize}
|
155
|
150
|
\item Projects
|
156
|
|
-\label{sec-2-9-2}
|
|
151
|
+\label{sec-2-8-2}
|
157
|
152
|
\begin{itemize}
|
158
|
|
-\item ECL on Android with libsdl for 3d game programming \url{https://gitlab.com/dto/ecl-android-games-src}
|
|
153
|
+\item ECL on Android with libsdl for game programming \url{https://gitlab.com/dto/ecl-android-games-src}
|
159
|
154
|
\item Various people working on general purpose projects. ECL is a full common lisp
|
160
|
155
|
\item See \url{https://common-lisp.net/project/ecl/}
|
161
|
156
|
\end{itemize}
|
162
|
157
|
\end{enumerate}
|
|
158
|
+\subsection{Resources}
|
|
159
|
+\label{sec-2-9}
|
|
160
|
+\begin{itemize}
|
|
161
|
+\item Practical Common Lisp \url{http://gigamonkeys.com/book/}
|
|
162
|
+\item Common Lisp Recipes (for after PCL) \url{http://weitz.de/cl-recipes/}
|
|
163
|
+\item Land of Lisp (fun alternative to PCL [love the comics]) \url{http://landoflisp.com/}
|
|
164
|
+\item Common lisp hyperspec \url{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}
|
|
165
|
+\item Duckduckgo hyperspec search with !clhs
|
|
166
|
+\item Articulate Common Lisp \url{http://articulate-lisp.com}
|
|
167
|
+\item \url{http://lisp-lang.org/}
|
|
168
|
+\item \#lisp and \#lispgames on freenode IRC
|
|
169
|
+\item For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
|
|
170
|
+\end{itemize}
|
163
|
171
|
\section{Clojure}
|
164
|
172
|
\label{sec-3}
|
165
|
173
|
\subsection{Brief History}
|
|
@@ -200,6 +208,15 @@
|
200
|
208
|
\item Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
|
201
|
209
|
\item Lot of the cool stuff is in Clojurescript land like Om and Reagent
|
202
|
210
|
\end{itemize}
|
|
211
|
+\subsection{Resources}
|
|
212
|
+\label{sec-3-6}
|
|
213
|
+\begin{itemize}
|
|
214
|
+\item Clojure for the Brave and True \url{http://www.braveclojure.com/}
|
|
215
|
+\item Cursive + IntelliJ IDE \url{https://cursive-ide.com/}
|
|
216
|
+\item Emacs + Cider IDE \url{https://github.com/clojure-emacs/cider}
|
|
217
|
+\item Clojurescript info \url{https://github.com/clojure/clojurescript/wiki}
|
|
218
|
+\item \#clojure on freenode IRC
|
|
219
|
+\end{itemize}
|
203
|
220
|
\section{Racket Scheme}
|
204
|
221
|
\label{sec-4}
|
205
|
222
|
\subsection{Brief History}
|
|
@@ -217,6 +234,7 @@
|
217
|
234
|
\item Lots of learning/teaching resources, especially for kids
|
218
|
235
|
\item Designed to be very easy to get up and running and make simple programs
|
219
|
236
|
\item General purpose, does not force you into a particular paradigm
|
|
237
|
+\item Scribble documentation language
|
220
|
238
|
\end{itemize}
|
221
|
239
|
\subsection{Projects}
|
222
|
240
|
\label{sec-4-3}
|
|
@@ -224,9 +242,17 @@
|
224
|
242
|
\item Naughty Dog uses Racket in Uncharted, The Last of Us, etc
|
225
|
243
|
\item Racket controls a huge telescope in New Mexico
|
226
|
244
|
\item Arc (see later slides) implemented in Racket
|
|
245
|
+\item John Carmack using Racket for Gear VR. \url{https://groups.google.com/d/msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J}
|
227
|
246
|
\item Watch the Racketcon videos or go to Racketcon for more information!
|
228
|
247
|
\item Racketcon is right after the STL Strangeloop Conference!
|
229
|
248
|
\end{itemize}
|
|
249
|
+\subsection{Resources}
|
|
250
|
+\label{sec-4-4}
|
|
251
|
+\begin{itemize}
|
|
252
|
+\item Cool game creating book \url{http://realmofracket.com/}
|
|
253
|
+\item Awesome official docs \url{https://docs.racket-lang.org/}
|
|
254
|
+\item \#racket on freenode IRC
|
|
255
|
+\end{itemize}
|
230
|
256
|
\section{Guile Scheme}
|
231
|
257
|
\label{sec-5}
|
232
|
258
|
\subsection{Brief History}
|
|
@@ -246,6 +272,7 @@
|
246
|
272
|
\item Full featured, lots of batteries included libraries
|
247
|
273
|
\item Easy to use C API that goes both ways
|
248
|
274
|
\item Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
|
|
275
|
+\item General purpose
|
249
|
276
|
\end{itemize}
|
250
|
277
|
\subsection{Projects}
|
251
|
278
|
\label{sec-5-3}
|
|
@@ -259,6 +286,14 @@
|
259
|
286
|
\item Artanis web framework (pretty new) \url{http://web-artanis.com/}
|
260
|
287
|
\item Sly game programming framework \url{https://dthompson.us/pages/software/sly.html}
|
261
|
288
|
\end{itemize}
|
|
289
|
+\subsection{Resources}
|
|
290
|
+\label{sec-5-4}
|
|
291
|
+\begin{itemize}
|
|
292
|
+\item Official tutorial \url{https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html}
|
|
293
|
+\item Manual \url{https://www.gnu.org/software/guile/manual/}
|
|
294
|
+\item List of resources \url{https://www.gnu.org/software/guile/learn/}
|
|
295
|
+\item \#guile on freenode IRC
|
|
296
|
+\end{itemize}
|
262
|
297
|
\section{Chicken Scheme}
|
263
|
298
|
\label{sec-6}
|
264
|
299
|
\subsection{Purpose}
|
|
@@ -284,6 +319,13 @@
|
284
|
319
|
\item Wiki software qwiki \url{https://wiki.call-cc.org/egg/qwiki}
|
285
|
320
|
\item Really just see \url{https://wiki.call-cc.org/Software}
|
286
|
321
|
\end{itemize}
|
|
322
|
+\subsection{Resources}
|
|
323
|
+\label{sec-6-4}
|
|
324
|
+\begin{itemize}
|
|
325
|
+\item Excellent official wiki \url{https://wiki.call-cc.org/}
|
|
326
|
+\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}}
|
|
327
|
+\item \#chicken on freenode IRC
|
|
328
|
+\end{itemize}
|
287
|
329
|
\section{Emacs Lisp}
|
288
|
330
|
\label{sec-7}
|
289
|
331
|
\subsection{Brief History}
|
|
@@ -313,6 +355,15 @@
|
313
|
355
|
\item API glue
|
314
|
356
|
\item All kinds of fancy IDE features
|
315
|
357
|
\end{itemize}
|
|
358
|
+\subsection{Resources}
|
|
359
|
+\label{sec-7-4}
|
|
360
|
+\begin{itemize}
|
|
361
|
+\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}
|
|
362
|
+\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}
|
|
363
|
+\item Learn emacs lisp in the Wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
|
|
364
|
+\item The emacs wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
|
|
365
|
+\item \#emacs in freenode IRC
|
|
366
|
+\end{itemize}
|
316
|
367
|
\section{Picolisp}
|
317
|
368
|
\label{sec-8}
|
318
|
369
|
\subsection{General Notes}
|
|
@@ -326,6 +377,12 @@
|
326
|
377
|
\item Integrated database
|
327
|
378
|
\item "Awesome" C/Java interop
|
328
|
379
|
\end{itemize}
|
|
380
|
+\subsection{Resources}
|
|
381
|
+\label{sec-8-2}
|
|
382
|
+\begin{itemize}
|
|
383
|
+\item Official documentation \url{http://picolisp.com/wiki/?Documentation}
|
|
384
|
+\item \#picolisp on freenode IRC
|
|
385
|
+\end{itemize}
|
329
|
386
|
\section{Shen}
|
330
|
387
|
\label{sec-9}
|
331
|
388
|
\subsection{General Notes}
|
|
@@ -340,6 +397,13 @@
|
340
|
397
|
\item Runs on top of various languages including SBCL Common Lisp, Clojure, Scheme, Ruby, Python, JVM, Haskell, Javascript.
|
341
|
398
|
\item Free learning resources are lacking
|
342
|
399
|
\end{itemize}
|
|
400
|
+\subsection{Resources}
|
|
401
|
+\label{sec-9-2}
|
|
402
|
+\begin{itemize}
|
|
403
|
+\item Official wiki \url{https://github.com/Shen-Language/wiki/wiki}
|
|
404
|
+\item Two official books desribed at \url{http://shenlanguage.org/}
|
|
405
|
+\item \#shen on freenode IRC
|
|
406
|
+\end{itemize}
|
343
|
407
|
\section{Arc}
|
344
|
408
|
\label{sec-10}
|
345
|
409
|
\subsection{General notes}
|
|
@@ -353,6 +417,11 @@
|
353
|
417
|
\item Seems to have a very small community
|
354
|
418
|
\item Hackernews (\href{https://news.ycombinator.com}{news.ycombinator.com}) is implemented in Arc
|
355
|
419
|
\end{itemize}
|
|
420
|
+\subsection{Resources}
|
|
421
|
+\label{sec-10-2}
|
|
422
|
+\begin{itemize}
|
|
423
|
+\item Seems to only have \url{http://www.arclanguage.org/tut.txt}
|
|
424
|
+\end{itemize}
|
356
|
425
|
\section{Honorable Mentions}
|
357
|
426
|
\label{sec-11}
|
358
|
427
|
\subsection{Lisp Flavored Erlang}
|
|
@@ -363,6 +432,7 @@
|
363
|
432
|
\item Basically developed just because the author wanted to develop a language on top of erlang and likes lisp
|
364
|
433
|
\item Author was one of the creators of Erlang
|
365
|
434
|
\item Provides erlang with meta programming and a feature rich REPL
|
|
435
|
+\item \url{http://lfe.io/}
|
366
|
436
|
\end{itemize}
|
367
|
437
|
\subsection{Hy}
|
368
|
438
|
\label{sec-11-2}
|
|
@@ -372,6 +442,7 @@
|
372
|
442
|
\item Introduced at PyCon 2013
|
373
|
443
|
\item Transparent Lisp front end to Python
|
374
|
444
|
\item Extreme python interop, since it is basically python
|
|
445
|
+\item \url{http://docs.hylang.org/en/latest/#}
|
375
|
446
|
\end{itemize}
|
376
|
447
|
\subsection{Pixie}
|
377
|
448
|
\label{sec-11-3}
|
|
@@ -383,6 +454,7 @@
|
383
|
454
|
\item Implemented in RPython and uses PyPy Garbage Collector and tracing JIT
|
384
|
455
|
\item Basically a clojure dialect with fast startup and native code
|
385
|
456
|
\item Very young, good for small scripts/programs
|
|
457
|
+\item \url{http://pixielang.org/}
|
386
|
458
|
\end{itemize}
|
387
|
459
|
\subsection{Kawa}
|
388
|
460
|
\label{sec-11-4}
|