Hello,
I'm happy to announce the upcoming publication of my essay entitled
Lisp, Jazz, Aikido, to appear in Volume 2 Issue 3 of the Art, Science
and Engineering of Programming journal, in April 2018.
The abstract is given below.
The relation between Science (what we can explain) and Art (what we can't) has
long been acknowledged and while every science contains an artistic part,
every art form also needs a bit of science. Among all scientific disciplines,
programming holds a special place for two reasons. First, the artistic part is
not only undeniable but also essential. Second, and much like in a purely
artistic discipline, the act of programming is driven partly by the notion of
aesthetics: the pleasure we have in creating beautiful things.
Eventhough the importance of aesthetics in the act of programming is now
unquestioned, not much has been written on the subject. The field called
"psychology of programming" focuses on the cognitive aspects of the activity,
with the goal of improving the productivity of the programmers. Very few
programmers have written about their thought process while programming either,
and even fewer on their concern for aesthetics, and the impact it has on their
activity.
I can see three reasons for this. First, it may be frightening to do
so. Reflecting on our aesthetic sensitivities involves thinking about our own
emotions, and not everyone is ready or willing to perform that kind of
introspection. Second, this introspection needs to be very deep, as our
aesthetic sensitivities are extremely personal. Third, this introspection also
needs to be very broad, as our aesthetic sensitivities affect every part of
our lives.
The purpose of this essay is to shed some new light on the art of programming
by answering questions such as what makes us like or dislike such or such
language or paradigm, or why do we shape our programs the way we do, all of
this from the angle of aesthetics. Starting from the assumption that
aesthetics is an inherently transversal concern, it should be possible for
every programmer to find the same aesthetic driving force in every creative
activity they undertake, not just programming, and in doing so, get deeper
insight on why and how they do things the way they do.
On the other hand, because our aesthetic sensitivities are so personal, all we
can really do is relate our own experiences and share it with others, in the
hope that it will inspire them to do the same. It is certainly an important
purpose of this essay. My personal life has been revolving around three major
creative activities, of equal importance: programming in Lisp, playing Jazz
music and practicing Aikido. But why so many of them, why so different ones,
and why these specifically?
By introspecting my personal aesthetic sensitivities, I eventually realized
that my tastes in the scientific, artistic and physical domains are all
motivated by the same driving forces, hence unifying Lisp, Jazz and Aikido as
three expressions of a single essence, not so different after all. In doing
so, I gained considerable insight on my own psychology of programming, perhaps
common to most lispers, perhaps also common to other programming
communities. But that is for the reader to decide...
--
Resistance is futile. You will be jazzimilated.
Lisp, Jazz, Aïkido: http://www.didierverna.info
We are happy to announce the release of Vcsn 2.7!
As most of our efforts are currently on Vcsn 3, this is mostly a bug fix
release, with improvements in the documentation based on user feedback.
For more information see the detailed news below.
Release page: https://vcsn.lrde.epita.fr/Vcsn2.7
Tarball: https://www.lrde.epita.fr/dload/vcsn/2.7/vcsn-2.7.tar.xz
Home page: https://vcsn.lrde.epita.fr
The various packages (Arch, Debian, Docker, MacPorts, etc.) will appear soon.
## New features
### Improved compatibility between single- and multitape expressions
The automatic promotion from single-tape to multitape is more general. For
instance (| separates tapes and @ denotes composition):
In [2]: c = vcsn.context('lat<lan, lan>, b')
In [3]: c.expression('a')
Out[3]: a|a
In [4]: c.expression('a*b* @ (ab)*')
Out[4]: (a|a)*(b|b)*@((a|a)(b|b))*
In [5]: c.expression('a*b* @ (ab)*').shortest(10)
Out[5]: \e|\e + ab|ab
### vcsn doc is a new tool
Run `vcsn doc automaton.determinize`, or `vcsn doc Automata`, etc. The
special shortcuts `vcsn doc` opens the Read-me-first notebook, and `vcsn doc
index` leads to Algorithms, the page that lists the existing documentation
of algorithms (`automata.determinize`, etc.).
### Compressed efsm files
Vcsn can read efsm files compressed with bzip2 and xz. In some extreme
cases, the xz-compressed efsm file was reduced to 5% of the original size.
The files for the sms2fr demo are now compressed with xz.
### vcsn score has several new options
The command `vcsn score` benchmarks Vcsn. Its output can be processed with
`vcsn score-compare` to see the trends in performances between versions.
Benchmarks are now numbered, to give a hint of the progress:
$ vcsn score
vcsn version: 2.6-085-g6dcae17ef
1/116 0.25s : a.is_proper() # a = "", 1000000x
2/116 0.11s : b.format("text") # b = [abc] -> B, 100000x
3/116 0.35s : b.expression(e) # e = [ab]{20000}, 1000x
...
115/116 0.75s : a.weight_series() # a = std(a{12000}+<1>[b-z]{12000}), c = [a-z] -> Nmin, 200x
116/116 0.89s : a.weight_series() # a = std([a-z]{200}), c = [a-z] -> Z, 10x
The new option `-o`/`--output` allows to specify the output file name.
Better yet: option `-d`/`--dir` specifies the directory in which the score
file is saved; its name will be forged from `git describe`, something like
`v2.5-050-g01dbf326`. Such names are interpreted by `vcsn score-compare` to
relate the benches to the git commit title. Both features need that you run
these commands from a git repository of Vcsn.
Option `-j`/`--job` allows to run the benchmarks concurrently. This can be
very useful to "warm" vcsn (have it compile the needed algorithms), or to
get a nice approximation of the actual benches, however, sticking to a
single bench at a time is recommended to get faithful measurements.
Option `-l`/`--list` lists the benches without running them.
Option `-s`/`--sort` sorts the benchmarks before running them.
### Documentation
Several errors were fixed. The page `expression.compose.ipynb` is new.
### Examples of C++
The directories `tests/demo` and `tests/benchmarks` contain more examples
using the Vcsn C++ library.
## Bug fixes
### Incorrect order for 8bit characters
Calling `compare` on labels would lead to surprising results with 8bit
characters (seen as negative ints). This resulted in the incorrect display
of the expression `[\x01-\xfe]` as `[\x80-\xfe] + [\x01-\x7f]`.
Both are fixed, and 1 is less than 254 again.
Greetings,
I'm pleased to announce that my paper entitled "Method Combinators" has
been accepted to the next European Lisp Symposium, April 16-17,
Marbella, Spain. Please find the abstract below.
Method Combinators
In traditional object-oriented languages, the dynamic dispatch algorithm is
hardwired: for every polymorphic call, only the most specific method is
used. CLOS, the Common Lisp Object System, goes beyond the traditional
approach by providing an abstraction known as "method combinations": when
several methods are applicable, it is possible to select several of them,
decide in which order they will be called and how to combine their results,
essentially making the dynamic dispatch algorithm user-programmable.
Although a powerful abstraction, method combinations are under-specified
in the Common Lisp standard, and the MOP, the Meta-Object Protocol
underlying many implementations of CLOS, worsens the situation by either
contradicting it or providing unclear protocols. As a consequence, too
much freedom is granted to conforming implementations, the exact or
intended behavior of method combinations is unclear and not necessarily
coherent with the rest of CLOS.
In this paper, we provide a detailed analysis of the problems posed by
method combinations, the consequences of their lack of proper
specification in one particular implementation, and a MOP-based
extension called "method combinators", aiming at correcting these
problems and possibly offer new functionality.
--
Resistance is futile. You will be jazzimilated.
Lisp, Jazz, Aïkido: http://www.didierverna.info
ELS'18 - 11th European Lisp Symposium
Centro Cultural Cortijo de Miraflores
Marbella, Málaga
Spain
April 16-17 2018
Sponsored by Brunner Software GmbH, Franz Inc.,
LispWorks Ltd., and EPITA
http://www.european-lisp-symposium.org/
Recent news:
- Invited speakers announced (see below)
- Registration open. Don't miss the March 25 deadline for the early
bird discount!
The purpose of the European Lisp Symposium is to provide a forum for
the discussion and dissemination of all aspects of design,
implementation and application of any of the Lisp and Lisp-inspired
dialects, including Common Lisp, Scheme, Emacs Lisp, AutoLisp, ISLISP,
Dylan, Clojure, ACL2, ECMAScript, Racket, SKILL, Hop and so on. We
encourage everyone interested in Lisp to participate.
Keynote speakers:
- Vsevolod Domkin -- Lisp in a Startup: the Good, the Bad, and the Ugly
- R. Matthew Emerson -- This Old Lisp (a look at Clozure CL)
Important dates:
- 25 Mar 2018 Early registration deadline
- 16-17 Apr 2018 Symposium
Programme chair:
David Cooper, Genworks Intl., USA
Local chairs:
Andrew Lawson, Ravenpack, Spain
Programme committee:
Andy Wingo, Igalia, Spain
Christophe Rhodes, Goldsmiths University, UK
Christopher Wellons Null Program Canada
Irène Durand, LaBRI, Université de Bordeaux, France
Julian Padget, University of Bath, UK
Ludovic Courtès, Inria, France
Michael Sperber, DeinProgramm, Germany
Nicolas Neuss, FAU Erlangen-Nürnberg, Germany
Olin Shivers Northeastern University USA
Philipp Marek, Austria
Robert Strandh, LaBRI, Université de Bordeaux, France
Sacha Chua Living an Awesome Life Canada
Scott McKay, Future Fuel, USA
Search Keywords:
#els2018, ELS 2018, ELS '18, European Lisp Symposium 2018,
European Lisp Symposium '18, 10th ELS, 10th European Lisp Symposium,
European Lisp Conference 2018, European Lisp Conference '18
--
Resistance is futile. You will be jazzimilated.
Lisp, Jazz, Aïkido: http://www.didierverna.info