% 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 (informally SO MANY PARENTHESES!!!) \item Originally heavily used in academic circles and AI \item Now, aside from Clojure, mostly limited to eccentrics \end{itemize} \subsection{Why care about lisp?} \label{sec-1-3} \begin{itemize} \item First and foremost lisp is FUN \item S expressions are very freeing once you get used to them (and have a good editor) \item A very smart, though not always friendly, community \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 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 \end{itemize} \subsection{Implementations} \label{sec-2-2} \begin{itemize} \item There are many different implementations of the CL standard \item Commercial: Allergro 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 namespace) 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 langs 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 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{Resources} \label{sec-2-7} \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 For the love of lisp, use Emacs + SLIME(or the newer sly) as your REPL even if not your editor \end{itemize} \subsection{CLASP} \label{sec-2-8} \begin{enumerate} \item Purpose \label{sec-2-8-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-8-2} \begin{itemize} \item Mostly academic use so far. \item Read creator's blog here: \url{https://drmeister.wordpress.com/} \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-9} \begin{enumerate} \item Purpose \label{sec-2-9-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-9-2} \begin{itemize} \item ECL on Android with libsdl for 3d 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} \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} \section{Racket Scheme} \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 \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 Watch the Racketcon videos or go to Racketcon for more information! \item Racketcon is right after the STL Strangeloop Conference! \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 \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} \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 stand 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} \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} \section{Picolisp} \label{sec-8} \subsection{Purpose} \label{sec-8-1} \subsection{Projects} \label{sec-8-2} \section{Shen} \label{sec-9} \subsection{Purpose} \label{sec-9-1} \subsection{Thoughts} \label{sec-9-2} \section{Arc} \label{sec-10} \subsection{General notes} \label{sec-10-1} \begin{itemize} \item Written by Paul Graham \item Implements Hackernews (\href{https://news.ycombinator.com}{news.ycombinator.com}) \end{itemize} % Emacs 24.5.1 (Org mode 8.2.10) \end{document}