Lisp Hackers
Lisp Hackers
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
Contents
A Short Intro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Few Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zach Beane (USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Edi Weitz (Germany) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Slava Akhmechet (USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pascal Costanza (Germany - Belgium) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Peter Seibel (USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marijn Haverbeke (Netherlands - Germany) . . . . . . . . . . . . . . . . . . . . . . . . . . Franois-Ren (Far) Rideau (France - USA) . . . . . . . . . . . . . . . . . . . . . . . . . . Daniel Barlow (UK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Christophe Rhodes (UK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Luke Gorrie (Australia - Sweeden - Switzerland) . . . . . . . . . . . . . . . . . . . . . . . Juan Jos Garca Ripoll (Spain) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . John Fremlin (USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vladimir Sedach (Russia - Canada - USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marc Battyani (France - USA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Afterword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 5 9 12 15 22 28 32 41 46 51 57 60 63 68 73
A Short Intro
The idea of this series came to my mind after European Common Lisp Meeting 2011 where I had had a chance to meet in person some of those mythical 100x more productive programmers. And the points I wanted to make were: these guys do exist, and its really interesting to know how they work and think it makes sense to show who are the real people using this obscure and mythical language Common Lisp, why do they use it and what they do with it This book is a collection of short interviews with 14 prominent individuals from different parts of the world, from Australia to Canada, and of different occupations, from low-level programmers to physicists and musicians, asking them a more-or-less similar set of questions on the following topics: their general attitude to programming attitude towards and experience with Lisp stories of real-world Lisp projects Overall, this should give an insight into why people use Lisp, as well as help the readers gain some new experience and improve as programmers. How were these individuals chosen? I looked for people who possess at least 2 of the following 3 essential qualities: a renown Lisp open-source contribution prominence in the community experience working for successful Lisp companies and a good perspective on other languages was considered as a pleasant bonus
Definitely, not all of the hackers Id like to interview are here. For various reasons. There are lots more interesting Lisp people with fascinating experiences worth sharing, and, hopefully, this will happen in the future in one form or the other. Yet, here are these 14 unique lispers with their stories, world views and insights. Enjoy! P.S. As a bonus youll find some interesting bits of history of SBCL and Slime, the two most important open-source Common Lisp tools, told by their main developers.
http://weitz.de/eclm2011/
A Few Quotes
Ive been using CL exclusively for the last six or seven years. As I was working freelance, this was kind of easy I either had projects where the customer didnt care about the programming language that I used as long as I got the job done, or I was hired specifically for my CL skills. Edi Weitz I love hanging out with Lisp hackers: I find that were an unusually diverse community. How often do you attend a small conference where attendees are building nuclear defense systems, running intensive care wards, designing aeroplane engines, analysing Lute tablature, developing cancer drugs, writing FIFAs legal contracts, and designing their own microchips? Luke Gorrie When what I have to do is solve problems that no language has built-in libraries for, then I want to be working in a language where I can focus on the problem itself, rather than the detail of that language and for me, Lisp permits that kind of separation of concerns, given its easy support for DSL and embedded language generation, protocols, and the ability to run partial programs. Christophe Rhodes In one of our research topics we had to solve huge instances of 3-SAT problems using a very basic algorithm. The fact that Common Lisp comes with bignums reduced the development time to one afternoon and the program we produced was faster than the C++ prototypes we had. Juan Jos Garca Ripoll In the end, Lisp won me over because it turns out that it is the mother of all languages. You can bend it and turn it into whatever language you want, from the most flexible and reflective interpreted scripting language to the most efficient and static compiled production system. Pascal Costanza For typical projects I feel like Im building more tools into my REPL workbench. I dont write scripts that I call from the command line, I write functions that I call from the REPL, and use the slime and Emacs environment to create and interact with data, whether its data from a file, from a computation, from the web, a database, etc. Zach Beane
A Few Quotes
Its also very easy to turn Common Lisp REPL code into unit tests, which I tend to do a lot. That is something thats very hard to do with object-oriented code, which is why idiotic things like dependency injection and Test-Driven Development have to be invented. Vladimir Sedach Theres a clear difference between the Lisp workflow where you change the state of your image interactively to get the code into working shape very quickly (and then later try to remember what it was you did) and the more scripted approach of testdriven development in Ruby where you put everything (code, test setup, assertions) in files that you reload from disk on each run. Daniel Barlow When Im trying to understand someone elses code I tend to find the best way is to refactor or even rewrite it. I start by just formatting it to be the way I like. Then I start changing names that seem unclear or poorly chosen. And then I start mucking with the structure. Peter Seibel The greatest thing about Common Lisp is that the standardization process drew from years and years of experience and organic growth. This makes the language feel singularly solid and practical. Most languages feel immature compared to CL. Marijn Haverbeke We dont use Lisp, but much of our software is built on ideas borrowed from Lisp. We dont use it because we needed low level control most of the code is written in C++, even with some bits of assembly. But weve borrowed an enormous number of ideas from Lisp. In fact, if we werent Lispers, we would have built a very different (and I think significantly more inferior) product. Slava Akhmechet On the upside, we certainly have been able to write quite advanced software that we might not have otherwise managed. A million lines of Lisp code, including its fair share of macros and DSLs, would be so many more million lines of code without the syntactic abstraction made possible by Lisp. However hard and expensive it was with Lisp, I can only imagine how many times worse it would have been with anything else. Far Rideau
A Few Quotes
I think we would all be better off if we hadnt balkanised the different systems that we program for and Lisp is one of the few programming languages with the flexibility to serve in all these roles. John Fremlin The language itself is somewhat good enough and anyway Common Lisp makes it really easy to change most of itself to add the new and cool stuff or ideas of the day. Marc Battyani
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
I currently use Lisp to analyze some large data files we get from vendors and partners and produce reports. Ive recently used Lisp to produce KML files for Google Earth visualization of some internal data. I use stuff like cl-ppcre, drakma, postmodern, clmssql, cxml, and more to gather data from various systems when preparing reports. The growing library ecosystem has made it really easy to get stuff done. Lisp is accepted because I can produce useful stuff pretty quickly with it. Its a small company with a small team so there isnt a bureaucracy to fight to use something nonstandard. Does the tool work? Is the result useful? Then theres no problem.
http://www.quicklisp.org/ http://www.xach.com/lisp/vecto/ http://www.xach.com/lisp/zs3/ http://xach.livejournal.com/ http://planet.lisp.org/ http://twitter.com/xach http://weitz.de/cl-ppcre/ http://weitz.de/drakma/ http://marijnhaverbeke.nl/postmodern/ http://code.google.com/p/cl-mssql/ http://common-lisp.net/project/cxml/
In some cases, where it isnt a good fit for the final product, I use Lisp to prototype ideas before writing a final thing in some other language, e.g. C or Perl. But I even use CL to generate data and code in other languages, so its still in the mix, still a part of my workflow.
How did quicklisp change your life? What are current plans for its development?
I can get up and running in a new environment very quickly now. Before Quicklisp, I could usually build up a set of libraries that were comfortable and useful, but it could
http://www.xach.com/lisp/quickproject/
be a hassle to move them from computer to computer, or to make sure they were up-todate. Now I just use Quicklisp and dont worry about it. As Quicklisp maintainer, its really helped me see where some people are coming from when they want to try Common Lisp. Its a totally different mindset than what Im used to. I think theres room for some documentation or tutorial on the system-oriented, REPL-workbench style of Common Lisp development that I like to use. I want to write more documentation for Quicklisp, particularly how users can publish their own software for it or customize it via its internal protocols. I also want to gather and share documentation for all Quicklisp-loadable projects, so there can be a single place to learn what a given project does, and get access to all its documentation. Id also like to make it easy for people to share feedback about their experiences with a project, so you could decide if its likely to fit your needs. Something like the feedback you see for products on Amazon, but for Lisp libraries.
If you had all the time in the world for a Lisp project, what would it be?
As a fantasy project, Id love to make a system for interesting visualization of complex data, something where its easy to splat something quick and dirty on the screen/page, but which can grow in capability as the need arises. Or maybe just some tool for making audiovisual toys, with cool pictures and noises coming out.
xach
2012-03-10
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
In my new job, Ive been using CL in my math lectures a couple of times and will continue to do so. In my old job, Ive been using CL exclusively for the last six or seven years. As I was working freelance, this was kind of easy I either had projects where the customer didnt care about the programming language that I used as long as I got the job done, or I was hired specifically for my CL skills.
http://weitz.de/cl-ppcre/ http://weitz.de/hunchentoot/ http://weitz.de/drakma/ https://twitter.com/alemmens http://weitz.de/eclm2013/ http://www.flickr.com/photos/hunchentoot/ http://www.springer.com/birkhauser/mathematics/book/978-3-7643-6124-2 http://www.haw-hamburg.de/
10
11
Ediware became hugely popular (by Lisp standards), and with this popularity came a lot of work and responsibility. You seem to have mostly handed over supporting it to Hans Hbner. Whats up next for you in the land of programming and Lisp in particular?
Im planning to give a lecture about the use of AI techniques in games in the next year and I might use some Lisp there. I might also as a sideline resume my CL consulting work sooner or later. I dont expect to publish new open source code in the near future, though.
If you had all the time in the world for a Lisp project, what would it be?
When I was still working as a hacker, I always dreamt of finding someone to pay me for working on an open-source CLOS object store written in pure Common Lisp, OSindependent, portable, not relying on third-party software, fast, reliable, thread-safe, well-documented, etc.
edi
2012-03-14
13
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
We dont use Lisp, but much of our software is built on ideas borrowed from Lisp. We dont use it because we needed low level control most of the code is written in C++, even with some bits of assembly. But weve borrowed an enormous number of ideas from Lisp. In fact, if we werent Lispers, we would have built a very different (and I think significantly more inferior) product.
14
If you had all the time in the world for a Lisp project, what would it be?
Id want to build my own Lisp dialect. I know, I know, its been done to death, there is no need to do it, and it only hurts the community, but in the presence of infinite time, its just too much fun not to do.
Youre currently a co-founder of a startup company RethinkDB, which went through YCombinator. As an insider of the startup ecosystem, in your opinion, what are the areas for Lisp use in startups nowadays with the biggest potential upside and why?
This isnt a popular stance in the Lisp community, but I think that today Lisp is mostly valuable as an education tool, as a means of thinking, and as an engine of ideas. Its very important for that. But as far as practical use goes, there are better options today.
Slava
2012-10-25
16
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
At Intel, I do all software prototyping in Lisp. The scheduler I mentioned above is completely developed and tested in Lisp, before we port it to C++, so that other people in the same project and outside can use it as well. It didnt require a major effort to convince anybody to do this in Lisp. It is actually quite common in the highperformance computing world that solutions are first prototyped in a more dynamic and flexible language, before they are ported to what is considered a production language. Other languages that are used in our project are, for example, MATLAB, Python and Lua. (Convincing people to use Lisp beyond prototyping would probably be much harder, though.) The implementation we use for prototyping is LispWorks, which is really excellent. It provides a really complete, well-designed and efficient API for parallel programming, which turns LispWorks into one of the best systems for parallel programming of any language, not just in the Lisp world. The only other system that is more complete that I am aware of is Intels Threading Building Blocks for C++.
17
read his book Patterns of Software around that time. Later we had a small discussion in the patterns discussion mailing list. He tried to promote Lisp as a language that has the quality without a name, and I made some cursory remarks about Lisps unnecessarily complicated syntax, just like anybody else who doesnt get it yet. To me, the most important comment he made in that discussion was: True, only the creatively intelligent can prosper in the Lisp world. The arrogance I perceived in that comment annoyed me so much that it made me want to learn Lisp seriously, just to prove him wrong and show him that Lisp is not as great as he thought it is. As they say, the rest is history. I actually dabbled a little bit in Lisp much earlier, trying out a dialect called XLisp on an Atari XL computer at the end of the 80s. Unfortunately, it took too long to start up XLisp, and there was not enough RAM left to do anything interesting beyond toy examples, plus I was probably not smart enough yet to really get it. I was just generally curious about programming languages. For example, I also remember trying out some Prolog dialect on my Atari XL. In the end, Lisp won me over because it turns out that it is the mother of all languages. You can bend it and turn it into whatever language you want, from the most flexible and reflective interpreted scripting language to the most efficient and static compiled production system. For example, the scheduler mentioned above easily gets in the range of equivalent C/C++-based schedulers (like Cilk+, TBB, or OpenMP, for example), typically only a factor of 1.5 away for typical benchmarks, sometimes even better. On the other hand, ContextL uses the reflective features of the CLOS Metaobject Protocol to bend the generic function dispatch in really extreme ways. I am not aware of any other programming language that covers such a broad spectrum of potential uses.
18
execute a simple "Hello, World!" program. On top of that, it was a portable (!) justin-time compiler: It loaded the bytecode from a classfile, translated it into s-expressions that resemble the bytecodes, and then just called Common Lisps compile function to compile those s-expressions, relying on macro and function definitions for realizing these bytecodes as s-expressions. I was really impressed that this was all so easy to do. The real moment of revelation was this: to make sure to reuse as many of the built-in Common Lisp features as possible, I actually translated Java classes into CLOS classes, and Java methods into CLOS methods. Javas super calls posed a problem, because it was not straightforward to handle super calls with plain call-next-method calls. Then I discovered user-defined method combinations, which seemed like the right way to solve this issue, but I was still stuck for a while. Until I discovered that moving a backquote and a corresponding unquote around actually finally fixed everything. That was a true Eureka moment: In every other programming language that I am aware of, all the problems I encountered until that stage would have required a dozen redesigns, and several attempts to start the implementation completely from scratch, until I would have found the right way to get everything in the right places. But Common Lisp is so flexible that at every stage in your development, you can tweak and twist things left and right, but in the end you still get a convincing, clean, and efficient design. As far as I can tell, this is not possible in any other language (not even Scheme).
19
music, both by myself with synthesizers and computers, as well as in bands. I also was an actor in an amateur theater group. Art gives you a sense of making parts (notes, chords, melodies, rhythms, or acts, characters, plot lines) relate to each other and form a coherent whole. It also makes you aware that there is an inner view on a piece of music or a play, as seen by the artist, but also an outer view, as seen or heard by an audience, and if you want to make good art, you need to be able to build a bridge between those two parts. Programming is exactly the same: you need to make parts (functions, data structures, algorithms) relate to each other, and you need to bridge the inner view (as seen by the designer and implementer) and the outer view (as seen by the user of a library or the end user of the final software). The important aspect here is that you need to be able to change perspectives a lot, and shift between the local, detailed view, the global, architectural view, and the many different levels of a layered design. This is especially important when it comes to designs that incorporate meta-programming techniques and reflective approaches, but also already for simpler designs. Like in art, the concrete workflow and the concrete tools that work best vary a lot for different people. Its also a good idea to just play around with ideas, expecting that most of them will turn out useless and need to be thrown away. Artists do this all the time. Artificial, seemingly nonsensical rules and restrictions can be especially enlightening (use only effect-free functions; use only functions that receive exactly one argument, not more, not less; make every function pass around an additional environment; use only classes with exactly two slots; etc., etc.), and then try to build larger programs strictly following such rules - this will make your mind a lot more flexible and train you to see new potential solutions that you wouldnt see otherwise. (I actually believe that this is what makes fans of static typing so excited: Static type systems always impose some artificial restrictions on your programs, and enforce them to the extent that programs that violate these rules are rejected. If you then program in such a statically typed programming language, you will indeed have some interesting insights and see new solutions that you would otherwise miss. However, the category error that fans of static typing often seem to make is that they ascribe the results to the static type system, and therefore usually get stuck with one particular set or kinds of rules.) Apart from that, I believe that LispWorks is a really good development environment.
20
project for Java, because they are or were both used in one way or the other in real applications. Closer to MOP is a favorite project of mine, because it makes me feel like I can give something back to the Lisp community from which I otherwise benefit so much. But this doesnt mean I dislike anything else I have done in the past.
One of your papers, Reflection for the Masses, researches the ideas behind 3-Lisp, a procedurally reflective dialect of LISP which uses an infinite tower of interpreters. Can you summarize them here?
That paper was actually mostly the work of Charlotte Herzeel, and I was only her sounding board for detailing the ideas in that paper. Reflection is one of the essential concepts that was born out of Lisp. Every program is about something, for example a financial application is about bank accounts, money and interest rates, and a shopping application is about shopping items, shopping carts and payment methods. A program can also be about programs, which turns it into a meta-program. Lisp macros are metaprograms, because they transform pieces of code in the form of s-expressions into other pieces of code. C++ templates are also meta-programs in the same sense. Some metaprograms are about themselves, and thus become reflective programs. 3-Lisp is procedurally reflective in two senses: On the one hand, it allows you to inspect and change the body of procedures (functions). Common Lisp, for example, also gives you that, in the form of function-lambda-expression and compile/eval, among others. On the other hand, 3-Lisp also allows you to inspect and alter the control flow. Scheme, for example, gives you that in the form of call/cc, but in 3-Lisp this is actually part of the eval interface. 3-Lisp goes further than Common Lisp and Scheme combined, in that it provides not only first-class access to function bodies and continuations, but also to lexical environments, always both with facilities to inspect and modify them, and provides a clean and integrated interface to all of these features. Unfortunately, because 3-Lisp goes that far, it cannot be fully compiled but always needs to be able to resort to interpretation, if necessary. The reason for the requirement to always have an interpreter around is because the eval interface in 3-Lisp is so flexible that you can run programs inside an eval invocation that in turn can inspect and change (!) the environment in which eval runs, and can then invoke further evals in those changed environments, to arbitrary levels of recursive invocations of eval. These recursive invocations of eval build what is called a reflective tower, where every level in the tower is conceptually an interpreter being executed by an interpreter one level up in the tower of interpreters. The amazing thing about 3Lisp is that an implementation of 3-Lisp can actually collapse the tower into one level of interpretation, and arrange that one interpreter in such a way that several different levels of interpretations are only simulated, so the tower is actually just an illusion created by the 3-Lisp implementation.
21
This may all sound quite esoteric, but is actually practically relevant, because there is strong evidence that all meta-programming approaches eventually need such towers, and some ad-hoc way to collapse the towers. For example, you can find the tower in Rackets and R6RSs macro systems, where they are explicitly mentioned; in Common Lisps macros, where eval-when is used to control which part of the tower sees which definitions; in the CLOS Metaobject Protocol, where the generic function dispatch can be influenced by other generic functions, which can in turn be modified by some meta-classes at a higher level; in the template metaprogramming system of C++, where concepts were devised for C++11 (and rejected) to introduce a type system for the template interpreter; and so on, and so on. If you understand the concept of a reflective tower better, you can also better understand what is behind these other meta-programming approaches, and how some of their sometimes confusing semantic difficulties can be resolved.
If you had all the time in the world for a Lisp project, what would it be?
I have some ideas how to design reflection differently for a Lisp dialect, which I believe has not been tried before. If I had all the time in the world, I would try to do that. I also have many other ideas, so Im not sure if I would be able to stick to a single one.
Pascal
2012-04-16
http://www.islisp.info/
23
Oh, and something I learned recently: not only was Donald Knuth one of the subjects in my book Coders at Work, but he has read the whole thing himself and liked it. That makes me happy.
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
I always have a SLIME session going in Emacs for quick computations and sometimes I prototype things in Lisp or write code to experiment with different ideas. However, these days Im as likely to do those things in Python because I can show my co-workers a sketch written in Python and expect them to understand it and Im not sure I could do that with Lisp. But it makes me sad how slow CPython is compared to a nativecompiling CL like SBCL. Usually that doesnt matter but it is annoying sometimes mostly because Python has no real excuse. The rest of my work is in some unholy mishmash of Scala, Ruby, Javascript, and PHP.
Did you ever develop a theory why Lisp isnt used more?
Not one that is useful in the sense of helping it to be used more today. Mostly it seems to me to be the result of a series of historical accidents. You could argue that Lisp was too
24
powerful too early and then got disrupted, in the Innovators Dilemma sense, by various Worse is Better languages, running on systems that eventually became dominant for perhaps unrelated reasons. Every Lisper should read The UNIX-HATERS Handbook to better understand the relation between the Lisp and Unix culturesLisp is the older culture and back when the UNIX-HATERS Handbook was written, Unix machines were flaky and underpowered and held in the same contempt by Lisp geeks as Windows NT machines would be held by Unix geeks a few decades later. But for a variety of reasons people kept working on Unix and it got better. And then it was in a better position than the Lisp culture to influence the way personal computing developed once micro computers arrivedwhile it would be a while before PCs were powerful enough to run a Unix-like OS, early on C was around to be adopted by PC programmers (including at Microsoft) once micros got powerful enough to not have to program everything in assembly. And from there, making things more Unixlike seemed like a good goal. Of course it would have been entirely possible to write a Lisp for even the earliest PCs that probably would have been as performant as the earliest Lisps running on IBM 704s and PDP-1s. My dad, back from his Lisp course at Symbolics, wrote a Lisp in BASIC on our original IBM PC. But by that point Lispers idea of Lisp was what ran on powerful Lisp machines, not something that could have run on a PDP-1. The AI boom and bust played its role as well because after the bust Lisps reputation was so tainted by its failure to deliver on the over-promises of the Lisp/AI companies that even many AI researchers disassociated themselves from it. And throughout the 90s various languages adopted some of Lisps dynamic features, so folks who gravitated to that style of programming had somewhere else to go and then when the web sprang into prominence, those languages were well positioned to become the glue of the Internet. That all said, Im heartened that Lisp continues to not only be used but to attract new programmers. I dont know if there will ever be a big Lisp revival that brings Lisp back into the mainstream. But even if there were, Im pretty sure that there would be plenty of old-school Lispers whod still be dissatisfied with how the revival turned out.
25
So I implemented a proper parser for a mostly-plain-text language that I uncreatively call Markup and backends that could generate HTML and PDF using cl-typesetting. When I was done writing and Apress wanted me to turn in Word files, I wrote an RTF backend so I could generate RTF files with all the Apress styles applied correctly. An Apress project manager later exclaimed over how clean the Word files I had turned had been. For editing Code Quarterly I continued to use Markup and wrote a prose diff tool that is pretty smart about when chunks of text get moved and edited a little bit.
26
board pretty much 100% of the time. One of these days I need to rewrite that system in Common Lisp and see if I can work up to a full-size board and tougher opponents than random. (During evolution the critters played against each other to get a Red Queen effectI just played them against a random player to see how they were doing.)
If you had all the time in the world for a Lisp project, what would it be?
I should really get back to hacking on Toot and Whistle. I tried to structure things so that all the Hunchentoot functionality could be put back in a layer built on top of Tootperhaps I should do that just to test whether my theory was right. On the other hand, I went down this path because the whole Hunchentoot API was too hard for me to
http://weitz.de/hunchentoot/ http://github.com/gigamonkey/toot http://github.com/gigamonkey/whistle
27
understand. So maybe I should be getting Toot and Whistle stable and well-documented enough that someone else can take on the task of providing a Hunchentoot compatibility layer. Id also like to play around with my Go playing critters, reimplementing them in Lisp where I could take advantage of having a to-machine-code compiler available at run time.
PCL was the book, that opened the world of Lisp to me. Ive also greatly enjoyed Coders at Work. So Im looking forward for the next book youd like to write. What would it be? :)
My current theory is that Im going to write a book about statistics for programmers. Whenever Ive tried to learn about statistics (which Ive had to do, in earnest, for my new job) I find an impedance mismatch between the way I think and the way statisticians like to explain stuff. But I think if I was writing for programmers, then there are ways I could explain statistics that would be very clear to them at least. And I think there are lots of programmers whod like to understand statistics better and may have had difficulties similar to mine.
Peter
2012-07-01
29
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
Not currently, beyond that I always have a REPL open in emacs, and switch to it to do quick computations and experiments. Ive spent several years doing almost exclusively Lisp (mostly working on AllegroGraph, Franz RDF database), and it has definitely been somewhat painful to find myself working with non-interactive, macroless languages again, after being used to the luxuries of Common Lisp and Slime.
30
31
The community involvement in Postmodern, though always low-volume, has also been awesome. Most bug reports came with a patch, or at least an informed view of the problem and useful diagnostic information. This in sharp contrast with the JavaScript community, where of course great contributors also occur, but one has to deal with a lot of noise and lazy bug reporting.
If you had all the time in the world for a Lisp project, what would it be?
I am working on my own programming language, Hob, which tries to combine the virtues of Lisp and ML. This is a huge project, and unfortunately its moving forward only slowly. If I didnt have financial constraints, Id spend a year (or two) finishing it. Its bootstrap compiler (the compiler that will compile the first self-hosting compiler) is in the process of being written in Common Lisp. The writing that I currently have online about it is quite old and out of date. I just spent a week rewriting the compiler from scratch, moving the language to a completely regular syntaxthink s-expressions, though Hob looks somewhat different. My work on Rust has convinced me that, even with all the good will in the world, you cant bolt macros onto a classical language with a non-regular syntax without making them very painful to write (and use!). They have to be part of the design from the start.
Youve been actively using Common Lisp and JavaScript. When you use JavaScript what do you miss the most from CL? What do you miss from JavaScript when youre in Lisp land?
The greatest thing about Common Lisp is that the standardization process drew from years and years of experience and organic growth. This makes the language feel singularly solid and practical. Most languages feel immature compared to CL. I suspect that this is not just age, but also the fact that Lisp allows users to extend the language to an unprecedented degree, which allows for much more experimentation, and thus faster growth and invention. The great thing about JavaScript is that it has so few concepts. It manages to strike a balance between being dumbed-down enough to be easy to grasp, which has allowed it to become as widespread as it currently is, and still being a more-or-less decent lambda language, which makes it scale up to complex programs relatively well. It is on its way to become a lingua franca of scripting, which Common Lisp will never be, because it is much more demanding of its programmersthey need to understand a lot more concepts. 2012-04-02
http://marijnhaverbeke.nl/hob/
33
And debugging all of the above and more, touching many parts of the application itself along the way. I think of my job at ITA so far as that of a plumber: On good days, I design better piping systems. On bad days, I don gloves and put my hands down the pipes to scrub. Since youre mentioning me as working at ITA and on ASDF, I suppose it is appropriate for me to tell that story in full. In building our code at ITA, we had grown weary of ASDF as we had accumulated plenty of overrides and workarounds to its unsatisfactory behavior. Dont get me wrong: ASDF was a massive improvement over what existed before (i.e. mk-defsystem), making it possible to build and share Common Lisp software without massive headaches in configuring each and every library. We have to be grateful to Dan Barlow indeed for creating ASDF. But the Common Lisp ecosystem was dysfunctional in a way that prevented much needed further improvements to ASDF. And so I started working on a replacement, XCVB. Now, at some point in late 2009, I wrote a rant explaining why ASDF could not be saved: Software Irresponsibility. The point was that even though newer versions of ASDF were written that slowly addressed some issues, every implementation stuck to
http://matrix.itasoftware.com/ http://tunes.org/ http://common-lisp.net/project/xcvb/ http://fare.livejournal.com/149264.html
34
its own version with its own compatibility fixes; no vendor was interested in upgrading until their users would demand upgrades, and users wouldnt rely on new features and bug fixes until all vendors upgraded, instead caring a lot about bug-compatibility, in a vicious circle of what I call Software Irresponsibility, with no one in charge, consensus required for any change, no possible way to reach consensus, and everyone discouraged. However, I found a small flaw in my condemnation of ASDF as unsalvageable: if, which was not the case then, it were possible to upgrade ASDF from whichever version a vendor had installed to whichever newer version you cared for, then ASDF could be saved. Users would be able to rely on new features and bug fixes even when vendors didnt upgrade, and vendors would have an incentive to upgrade, not to stay behind, even if their users didnt directly demand it. The incentive structure would be reversed. Shortly after I wrote this rant, the current ASDF maintainer stepped down. After what I wrote, I felt like the honest thing to do was to step forward. Thus, I started making ASDF self-upgradable, then massively improved it, notably making it more robust, portable, and easy to configure yet fully backwards compatible. I published it as ASDF 2 in 2010, with the help of many hackers, most notably Robert Goldman, and it has quickly been adopted by all active Common Lisp vendors. You can read about ASDF and ASDF 2 in the article I wrote with Robert Goldman for ILC 2010: Evolving ASDF: More Cooperation, Less Coordination. Im also preparing a talk at ILC 2012 where Ill discuss recent enhancements. I have to admit I didnt actually understand the fine design of ASDF until I had to explain it in that paper, thanks to the systematic prodding of Robert Goldman. Clearly explaining what youre doing is something I heartily recommend to anyone whos writing software, possibly as a required step before you declare your software complete; it really forces you to get the concepts straight, the API clean, and the tests passing. That also did it for me with my more recent lisp-interface-library, on which Im presenting a paper at ILC 2012: LIL: CLOS reaches higher-order, sheds identity, and has a transformative experience. One double downside of ASDF 2 is that it both took a lot of resources I didnt put in XCVB, and made for a much better system for XCVB to try to disrupt. It isnt as easy anymore to be ten times better than ASDF. I still hope to complete XCVB some day and make it good enough to fully replace ASDF on all Common Lisp platforms; but the goal has been pushed back significantly. Now one important point that I want to explicitly stress is that the problem with ASDF was not a strictly technical issue (though there were many technical issues to fix), nor was it strictly a social issue; it was an issue at the interface between the social and the technical spheres, one of how our infrastructures and our incentives shape each other, and what kind of change can bring improvement. Thats the kind of issues that interest me. Thats why I call myself a cybernetician.
http://rpgoldman.goldman-tribe.org/index.html http://common-lisp.net/project/asdf/ilc2010draft.pdf http://www.cliki.net/lisp-interface-library http://common-lisp.net/~frideau/lil-ilc2012/lil-ilc2012.html
35
Do you use Lisp at work? If yes, how have you made it happen? If not, why?
Ive made it happen by selection. I applied at ITA Software precisely because I knew (thanks to the Carl de Marcken article published by Paul Graham), that the company was using Lisp to create real-world software. And thats what I wanted to do: create real-world software with a language I could use without wanting to kill myself every night because it is turning me into a pattern-expanding machine rather than a human involved in thinking and using macros as appropriate. I object to doing things that computers can do. Olin Shivers Yet, in my tasks as a plumber, I have still spent way too much time writing shell scripts or Makefiles; though these languages possess some reflection including eval, their glaring misdesign only lets you go so far and scale so much until programs become totally unmanageable. Thats what pushed me over the years to develop various bits of infrastructure to do as much of these things as possible in Lisp instead: cl-launch, command-line-arguments, philip-jose, xcvb, asdf, inferior-shell. Interestingly, the first and the last, cl-launch and inferior-shell, are kind of dual: cllaunch abstracts over the many Lisp and shell implementations so you can invoke Lisp code from the Unix shell; it is a polyglot lisp and shell program that can manipulate itself and combine parts of itself with user-specified Lisp code to produce an executable shell script or a dumped binary image; I sometimes think of it as an exercise in useful quining. Inferior-shell abstracts over the many Lisp and shell implementations so you can invoke Unix shell utilities from any Lisp implementation, remotely if needs be (through ssh), and with much nicer string interpolation than any shell can ever provide; it is a classic Lisp library notably available through Quicklisp. With the two of them, I have enough Unix integration that I dont need to write shell scripts anymore. Instead, I interactively develop Lisp code at the SLIME REPL, and have a shell-runnable program in the end. That tremendously improved my quality of life in many situations involving system administration and server maintenance.
36
When I became student at Ecole Normale Suprieure, I was taught Caml-light by xleroy himself, I learned to use Emacs, and I met Juliusz Chroboczek who introduced me to Scheme and Common Lisp, continuations and SICP. Finally, during my vain efforts to gather a team to develop an operating system based on a higher-level language as part of the TUNES project, I have been introduced to Lisp machines and plenty of other interesting concepts. I use Lisp because I couldnt bear to program without higher-order functions, syntactic abstraction and runtime reflection. Of all Lisp dialects, I use Common Lisp mainly because thats what we use at work; of course a large reason why we use it at work is because its a good language for practical work. However, frankly, If I were to leave ITA (by Google), Id probably stop using Common Lisp and instead use Racket or Maru, or maybe Factor or Slate, and try to bootstrap something to my taste from there.
37
up until the recent success of Zach Beanes Quicklisp, there wasnt a good story to find and distribute software, and even now its still behind what other languages have. This is part of a vicious circle where the language attracts and keeps a community of developers who live happily in a context where sharing and reusing code is relatively expensive (compared to other languages). But things are getting better, and I have to congratulate Zach Beane once again for Quicklisp. I believe Im doing my small part.
If you had all the time in the world for a Lisp project, what would it be?
I would resurrect TUNES based on a Linear Lisp, itself bootstrapped from Racket and/or Maru.
http://quicklisp.org/ http://www.sqlite.org/testing.html http://adam.chlipala.net/cpdt/
38
A year ago Google bought ITA, which was, probably, the largest Lisp company recently. What were the biggest upsides and drawbacks of using Lisp on the scale of ITA? Does Lisp have a future inside Google?
On the upside, we certainly have been able to write quite advanced software that we might not have otherwise managed. A million lines of Lisp code, including its fair share of macros and DSLs, would be so many more million lines of code without the syntactic abstraction made possible by Lisp. However hard and expensive it was with Lisp, I can only imagine how many times worse it would have been with anything else. At the top of the tech bubble in 2008, we had over fifty Lisp programmers working just on QRes, gathered at an exponential rate over 3 years. Thats a lot. We didnt yet have good common standards (Jeremy Brown started one, later edited by Dan Weinreb; I recently took it over, expanded it, merged it into the existing beginning of a Google Common Lisp Style Guide and published it), and it was sometimes hard to follow what another hacker wrote, particularly if the author was a recently hired three-comma programmer. But with or without standards, our real, major, problem was with lack of appropriate management.
http://en.wikipedia.org/wiki/Daniel_Weinreb http://c2.com/cgi/wiki?ThreeStarProgrammer
39
We were too many hackers to run without management, and none of our main programmers were interested in becoming managers; instead managers were parachuted from above, and some of them were pretty bad: the worst amongst them immediately behaved like empire-building bullies. These bad managers were trying to control us with impossibly short, arbitrary deadlines; not only did it cause overall bad quality code and morale burnout, the renewing of such deadlines quarter after quarter was an impediment to any long-term architectural consideration for years. What is even worse, the organization as setup had a lot of inherent bad incentives and created a lot of conflicts, so that even passable managers would create damage, and otherwise good engineers were pitted against each other on two sides of absurd interfaces, each team developing a lot of scar tissue around these interfaces to isolate itself from the other teams. Finally, I could witness how disruptive a single bad apple can be when empowered by bad management rather than promptly fired. I have had a lot of losing fights with QRes management at a time when, hanging on a H1B visa, I was too much of a coward to quit. Eventually, the bad people left, one by one, leaving behind a dysfunctional organization; and great as the people that manned it may have been, none was able or willing to fix the organization. Then finally, Google acquired us. Theres a reason why, of two companies founded at about the same time, one buys the other and not the other way around: one grew faster because it got some essential things right that the other didnt. Google, imperfect as it necessarily is, gets those essential things right. It cares about the long term. It builds things to scale. It has a sensible organization. It has a bottom up culture. So far, things have only improved within QRes. Also, launching was also good in many ways. It makes us and keeps us real. Lisp can be something of a magic tool to solve the hardest technical issues; unhappily it doesnt even start to address the social issues. We wasted a whole lot of talent due to these social issues, and I believe that in an indirect way, this is related to the lack of modularity in Common Lisp, as it fostered a culture of loners unprepared to take on these social issues. So Im not telling you this story just to vent my past frustration. There too I have a cybernetic message to pass on: incentives matter, and technical infrastructure as well as social institutions shape those incentives and are shaped by them. As for the future of Lisp at Google, that million line of Common Lisp code aint gonna rewrite itself into C++, Java, Python, Go, or even DART. I dont think the obvious suggestions that we should rewrite it were ever taken seriously. It probably wouldnt help with turnover either. But maybe, if it keeps growing large enough, that pile of code will eventually achieve sentience and rewrite itself indeed. Either that, or it will commit suicide upon realizing the horror.
40
Far
2012-10-19
http://fare.livejournal.com/tag/pony
42
complex cases and large contracts where the personal touch is required, tend to be a trifle expensive for straightforward policies which could be much more economically sold online. The industy is ripe for disintermediation.
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
No, were primarily a Ruby shop, with a sideline in large legacy Java app which were working to replace. I think thereve been a couple of uses of Clojure in hack days, but thats as far as it goes. Why not? Well, apart from the point that Ive only been there since July Its The Ecosystem, I suppose. Ruby as a language has pretty good support for OO paradigms and a whole bunch of free software libraries for doing web-related things: Ruby as a community is big on Agile and TDD and maintainable design. And its at least possible (if not exactly easy in the current bubble) to engage a regular recruitment agent and task him with finding competent programmers who know it. Im not saying Lisp is exactly bad at any of that, but its at least questionable whether its as good along all of those axes, and its certainly not better enough to make the switch sensible.
43
(e.g.) Alpha assembly was a real kick - its a bit like I imagine building a Lisp machine would be, except that the goal is achievable and the result is generally useful.
As far as I can tell, youre currently mostly doing work in Ruby. Whats the pros and cons of Ruby development compared to Lisp?
The transpose-sexps function in Emacs does nothing useful in Ruby mode. rails console is a poor substitute for a proper toplevel. Backtraces dont show the values of parameters and local variables. (Yes, pry helps a lot). And the garbage collector (in MRI, anyway) is sucky to the point that even 1990s Java GC could probably beat it in a fair fight. On the other hand, libraries. Heres an interesting thought experiment, though: theres a clear difference between the Lisp workflow where you change the state of your image interactively to get the code into working shape very quickly (and then later try to remember what it was you did) and the more scripted approach of test-driven development in Ruby where you put everything (code, test setup, assertions) in files that you reload from disk on each run. How would you meld the two to get repeatable and fast iterations? A lot of people are doing things like Spork (which forks your application for each test it runs, throwing the child state away after the test has run) but they never seem to me to be more than 80% solutions. My intuition is that youd want to stick to a much more functional design and just make state a non-problem.
44
45
danb
2012-10-08
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
I do. I should say that Im no longer, if I ever was, a programmer by trade; most of my work at Teclo is not writing code, but when I do it is in C, R or Common Lisp. Working in a Lisp-flavoured startup (Im not the most famous Lisp programmer in the company,
http://www.advogato.org/person/wnewman/ https://twitter.com/ascii19 http://www.deprofundis.org.uk/ http://teclo.net/ http://www.doc.gold.ac.uk/
47
and quite some way from being the best) has made Lisp a natural tool to use when its appropriate; while it might be a bit of a shame that Lisp is not used exclusively, the balance of idealism and pragmatism is pretty good, and its fairly satisfying to know that the high-performance network element that we ship has Lisp code controlling its operation. I wouldnt make an argument that C is a Lisp by any stretch, but Ive popped up at a couple of events in the last year to argue that R has some claims to being a Lisp; it has conditions, handlers, restarts, generic functions, macros operating on parse trees and a SWANK backend. Another part of what I do is write documents, both for Teclo and for Goldsmiths. I have in the last couple of years fallen in love with org-mode and in particular with reproducible research, or living documents; the ability to have executable sections of code for generating results, which can then themselves be further analysed by other bits of code in other languages, if thats appropriate and the whole exported as a document typeset to what I consider to be high-quality standards. The fact that there is also acceptable-quality web output from the exact same process is gravy.
48
49
SBCL contributors seem to be a very active, closely-knit, and united community. How did that happen? Maybe you could share some insight into the history of the project. Also what were the factors, that determined its success?
I think part of SBCLs success as a community was the finding of like minds which came about partly because it started off as a project when access to information channels was growing, but also partly because there were some explicit principles laid down: Bill Newman made it very clear that he was aiming for something maintainable, and also taught by example the meaning of maintainability. In the SBCL source distribution, there are over 100 lines of textual detail describing his ideas about what he was aiming for, and although its nothing like an explicit charter which every SBCL developer (or user!) has to sign up to, its nevertheless a useful indication of a direction to drive in. Both detailed and motivated enough that even a graduate student with no software development experience could understand that there were tradeoffs involved, and someone had thought hard about which side of the tradeoffs they wanted to be. Id also point out some of Bills advodiary entries of the time, including http://www.advogato. org/person/wnewman/diary/6.html and http://www.advogato.org/person/wnewman/ diary/9.html, which perhaps illustrate that he was thinking about this kind of software maintenance all the time. (To foil the maintenance programmer :-) I think this is particularly important when the bulk of the work is done by volunteers; it helps to keep focus (Ive written before about how software is only sustainable if it can stay alive in the minds of its developers).
If you had all the time in the world for a Lisp project, what would it be?
Theres lots that Id like to do, both hacking on Lisp itself and things Id like to explore, for which Im likely to reach for Lisp first. Id also like to get more fluent with emacs lisp, enough to be able to quickly write the user interfaces I would like to use to various bits of software that I use every day.
50
Christophe
2012-03-26
52
The first was Bluetail AB, the first Erlang startup company. I was hired by Joe Armstrong because I had enthusiasm pouring out of my ears and nostrils. I moved immediately to Stockholm in the middle of winter for this job I was 21 years old and Id never left Australia or seen snow before. I learned a lot of things at Bluetail, besides practical matters like how to walk on ice. The programmers there were all way above my level and I was routinely stunned at the stuff they had done, like when Tobbe Trnqvist mentioned in passing that hed written his own TCP/IP stack from scratch as a hobby project and that his dial-up internet connection uses his own home-brew PPP implementation. I used to roam the corridors at night borrowing tech books from peoples shelves, there must have been a thousand books in the office. Bluetail was bought by Alteon, who were bought by Nortel at the same time, and become a productive little product unit in a big networking company. Next was Synapse Mobile Networks. This was an amazing experience for me: to switch from a big company to a small company and take care of everything from design to development to deployment to support by ourselves. Really getting to know customers and internalizing their needs and building the right solutions. The product is a device management system, which is a realtime database in a mobile phone network keeping track of which phone everybody is using and making sure all their services work. The whole thing was written in Erlang and BerkeleyDB, even with a from-scratch SS7 telecom networking stack in the end. I would routinely fly to a really interesting country Kazakhstan, Jordan, Russia, Algeria, you name it and spend a few weeks deploying the system and developing customizations on-site. Synapse was the first company in this market and they are still the market leader today. The system has by now configured approximately 1 billion actual mobile phones by sending them coded SMSes. Synapse was also instructive in seeing how much a strong personality can shapee a company. Im still in awe of our fearless leader Per Bergqvist. What a guy, as they say on Red Dwarf. The most recent is Teclo Networks. This is a company that I co-founded with friends from the SBCL community mostly drinking buddies from ECLM and friends from the telecom world. I served as CTO during the phase of finding the right problem to solve, building our series of prototypes and our real product, and finding our very first customers. Im a Teclo-alumnus now, not actively working in the company, and: Wow, this was a really intense few years. Teclo builds network appliances that optimize TCP traffic for cellular internet at about 20Gbps per server. The product speeds up the network, improves consistency, and
https://twitter.com/joeerl https://groups.google.com/d/topic/comp.lang.functional/UYahf5fSNHI/discussion http://www.networkworld.com/news/2000/0829alteonbuy.html http://www.synap.se/ http://www.teclo.net/
53
globally eliminates buffer-bloat. The company is currently moving forward with a lot of momentum: we have Lispers like Juho Snellman, Tobias Rittweiler, and Ties Stuij currently deploying systems in real live networks all over the world. Go Teclo :-)
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
Ive mostly done Lisp hacking for my own pleasure on the side, but Ive also used it quite a bit at work. The first time was when I used Scheme at Bluetail. Specifically, I used Kawa to extend a Java application. Im sure this raised some eyebrows amongst my colleagues but frankly I was having too much fun to really notice. Kawa is a great piece of software. I wrote a bunch of Common Lisp networking code while reading books like TCP/IP Illustrated. This was a hobby project called Slitch and Netkit. I used this slightly in my work at Nortel to replicate a DoS against the Linux kernel that was crashing some of our appliances. Teclo is very much a Lisp-hacker shop. In the first year or so we used Lisp for absolutely everything. Weve written and deployed a prototype TCP/IP implementation written in Common Lisp (SBCL), wrote network analysis tools for cross-referencing and visualizing traffic captures (often working on traces that fill up a whole disk i.e. hundreds of gigabytes), and developed all of the operation-and-maintenance infrastructure in CL. These days Teclo uses C/C++ for the main traffic handling, R for statistical analysis, and Common Lisp for the rest mostly operation and maintenance and data visualization.
54
SLIMEs mission was ultimately to replace ILISP as the standard Emacs mode for interacting with Common Lisp. ILISP worked by sending S-expressions between Emacs and Lisp via standard I/O and it had the unfortunate habit of getting stuck a lot. ILISP was also about 15 years old at that time (SLIME is catching up now at 8 years!) and really hard to work on due to the heavy use of reader conditionals in the source code, like #+cmucl #-lucid #+sbcl #-lispworks #+acl #-acl4.2 and so on. I really enjoyed the feeling of working on a growing and thriving open-source project. Seeing the steady stream of new names appearing on our mailing list, getting patches from dozens of people, feeling good about positive feedback we received, working hard on negative feedback right away, and so on. Twas a really productive flow. I think that writing development tools is also really satisfying because your users are your peer group: people you really look up to and respect and sometimes drink beer with. Its a great feeling to build stuff that they like to use. Helmut Eller and I also had a really great working style. Very often Id do some latenight hacking and check in a bunch of new functionality, which Helmut would then read through and think about and then thoughtfully rewrite in a simpler way. Then Id see what hed done, think about it, and rewrite it to be simpler again. And so on. This was a really pleasant and productive way of working. He is also an absolute magician when it comes to suddenly checking in what seems like a month worth of work that he did over the weekend. (Juho Snellman has this uncanny ability too.) I hacked on SLIME from the beginning and up to version 1.0. Then I was engulfed by an Erlang startup. Herere some posts that I fished out of the mailing list archives to give a sense of the early days: SLIME is born Users! SLIME User Survey SLIME 1.0 release party :-)
55
What holds me to Lisp is the people. I love hanging out with Lisp hackers: I find that were an unusually diverse community. How often do you attend a small conference where attendees are building nuclear defense systems, running intensive care wards, designing aeroplane engines, analysing Lute tablature, developing cancer drugs, writing FIFAs legal contracts, and designing their own microchips? Surely this describes few tech events other than Arthur & Edis European Common Lisp Meeting :-).
56
fun way to work actually. I produced a tremendous amount of bugs in this style though and I wasnt smart enough to fix them. Christophe Rhodes did that part dont ask me how :-). I do have a tip for getting into the flow. Its a simple one: make a little TODO list of some features you want to hack, and take the laptop into the park away from the internet for an hour or two until theyre done. This works every time for me. Oh, and I highly recommend printing out and reading your programs. This is the best way that I know for improving their quality. This is why Im a bit picky about things like the 80-column rule and the layout of functions within a file. I want to be able to print programs out and read them on paper from top to bottom. I wrote a program called pbook to help with this its not a very good implementation though, with all those regexps, so Id love if someone would make a much simpler one.
You have played around with so many languages, like Erlang, Lisp, Smalltalk & LuaJit. If you would design your own, how would it look like?
Thats really hard to imagine. Id have to find a reason that I needed a new programming language, and the details would probably follow from the problem I needed to solve. I learn new languages mostly because I enjoy meeting new people and learning new ways of thinking. Its very seldom from any sense of dissatisfaction with previous languages Ive used. My favourite languages are Common Lisp, Emacs Lisp, Forth, Erlang, Smalltalk, and C. So the best I can say is: those are the languages that Id like to have designed.
Luke
2012-07-25
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
From my description above it might seem that it would be hard to use Lisp for anything, but quite the contrary: 50% of our time is spent doing simulations and programming. Quite interestingly, the programs that we develop are very short-lived. We have a
http://ecls.sourceforge.net/ http://tream.dreamhosters.com/tream/musings/49-lisp/76-analysis-of-existing-asdf-files http://www.bbc.co.uk/news/science-environment-12811199 http://greiner.physics.harvard.edu/QGM.html http://greiner.physics.harvard.edu/Videos/hopping.mpeg http://www.csic.es/
58
question, write a simulation, get the data, move on. This is the reason why most people in our field use Matlab. I reached Lisp looking for an interactive programming language that was more powerful than Matlab in the fields of expressiveness, extensibility, optimization. That is how I started working on ECL, with the aim of empowering it for numerical simulations. Along the way I got distracted and more interested in the fields of language development. Despite this I have found room for Lisp in my daily routine, from scripting all the way up to solving actual problems. For instance, in one of our research topics we had to solve huge instances of 3-SAT problems using a very basic algorithm. The fact that Common Lisp comes with bignums reduced the development time to one afternoon and the program we produced was faster than the C++ prototypes we had.
59
You are a physicist by main occupation, yet you manage to almost single-handedly support ECL. Why? and How?
Everybody needs some projects in life other than work and this one is a lifelong companion that I would like to see to the end. I had a lot of help from freelance programmers at the beginning and users cooperate with patches and bug reports, and a lot of patience for my mistakes and absences. That helps. That does not mean I consider the current status an optimal one. I consider it a personal failure the fact that ECL does not have a larger community and a better support base. It still persists the wrong impression that ECL is a lesser implementation, covering a niche (embeddability) and inferior to other implementations which are more lispy in nature. That is not the case: we have sufficiently proven that the underlying core, C, does not prevent any feature from being implemented, performance is improving and stability, well, this is not always optimal, but it has to be blamed to the small size of the developer team, which has scarce resources for testing the code.
Juanjo
2012-06-25
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
I used to at msi.co.jp. It is a Japanese consultancy based in Tokyo called originally Mathematical Systems Institute. Mr Kuroda leads the Lisp group there and I think it has hovered around five or six people over many years. Hes done a great many very interesting projects for a range of companies over the years: for example a crash-test data inspection tool for a big Japanese car company, text mining, graph visualisation and so on. I worked primarily on building up a visualisation and mapping of a very large set of routers for the worlds biggest telecoms, which led to the creation of manardb. I really enjoyed working for Mr Kuroda and Im sorry I had to leave for personal reasons. There were always many very fascinating problems around with great people to discuss them and find solutions. It was a very stimulating workplace! At Facebook, I use PHP, Python, C++, Java and miscellaneous things. I think we would all be better off if we hadnt balkanised the different systems that we program for and Lisp is one of the few programming languages with the flexibility to serve in all these roles.
http://john.freml.in/teepeedee2-c10k http://john.freml.in/re2-benchmark http://cl-www.msi.co.jp/index.html http://john.freml.in/manardb-fast-objects-in-lisp http://john.freml.in/
61
Tell us about your approach(es) to optimizing Common Lisp code (and maybe code optimization in general)?
The most important thing is to try to hold in your head an understanding of where the program is going to spend time. Profilers can be misleading and inaccurate, and it is sometimes difficult to get representative workloads to profile. I think their main utility is in confirming that there is no sloppy mistake (in Lisp, typically, consing accidentally) that prevents you from achieving the natural performance of your approach. Complexity analysis in terms of computation, network usage, disk accesses and memory accesses is a first step as obviously if you can improve the asymptotic usage of a bottlenecked resource, you will very likely do much better than trying to tweak some little detail. The second step is to try to characterize interactions with caches and, in Lisp, garbage collection, which is pretty tricky.
62
If you had all the time in the world for a Lisp project, what would it be?
I wish there were Lisp bridges to other runtime systems (Java, Android, Objective C, Perl, Python, C++, R, etc.) so that the libraries and tools for each could be leveraged efficiently in Lisp and vice versa. That would mean being able to call Java code and handle Java objects in Lisp, for example perhaps initially by spinning up a Java implementation in a separate process running a CL-SWANK style interface. I really dont think this would be that difficult and it would make a huge difference to the convenience of building programs in Common Lisp!
John
2013-01-03
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
Ive used Lisp for new commercial projects where people trust me with the technology choices. Ive also come in to work on existing Lisp projects. I have used Lisp for onehttp://carcaddar.blogspot.com/ http://common-lisp.net/project/parenscript/ https://github.com/vsedach/Eager-Future2 https://github.com/vsedach/Vacietis https://twitter.com/archimagdev http://cliki.net https://github.com/vsedach/cliki2 https://twitter.com/vsedach
64
off tasks at non-Lisp companies, but Ive never started a Lisp project at a company that wasnt using Lisp already. Most computer programmers tend to make technical decisions based on cliches they read about on the Internet, and unfortunately I dont know the cure for being dumb.
65
Tell us about Vacietis: your vision for it, the projects progress and roadmap, whats lacking?..
Vacietis was originally intended to be a translator for a subset of C code to Common Lisp. I discussed the idea for Vacietis a few times online before starting to code, and people generally thought it wouldnt be doable. Scott Burson, who wrote the Zeta-C compiler for Lisp Machines in the 1980s, told me it would take at least a year of full-time of work. As I worked on Vacietis, I realized that adding more and more of the advanced C functionality was actually easy. First came the C preprocessor (which is implemented as part of the Common Lisp readtable that also parses the C code), then large patches of the C standard library, and then one day Brit Butler came along and sent me a one-page patch that actually used Vacietis as a stand-alone C compiler! I hadnt even realized the project had gotten to that phase. The compiler comes as the vacietis.vcc ASDF system as part of Vacietis. Some big things that need to be done are struct call-by-value, pointer scaling, arguments to main(), some libc stuff, setjmp, and making VCC produce linkable Lisp object files (fasls) for the different implementations. I would also like to change the pointer representation to be a fixnum offset into a sparse array (right now pointers are represented by structures that look like <offset, array>). Overall, I am amazed by how much progress Vacietis has made given how little time I spent on it. I am now convinced that Common Lisp is mostly a superset of C, and have a newfound appreciation for gotos and PROG.
If you had all the time in the world for a Lisp project, what would it be?
A single-address space Common Lisp operating system based on capabilities (Jonathan Rees wrote a dissertation on doing this in Scheme in 1995) and a virtualized package system. I really like Azul Systems hack of using the EPT/RVI virtualized page tables as a hardware read barrier for real-time garbage collection, and with a single-address space operating system I think you can do the same thing on hardware with a regular MMU. If you follow the steps of the Viewpoints Research Institutes Fundamental New Computer Technologies project and keep the system as simple as possible, it should be a surmountable amount of work to realize a somewhat working system.
http://www.cliki.net/Scott%20L.%20Burson https://twitter.com/redline6561 http://mumble.net/~jar/pubs/secureos/ http://www.viewpointsresearch.org/html/work/ifnct.htm
66
Vacietis is actually the first step in the Common Lisp operating system project. Id like to have a C runtime onto which I can port hardware drivers from OpenBSD with the minimal amount of hand coding. The way hardware drivers are written in OpenBSD (a set of patterns it borrows from NetBSD, where they originated and are colloquially known as bus_dma) is very pleasant. Theo de Raadt was also the first well-known Free Software operating system developer to take a position against binary hardware drivers, and I respect him tremendously for that. Linus Torvalds doesnt care, and as a result it is now impossible to get drivers for any of your ARM devices, even though 99% of them run Linux. OpenBSD will continue to have great, stable Free Software device drivers that are easily portable for different hardware architectures and to the other BSD-derived operating systems. I hope OpenBSDs model of Free Software hardware drivers catches on more widely.
67
out what is going on. Common words like status, mapping, etc. make terrible names unless you qualify them.
Vladimir
2013-03-05
69
As an aside it is interesting to note that the Domain Specific Language Compilers and various other tools written in Common Lisp have been key enabling factors for the creation of NovaSparks. Im also the CEO and CTO of Fractal Concept which is the company where we were developing that technology before starting NovaSparks but as NovaSparks has been using more than 100% of my time for the last years Fractal Concept has been less active with only the development and maintenance of the smart sensors going on.
Do you use Lisp at work? If yes, how youve made it happen? If not, why?
Ive always used Common Lisp for most of my work and even when I need to use other programming languages (like VHDL for NovaSparks FPGAs or javascript for web stuff) I generally use Common Lisp at least for a lot of related tasks like prototyping, designing and testing algorithms, extracting statistics, performing simulations, generating test data, analysing test runs. The next step is very often to generate some or all the code in other languages by designing various domain specific languages (DSL) which will take care of the tedious aspects of programming in less powerful languages. I really like it when from a few 100s of lines written in a easy to use high level DSL we generate 10000 to 60000+ lines of very low level VHDL code saving months of development. About that point I think I would even say that Im mostly doing Language Oriented Programming by trying to abstract the domain specific knowledge into various domain specific languages with very different syntaxes like s-expressions, C like or other languages or even sometimes adding to the mix some GUI or data-based inputs. Then those DSLs would generate most if not all the application code in whatever language is needed be it VHDL, asm, C, javascript or Common Lisp.
70
Loop), native compilation of applications, on the fly native compilation of generated code, the condition system, interactive live programming, real time live debugging of running software and more!
71
What are the advantages of using Lisp in the HPC field? What are the drawbacks? Are you happy with your technology choice?
The HPC field is huge and I can only talk about the small corner of it I know which is the ultra-low latency processing of vast amounts of data we do in NovaSparks. For that the various DSL compilers generating VHDL code have really been a key enabling factor. Programming FPGAs is notoriously difficult and time consuming and this is the major factor limiting the use of reconfigurable computing in the HPC field. The use of those DSL compilers has made it possible to use those FPGA on a more practical basis for processing financial data. BTW Im looking for other HPC domains in which those DSL VHDL compilers could be used so feel free to contact me if you have some ideas.
http://common-lisp.net/project/slime/ http://orgmode.org http://magit.github.io/magit/
72
If you had all the time in the world for a Lisp project, what would it be?
Again thats a difficult choice. Speaking about pure Lisp projects Ive been willing for a long time to clean up and modernize my web app framework before releasing it as open-source so maybe that could be a good project to start. Otherwise as mentioned above, Im looking for possible applications and opportunities of leveraging the DSL hardware compilers and the FPGAs around some Big Data processing. I have a few ideas but nothing specific for now.
Marc
2013-06-12
Afterword
I hope youve enjoyed reading these interviews and have gained something of them. I surely did. Some events occurred in the professional lives of many of the interviewees even in the short period since the interviews were conducted. Far had left ITA, yet hes produced ASDF 3, a lot of interesting things of which you can read in his presentation. Zach Beane is now part of Clozure Associates where he hacks on Lisp full-time and continues to improve Quicklisp. Marijn Haverbeke had a hugely successful Indiegogo project Tern to improve JavaScript editing experience. Peter Seibel went to work for twitter. The next ECLM took place in Madrid. The Lisp ecosystem continues its development little by little, yet consistently: new interesting implementations are arriving, new community resources are being developed, and more projects get started or mature. And, last but not least, hopefully, a new generation of Lisp hackers is growing
(c) http://xkcd.com/297/