Top.Mail.Ru
? ?

Previous 25

Jul. 30th, 2018

eyes black and white

Making ASDF more magic by making it less magic

This short essay describes some challenges I leave to the next maintainers of ASDF, the Common Lisp build system, related to the "magic" involved in bootstrapping ASDF. If you dare to read further, grab a chair and your favorite headache-fighting brewage.

ASDF is a build system for Common Lisp. In the spirit of the original Lisp DEFSYSTEM, it compiles and loads software (mostly but not exclusively Common Lisp code) in the same image as it's running. Indeed, old time Lisp machines and Lisp systems did everything in the same world, in the same (memory) image, the same address space, the same (Unix-style) process — whatever you name it. This notably distinguishes it from traditional Unix build, which happens in multiple processes each with its own address space. The upside of the Lisp way is extremely low overhead, which allows for greater speed on olden single-processor machines, but also richer communication between build phases (especially for error reporting and handling), interactive debugging, and more. The upside of the Unix way is greater parallelizability, which allows for greater speed on newer multi-processor machines, but also fewer interactions between build phases, which makes determinism and distributed computation easier. The upside of the Lisp way is still unduly under-appreciated by those ignorant of Lisp and other image-based systems (such as Smalltalk). The Lisp way feels old because it is old; it could be updated to integrate the benefits of the Unix way, possibly using language-based purity and effect control in addition to low-level protection; but that will probably happen with Racket rather than Common Lisp.

One notable way that ASDF is magic is in its support for building itself — i.e. compiling and/or loading a new version of itself, in the very same Lisp image that is driving the build, replacing itself in the process, while it is running. This "hot upgrade" isn't an idle exercise, but an essential feature without which ASDF 1 was doomed. For the explanation why, see my original post on ASDF, Software Irresponsibility, or the broader paper on ASDF 2, Evolving ASDF: More Cooperation, Less Coordination.

Now, despite the heroic efforts of ASDF 2 described in the paper above, self-build could not be made to reliably happen in the middle of the build: subtle incompatibilities between old and new version, previously loaded extensions being clobbered by redefinitions yet expected to work later, interactions with existing control stack frames or with inlining or caching of methods, etc., may not only cause the build to fail, but also badly corrupt the entire system. Thus, self-build, if it happens, must happen at the very beginning of the build. However, the way ASDF works, it is not predictable whether some part of the build will later depend on ASDF. Therefore, to ensure that self-build happens in the beginning if it happens at all, ASDF 3 makes sure it always happens, as the very first thing that ASDF does, no matter what. This also makes ASDF automatically upgrade itself if you just install a new source repository somewhere in your source-registry, e.g. under ~/common-lisp/asdf/ (recommended location for hackers) or /usr/share/common-lisp/source/cl-asdf/ (where Debian installs it). This happens as a call to upgrade-asdf in defmethod operate :around in operate.lisp (including as now called by load-asd), so it is only triggered in side-effectful operations of ASDF, not pure ones (but since find-system can call load-asd, such side-effects can happen just to look at a not-previously-seen, new or updated system definition file). Special care is taken in the record-dependency method in find-system.lisp so this autoload doesn't cause circular dependencies.

Second issue since ASDF 3: ASDF was and is still traditionally delivered as a single file asdf.lisp that you can load in any Common Lisp implementation (literally any, from Genera to Clasp), and it just works. This is not the primary way that ASDF is seen by most end-users anymore: nowadays, every maintained implementation provides ASDF as a module, so users can (require "asdf") about anywhere to get a relatively recent ASDF 3.1 or later. But distributing a single file asdf.lisp is still useful to initially bootstrap ASDF on each of these implementations. Now, by release 2.26, ASDF had grown from its initial 500-line code hack to a 4500-line mess, with roughly working but incomplete efforts to address robustness, portability and upgradability, and with a deep design bug (see the ASDF 3 paper). To allow for further growth, robustification and non-trivial refactoring, ASDF 3 was split into two sets of files, one for the portability library, called UIOP (now 15 files, 7400 lines) and one for ASDF itself (now 25 files, 6000 lines as of 3.3.2.2), the latter set also specifically called asdf/defsystem in this context. The code is much more maintainable for having been organized in these much more modular smaller bites. However, to still be able to deliver as a single file, ASDF implemented a mechanism to concatenate all the files in the correct order into the desired artifact. It would be nice to convince each and every implementation vendor to provide UIOP and ASDF as separate modules, like SBCL and MKCL do, but that's a different challenge of its own.

There is another important reason to concatenate all source files into a single deliverable file: upgrading ASDF may cause some functions to be undefined or partially redefined between source files, while being used in the building ASDF's call stack, which may cause ASDF to fail to properly compile and load the next ASDF. Compiling and loading ASDF in a single file both makes these changes atomic and minimizes the use of functions being redefined while called. Note that in this regard, UIOP could conceivably be loaded the normal way, because it follows stricter backward compatibility restrictions than ASDF, and can afford them because it has a simpler, more stable, less extensible API that doesn't maintain as much dynamic state, and its functions are less likely to be adversely modified while in the call stack. Still, distributing UIOP and ASDF in separate files introduces opportunities for things to go wrong, and since we need a single-file output for ASDF, it's much safer to also include UIOP in it, and simpler not to have to deal with two different ways to build ASDF, with or without a transcluded UIOP.

As a more recent issue, ASDF 3.3 tracks what operations happen while loading a .asd file (e.g. loading triggered by defsystem-depends-on), and uses that information to dynamically track dependencies between multiple phases of the build: there is a new phase each time ASDF compiles and loads extensions to ASDF into the current image as a prerequisite to process further build specifications. ASDF 3.3 is then capable of using this information to properly detect what to rebuild or not rebuild when doing a incremental compilation involving multiple build phases, whereas previous versions could fail in both ways. But, in light of the first issue, that means that trying to define ASDF or UIOP is special, since everything depends on them. And UIOP is even more special because ASDF depends on it. The "solution" I used in ASDF 3.3 was quite ugly — to prevent circular dependency between a define-op asdf and define-op uiop, I made asdf.asd magically read content from uiop.asd without loading uiop.asd, so as to transclude its sources in the concatenated file asdf.lisp. This is a gross hack that ought to be replaced by something better — probably adding more special cases to record-dependency for uiop as well as asdf along the way.

Finally, there is a way that ASDF could be modified, that would displace the magic of bootstrap such that no special case is needed for ASDF or UIOP — by making that magic available to all systems, potentially also solving issues with cross-compilation. (UIOP remains slightly special: it must be built using the standard CL primitives rather than the UIOP API.) But that would require yet another massive refactoring of ASDF. Moreover, it would either be incompatible with existing ASDF extensions or require non-trivial efforts to maintain a backward-compatible path. The problem is the plan made by ASDF is executed by repeatedly calling the perform method, itself calling other methods on objects of various classes comprising the ASDF model, while this model is being redefined. The solution is that from the plan for one phase of execution, ASDF would instead extract a non-extensible, more functional representation of the plan that is impervious to upgrade. Each action would thus define a method on perform-forms instead of perform, that would (primarily) return a list of forms to evaluate at runtime. These forms can then be evaluated without the context of ASDF's object model, actually with a minimal context that even allows them to be run in a different Lisp image on a different Lisp implementation, allowing for cross-compilation, which itself opens the way for parallelized or distributed deterministic backends in the style of XCVB or Bazelisp. Such changes might justify bumping the ASDF version to 4.0.

As usual, writing this essay, which was prompted by a question from Eric Timmons, forced me to think about the alternatives and why I had rejected some of them, to look back at the code and experiment with it, which ultimately led to my finding and fixing various small bugs in the code. As for solving the deeper issues, they're up to you, next ASDF maintainers!

Sep. 24th, 2017

eyes black and white

A tale of many nests

This short essay will tell you about my favorite macro, nest, discuss the modularity of syntax extension, and use the implementation of that macro as an illustration for how to use defmacro, syntax-rules and syntax-case, providing along the way a comparison between these respective macro definition systems.

Using the nest macro

When I started using Scheme as my main Lisp, the first macro I wrote was the nest macro. What macro? The nest macro. The one that in Common Lisp helps my code avoid drifting hopelessly to the right as I nest binding form inside binding form... by doing the nesting for me. To illustrate the kind of issues that I'm concerned with, consider the Common Lisp code snippet below:

Read more...Collapse )

Apr. 30th, 2017

eyes black and white

Design at the confluence of programming languages and build systems

This short article discusses upcoming changes and future challenges for ASDF, the Common Lisp build system. It also draws lessons for a hypothetical successor to ASDF, for build systems in general, languages in which to write them, and languages that would have an internal build system that could rival with modern build systems.

ASDF, "Another System Definition Facility", is the de facto standard build system for Common Lisp (CL). It is relatively lightweight (13 kloc, over half of which for the portability layer UIOP, the "Utilities for Implementation- and OS- Portability"), quite portable (17 supported implementations), configurable (though importantly it "just works" by default), well-featured (it can create standalone executables), extensible (e.g. with support for linking C code, or for compiling FORTRAN through Lisp, etc.). But it lacks many features of modern build systems like e.g. Bazel: it does not support determinism and reproducibility, distribution and caching, cross-compilation to other platforms, building software written in languages other than CL, integration with non-CL build systems, management of multiple versions of the same software, or scaling to millions of files, etc. Historically, these limitations are due to ASDF being at heart an in-image build system in direct line of the original Lisp Machine DEFSYSTEM: it is designed to build and load software into the current Lisp image. But the challenges in possibly transforming ASDF into a modern build system touch limitations of Common Lisp itself and tell us something about language design in general.

I have essentially two development branches more or less ready for merge in the upcoming ASDF 3.3: the "plan" branch that provides proper phase separation (briefly discussed in my ELS 2017 demo), and the "syntax-control" branch that binding for syntax variables around ASDF evaluation (briefly discussed in my ELS 2014 extended article, section 3.5 "Safety before Ubiquity").

Phase Separation

The first branch solves the problem of phase separation. The branch is called "plan" because I started with the belief that most of the changes would be centered around how ASDF computes its plan. But the changes run deeper than that: 970 lines were added or modified all over the source code, not counting hundreds more were moved around as the code got reorganized. That's double the number of lines of the original ASDF, and it took me several months (part time, off hours) to get just right. Still, it is up-to-date, passes all tests, and works fine for me.

To understand what this is about, consider that a basic design point in ASDF 1.0 to 3.2 is that it first plans your entire build, then it performs the plan. The plan is a list of actions (pair of OPERATION and COMPONENT), obtained by walking the action dependency graph implicitly defined by the COMPONENT-DEPENDS-ON methods. Performing the plan is achieved by calling the PERFORM generic function on each action, which in turn will call INPUT-FILES and OUTPUT-FILES to locate its inputs and outputs.

