-*- mode: org -*- * When to use which programming language / library ** Utilities - bash (moving / renaming files, etc.) - Python, Racket/Scheme / (C)Lisp, Tcl/Tk (more complex / networked utilities) - Emacs Lisp / awk (text processing) ** GUI Applications - Julia (Gtk) - Common Lisp (LTk / Gtk wrap (cl-cffi-gtk) / CLIM) - Racket - Clojure (Swing) - Factor (ui vocab) - Python (Tk / Gtk) - SmallTalk - C++ (Qt) - C (Gtk) ** Graphical Applications - Common Lisp (cl-opengl / cl-sdl / LTK (slow)) - Julia - Racket - Clojure (Java libraries) - Factor (opengl and other vocabs) - Python (pygame) - SmallTalk - C++ (OpenGL / SDL) - C (OpenGL / SDL) ** Embedded Scripting - Scheme (Guile / Chibi Scheme) - Common Lisp (ECL) - Forth (pForth) ** Dynamic Web Application - Common Lisp (hunchentoot/parenscript) - Clojure (compojure) - PicoLisp - Factor (furnace) - JavaScript ** Microcontroller / Device Driver (e.g. AVR boards) - Forth - MicroScheme - Hedgehog Lisp ** Mathematical Computations - Julia - PARI/GP (number theory) - Octave (numerical analysis) - Maxima / Mathematica (both) - J (for small, efficient and obfuscated code) ** Relational Databases - Common Lisp (CLSQL) - Racket - Haskell (HDBC) - PicoLisp ** Concurrent Programming - Rust - Clojure - Erlang ** Speed-sensitive Applications - Rust - C / C++ * Which compiler / interpreter to use ** C / C++ - gcc / g++ - clang ** Common Lisp - sbcl - ccl (better in OS X integration) - ecl (embedding / small executable generation) - clisp (scripts, fast bignums) ** Forth - gforth - pforth (embedded scripting) - retroforth (non-standard) ** Haskell - ghc ** ML - smlnj - mlton ** Prolog - SWI Prolog ** Scheme - Racket (simple GUI building; lots of packages; nice docs) - Guile (simple embedded scripting, nice docs) [slow] - Gambit (fast; simple FFI) [few packages/SRFIs] - Gauche (fast startup; good for shell scripting) - Chicken (lots of packages, FFI, embedding) [slow] - Chez (fast; nice docs) [few packages - but see https://akkuscm.org/] - Chibi (for smaller/simpler embedded projects & embedding under Windows) [very slow & unsafe] *** Speed - gambit/chez/larceny > racket >> guile/chicken/mit >> gauche/chibi - based on https://ecraven.github.io/r7rs-benchmarks/ ** SmallTalk - Pharo - ST/X