123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- % Created 2016-07-12 Tue 21:51
- \documentclass[bigger]{beamer}
- \usepackage[utf8]{inputenc}
- \usepackage[T1]{fontenc}
- \usepackage{fixltx2e}
- \usepackage{graphicx}
- \usepackage{longtable}
- \usepackage{float}
- \usepackage{wrapfig}
- \usepackage{rotating}
- \usepackage[normalem]{ulem}
- \usepackage{amsmath}
- \usepackage{textcomp}
- \usepackage{marvosym}
- \usepackage{wasysym}
- \usepackage{amssymb}
- \usepackage{hyperref}
- \tolerance=1000
- \AtBeginSection[]{\begin{frame}<beamer>\frametitle{Topic}\tableofcontents[currentsection]\end{frame}}
- \author{Lily Carpenter}
- \date{2016-07-14}
- \title{State of the Lisp Family}
- \hypersetup{
- pdfkeywords={},
- pdfsubject={},
- pdfcreator={Emacs 24.5.1 (Org mode 8.2.10)}}
- \begin{document}
- \maketitle
- \tableofcontents
- \section{Introduction}
- \label{sec-1}
- \subsection{All about me}
- \label{sec-1-1}
- \begin{itemize}
- \item I do NOT use lisp at work. I write ruby (on rails) and javascript
- \item I have only been part of the lisp community for a couple years
- \item I am most experienced with Common Lisp, Emacs Lisp, and Clojure
- \item I have played with Guile briefly
- \item I have a blog at \href{https://azrazalea.net}{azrazalea.net} and git repositories on \href{https://gitlab.com/azrazalea/}{gitlab}
- \item This presentation is on gitlab at \url{https://gitlab.com/azrazalea/state-of-lisp-family}
- \end{itemize}
- \subsection{A very very brief history}
- \label{sec-1-2}
- \begin{itemize}
- \item Lisp(NOT common lisp) was first specified in 1958
- \item Many many dialects of Lisp have appeared over the years. See \href{https://en.wikipedia.org/wiki/Lisp_(programming_language)}{wikipedia}
- \item The general hallmark of a Lisp is its s-expression based syntax (equal '(Lisp) '(Lots of Insipid, Stupid Parentheses))
- \item Originally heavily used in academic circles and AI
- \item Now mostly limited to small communities (Yes Clojure is still small)
- \end{itemize}
- \subsection{Why care about lisp?}
- \label{sec-1-3}
- \begin{itemize}
- \item First and foremost lisp is FUN
- \item Lack of syntax and s-expressions are very freeing once you get used to them (and have a good editor)
- \item A very smart community that can unfortunately sometimes be hard to get into
- \item Code as data is awesome
- \end{itemize}
- \section{Common Lisp}
- \label{sec-2}
- \subsection{Brief History}
- \label{sec-2-1}
- \begin{itemize}
- \item Work started in 1981, draft published 1984, 2nd draft 1990, final standard 1994
- \item Standard was a compromise/design by committee between the authors of various lisp implementations
- \item Standard came out of Interlisp, Maclisp, and others
- \item The language itself has not changed since this standard was published
- \item Language improvements done as implementation specific extensions
- \item Many things can be implemented as macros/reader-macros and shipped as libraries
- \item \href{https://www.quicklisp.org/beta/}{Quicklisp} (a library manager) released in October 2010
- \item \href{https://github.com/roswell/roswell}{Roswell} lisp implementation manager and script framework released very recently (not sure on date)
- \end{itemize}
- \subsection{Implementations}
- \label{sec-2-2}
- \begin{itemize}
- \item There are many different implementations of the CL standard
- \item Commercial: Allegro CL, LispWorks
- \item Open Source: ABCL, Clasp, Clozure CL, CLISP, CMUCL, ECL, MKCL, SBCL and more
- \item Popular free ones are SBCL and CCL(Clozure CL). Both fast and cross platform
- \end{itemize}
- \subsection{Features}
- \label{sec-2-3}
- \begin{itemize}
- \item CLOS (Common Lisp Object System)
- \item Pretty much every standard data structure
- \item Optional tail call optimization
- \item Robust package (think namespaces) system
- \item Build manager (asdf)
- \item Library manager (quicklisp)
- \item Fast with the right implementation
- \end{itemize}
- \subsection{Problems}
- \label{sec-2-4}
- \begin{itemize}
- \item Old and crotchety (community and language)
- \item Sometimes large differences between implementations (usually patched over with a cross-implementation library)
- \item Some simple things baked into most modern languages are implementation specific (threads, garbage collection, FFI, Networking stuff, OS stuff)
- \end{itemize}
- \subsection{Projects}
- \label{sec-2-5}
- \begin{itemize}
- \item Pretty much everything new on my gitlab
- \item Mcclim \url{https://github.com/robert-strandh/McCLIM} cross platform GUI/Windowing library
- \item Cluffer text editor buffer \url{https://github.com/robert-strandh/Cluffer}
- \item Climacs emacs replacement \url{https://github.com/robert-strandh/Second-Climacs}
- \item Lots of game programming libraries at \url{https://github.com/lispgames}
- \item See \url{http://eudoxia.me/article/common-lisp-sotu-2015} "State of the Common Lisp Ecosystem, 2015"
- \item Libraries for almost everything you'll want to do
- \end{itemize}
- \subsection{Real world uses}
- \label{sec-2-6}
- \begin{itemize}
- \item Used at grammarly \url{https://www.grammarly.com/} \url{http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html}
- \item Open source Evernote alternative \url{https://turtl.it/}. Server is in Common Lisp
- \item Commercial examples at \url{http://franz.com/success/} and \url{http://www.lispworks.com/success-stories/index.html}
- \item There seems to actually be quite a bit of it, just not advertised and generally closed source.
- \item See \url{https://lispjobs.wordpress.com/}
- \end{itemize}
- \subsection{CLASP}
- \label{sec-2-7}
- \begin{enumerate}
- \item Purpose
- \label{sec-2-7-1}
- \begin{itemize}
- \item "Seamless" integration with C++ using LLVM.
- \item Speed and power of existing C++ code combined with the rapid prototyping, incremental dev, and other common lisp advantages.
- \end{itemize}
- \item Projects
- \label{sec-2-7-2}
- \begin{itemize}
- \item Mostly academic use so far.
- \item Read creator's blog here: \url{https://drmeister.wordpress.com/}
- \item Creator is implementing CANDO, a tool for biologists for molecular design
- \item I don't know of any production use cases yet, but it is pretty cool!
- \end{itemize}
- \end{enumerate}
- \subsection{ECL}
- \label{sec-2-8}
- \begin{enumerate}
- \item Purpose
- \label{sec-2-8-1}
- \begin{itemize}
- \item Supports many platforms (Linux, FreeBSD, NetBSD, OpenBSD, OS X, Solaris, Windows on Intel, Sparc, Alpha, PowerPC, and Arm)
- \item Extremely portable with small and fast binaries.
- \item Can be called like a C library with no FFI
- \item Can call C functions with no FFI
- \end{itemize}
- \item Projects
- \label{sec-2-8-2}
- \begin{itemize}
- \item ECL on Android with libsdl for game programming \url{https://gitlab.com/dto/ecl-android-games-src}
- \item Various people working on general purpose projects. ECL is a full common lisp
- \item See \url{https://common-lisp.net/project/ecl/}
- \end{itemize}
- \end{enumerate}
- \subsection{Resources}
- \label{sec-2-9}
- \begin{itemize}
- \item Practical Common Lisp \url{http://gigamonkeys.com/book/}
- \item Common Lisp Recipes (for after PCL) \url{http://weitz.de/cl-recipes/}
- \item Land of Lisp (fun alternative to PCL [love the comics]) \url{http://landoflisp.com/}
- \item Common lisp hyperspec \url{http://www.lispworks.com/documentation/HyperSpec/Front/index.htm}
- \item Duckduckgo hyperspec search with !clhs
- \item Articulate Common Lisp \url{http://articulate-lisp.com}
- \item \url{http://lisp-lang.org/}
- \item \#lisp and \#lispgames on freenode IRC
- \item For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor
- \end{itemize}
- \section{Clojure}
- \label{sec-3}
- \subsection{Brief History}
- \label{sec-3-1}
- \begin{itemize}
- \item Created by Rich Hickey
- \item Original public release 2007-10-16
- \item First stable release (1.0) 2009-05-04
- \item Latest version 1.8
- \end{itemize}
- \subsection{Backends}
- \label{sec-3-2}
- \begin{itemize}
- \item Java, the original and most supported
- \item Javascript, (clojurescript) official and run by David Nolen
- \item Various others in various states of support
- \end{itemize}
- \subsection{Purpose}
- \label{sec-3-3}
- \begin{itemize}
- \item See \url{http://clojure.org/about/rationale}
- \item Basically wanted A lisp for functional programming symbiotic with Java and designed for concurrency.
- \end{itemize}
- \subsection{Features}
- \label{sec-3-4}
- \begin{itemize}
- \item Immutability focused
- \item Very good java/javascript interop
- \item All the bells and whistles you'd expect with a modern language
- \item Functional programming "only" (I consider this an anti-feature personally)
- \end{itemize}
- \subsection{Projects}
- \label{sec-3-5}
- \begin{itemize}
- \item Can you think of it? Someone has probably done it in Clojure
- \item Heavily used for backend web services so far
- \item Climate Corporation (our location sponsor) is a heavy user for production
- \item Walmart, Puppet Labs, Thoughtworks are some big companies using Clojure
- \item Lot of the cool stuff is in Clojurescript land like Om and Reagent
- \end{itemize}
- \subsection{Resources}
- \label{sec-3-6}
- \begin{itemize}
- \item Clojure for the Brave and True \url{http://www.braveclojure.com/}
- \item Cursive + IntelliJ IDE \url{https://cursive-ide.com/}
- \item Emacs + Cider IDE \url{https://github.com/clojure-emacs/cider}
- \item Clojurescript info \url{https://github.com/clojure/clojurescript/wiki}
- \item \#clojure on freenode IRC
- \end{itemize}
- \section{Racket}
- \label{sec-4}
- \subsection{Brief History}
- \label{sec-4-1}
- \begin{itemize}
- \item Originally PLT Scheme
- \item First appeared in 1994
- \item Renamed Racket 2010-06-07
- \end{itemize}
- \subsection{Features}
- \label{sec-4-2}
- \begin{itemize}
- \item Lots and lots of friendly libraries and documentation
- \item Ships with IDE Dr. Racket
- \item Lots of learning/teaching resources, especially for kids
- \item Designed to be very easy to get up and running and make simple programs
- \item General purpose, does not force you into a particular paradigm
- \item Scribble documentation language
- \end{itemize}
- \subsection{Projects}
- \label{sec-4-3}
- \begin{itemize}
- \item Naughty Dog uses Racket in Uncharted, The Last of Us, etc
- \item Racket controls a huge telescope in New Mexico
- \item Arc (see later slides) implemented in Racket
- \item John Carmack using Racket for Gear VR. \url{https://groups.google.com/d/msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J}
- \item Watch the Racketcon videos or go to Racketcon for more information!
- \item Racketcon is right after the STL Strangeloop Conference!
- \end{itemize}
- \subsection{Resources}
- \label{sec-4-4}
- \begin{itemize}
- \item Cool game creating book \url{http://realmofracket.com/}
- \item Awesome official docs \url{https://docs.racket-lang.org/}
- \item \#racket on freenode IRC
- \end{itemize}
- \section{Guile Scheme}
- \label{sec-5}
- \subsection{Brief History}
- \label{sec-5-1}
- \begin{itemize}
- \item Began work in 1993
- \item Originally GEL or GNU Extension Language
- \item Designed as a spiritual and cleaner successor to Emacs lisp
- \item Development languished until Andy Wingo took over in 2009/2010
- \item Guile 2.0 in 2011 revitalized the language with many improvements
- \item Since 2.0 there have been many incremental improvements to the language
- \end{itemize}
- \subsection{Features}
- \label{sec-5-2}
- \begin{itemize}
- \item Very embed-able, designed for a polyglot environment
- \item Full featured, lots of batteries included libraries
- \item Easy to use C API that goes both ways
- \item Support for writing in other languages that compile to Guile including ecmascript, emacs lisp, and WIP for lua
- \item General purpose
- \end{itemize}
- \subsection{Projects}
- \label{sec-5-3}
- \begin{itemize}
- \item Mostly GNU projects as it is the official GNU extension language
- \item Project in progress to replace Emacs Lisp with guile, but community is split
- \item GNU Guix \& GuixSD (cool nix-like package manager and distribution)
- \item GnuCash
- \item gEDA
- \item GDB
- \item Artanis web framework (pretty new) \url{http://web-artanis.com/}
- \item Sly game programming framework \url{https://dthompson.us/pages/software/sly.html}
- \end{itemize}
- \subsection{Resources}
- \label{sec-5-4}
- \begin{itemize}
- \item Official tutorial \url{https://www.gnu.org/software/guile/docs/guile-tut/tutorial.html}
- \item Manual \url{https://www.gnu.org/software/guile/manual/}
- \item List of resources \url{https://www.gnu.org/software/guile/learn/}
- \item \#guile on freenode IRC
- \end{itemize}
- \section{Chicken Scheme}
- \label{sec-6}
- \subsection{Purpose}
- \label{sec-6-1}
- \begin{itemize}
- \item Practical and portable
- \item Wants to bring Scheme out of the academic world and into the industry
- \item Focus on being simple, fast, and easy to learn
- \end{itemize}
- \subsection{Features}
- \label{sec-6-2}
- \begin{itemize}
- \item Compiles to standard C using the GNU toolchain
- \item Runs on x86, x86-64, ARM, MIPS, Sparc64, PowerPC, and more
- \item Well documented in the wiki and manual
- \item Plenty of libraries and a library manager
- \item Good FFI
- \end{itemize}
- \subsection{Projects}
- \label{sec-6-3}
- \begin{itemize}
- \item Tehila game engine \url{https://wiki.call-cc.org/tehila}
- \item Wiki software qwiki \url{https://wiki.call-cc.org/egg/qwiki}
- \item Really just see \url{https://wiki.call-cc.org/Software}
- \end{itemize}
- \subsection{Resources}
- \label{sec-6-4}
- \begin{itemize}
- \item Excellent official wiki \url{https://wiki.call-cc.org/}
- \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}}
- \item \#chicken on freenode IRC
- \end{itemize}
- \section{Emacs Lisp}
- \label{sec-7}
- \subsection{Brief History}
- \label{sec-7-1}
- \begin{itemize}
- \item First appeared in 1985
- \item Based off Maclisp (a now dead lisp dialect)
- \item Has gradually gained more and more features over the years but no major revisions really
- \item Considered outdated compared to modern Scheme or Common Lisp
- \item Some in GNU want to replace with Guile
- \end{itemize}
- \subsection{Purpose}
- \label{sec-7-2}
- \begin{itemize}
- \item Pretty much just for emacs
- \item Allows easier extensibility than C (which the rest of emacs is written in)
- \item Definitely NOT designed for general purpose programming
- \end{itemize}
- \subsection{Projects}
- \label{sec-7-3}
- \begin{itemize}
- \item Emacs of course
- \item Any of the hundreds (thousands?) of emacs packages
- \item Org mode (this presentation is Org Mode -> Latex + Beamer -> PDF)
- \item Web servers
- \item Games
- \item API glue
- \item All kinds of fancy IDE features
- \end{itemize}
- \subsection{Resources}
- \label{sec-7-4}
- \begin{itemize}
- \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}
- \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}
- \item Learn emacs lisp in the Wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
- \item The emacs wiki \url{https://www.emacswiki.org/emacs/LearnEmacsLisp}
- \item \#emacs in freenode IRC
- \end{itemize}
- \section{Picolisp}
- \label{sec-8}
- \subsection{General Notes}
- \label{sec-8-1}
- \begin{itemize}
- \item First appeared in 1988 for the Apple Macintosh
- \item Simplicity and minimalism
- \item Single internal data type (cell)
- \item Numbers, symbols, and lists are the ONLY built in data types
- \item Differs from other lisps in not having lambda, but does not require it due to the way its quote works
- \item Integrated database
- \item "Awesome" C/Java interop
- \end{itemize}
- \subsection{Resources}
- \label{sec-8-2}
- \begin{itemize}
- \item Official documentation \url{http://picolisp.com/wiki/?Documentation}
- \item \#picolisp on freenode IRC
- \end{itemize}
- \section{Shen}
- \label{sec-9}
- \subsection{General Notes}
- \label{sec-9-1}
- \begin{itemize}
- \item Originally called Qi
- \item Static types
- \item Optional laziness
- \item integrated prolog
- \item Macros
- \item Portability
- \item Runs on top of various languages including SBCL Common Lisp, Clojure, Scheme, Ruby, Python, JVM, Haskell, Javascript.
- \item Free learning resources are lacking
- \end{itemize}
- \subsection{Resources}
- \label{sec-9-2}
- \begin{itemize}
- \item Official wiki \url{https://github.com/Shen-Language/wiki/wiki}
- \item Two official books desribed at \url{http://shenlanguage.org/}
- \item \#shen on freenode IRC
- \end{itemize}
- \section{Arc}
- \label{sec-10}
- \subsection{General notes}
- \label{sec-10-1}
- \begin{itemize}
- \item Written by Paul Graham starting in 2001
- \item Written in Racket
- \item See essay \url{http://www.paulgraham.com/popular.html}
- \item Released in 2008
- \item Designed to be simple
- \item Seems to have a very small community
- \item Hackernews (\href{https://news.ycombinator.com}{news.ycombinator.com}) is implemented in Arc
- \end{itemize}
- \subsection{Resources}
- \label{sec-10-2}
- \begin{itemize}
- \item Seems to only have \url{http://www.arclanguage.org/tut.txt}
- \end{itemize}
- \section{Honorable Mentions}
- \label{sec-11}
- \subsection{Lisp Flavored Erlang}
- \label{sec-11-1}
- \begin{itemize}
- \item Written by Robert Virding
- \item Work begin in 2007
- \item Basically developed just because the author wanted to develop a language on top of erlang and likes lisp
- \item Author was one of the creators of Erlang
- \item Provides erlang with meta programming and a feature rich REPL
- \item \url{http://lfe.io/}
- \end{itemize}
- \subsection{Hy}
- \label{sec-11-2}
- \begin{itemize}
- \item Also called Hylang
- \item Written by Paul Tagliamonte
- \item Introduced at PyCon 2013
- \item Transparent Lisp front end to Python
- \item Extreme python interop, since it is basically python
- \item \url{http://docs.hylang.org/en/latest/#}
- \end{itemize}
- \subsection{Pixie}
- \label{sec-11-3}
- \begin{itemize}
- \item Heavily inspired by Clojure
- \item Written by Timothy Baldrige
- \item Our own Chris Gore has contributed
- \item First appeared in 2015
- \item Implemented in RPython and uses PyPy Garbage Collector and tracing JIT
- \item Basically a clojure dialect with fast startup and native code
- \item Very young, good for small scripts/programs
- \item \url{http://pixielang.org/}
- \end{itemize}
- \subsection{Kawa}
- \label{sec-11-4}
- \begin{itemize}
- \item Scheme on the JVM
- \item Many consider it to have better Java integration than Clojure or ABCL
- \item See \url{https://www.gnu.org/software/kawa/} and \url{http://lwn.net/Articles/623349/}
- \end{itemize}
- % Emacs 24.5.1 (Org mode 8.2.10)
- \end{document}
|