This plan-then-perform strategy works perfectly fine as long as you don't need ASDF extensions (such as, e.g. cffi-grovel, or f2l). However, if you need extensions, there is a problem: how do you load it? Well, it's written in Lisp, so you could use a Lisp build system to load it, for instance, ASDF! And so people either use load-system (or an older equivalent) from their .asd files, or more declaratively use :defsystem-depends-on in their (defsystem ...) form, which in practice is about the same. Now, since ASDF up until 3.2 has no notion of multiple loading phases, what happens is that a brand new separate plan is computed then performed every time you use this feature. This works well enough in simple cases: some actions may be planned then performed in multiple phases, but performing should be idempotent (or else you deserve to lose), therefore ASDF wastes some time rebuilding a few actions that were planned before an extension was loaded that also depended on them. However, the real problems arise when something causes an extension to be invalidated: then the behavior of the extension may change (even subtly) due to its modified dependency, and the extension and all the systems that directly or indirectly depend on should be invalidated and recomputed. But ASDF up until 3.2 fail to do so, and the resulting build can thus be incorrect.

The bug is quite subtle: to experience it, you must be attempting an incremental build, while meaningful changes were made that affect the behavior of an ASDF extension. This kind of situation is rare enough in the small. And it is easily remedied by manually building from scratch. In the small, you can afford to always build from scratch the few systems that you modify, anyway. But when programming in the large, the bug may become very serious. What is more, it is a hurdle on the road to making a future ASDF a robust system with deterministic builds.

Addressing the issue was not a simple fix, but required deep and subtle changes that introduce notions neglected in the previous simpler build models: having a session that spans multiple plan-then-perform phases and caches the proper information not too little not too much; having a notion that loading a .asd file is itself an action that must be taken into account in the plan; having a notion of dynamically detecting the dependencies of loading a .asd file; being able to check cross-phase dependencies before to keep or invalidate a previously loaded version of a .asd file without causing anything to be loaded in the doing; expanding the state space associated to actions as they are traversed potentially many times while building the now multi-phase dependency graph. And all these things interfere with each other and have to be gotten just right.

Now, while my implemented solution is obviously very specific to ASDF, the issue of properly staging build extensions is a common user need; and addressing the issue would require the introduction of similar notions in any build system. Yet, most build systems, like ASDF up until 3.2, fail to offer proper dependency tracking when extensions change: e.g. with GNU Make you can include the result of a target into the Makefile, but there is no attempt to invalidate targets if recipes have changed or the Makefile or some included file was modified. Those build systems that do implement proper phase separation to track these dependencies are usually language-specific build systems (like ASDF); but most of them (unlike ASDF) only deal with staging macros or extensions inside the language (e.g. Racket), not with building arbitrary code outside the language. An interesting case is Bazel, which does maintain a strict plan-then-perform model yet allows user-provided extensions (e.g. to support Lisp). However, its extensions, written in a safe restricted DSL (that runs into plan phase only, with two subphases, "load" and "analysis") are not themselves subject to extension using the build system (yet the DSL being a universal language, you could implement extensibility the hard way).

Fixing the build model in ASDF 3.3 led to subtle backward-incompatible changes. Libraries available on Quicklisp were inspected, and their authors contacted if they depended on modified functionality or abandoned internals. Those libraries that are still maintained were fixed. Still, I'd just like to see how compatible it is with next month's Quicklisp before I can recommend releasing these changes upon the masses.

Syntax Control

The current ASDF has no notion of syntax, and uses whatever *readtable*, *print-pprint-dispatch*, *read-default-float-format* or many other syntax variables are ambient at the time ASDF is called. This means that if you ever side-effect those variables and/or the tables that underlie the first two, (e.g. to enable fare-quasiquote for the sake of matching with optima or trivia), then call ASDF, the code will be compiled with those modified tables, which will make fasl that are unloadable unless the same side-effects are present. If systems are modified and compiled that do not have explicit dependencies on those side-effects, or worse, that those side-effects depend on (e.g. fare-utils, that fare-quasiquote depends on), then your fasl cache will be polluted and the only way out will be to rm -rf the contaminated parts of the fasl cache and/or to build with :force :all until all parts are overwritten. Which is surprising and painful. In practice, this means that using ASDF is not compatible with making non-additive modifications to the syntax.

Back in the 3.1 days, I wrote a branch whereby each system has its own bindings for the syntax variables, whereas the default tables be read-only (if possible, which it is in many implementations). With that branch, the convention is each system can do modify the syntax in whatever way it wants, and that will only affect that system; however, changes to syntax tables must be done after explicitly creating new tables, and any attempt to side-effect the default global tables will result in an error.

This was the cleanest solution, but alas it is not compatible with a few legacy systems that explicitly depend on modifying the syntax tables (and/or variables?) for the next system to use, as ugly as that is. My initial opinion was that this should be forbidden, and that these legacy systems should be fixed; however, these were legacy systems at a notable Lisp company, with no one willing to fix them; also, I had resigned from maintainership and the new maintainer is more conservative than I am, so in the end the branch was delayed until after said Lisp company would investigate, which never happened, and the branch was never merged.

