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