% 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}\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}