First of all I should say that there are no current plans to port slippery chicken. But:
A humourously intended (though sarcastic: you know who you are!) post on my Facebook page asked me why my algorithmic composition software is written in Common Lisp and not something more modern (and Lisp-inspired) like Python. My first response might be something dismissive like “would you entrust your life’s work to a child?” (Python was nine years old when I started working on slippery chicken.) But that would be churlish. Python is now a well-respected and widely-used programming language. Back in 2000 however, a mature language like Lisp was perfect for me and for music projects, especially given that longevity was key to my decision of which language to use. In any case, as a proper response to the Facebook comment I reach for some presentation notes written for a talk at Goldsmiths College at the slippery chicken symposium there in 2016. My talk went through the issue of porting and considered several alternative languages. I include the considerations below, in all their bullet-pointy glory.
why port?
- because Lisp is not (currently) the world’s favourite language
- (((((and people say hurtful things about all those parentheses)))))
- it’s not easy to release as a self-contained application
- though implementations like LispWorks and Allegro CL make it possible
possible languages
Scheme
- Scheme is a dialect of Lisp
- would allow embedding
- and perhaps integration with Common Music / Grace
- but no (easy/flexible) looping
- and isn’t object-oriented
Clojure
- Clojure is very “Lispy”
- is great at concurrency and therefore multi-core, multi-threaded applications
- but slippery chicken is not CPU intensive and not multi-threaded
- nor does it need to be
- (plus clojure spits in the face of object-orientation)
Haskell
- Haskell co-designer Paul Hudak is also one of the founders of the Computing and the Arts program at Yale
- and author of the book The Haskell School of Music – From Signals to Symphonies
- lots of packages online
- but it’s statically typed
- and purely functional (not object-oriented)
C/C++/Objective C
- all of these and others (e.g. Java) are essentially compiled languages
- so they don’t have
- an intepreter
- dynamic typing
- native lists
- but are extremely popular / supported
- and integrate well into applications
Python
- python is
- a dialect of Lisp
- interpreted
- object-oriented
- dynamically typed
- python lacks the macro support of Lisp
- though SC hardly takes advantage of macros
- but python is much slower than Lisp (sometimes by a factor of 100, according to some)
- then again speed isn’t a real issue in SC
- so this would be the language of choice were I to port
so why not port (to anything other than python)?
- First and foremost: 84,000 lines of code
- Again: 84,000 lines of code
- we love our objects
- slippery chicken’s fundamental design is object-oriented
- we love our interpreter
- querying and manipulating object slots and other data is part of our musical workflow
- we love our lists
- not having to think about memory management and how many pitches or dynamics or rhythms we’ll need speeds up workflow
- or more simply
- Lisp rules
Leave a Reply