A simpler and more backward-compatible change to ASDF would have been to have global settings for the variables that are bound around any ASDF session. Then, the convention would be that you are not allowed to use ASDF again to load regular CL systems after you modify these variables in a non-additive way; and the only additive changes you can make are to add new entries to the shared *readtable* and *print-pprint-dispatch* tables that do not conflict with any default entry or earlier entry (and that includes default entries on any implementation that you may want to support, so e.g. no getting #_ or #/ if you want to support CCL). Even additive changes, if made, must somehow not clash with each other, or they become non-additive; but there is no way to automatically check that this is the case and issue a warning. After you make non-additive changes (if you do), then ASDF can't be used anymore to build normal systems that may conflict with those changes, and if they are modified and you call ASDF on a system that depends on them, you lose (or you must first make all those systems immutable).

Note that because ASDF would already break in those cases, most of these constraints de facto exist, are enforced, and are respected by all ASDF users. There remains the question of binding the variables around the build, which allows normal systems to be built even if a user changes the variables, or to not bind them, which puts the onus on most users of keeping these variables bound to reasonable values around calls to ASDF for the benefit of a few users would want their own breaking changes to persist after the build. I believe the first option (bind the variables) is cleaner, though the second (basically, do nothing) is more backward-compatible.

In all cases, you can always make non-additive changes to a readtable (such as enabling fare-quasiquote) by locally binding *readtable* to a different value, e.g. using named-readtables:in-readtable. A local binding won't adversely affect the ASDF build; but unless ASDF is changed to enforce its own bindings, you'll have to make sure to manually undo your local bindings before you call ASDF again.

The problem with not adding any syntax-control to ASDF is that it forces Lispers to always be conservative about modifying the readtable and calling ASDF (or having it called indirectly by any function whatsoever that they call, which they can't always predict). In practice this makes hacking CL code hostile to interactive development with non-additive syntax modification; which defeats in social conventions a technical feature of the language often touted as cool by its zealots. If syntax-control is added to ASDF, then you can freely do your syntax modifications and be confident that building code won't be adversely affected.

The current branch implements the simpler option of binding variables around ASDF sessions, and using a mutable shared readtable that should only be modified additively. It has probably bitrotten, and should be updated or rewritten. The current maintainer, Robert Goldman, should probably opine on which change to adopt with what schedule (3.3.0? 3.2.2? 3.3.1? 3.4.0?) and sign off the API.

Vanquishing Language Limitations

These two modifications are ((now)low)-hanging fruits in making ASDF a more robust build tool, one that supports working with non-trivial extension to the build system or the Lisp syntax. And in both cases, the limit reached by ASDF is ultimately that CL is a hippie language that allows unrestricted global side-effects and disallows disallowing. Therefore extensions necessarily introduce potential conflict with each other that have to be solved in wetware via convention, whereby all users are to be trusted not go wild with side-effects. The system cannot even detect violations and warn users of a potential mistake; users will have to experience subtle or catastrophic failure and figure out what went wrong.

A better language for a build system should be purer: inasmuch as it has "global" side-effects, it should allow to "fork" the "global" state in an efficient incremental way. Or even better, it should make it easy to catch side-effects and write this forking support in userland. At the very least, it would make it possible to detect violations and warn the user. Bazel is an example build system with an extension language that has local side-effects, but globally has pure forked environments. A successor to ASDF could similarly provide a suitably pure dialect of Lisp for extensions.

Happily, adding better syntax control to ASDF suggests an obvious solution: ASDF extensions could be written in an enforceable subset of a suitable extension of Common Lisp. Thus, ASDF extensions, if not random Common Lisp programs, can be made to follow a discipline compatible with a deterministic, reproducible build.

What would be an ideal language in which to write a extensible build system? Well, I tackled that question in another article, the Chapter 9: "Build Systems" of my blog "Ngnghm". That's probably too far from CL to be in the future of ASDF as such, though: the CL extension would be too large to fit ASDF's requirement of minimalism. On the other hand, if such a language and build system is ever written, interest for CL and ASDF might wane in favor of said latter build system.

In any case, in addition to not being a blub language, features that will make for a great programming language for an integrated build system include the following: making it possible to directly express functional reactive programming, determinism as well as system I/O, laziness as well as strictness, reflection to map variables to filesystem and/or version control as well as to stage computations in general including dynamic build plans, hygiene in syntax extension and file reference, modularity in the large as well as in the small, programmable namespace management, the ability to virtualize computations at all sizes and levels of abstractions, to instrument code, etc.

Towards cross-compilation

Now, before we get reproducible builds, we also need to enable cross-compilation for ASDF systems, so the necessarily unrestricted side-effects of compiling Common Lisp code cannot interfere with the rest of the build. Cross-compilation also allows building on a different platform, which would be important to properly support MOCL, but would probably also mesh well with support for building software in arbitrary other languages.

Importantly, instead of the (perform operation component) protocol that specifies how to build software in the current image, a (perform-form target operation component) protocol (or maybe one where the target information has been made part of the operation object) would return forms specifying how to build software, which could then happen in separate Lisp or non-Lisp process, on the same machine or on another worker of a distributed build farm.

Note however, that one essential constraint of ASDF is that it should keep working in-image in the small and not depend on external processes or additional libraries. Any serious effort towards a "deterministic build" should therefore remain an extension indeed (though one users would load early).

Still, if this extension is to remain compatible with ASDF and its .asd files, providing a backward-compatible path forward, then modifications and cleanups may have to be done to ASDF itself so it behaves well. Even keeping that hypothetical deterministic build separate, I expect non-trivial changes to the ASDF API to enable it, such as the perform-form protocol mentioned above. But backward-compatibility and smooth transition paths have always been the name of the game for ASDF; they are what make possible an ecosystem with thousands of packages.

There is a precedent to an ASDF extension leading to (most positive) changes in ASDF: POIU, the "Parallel Operators on Independent Units", Andreas Fuchs' extension to compile files in forks (but still load them in-image). Making sure that POIU can be expressed as an extension of ASDF without redefining or breaking the provided abstractions, was instrumental in the evolution of ASDF: it led to many cleanups in ASDF 2, it inspired several of the breakthroughs that informed what became ASDF 3, and it kept influencing ASDF 3.3.

Thus, even though ASDF will stay forever an in-image build system, and even though a deterministic build extension (let's call it FDSA, the Federated Deterministic System Assembler) may ultimately remain as little used as POIU (i.e. because it lacks sufficient benefits to justify the transition costs), I expect the design of the base ASDF to be deeply influenced by the development of such a tool (if it happens).

Looking for new developers

Robert Goldman and I are not getting younger, not getting more interested in ASDF, and we're not getting paid to hack on it. We are looking for young Common Lisp hackers to join us as developers, and maybe some day become maintainers, while we're still there to guide them through the code base. Even without the ambition (and resources) to actually work towards a hypothetical FDSA, our TODO file is full of items of all sizes and difficulties that could use some love. So, whatever your level of proficiency, if you feel like hacking on a build system both quite practical and full of potentiality, there are plenty of opportunities for you to work on ASDF (or a successor?) and do great, impactful work.

Mar. 25th, 2017

eyes black and white

Why I haven't jumped ship from Common Lisp to Racket (just yet)

Matthias Felleisen jested "Why are you still using CL when Scrbl/Racket is so much better :-)" ? My response was as follows:

Dear Matthias,

you are right Racket is so much better in so many dimensions. I use Lisp because I just can't bear programming in a language without proper syntactic abstraction, and that is a dimension where Racket is far ahead of Common Lisp (CL), which sadly also remains far ahead of the rest of the competition. Racket also has managed to grow a remarkable way to mix typed and untyped program fragments, which sets it ahead of most. But I am under the impression that there are still many dimensions in which Racket lags behind other languages in general and Common Lisp (CL) in particular.

  1. The Common Lisp Object System (CLOS) has multiple-inheritance, multi-methods, method combinations, introspection and extensibility via the MOP, generic functions that work on builtin classes, support for dynamic instance class change (change-class, update-instance-for-changed-class) and class redefinition (defclass, update-instance-for-redefined-class), a semi-decent story for combining parametric polymorphism and ad hoc polymorphism (my own lisp-interface-library), etc. Racket seems to still be playing catch-up with respect to ad hoc polymorphism, and is lacking a set of good data structure libraries that take advantage of both functional and object-oriented programming (a good target is Scala's scalaz or its rival cats).
  2. While the ubiquity of global side-effects in CL is very bad, the facts that all objects that matter are addressable by a path from some global namespace and that live redefinition is actively supported makes debugging and maintaining long-lived systems with in-image persistent data more doable (see again CLOS's update-instance-for-redefined-class). This is in contrast with the Racket IDE which (at least by default) drops live data when you recompile the code, which is fine for student exercises, but probably wrong for live systems. CL is one of the few languages that takes long-term data seriously (though not quite as seriously as Erlang).
  3. Libraries. CL seems to have much more libraries than Racket, and though the quality varies, these libraries seem to often have more feature coverage and more focus on production quality. From a cursory look, Racket libraries seem to be more ambitious in their concepts, but to often stop at "good enough for demo" in their practice. An effort on curating libraries, homogenizing namespaces, etc., could also help Racket (I consider CL rather bad in this respect, yet Racket seems worse). My recent experience with acmart, my first maintained Racket library, makes me think that writing libraries is even higher overhead in Racket than in CL, which is already mediocre.
  4. Speedwise, SBCL still produces code that runs noticeably faster than Racket (as long as you don't need full delimited control, which would requires a much slower CL-to-CL compiler like hu.dwim.delico). This difference may be reduced (or even reversed) as Racket adopts the notoriously fast Chez Scheme as a backend (or then again not). Actually, the announcement of the new Racket backend really makes me eager to jump ship.
  5. As for startup latency, Common Lisp is also pretty good with its saved images (they start in tens of milliseconds on my laptop), making it practical to write trivial utilities for interactive use from the shell command-line with an "instantaneous" feel. Racket takes hundreds of milliseconds at startup which puts it (barely) in the "noticeable delay" category (though nowhere near as bad as anything JVM-based).

All these reasons, in addition to inertia (and a non-negligible code-base and mind-base), have made me stick to CL — for now. I think Racket is the future of Lisp (at least for me), I just haven't jumped ship right yet. If and when I do, I'll probably be working on some of these issues.

PS (still 2017-03): Here are ways that Racket is indeed vastly superior to CL, that make me believe it's the future of Lisp:

  • First and foremost, Racket keeps evolving, and not just "above" the base language, but importantly below. This alone makes it vastly superior to CL (that has evolved tremendously "above" its base abstractions, but hasn't evolved "below", except for FFI purpose, in the last 20 years), which itself remains superior to most languages (that tend to not evolve much "above", and not at all "below" their base abstractions).
  • Racket is by far ahead of the pack in terms of Syntactic abstraction. It is the best language in which to define other languages and experiment with them, bar none.
  • Racket has a decent module system, including build and phase separation (even separate phases for testing, cross-compilation or whatever you want), and symbol selection and renaming.
  • Racket has typed modules, and a good interface between typed and untyped modules. While types in Racket do not compete with those of say Haskell, just yet, they are still evolving, fast, and that contract interface between typed and untyped is far ahead of anything the competition has.
  • Racket has lots of great teaching material.
  • Racket has a one-stop-shop for documentation, though it isn't always easy to navigate and often lack examples. That still puts it far ahead of CL and a lot of languages.
  • Racket provides purity by default, with a decent set of pure as well as stateful data structures.
  • Racket has many primitives for concurrency, virtualization, sandboxing.
  • Racket has standard primitives for laziness, pattern-matching, etc.
  • Racket has a standard, portable, gui.
  • Racket has a lively, healthy, user and developer community.

I probably forget more.

PS (2017-08-23): A few months onward, I've mostly jumped ship from Common Lisp... but not to Racket, and instead to Gerbil Scheme.

As ASDF 3.3.0 gets released (imminently), I don't intend to code much more in Common Lisp, except to minimally maintain my existing code base until it gets replaced by Gerbil programs (if ever). (There's also a syntax-control branch of ASDF I'd like to update and merge someday, but it's been sitting for 3 years already and can wait longer.)

What is Gerbil? Gerbil Scheme started as an actor system that vyzo wrote over 10 years ago at MIT, that once ran on top of PLT Scheme. vyzo was dissatisfied with some aspects of PLT Scheme (now Racket), notably regarding performance for low-level system code and concurrency (at the time at least), but loved the module system (for good reasons), so when he eventually jumped ship to Gambit (that had great performance and was good for system programming, with its C backend), he of course first reimplemented the PLT module system on top of Gambit, or at least the essential features of it. (The two module systems were never fully compatible, and have diverged since, but they remain conceptually close, and I suppose if and when the need arise, Gerbil could be made to converge towards PLT in terms of features and/or semantics.)

Why did I choose Gerbil instead of Racket, like I intended?

  1. A big reason why I did is that I have a great rapport with the author, vyzo, a like mind whom I befriended back in those days. A lot of our concerns and sense of aesthetics are very much in synch, and that matters both for what there is and what may come to be. Conversely, the bigger features that Racket has that Gerbil is lacking (e.g. a GUI) are those that matter less to me at this point.
  2. What there is, the module system, the actor system, the object system, the libraries, is far from as complete as I could wish, but it is all in good taste, and with the promise that they can be molded to what we both want in the future.
  3. While the code base is smaller than in PLT, it is also more consistent and with a coherent sense of aesthetics, being implemented by one man (so far). It also happens to cover the kind of domains for which I'm most in need of libraries, and it also has a bias towards industrial applicability that you can't expect from PLT and its legion of academics and interns (see my discussion of PLT above).
  4. Sitting on top of Gambit does not just mean relatively efficient code (as far as Scheme is concerned), but it also means enjoying the portability of its GVM, and some of these properties are especially interesting to me: its observability.

Observability is the property (whose name I coined in my PhD thesis) whereby you can interrupt the execution of the program and observe it at the level of abstraction of your language (in this case, the GVM). This already allows Gambit to migrate processes from one machine to the other, even though the machines may be using completely different backends (C on ia32, C on AA64, JS, PHP, Java, etc.) For my thesis, I want to generalize observability from the GVM to arbitrary virtual machines written on top of it for arbitrary languages, with plenty of cool implications (including e.g. Erlang-style robustness; see said thesis). Working on the GVM will save me having to care about plenty of CPU- or VM- dependent backends that I would have to deal with if I wanted to write a compiler from scratch or reuse an existing one. I notably tried to read the source of Chez Scheme, that PLT Racket is adopting as a new backend (moving from its own horribly complex yet ultimately slow C codebase); but it is largely inscrutable, and with its tens of backends would require much more work before a prototype is achieved.

I therefore have a lot of personal reasons to adopt Gerbil. I understand that Gerbil in its current state, is no rival to either Racket or Common Lisp (or Haskell or OCaml, or even blub languages), for most people in most situations. Yet there are probably other people for whom it is a better fit, as it is for me; and I invite these people to come join forces and enjoy writing in Gerbil. It's still barebones in many ways, yet already quite a pleasure to work with, at least for me.

Apr. 13th, 2015

eyes black and white

Common Lisp as a Scripting Language, 2015 edition

The first computer I used had about 2KB of RAM. The other day, I compiled a 2KB Common Lisp script into a 16MB executable to get its startup (and total execution) time down from 2s to subjectively instantaneous — and that didn't bother me the least, for my current computer has 8GB of working memory and over 100GB of persistent memory. But it did bother me that it didn't bother me, for 16MB was also the memory on the first computer in which I felt I wasn't RAM-starved: I could run an X server, an Emacs editor and a shell terminal simultaneously without swapping! Now an entire comfortable software development universe could be casually wasted over a stupid optimization — that I have to care about because software systems still suck. And to imagine that before sentientkind reaches its malthusian future, code bumming will have become a popular activity again...

Read more...Collapse )
Tags: , ,

Jan. 26th, 2015

eyes black and white

Programming on valium

Google AutoValue: what in Lisp would take a few hundred lines max in Java is over 10000 lines not counting many, many libraries. Just WOW!

Thus, Java has macros too, it's just that they are 10 to 100 times more programmer-intensive than Lisp macros. I feel like I'm back in the dark ages.

Even for "normal" programming without new macros, a program I wrote both in Java and in Clojure was about 4 times bigger in Java (and that's despite using AutoValue). I also took ten times longer to write and debug the Java program (despite having written the Clojure program before, so no hard thinking whatsoever needed), with a frustrating edit-compile-run cycle many orders of magnitude slower. Part of the difference is my being much more experienced in Lisp than in Java, but even accounting for that, Java is slower to develop with.

The Java code is also much harder to read, because you have to wade through a lot of bureaucracy — each line does less, and so may be slightly faster to read, yet takes no less time to write, debug, modify, test, because of all the details that need be just right. Yet you must read and write more Java, and it's therefore harder to get the big picture, because there is less information available by screenful (or mindful) and much more noise. The limitation on available information is not just per screenful but also per file, and you find you have to jump constantly through so many files in addition to classes within a file; this is a lot of pain, even after accounting for the programming environments that alleviate the pain somewhat. Thus the very slight micro-level advantage of Java in readability per line is actually a big macro-level handicap in overall program readability.

Lack of both type aliasing and retroactive implementation of interfaces also means that type abstraction, while possible with generics and interfaces (themselves very verbose, though no more than the rest of the language), will require explicit wrappers with an immense amount of boilerplate, if not reimplementation. This strongly encourages programmers to eschew type abstraction, leading to more code explosion and much decreased maintainability.

Also, because function definition is so syntactically cumbersome in Java, programs tend to rely instead on big functions with a lot of side-effects, which yields spaghetti code that is very hard to read, understand, debug, test or modify — as compared to writing small conceptually simple functions that you compose into larger ones, as you would in a functional programming language.

The lack of tuple types is also a big factor against functional programming in Java: you'll need to declare a lot of extra classes or interfaces as bureaucracy just because you want a couple functions to pass and return a few values together (some people instead use side-effects for that — yuck). You could use a generic pair, but that leads to horrible types with many<layers<of<angle,brackets>>> which is very hard to read or write, and doesn't scale to larger tuples; of course, the need to declare types everywhere instead of having them inferred by the compiler means that even with tuples of arbitrary size, you'll need to spell out long unwieldy types more often that you'd like. Ignorants complain about the number of parentheses in Lisp, but just because of the size increase, there are a lot more parentheses in my Java program than in my Lisp program, and if we are to include all curly, angle and square brackets, that will be another many-fold increase.

Java 8 makes the syntax for functional programs slightly easier, and AutoValue makes it slightly less painful to bundle values together, but even with these improvements, Java remains extremely verbose.

The standard library is horrible, with side-effects everywhere, and a relatively poor set of primitives. This leads to the ugly habit of having to resort to "friend" classes with lots of static methods, which leads to a very different style of invocation and forces more bureaucratic wrapping to give things a unified interface. The lack of either CLOS-style generic functions or Clojure-type protocols mean you can't add decent interfaces to existing data-structures after the fact, making inter-operation with other people's code harder, whether you decide to adopt your own data-structure library (e.g. a pure functional one) or just try to extend existing ones. Lack of multiple inheritance also means you have to repetitively repeat a lot of boilerplate that could have been shared with a common mixin (aka trait class).

All in all, Java is just as heavily bureaucratic as I expected. It was developed by bureaucrats for bureaucrats, mediocre people who think they are productive when they have written a lot of code for a small result, when better tools allow better people to write a small amount of code for a big result. By analogy with programming languages said to be a variant of something "on steroids", I'd say that Java is a semi-decent programming language on valium. As to what template is sedated, I'd say a mutt of Pascal and Smalltalk. But at least it's semi-decent, and you can see that a lot intelligent people who understand programming language design and implementation have worked on it and tried to improve upon the joke of a language that Java was initially. Despite the bureaucracy, the sheer amount of talent thrown at the language has resulted in something that manages to not be bad.

This hard work by clever people makes Java so much better than Python, an attractive nuisance with lots of cool features that lead you into a death by a thousand cuts of small bad decisions that amplify each other. Superficially, Python looks like a crippled Lisp without macros and with a nice toy object system — but despite a lot of very cool features and a syntax that you can tell was spent a lot of time on (yet still ended up with many bad choices), Python was obviously written by someone who doesn't have a remote clue about semantics, resulting in a lot of pitfalls for programmers to avoid (there again with side-effects galore), and an intrinsically slow implementation that requires a lot of compile-time cleverness and runtime bureaucracy to improve upon.

In conclusion, I'd say that Java is a uniformly mediocre language that will drag you down with bureaucracy, which makes it rank well above a lot of overall bad languages like Python — but that's a very low bar.

Does this rampant mediocrity affect all industries? I'm convinced it does — it's not like these industries are fielded by better people than the software industry. Therefore it's an ever renewed wonder to me to see that the world keeps turning, that civilization endures. "A common man marvels at uncommon things; a wise man marvels at the commonplace." — Confucius

May. 13th, 2014

eyes black and white

The Great ASDF Bug Hunt

With the release of ASDF 3.1.2 this May 2013, I am now officially retiring not just from ASDF maintenance (Robert Goldman has been maintainer since ASDF 3.0.2 in July 2013), but also from active ASDF development. (NB: ASDF is the de facto standard Common Lisp build system, that I took over in November 2009.) I'm still willing to give information on where the code is coming from and advice where it might go. I'm also still willing to fix any glaring bug that I may have introduced, especially so in UIOP (indeed I just committed a few simple fixes (for Genera of all platforms!)). But I won't be writing new features anymore. (However, you will hopefully soon see a bunch of commits with my name on them, of code I have already written that addresses the issue of syntax modularity; the code was completed and is committed in a branch, but is not yet merged into the master branch, pending tests and approval by the new maintainer).

Before I left, though, I wanted to leave the code base in order, so I made sure there are no open bugs beside wishlist items, I dumped all my ideas about what more could be done in the TODO file, and I did a video walkthrough of the more subtle parts of the code. I also wrote a 26-page retrospective article on my involvement with ASDF, a reduced version of which I submitted to ELS 2014. There, I gave a talk on Why Lisp is Now an Acceptable Scripting Language.

The talk I would have liked to give instead (and probably should have, since I felt like preaching to the converted) was about the great ASDF bug hunt, which corresponds to the last appendix of my paper (not in the reduced version), a traverse across the build. It would have been a classic monster hunt story:

  • The setting is a seemingly peaceful and orderly little village on the (programming) frontier. It is a familiar old place, not a big one, but a good, comfortable one. Though it is not perfect, and monsters roam at night, it looks fundamentally healthy. (That would be ASDF, in daily use by tens or even hundreds of Common Lisp programmers, despite bugs that catch the unwary.)
  • The protagonist is the (bug) hunter. (I should tell the story in the first person, but for now, third person will do.) In the beginning he is young and naïve — but capable (of improvement). When he comes into town, our protagonist kicks out a few baddies that were victimizing the population; soon enough he replaces the ailing sheriff. (That would be me becoming ASDF maintainer in 2009 when Gary King steps down, after fixing some pathname related bugs.)
  • Under the new sheriff, monsters big and small are hunted down. The inhabitants are not afraid anymore, though some of them remain grumpy. (That's me fixing bugs with the help of many other programmers, while the unwary remain blissfully ignorant of having been saved.) The protagonist builds fortifications, and finds he has to extend the city limits to make it easier to defend, adding new buildings along the way. (That would be improving the ASDF design to be more robust, and adding features.) Often he has to hunt monsters that he himself let in, sometimes after they hurt citizens. (That's when I introduce bugs myself, and sometimes fail to fix them before release.) The protagonist feels guilty about it and learns to be a better sheriff. (That's when I get to deeply respect the regression test suite.) But by and large, his endeavor is a success. At long last, he thinks the place is now safe, and that he knows everything about the town and its now former monsters. — My, how wrong he is! (That's me at the time of ASDF 2.26)
  • Now, a monster has been terrorizing innocent citizens for years. No one has seen the monster, but the way he picks his victims and what he does to them is characteristic. (That's the old bug whereby changes in dependencies are not propagated correctly across modules.) The protagonist's best buddy has found a good way to protect homes against the monster, but it still roams in the streets at night. (That's when Robert Goldman fixes the bug and gets dependency changes to trigger rebuild across modules within a system, but dependency changes still fail to trigger rebuild across systems.) Our sheriff, having finally vanquished all other monsters, and having no other foe left in town, sets off to catch this one last monster. And so, he has to enter hitherto unexplored caverns deep below the village, a place abandoned long ago, where the creature lurks. (That would be the ASDF traverse algorithm.) And of course that's when the story turns ugly.
  • Our protagonist thinks the monster will be an easy catch, what with all his experience and technology. But it's actually a long, hard fight to the death. It's the toughest enemy ever. (And that's the story of writing ASDF 2.27, that eventually becomes ASDF 3, after months of struggle.)
  • Along the way, many times, the protagonist thinks he has almost won, but not at all; many times, he thinks he is lost, but he keeps at it. (More code was written in the year or so since ASDF 2.26 was released than in the entire decade before.) Quickly though, he realizes that the monster he was chasing is but a henchman of a bigger monster that has been ruling over the village all along. The apparent orderliness of the village was but a lie, all that he thought he knew was fake! (That's the fundamental algorithm behind ASDF having deep conceptual bugs.) Happily, a mysterious wise man left him cryptic instructions on how to defeat the monster before he even became a sheriff, though he only understands them when comes the confrontation. (That would be Andreas Fuchs and his POIU, the maintenance of which I had also inherited, and that brought all the essential insights just at the right moment.)
  • In the end, the sheriff vanquishes his foes and defeats the great monster for good, but not until he has learned to respect his enemy. And his real prize is in the lessons he learned and the final illumination he reaches. (And I hope you too can enjoy this illumination.)

The final illumination is that inasmuch as software is "invented", it isn't created ex nihilo so much as discovered: Daniel Barlow, who wrote the initial version ASDF, obviously didn't grok what he was doing, and can't be said to have created the ASDF algorithm as it now stands, since what he wrote had such deep conceptual flaws; instead, he was experimenting wildly, and his many successes overshadow and more than redeem his many failures. I, who wrote the correct algorithm, which required a complete deconstruction of what was done and reconstruction of what should have been done instead, cannot be said to have created it either, since in a strong sense I "only" debugged Daniel's implicit specification. And so, the code evolved, and as a result, an interesting algorithm was discovered. But no one created it.

An opposite take on the same insight, if you know Non-Standard Analysis, is that Daniel did invent the algorithm indeed, but specified it with a non-standard formula: his formula is simple (a few hundreds of lines of code), and captures the desired behaviour in simple enough cases with standard parameters (using SBCL on Unix, without non-trivial dependency propagation during an incremental build) but fails in non-standard cases (using other implementations, or dealing with timestamp propagation). My formula specifies the desired behaviour in all cases with all the details correct, and is much more elaborate (a few thousands of lines of code), but is ultimately only a Standardization of Daniel's formula — a formal elaboration without any of Daniel's non-standard shortcuts, that runs correctly in all cases and not just simple ones, but in the end, a formula that doesn't contain information not already present in Daniel's version, only making it explicit rather than implicit.

The two interpretations together suggest the following strategy for future software development: There is a lot of untapped potential in doing more, more daring, experimentations, like Daniel Barlow did, to more quickly and more cheaply discover new interesting designs; and conceivably, a less constrained non-standard representations could allow for more creativity. But this potential will remain unrealized unless Standardization is automated, i.e. the automatic specification of a "standard" formal program from a "non-standard" informal one; a more formal standard representation is necessary for robustly running the program. This process could be viewed as automated debugging: as the replacement of informal variables by sets of properly quantified formal variables; as an orthogonal projection onto the hyperplane of typed programs; as search of a solution to a higher-order constraint problem; as program induction or machine learning; etc. In other word, as good old-fashioned or newfangled AI. This process itself is probably hard to formalize; but maybe it can be bootstrapped by starting from a non-standard informal specification and formalizing that.

Dec. 11th, 2012

eyes black and white

2012-12-12 Boston Lisp Meeting: Marc Battyani, Alex Plotnick

When? TOMORROW, Wednesday December 12th 2012 at 6pm.

Where? MIT 32-D463 (Star conference room at the Stata Center).

Who Speaks? Marc Battyani will showcase his web framework written in Common Lisp. http://www.fractalconcept.com/

Who Also Speaks? Alex Plotnick will show how to roll your own frontend to the Common Lisp REPL.

Many thanks to Prof. Gerald J. Sussman and MIT for providing the room.

I apologize for a last minute notice.

Let's meet for the last time this year, and see how we can improve meetings next year.

Nov. 27th, 2012

eyes black and white

ASDF 2.26 in Quicklisp

I am pleased to announce that Zach Beane (Xach) recently updated Quicklisp to use ASDF 2.26 (from October 2012).

At Xach's suggestion, I will describe the many changes made since the previous ASDF 2.014.6 (of April 2011) used by Quicklisp. Note however that since Quicklisp first tries to load an implementation-provided ASDF and only loads its own if none was found that is more recent, the improvement is only massive on those old implementations that haven't upgraded ASDF in a while. If you are using a recent version of a maintained implementation, a lot of these features were already made available to you while using Quicklisp.

Major Features

  • The new inherited :around-compile attribute enables you to specify a function to be evaluated around the compilation of Lisp source (2.019). This way, you may notably bind special variables including the *package*, proclaim optimization settings, rename packages with package-renaming, enable λ instead of LAMBDA with lambda-reader, more generally tweak the reader with named-readtables or replace it completely with reader-interception, muffle warnings with asdf-condition-control, etc.
  • The new :compile-check argument to the function called by the :around-compile hook, allows you to invalidate compilation of a file when it fails some invariant of yours (2.23). This is notably used by asdf-finalizers to ensure all finalizers were included in the fasl.
  • The new inherited :encoding attribute lets you specify the character encoding of your Lisp files (2.21). Only :utf-8 is supported, and is recommended; as well as the default :default for backwards compatibility (i.e. let the implementation pick some implementation-dependent, environment-variable-dependent, configuration-dependent encoding). If your system :defsystem-depends-on (:asdf-encodings) you can specify whatever encodings your implementation supports, or let the encoding be autodetected, Emacs-style.

Minor Features

  • A :force-not (sys1 sys2 ...) feature was added to complement the recently fixed :force (sys3 sys4 ...) feature. Based on it, a require-system function was implemented that avoids trying to reload existing systems (2.21). On implementations that support it, the require hook has been changed to use that instead of load-system (2.22).
  • Classes asdf:cl-source-file.cl and asdf:cl-source-file.lsp are now provided for people using these common alternate file types (2.015).
  • load-system now uses asdf:*load-system-operation* instead of directly using 'asdf:load-op so you may change the default, which is nice for users of asdf-bundle and/or poiu (2.24).

Semantic Improvements

  • The source registry now eagerly populates a database of .asd files rather than querying the file system at each search (2.015). You may flush the cache with (asdf:initialize-source-registry) or more generally flush all configuration with (asdf:clear-configuration) (from 2.007) — we particularly recommend you do the latter before you dump an image.
  • :defsystem-depends-on can now be used to define classes for the system and its modules and components, with keywords being accepted to denote same-named classes from package ASDF (2.016).
  • Better integration with Quicklisp. More generally, the find-system protocol was both extended and made more robust (2.015, 2.016), allowing for systems that are not backed by files and eliminating some infinite loops.
  • When a system is not found, we offer a restart to reload after re-initializing your source-registry (2.019).
  • Self-Upgrade: ASDF is more robust when it upgrades itself (2.015 to 2.019). You must still, more than ever, upgrade ASDF as the first thing before you load any other system, if it is upgraded at all. See manual for details on self-upgrade. 2.27 will automate it some more, but that won't be effective until all implementations have upgraded to 2.27.
  • Internal APIs: notable refactoring and simplification of many internals, making them easier to extend and fixing many bugs along the way (2.015 to 2.24). The guts of ASDF have been slowly but completely rewritten since ASDF 1.
  • More robustness. For instance, survive invalid version strings (2.015), better support for pathnames in general and logical pathnames in particular (2.015 to 2.23), proper configuration directories on Windows (2.016 to 2.26), fix many bugs including very old ones from ASDF 1 days, and add more tests. Example old bugs include surviving incompatible redefinitions of an .asd file (2.019), surviving clock skews (2.018), having :default-component-class do something useful (2.22), fixing :weakly-depends-on (2.20), etc.
  • Some updates to the documentation.

Portability

There have been plenty of implementation-specific fixes and improvements, for each and every single platform. They are too numerous to list; some are minor, some are major, all are meaningful. Note the new support for two implementations, MKCL and XCL. Also note that Cormanlisp, GCL, Genera and RMCL are dead: though support for every one of them has been significantly improved since 2.014.6, I am now unable to test any of them. The actively supported implementations are as follows: ABCL, Allegro, Clozure CL, CMUCL, ECL, GNU CLISP, LispWorks, SBCL, Scieneer CL.

Not Improved

If you are looking for radical improvement on to how to build Common Lisp code, ASDF is the wrong place to look. For more declarative dependency declarations, reproducible builds, parallel or distributed builds, try XCVB. For integration of dependency-management with the package system, try faslpath or the upcoming quick-build (ask drewc or nyef). For a Lisp that has a sensible module system and proper evaluation staging, try Racket (no, it won't run CL code, but you could make it if you really wanted).

Libraries

Related to ASDF, but not part of ASDF itself, here are some improved libraries.

  • asdf-utils: ASDF includes a lot of utilities, notably to portably manage pathnames; these utilities are not exported from package ASDF anymore (2.25). If you're writing an ASDF extension, you might want to use them using the asdf:: prefix. But in general, we now recommend you should use the symbols exported by the new package asdf-utils.
  • inferior-shell: We strongly disrecommend the use of asdf:run-shell-command: it's a non-portable crock copied over from mk-defsystem, that does the wrong thing on many levels. Instead you should use inferior-shell:run or the underlying xcvb-driver:run-program/.
  • asdf-condition-control: Also using xcvb-driver underneath, you may want to use asdf-condition-control to control which warnings should be ignored during the build, and which should trigger conspicuous breakage.
  • asdf-encodings: If you want to use latin1, koi8-r, euc-jp, or some other national encoding in your Lisp source files, you can, with asdf-encodings. We still recommend you use utf-8 everywhere.
  • asdf-bundle: On supported implementations you can now want to deliver your code as a single fasl file, or one fasl file per system, using asdf-bundle, which was evolved from the now obsolete asdf-ecl.lisp. All active implementations are now supported except ABCL which has its own abcl-jar contrib. [NB: asdf-bundle may be merged into asdf in the near future.]
  • asdf-finalizers: ever needed to evaluate toplevel code from a deftype or from deep within a lexical macro expander? Now you can do it correctly with asdf-finalizers and its eval-at-toplevel. Example use with a monomorphic list-of.
  • poiu: compile in parallel, load serially in the current image; poiu can boost the compilation speed of your large systems. It has been updated to work well with the latest ASDF, and several bugs have been fixed.
  • cl-launch: cl-launch enables you to invoke your Lisp code from the shell in a uniform way over all Lisp implementations. On supported implementations, you can dump precompiled images or even executable images. It was updated to work with ASDF 2.

Better integration with SLIME

Also related to ASDF, I recently rewrote SLIME's swank-asdf extension. If you grab a recent SLIME (late November 2012), it will do the Right Thing™ when you compile a .asd file. I recommend you add the following incantation to your ~/.swank.lisp, so it will also compile asdf-controlled Lisp files the same way as ASDF:

(in-package :swank)
(pushnew 'try-compile-file-with-asdf *compile-file-for-emacs-hook*)
Using this hook, SLIME will heed your output-translations, which avoids pollution of current directory with fasls; but more importantly, it will use the same :encoding as ASDF and its :around-compile hooks, which are essential to the proper compilation of components that depend on them. While I'm at it, I recommend you also use these in your ~/.swank.lisp, so you always use the latest installed ASDF:
(require "asdf")
(asdf:load-system :asdf)
Indeed, the only proper time to upgrade ASDF is early during start up, so if you have a version that's later than what your implementation provides, the right time to upgrade ASDF is just after loading it; if there is no installed ASDF source code from which to upgrade, the load-system won't do anything bad (indeed, it won't do anything at all). If you want to use an old or unmaintained implementation that doesn't provide ASDF 2, you'll have to replace the above require by more complex code that you may copy and adapt from slime/contrib/swank-asdf.lisp.

If you, like me, believe slime-asdf should do all these things by default, please gently tell your SLIME hackers.

Nov. 11th, 2012

eyes black and white

Boston Lisp Meeting: Tuesday 2012-11-20 Jianshi Huang (黄 澗石) on Making CL more popular for startups

Boston Lisp Meeting:
Tuesday 2012-11-20
Jianshi Huang (黄 澗石) on Making Common Lisp more popular for startups — the lean approach

A Boston Lisp Meeting will take place on Tuesday, November 20th 2012 at 1800 at Chatham Café at Google, 3 Cambrige Center. Jianshi Huang (黄 澗石) will speak about Making CL more popular for startups — the lean approach.

Additionally, we will have two Lightning Talks. Marc Battyani and François-René Rideau will tell their experiences of last month's ILC 2012. One slot open.

1 Jianshi Huang (黄 澗石) on Making CL more popular for startups — the lean approach

Rapid prototyping becomes essential when choosing a tech stack in startups. Jianshi will share his experience of using Common Lisp in the 7 months of his startup projects and 4 years of work in MSI, and will discuss how to make Common Lisp more popular for startups. Jianshi will also share the feedbacks he gathered from the Chinese Lisp community and Lispers he met in the west coast.

Jianshi has been a Common Lisp programmer for 6 years, with a 4-year work experience at Mathematical Systems Inc. in Japan http://www.msi.co.jp with a team of excellent CL programmers. At MSI, we use CL almost for everything, from data mining to high-speed network monitoring, from graph visualization to programming language implementations. Jianshi joined a startup as a tech co-founder this April. The startup went through two incubators, Startup Chile and TechStars in Seattle.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

Marc Battyani and François-René Rideau will tell what they saw or failed to see at the International Lisp Conference 2012 last October in Kyoto.

There is still one slot open for the next meeting. Step up and come talk about your pet project! Contact me at [email protected].

3 Time and Location

The Lisp Meeting will take place on Tuesday, November 20th 2012 at 1800 (6pm) at Chatham Café at Google, 3 Cambrige Center.

REGISTRATION REQUIRED

We are trying a new location this month, at the Google offices right outside Kendall Square Station. The downside is that Google requires attendees to register at least one day before. Please send an email with your name or usual pseudonym to [email protected] (we don't send acknowledgements unless requested). It is OK to register and not come, but not OK to come without being registered, so if you think you might come, please register.

Chatham Café is a Google conference room on the fourth floor of the 3 Cambridge Center, Cambridge MA 02139, right next to Kendall Square Station. http://wikimapia.org/3930737/3-Cambridge-Center

3 Cambridge Center (3CC) is the building on the North side of Main street, immediately West to the main T exit (Red Line outbound). The entrance to 3CC is on the side of the building opposite the T exit. A Googler will be waiting for you downstairs between 5:30pm and 6pm. If you arrive late, send me a text message at 617 575 9012 or [email protected] so someone can usher you in.

Google map: http://maps.google.com/maps?q=3+Cambridge+Center,+Cambridge,+MA

Many thanks to Google for welcoming us.

4 Dinner

We unhappily couldn't secure a sponsor to offer us dinner, but we're big boys and can provide for ourselves. After the conference, we will head down to the Cambridge Brewing Company and will take it from there.

5 More about the Meeting

We are resuming the Boston Lisp Meeting after a hyatus of over a year and a half.

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://common-lisp.net/project/boston-lisp/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to [email protected].

Oct. 31st, 2012

eyes black and white

Consolidating Common Lisp Libraries

I'm starting a movement to consolidate Common Lisp libraries. To participate, here's the ten point program summary:

  1. Pick your favorite problem domain
  2. Identify all libraries that address it
  3. Work with various library authors
  4. Pick the most promising library
  5. Declare it THE library
  6. Add missing features present in other libraries
  7. Declare other libraries obsolete
  8. Rename package to short name identifying domain
  9. Invite all users to migrate to new library
  10. Profit

Most of it is pretty straightforward, but below are some details.

Read more...Collapse )

Sep. 23rd, 2012

eyes black and white

Boston Lisp Meeting: Thursday 2012-10-04 François-René Rideau on the Lisp Interface Library

Boston Lisp Meeting:
Thursday 2012-10-04
François-René Rideau on LIL: CLOS reaches higher order, sheds identity and has a transformative experience

http://fare.livejournal.com/tag/boston-lisp-meeting

A Boston Lisp Meeting will take place on Thursday, October 4th 2012 at 1800 at MIT 32-D463 (Star conference room). François-René Rideau will speak about LIL: CLOS reaches higher order, sheds identity and has a transformative experience.

Additionally, we will have two Lightning Talks. Speakers welcome.

1 François-René Rideau on LIL: CLOS reaches higher order, sheds identity and has a transformative experience

François-René Rideau will present his work on the Lisp Interface Library, that uses Interface-Passing Style to provide parametric polymorphism to Common Lisp in a way that integrates with the ad-hoc polymorphism of CLOS. LIL implements both pure and stateful data structures, and provides automatic transformers from one kind of interface to the other, and from Interface-Passing Style to traditional object-oriented style.

François-René Rideau is a cybernetician who currently works at Google on Common Lisp infrastructure for an airline reservation system.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Thursday, October 4th 2012 at 1800 (6pm) at MIT 32-D463 (Star conference room).

The Star conference room, MIT 32-D463 on the fourth floor of the Ray and Maria Stata Center, 32 Vassar St, Cambridge MA 02139. NB: there are two sets of elevators, you want to use those on the south-western side, further away from Main St.

MIT map: http://whereis.mit.edu/?go=32

Google map: http://maps.google.com/maps?q=Stata+Center,+Vassar+Street,+Cambridge,+MA

Many thanks go to Professor Gerald J. Sussman for arranging for the room, and to MIT for welcoming us.

4 Dinner

We don't have any sponsors to offer us dinner, but we're big boys and can provide for ourselves. After the conference, we will head down to Mary Chung's on Central Square.

5 More about the Meeting

We are resuming the Boston Lisp Meeting after a hyatus of over a year and a half.

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://common-lisp.net/project/boston-lisp/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Aug. 17th, 2012

eyes black and white

Boston Lisp Meeting: Thursday 2012-08-30 Eli Barzilay on Hygienic Macros for Beginners & Power Users

A Boston Lisp Meeting will take place on Thursday, August 30th 2012 at 1800 at MIT 32-D463 (Star conference room). Eli Barzilay will speak about Hygienic Macros for Beginners and Power Users.

Additionally, we will have two Lightning Talks. Speakers to be announced.

1 Eli Barzilay on Hygienic Macros for Beginners and Power Users

Eli Barzilay will explain how you too can enjoy the power and safety of hygienic macro to build the syntactic abstractions with which to elegantly express your programs.

Eli Barzilay, who teaches and does research at NEU, is one of the maintainers of PLT Racket.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Thursday, August 30th 2012 at 1800 (6pm) at MIT 32-D463 (Star conference room).

The Star conference room, MIT 32-D463 on the fourth floor of the Ray and Maria Stata Center, 32 Vassar St, Cambridge MA 02139. NB: there are two sets of elevators, you want to use those on the south-western side, further away from Main St.

MIT map: http://whereis.mit.edu/?go=32

Google map: http://maps.google.com/maps?q=Stata+Center,+Vassar+Street,+Cambridge,+MA

Many thanks go to Professor Gerald J. Sussman for arranging for the room, and to MIT for welcoming us.

4 Dinner

We don't have any sponsors to offer us dinner, but we're big boys and can provide for ourselves. Before we start the conference, we'll organize a big pizza order, where those who want can chip in; after the conference is when we'll eat it.

5 More about the Meeting

We are resuming the Boston Lisp Meeting after a hyatus of over a year and a half.

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://common-lisp.net/project/boston-lisp/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Jun. 19th, 2012

eyes black and white

Boston Lisp Meeting: Thursday 2012-06-28 Kalman Reti on Symbolics Lisp Machines

A Boston Lisp Meeting will take place on Thursday, June 28th 2012 at 1800 at MIT 32-D463 (Star conference room). Kalman Reti will speak about Symbolics Lisp Machines.

Additionally, we will have two Lightning Talks. Speakers to be announced.

1 Kalman Reti on Symbolics Lisp Machines

Kalman Reti will talk about some of the history of the Lisp machine and some features of the Symbolics Lisp machines that were unique, including both hardware and software features. He'll discuss how the Alpha emulator works and Brad Parker's hack to make it run on 64bit modern machines. Finally he'll demonstrate Genera running on his laptop.

Kalman Reti worked for Symbolics from 1982 through 1992, mostly on VLSI tools for Ivory but also writing low-level device support (e.g. a LMFS recovery utility, R/W optical drive support, LZW compressor, etc.) The last few years of that were spent doing customer consulting. After being laid off when Symbolics went into chapter 11, Kalman worked for Apple in Cambridge, first on MCL and later, after MCL was sold to Digitool, on Dylan. Kalman was hired after that by Symbolics Technology, Inc., who had acquired the assets of Symbolics from the bankruptcy court, to work on further productizing the emulator for the Alpha. This was used by John Mallery at MIT to run his document distribution system for the White House during the Clinton presidency. When the owners of that venture decided that a financial company had no business owning a computer company, a private individual bought the assets and Kalman spent 4 years as a "captive consultant" for him. Since 2002, when he ran out of money, I've worked for Ab Initio (doing nothing with lisp except emacs hacks).

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Thursday, June 28th 2012 at 1800 (6pm) at MIT 32-D463 (Star conference room).

The Star conference room, MIT 32-D463 on the fourth floor of the Ray and Maria Stata Center, 32 Vassar St, Cambridge MA 02139. NB: there are two sets of elevators, you want to use those on the south-western side, further away from Main St.

MIT map: http://whereis.mit.edu/?go=32

Google map: http://maps.google.com/maps?q=Stata+Center,+Vassar+Street,+Cambridge,+MA

Many thanks go to Professor Gerald J. Sussman for arranging for the room, and to MIT for welcoming us.

4 Dinner

We don't have any sponsors to offer us dinner, but we're big boys and can provide for ourselves. Before we start the conference, we'll organize a big pizza order, where those who want can chip in; after the conference is when we'll eat it.

5 More about the Meeting

We are resuming the Boston Lisp Meeting after a hyatus of over a year and a half.

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Apr. 29th, 2012

eyes black and white

Boston Lisp Meeting: Thursday 2012-05-17 Zach Beane on Quicklisp

A Boston Lisp Meeting will take place on Thursday, May 17th 2012 at 1800 at MIT 32-D463 (Star conference room). Zach Beane will speak about Quicklisp.

Additionally, we will have two Lightning Talks. James Knight will discuss his ideas on how Common Lisp hackers could better collaborate. François-René Rideau will present recent Common Lisp hacks including ASDF 2.21, λ-reader, inferior-shell, and more.

1 Zach Beane on Quicklisp

Quicklisp is a library manager for Common Lisp. It works with your existing Common Lisp implementation to download, install, and load any of over 700 libraries with a few simple commands. http://www.quicklisp.org/beta/

Zach Beane, also known as Xach, is a Common Lisp hacker known for the cool toys he builds and his "just do it" attitude.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

James Knight will discuss his ideas on what Common Lisp hackers could do to improve how they share software.

François-René Rideau will present recent Common Lisp hacks: xcvb, asdf, package-renaming, asdf-encodings, asdf-bundle, λ-reader, reader-interception, inferior-shell, rpm, fare-memoization, fare-utils.

3 Time and Location

The Lisp Meeting will take place on Thursday, May 17th 2012 at 1800 (6pm) at MIT 32-D463 (Star conference room).

The Star conference room, MIT 32-D463 on the fourth floor of the Ray and Maria Stata Center, 32 Vassar St, Cambridge MA 02139. NB: there are two sets of elevators, you want to use those on the south-western side, further away from Main St.

MIT map: http://whereis.mit.edu/?go=32

Google map: http://maps.google.com/maps?q=Stata+Center,+Vassar+Street,+Cambridge,+MA

Many thanks go to Professor Gerald J. Sussman for arranging for the room, and to MIT for welcoming us.

4 Dinner

We don't have any sponsors to offer us dinner, but we're big boys and can provide for ourselves. Before we start the conference, we'll organize a big pizza order, where those who want can chip in; after the conference is when we'll eat it.

5 More about the Meeting

We are resuming the Boston Lisp Meeting after a hyatus of over a year and a half.

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Aug. 25th, 2010

eyes black and white

Boston Lisp Meeting: Monday 2010-09-20 Hari Prashanth on Functional Data Structures for Typed Racket

A Boston Lisp Meeting will take place on Monday, September 20th 2010 at 1800 at NEU WVH 366. Hari Prashanth will speak about Functional Data Structures for Typed Racket.

Additionally, we will have two Lightning Talks. Speakers to be announced.

1 Hari Prashanth on Functional Data Structures for Typed Racket

Scheme provides excellent language support for programming in a functional style, but little in the way of library support. In this talk, I present our experience developing a comprehensive library of functional data structures in Typed Racket a typed variant of Racket, which allows us to maintain the type invariants of the original definitions.

Hari Prashanth is a Master's student at Northeastern University. He is working with Sam Tobin-Hochstadt for his thesis. His advisor is Matthias Felleisen. http://www.ccs.neu.edu/home/krhari/

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday, September 20th 2010 at 1800 (6pm) at NEU WVH 366.

This is at Northeastern University, in the Computer Science building WVH (West Village H, see http://tmp.barzilay.org/wvh.jpg this picture) when you arrive from the T on Huntington Avenue near to Parker St (Green E line, stop at Northeastern Station, or possibly Museum of Fine Arts; you can also walk from Ruggles on the Orange line). As the number indicates, the room is on the third floor.

Northeastern maps and direction:
http://www.northeastern.edu/campusmap/maps.html

Many thanks go to Eli Barzilay for arranging for the room, and to Northeastern University for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners for 2010, and are not planning to have after-meeting buffet anymore at this point. An informal group will probably gather to have dinner within walking distance of the venue.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, July 26th 2010 had about participants. Slava Pestov spoke about Factor: an interactive, dynamic, stack-based programming language. http://fare.livejournal.com/157280.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Jul. 1st, 2010

eyes black and white

Boston Lisp Meeting: Monday 2010-07-26 Slava Pestov on Factor (factorcode.org)

A Boston Lisp Meeting will take place on Monday, July 26th 2010 at 1800 at MIT 34-401B. Slava Pestov will speak about Factor: an interactive, dynamic, stack-based programming language.

Additionally, we will have two Lightning Talks. Speakers to be announced.

Note that lacking a sponsor, buffet is no longer being offered after our meetings.

1 Slava Pestov on Factor: an interactive, dynamic, stack-based programming language

Factor is a new dynamically-typed language. http://factorcode.org/ Factor's strengths include an extensive standard library, an interactive development environment, extensive meta-programming features, efficient support for operations on packed binary data, and interoperability with C. The presentation will cover the Factor language and environment, demonstrate some interesting features, and touch upon the history and motivations behind the project.

Slava Pestov started programming in elementary school using HyperCard, then moved on to Java. After getting a lot of useful work done in Java, he then moved on to study esoteric programming languages, and like any self-respecting language enthusiast, noticed that all existing ones were lacking and decided to write his own.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday, July 26th 2010 at 1800 (6pm) at MIT 34-401B.

Note that it's a new location.

MIT map: http://whereis.mit.edu/bin/map?selection=34

Google map: http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA

Many thanks go to Alexey Radul for arranging for the room, and to MIT for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners for 2010, and are not planning to have after-meeting buffet anymore at this point. An informal group will probably gather to have dinner within walking distance of the venue.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, May 24th 2010 had about 26 participants. Marc Battyani spoke about Leveraging Common Lisp and FPGAs for ultra high performance computing. http://fare.livejournal.com/156739.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

May. 20th, 2010

eyes black and white

Boston Lisp Meeting: Monday 2010-05-24 Marc Battyani on Leveraging Common Lisp and FPGAs for ultra h

Boston Lisp Meeting:
Monday 2010-05-24
Marc Battyani on
Leveraging Common Lisp and FPGAs for
ultra high performance computing

http://fare.livejournal.com/156739.html

A Boston Lisp Meeting will take place on Monday, May 24th 2010 at 1800 at MIT 34-401B. Marc Battyani will speak about Leveraging Common Lisp and FPGAs for ultra high performance computing.

Additionally, we will have two Lightning Talks. Speakers to be announced.

Note that lacking a sponsor, buffet will no longer be offered after our meetings.

1 Marc Battyani on Leveraging Common Lisp and FPGAs for ultra high performance computing

Programming FPGAs for high performance computing applications is a very complex and not really well specified or even understood task and this is why the use of Common Lisp is a key enabler for this kind of applications. We will show how we use Common Lisp to generate code that beats C/C++ by several orders of magnitude.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday, May 24th 2010 at 1800 (6pm) at MIT 34-401B.

Note that it's a new location.

MIT map: http://whereis.mit.edu/bin/map?selection=34

Google map: http://maps.google.com/maps?q=50+Vassar+St,+Cambridge,+MA+02139,+USA

Many thanks go to Alexey Radul for arranging for the room, and to MIT for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners for 2010, and are not planning to have after-meeting buffet anymore at this point. An informal group will probably gather to have dinner within walking distance of the venue.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, April 26nd 2010 had about 15 participants. Stevie Strickland spoke about Contracts in PLT Scheme. http://fare.livejournal.com/156188.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Apr. 21st, 2010

eyes black and white

Boston Lisp Meeting: Monday 2010-04-26 Stevie Strickland on Contracts in PLT Scheme

A Boston Lisp Meeting will take place on Monday, April 26nd 2010 at 1800 at NEU WVH 366. Stevie Strickland will speak about Contracts in PLT Scheme.

Additionally, we will have two Lightning Talks. Speakers to be announced.

Note that lacking a sponsor, buffet will no longer be offered after our meetings.

1 Stevie Strickland on Contracts in PLT Scheme

PLT Scheme contains an expressive contract system that gives programmers the power to provide guarantees about the behavior of values and constraints on the acceptable use of those values by others. In this talk, I will present a basic overview of contracts in PLT Scheme, and then present recent work that extends the contract system to handle first-class modules and classes.

Stevie Strickland is a graduate student at Northeastern University working for Matthias Felleisen. He is currently investigating contracts and types for first-class components.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday, April 26nd 2010 at 1800 (6pm) at NEU WVH 366.

Note that it's a new location.

This is at Northeastern University, in the Computer Science building WVH (West Village H, see http://tmp.barzilay.org/wvh.jpg this picture) when you arrive from the T on Huntington Avenue near to Parker St (Green E line, stop at Northeastern Station, or possibly Museum of Fine Arts; you can also walk from Ruggles on the Orange line). As the number indicates, the room is on the third floor.

Northeastern maps and direction:
http://www.northeastern.edu/campusmap/maps.html

Many thanks go to Eli Barzilay for arranging for the room, and to Northeastern University for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners for 2010, and are not planning to have after-meeting buffet anymore at this point. An informal group will probably gather to have dinner within walking distance of the venue.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, February 22nd 2010 had about 20 participants. Adam Chlipala spoke about A Sane Approach to Modern Web Application Development. Alex Plotnick discussed a potential error in how Common Lisp formalized backquote. François-René Rideau presented Interface-Passing Style as a way to achieve parametric polymorphism and more. http://fare.livejournal.com/154579.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Feb. 17th, 2010

eyes black and white

Interface-passing style

My local repository of XCVB is in a transient broken state in the beginning of a big refactoring. I've decided that it was easier to declare it broken, then take each file one by one in order, update it, add tests to it, and declare it fixed before I get to the next one.

But more interestingly, in my next rewrite of XCVB, I want to make wider use of a functional programming style and functional datastructures. However, I looked at the state of Common Lisp libraries, and could find precious little in terms of functional datastructures, except for FSet which comes with its own CL dialect which is more than I'm ready to deal with, yet without the level of control I desire.

And thus I rolled my own implementation of balanced binary trees, and published it as part of lisp-interface-library (formerly part of fare-utils). Actually, I'm so proud of the API I designed that I think it's worth a minor article at a Lisp conference, or at the very least a Lightning talk or two at the Boston Lisp Meeting.

  • The general idea is to systematically use composable first-class "interface" objects to drive the choice of algorithms.
  • These interface objects are typically used as first argument to any generic function in the API.
  • Interfaces can easily share common sub-algorithms with interface inheritance and interface mixins.
  • Interfaces can have slots that contain other interfaces to which they delegate some subproblems, and functions can build first-class interfaces by composing simpler interfaces into more elaborate ones, yielding parametric polymorphism.
  • Going from binary-trees to balanced binary-trees is literally one defmethod away, plus a trivial helper and two trivial defclasses. Very pleasant.
  • Algorithmic interfaces are decoupled from data structure constructors, and particularly from state management. Indeed, I'm mostly using constant algorithmic interfaces and pure functional datastructures. This is also very pleasant, unlike the horrors of standard OO style that conflate independent concerns of algorithm selection, data-structure and state encapsulation.
  • A very same datastructure can be viewed in different lights by being passed to the same function with different interfaces, and this makes it very easy to compose interfaces.
  • For instance, a pure hash table is a balanced tree of buckets, each bucket holding one (or at most a few) entries the hash values of which collide. This is trivially implemented by composing balanced trees and alists, so that the very same node can be viewed either as a hash-table of elements, or a tree of buckets.
  • Pure hash-table and alist interfaces are each parametrized by the interface that defines hash-function and equality on keys.
  • With this technique, you can have all the parametric polymorphism that Haskell type classes, ML functors, C++ templates, Java generic interfaces, PLT Scheme units, etc., provide, except without the aggravation or limitations of any of them, plus it fits nicely into the native Lisp style, and it takes advantage of CLOS expressiveness and optimizations.
  • While I was at it, I also implemented Big-Endian Patricia Trees aka "fast mergeable integer maps", with an additional obvious optimization for merging dense maps faster.
  • All my ventures with that interface passing style of programming were very pleasant. And I didn't feel like using a monad to pass interfaces around.

For instance, given an interface i that implements some kind of pure functional maps, you can lookup a key k in a map m with (lookup i m k) independently from that map being a function, tree, a hash-table, a trie, or whatever clever thing the user came up with. You can create interfaces from other interfaces, such as (<alist> eq:<equal>) which will create an interface for maps as association lists using equal as their equality predicate. Interfaces can take functions, numbers, etc., as parameters. You can implement order domains as parametrized by a string-lessp-like comparison predicate or by a strcmp-like function. You could have have n,m-Btrees, etc.

Note that "my" idea is not novel at all. Haskell typically implements type classes exactly this way: see for instance Implementing Type Classes (1993) by John Peterson and Mark Jones. Haskell has the advantage that it will automatically infer the type class for you and pass it around as an implicit argument. In a dynamic language like Common Lisp, you have to explicitly pass the interface around, which on the one hand is cumbersome, but on the other, gives you more control: you can express parametric polymorphism, existential quantification, dependent types, and multiple ways to view a very same data structure as being an instance of the same interface protocol, which is especially great when bootstrapping elaborate versions of a protocol from simpler versions of the same (as is done with hash-tables). Of course, using Haskell, you could also go from one point of view to the other by wrapping objects inside view-specific constructors; but then, if your algorithm switches point of view constantly as for a Necker Cube, you may waste a lot of space and possibly leak as you keep creating new wrapped objects; whereas with a first-class interface separate from the data, you can just switch interface without consing.

You could probably bootstrap a nice object system this way on a language that doesn't have objects, but using an existing object system to combine and compose interfaces actually helps a lot. Note that such interface objects are a great target for partial evaluation, hot spot optimization, etc. Happily, SBCL seems to be doing just that for you.

It's amazing the things you can do with proper use of a λ!

PS: see my ILC'2012 article LIL: CLOS reaches higher-order, sheds identity and has a transformative experience [source, HTML, PDF]

Feb. 13th, 2010

eyes black and white

Boston Lisp Meeting: Monday 2010-02-22 Adam Chlipala on A Sane Approach to Modern Web Development

A Boston Lisp Meeting will take place on Monday, February 22nd 2010 at 1800 at Harvard Pierce 209. Adam Chlipala will speak about A Sane Approach to Modern Web Application Development.

Additionally, we will have two Lightning Talks. Alex Plotnick will discuss a potential error in how Common Lisp formalized backquote. François-René Rideau will present Interface-Passing Style as a way to achieve parametric polymorphism and more.

Note that lacking a sponsor, buffet will no longer be offered after our meetings.

1 Adam Chlipala on A Sane Approach to Modern Web Application Development

Most web applications today are programmed with tools that feel in this domain as assembly language feels in many traditional domains; everything is a string, or at best a globally-accessible (and mutable!) document tree. Some recent language designs improve the situation, including explicit handling of key entities like page generators and database tables, with language-level detection of violations of the proper protocols for using these entities. I claim we should go even further and provide opportunities for encapsulation of web application components. Just as we are used to building encapsulated data structure implementations, we should be able to encapsulate entire ``sub-webs´´ of applications, possibly parametrized by additional data and code, and with the ability to ``own´´ and enforce access control on cookies, subtrees of a web page's structure, etc. Further, within a statically-typed setting, it should be possible to implement (safely) the metaprogramming patterns that have become the standard in mainstream web frameworks; we should be able to generate sub-webs specialized to database schemas, choices of form fields, etc., and the compiler should tell us that the generator always produces valid code. In this talk, I will present the Ur/Web domain-specific programming language, which satisfies both of these requirements, in addition to offering compatibility with buzzwords like ``AJAX´´ and ``Comet.´´

Adam Chlipala is currently a postdoc in computer science at Harvard University. His research interests are in applications of advanced type systems, including mechanized theorem-proving and the design and implementation of functional programming languages. He finished his PhD at Berkeley in 2007, with a thesis on verifying compilers and program analysis tools in the Coq computer proof assistant. At Harvard, he is continuing work on compiler verification, and he led a reimplementation of the Ynot library for Coq, which adds support for the construction and mostly-automated verification of higher-order, imperative programs, via separation logic. He also has a longstanding interest in tool support for web programming, and he is now developing a commercial web site (to be made public Real Soon Now) using his Ur/Web language for safe metaprogramming of AJAX applications.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" each followed by 2 minutes for questions and answers.

Alex Plotnick will discuss his discovery of a potential error in the formal rules for the backquote syntax of Common Lisp.

François-René Rideau will present Interface-Passing Style as a way to achieve parametric polymorphism and more in implementing algorithms and data-structures in Common Lisp.

3 Time and Location

The Lisp Meeting will take place on Monday, February 22nd 2010 at 1800 (6pm) at Harvard Pierce 209.

Note that it's a new location.

This is at Harvard University, in the Pierce building, part of the SEAS department. The nearest T stop is Harvard Square station on the Red Line. We suggest you enter Pierce Hall from Oxford Street. The entrance is the one on the right, and it has ``Pierce Hall´´ written above it. From there, you go up the stairs one level and arrive almost directly outside Pierce 209, the meeting room. Beware that the building normally closes at 6pm (time that the meeting begins) though we'll try to leave that particular entrance open for late-comers.

SEAS maps and direction:
http://www.seas.harvard.edu/our-school/map-directions

Many thanks go to Adam Chlipala for arranging for the room, and to Harvard University for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners for 2010, and are not planning to have after-meeting buffet anymore at this point. A group will probably form to have dinner somewhere around Harvard Square.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, January 25th 2010 had about 20 participants. Ryan Culpepper spoke about PLT Scheme Macros. http://fare.livejournal.com/tag/boston-lisp-meeting

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Dec. 27th, 2009

eyes black and white

Boston Lisp Meeting: Monday 2010-01-25 Ryan Culpepper on PLT Scheme Macros

A Boston Lisp Meeting will take place on Monday, January 25th 2010 at 1800 at NEU WVH 366. Ryan Culpepper will speak about PLT Scheme Macros.

Additionally, we will have two 5-minute Lightning Talks, each followed by 2-minute Q&A. Speakers to be announced.

Note that lacking a sponsor at this point, no buffet will be offered after the meeting.

1 Ryan Culpepper on PLT Scheme Macros

I will talk about writing macros in PLT Scheme, using the tools I've developed. The first tool is the macro stepper, which shows the macro expansion of programs as a series of rewriting steps. The macro stepper is adapted specifically to the challenges of writing macros in a hygienic macro system using a base language that is itself composed of layers of macros. I'll demonstrate how to use the macro stepper and talk about its implementation. The second tool I'll demonstrate is a specification system for Scheme syntax that makes macros robust and concise.

I am a graduate student in the PLT group at Northeastern University working on making macros more powerful and easier to use. I'm interested in exploring new ways of expressing programs and methods of implementing and supporting program expression.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday, January 25th 2010 at 1800 (6pm) at NEU WVH 366.

Note that it's the same location as in our previous December 2009 meeting, and a different location from earlier meetings.

This is at Northeastern University, in the Computer Science building WVH (West Village H, see http://tmp.barzilay.org/wvh.jpg this picture) when you arrive from the T on Huntington Avenue near to Parker St (Green E line, stop at Northeastern Station, or possibly Museum of Fine Arts; you can also walk from Ruggles on the Orange line). As the number indicates, the room is on the third floor.

Northeastern maps and direction:
http://www.northeastern.edu/campusmap/maps.html

Many thanks go to Eli Barzilay for arranging for the room, and to Northeastern University for welcoming us.

4 No Dinner

We haven't been able to renew sponsorship from our usual partners at this point, and we won't have the usual buffet after this meeting.

5 More about the Meeting

The previous Boston Lisp Meeting on Monday, December 14th 2009 had about 20 participants. Sam Tobin-Hochstadt spoke about Typed Scheme. http://fare.livejournal.com/149685.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Dec. 10th, 2009

eyes black and white

A killer app for the XO? MYCIN!

Doctors are expensive. Yet most of what they do is follow a simple algorithm with lots of rules. A human aided by an expert system could do the very same thing, for cheaper!

Of course, in rich countries, the established trade unions will never let such a thing be deployed, suing whoever tries to help others with it for unlicensed use of medecine, to protect their legal monopoly. The bastards will also (rightfully this time) argue that a trained physician will know the rules just as well, and be able to better interpret the rules and more importantly, to better interpret the many elements to use as input.

And still, an untrained person with a machine could do all the easy things that a doctor would try, and redirect only the hard cases to a doctor. And in a poor country, that could save a lot of lives. And even in currently rich countries, a lot of money could be saved, and the effort of trained doctors could be redirected where they too would be able to save a lot of lives.

Moreover, such an expert system is not fantasy, it has already been written, long ago: MYCIN. It could easily be updated, and then customized with regional data about which diseases are prevalent where, and what treatment is available at what price there. And of course, it could be taylored towards the non-expert in a way that flags situations where a human expert is needed vs situations where a simple treatment should be tried first.

Let's give MYCIN on an XO to teachers, priests and social workers. A cheap way to save plenty of lives!

Did I say XO? I meant cell phone — maybe equipped with an optical modification to diagnose malaria!

Nov. 24th, 2009

eyes black and white

Boston Lisp Meeting: Monday 2009-12-14 Sam Tobin-Hochstadt

http://fare.livejournal.com/149685.html

A Boston Lisp Meeting will take place on Monday, December 14th 2009 at 1800 at NEU WVH 366. Sam Tobin-Hochstadt will talk about Typed Scheme.

Additionally, we will have two 5-minute Lightning Talks, each followed by 2-minute Q&A. Speakers to be announced.

Also, there will be a buffet offered by ITA Software. Registration is not necessary but appreciated. See details below.

1 Sam Tobin-Hochstadt on Typed Scheme

Typed Scheme is a system for incrementally porting untyped PLT Scheme programs to a typed language. The type system is designed to automatically accommodate typical Scheme idioms, and includes several novel features to support this. It also offers sound and automatic interoperability with untyped code. It has been used in real applications and on thousands of lines of existing Scheme code.

http://www.ccs.neu.edu/home/samth/typed-scheme/

Sam Tobin-Hochstadt is a postdoc at Northeastern University, working for Matthias Felleisen. He is investigating the integration of typed and untyped languages, with a focus on Scheme and JavaScript. As a graduate student, he developed Typed Scheme, which he continues to maintain. He is currently supported by a grant from the Mozilla Corporation.

2 Lightning Talks

At every meeting, before the main talk, there are two slots for strictly timed 5-minute "Lightning Talks" followed by 2 minutes for questions and answers.

The slots for next meeting are still open. Step up and come talk about your pet project! Contact me at fare at tunes.org.

3 Time and Location

The Lisp Meeting will take place on Monday December 14th 2009 at 1800 (6pm) at NEU WVH 366.

Note that we're back on a Monday, and that we're using a new location.

This is at Northeastern University, in the Computer Science building WVH (West Village H, see this picture) when you arrive from the T on Huntington Avenue (Green E line, stop at Northeastern Station, or possibly Museum of Fine Arts; you can also walk from Ruggles on the Orange line). As the number indicates, the room is on the third floor. Northeastern maps and direction: http://www.northeastern.edu/campusmap/maps.html Many thanks go to Eli Barzilay for arranging for the room, and to Northeastern University for welcoming us.

4 Dinner

ITA Software a fine employer of Lisp hackers (disclaimer: I work there), is kindly purchasing a buffet to accompany our monthly Boston Lisp meeting. Anyone who attends is welcome to partake.

We appreciate it if you let us know you're coming, and what food taboos you have, so that we can order the correct amount and kind of food. Tell us by sending email to boston-lisp-meeting-register at common-lisp.net. We won't send any acknowledgement unless requested; importantly, we'll keep your identity and address confidential and won't communicate any such information to anyone, not even to our sponsors.

5 More about the Meeting

The previous Boston Lisp Meeting on Thursday October 29th 2009 had about 30 participants. Daniel Herring spoke about LibCL and Alex Plotnick about CLWEB. http://fare.livejournal.com/148335.html

We're always looking for more speakers. The call for speakers and all the other details are at: http://fare.livejournal.com/120393.html Volunteers to give Lightning Talks are also sought. http://fare.livejournal.com/143723.html

For more information, see our web site http://boston-lisp.org/ For posts related to the Boston Lisp meetings in general, follow this link: http://fare.livejournal.com/tag/boston-lisp-meeting or subscribe to our RSS feed: http://fare.livejournal.com/data/rss?tag=boston-lisp-meeting

Please forward this information to people you think would be interested. Please accept my apologies for your receiving this message multiple times. My apologies if this announce gets posted to a list where it shouldn't, or fails to get posted to a list where it should. Feedback welcome by private email reply to fare at tunes.org.

Nov. 20th, 2009

eyes black and white

Software Irresponsibility

In the way of achieving a healthy software development environment, a lot of projects fall in one of these two DON'Ts: irresponsibility and territoriality. Irresponsibility is when there is no one in charge of making things right (with respect to a whole category of problems). Territoriality is when there is someone in charge, and he won't let anyone else touch the code without him. They may sound opposite to one another, but often irresponsibility is a result of territoriality, where the person in charge just isn't interested in the kind of problem you're experiencing, and so any consideration for such problems gets disregarded in favor of whatever fits the interests of the maintainer.

Read from PHP to ASDF to Lisp Standardization and more...Collapse )

Previous 25

eyes black and white

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  

Tags

Page Summary

Syndicate

RSS Atom
Powered by LiveJournal.com