I do not know Dylan much (it seems like a weird multi-paradigm thing), but I don't think it would be a definite exception of this here, as it seems to have functional roots. (Incidentally, it seems to have been rather short-lived at Apple.) Didn't spend much time on it, but I admit I have a really hard time making sense of the language description so far.
I really like Dylan, but it's never quite taken off. From 1998 until about 2010 I did a lot using Dylan, and made improvements to the "Gwydion" Dylan compiler, which is compiler that outputs C, and thus is quite easily ported.
Dylan can be described as:
- the semantics of Scheme (except with restricted call/cc)
- the OO system and much of the library of Common Lisp
- a Wirthian style syntax
- with a pattern-replacement hygienic macro system. Most of the standard control structures (if/then/else, loops) are actually macros in the standard library with, for example, loops expanding to tail-recursive anonymous functions.
- default dynamic typing -- everything is an object, including integers and characters. Optional type declarations for documentation and choosing the most appropriate function for dynamic dispatch. Sufficiently well specified types result in code that runs at the same speed as C.
You can write Dylan code about as quickly and productively as Python, but it runs quite a lot faster even without declarations, and by adding declarations to the most critical functions you can usually get it to the same speed as C/C++. WITHOUT having to recode in a different language.
Dylan started at Apple. In the advanced technology group at Apple they had projects using three different languages: C++, Lisp, and Smalltalk. They wanted to develop a single language that would make all those three groups of people happy. At the 1994 WWDC (World-Wide Developer's Conference) Apple announced that they were replacing use of C++ with Dylan and gave everyone a CD with a beta Dylan compiler, IDE, libraries etc etc. It was really very nice, if with a few bugs (of course). That version was for 68000 CPU.
And then Apple was losing billions of dollars every quarter and cancelled all kinds of projects to concentrate of just the most important core things. Dylan was one of the casualties. And then they bought NeXT and used Objective C instead.
Just before they were disbanded the Dylan team got out a much improved bug-fix version, which also supported PowerPC. I have the CD of that. Sadly, it seems all the source code is lost to the mists of time -- or at least no one who still has a secret copy has been prepared to make it public.
There were two other Dylan projects:
- Gwydion Dylan, at CMU, from the same department who do/did CMUCL. It was developed on HP/UX and generated C. Once all the students graduated they open-sourced it and a group of enthusiasts took over the project in 1998, ported it to MacOS and Linux etc.
- Harlequin Dylan. This was a commercial product for Windows. The same company had ML and Lisp and did a lot of consulting work for police departments and similar. They eventually got bought by someone who wanted just their PostScript interpreter. The Dylan team got the rights to the Dylan system and set up a company to try to commercialise it. After some years they gave up and approached the group that was still working on/with Gwydion Dylan and offered them the source code for Harlequin Dylan. This was of course accepted.
Most of the focus then shifted from Gwydion to enhancing and porting Harlequin Dylan, now renamed OpenDylan. There hasn't been much done for some time (and I haven't been involved since 2010 or so) but there was actually a release in March 2019 after five years without one, and another release in October 2010. In December 2010 there was also a web-based version (using emscripten).
https://opendylan.org/https://play.opendylan.org/I just found a little Dylan program I wrote -- and compiled -- in 2007, using Gwydion Dylan. I've now pushed it to github if you want to take a look.
https://github.com/brucehoult/werewolfI've also pushed the generated C code in another branch, exactly as output by the d2c compiler (no hand editing whatsoever). You might find it interesting to compare the following:
https://github.com/brucehoult/werewolf/blob/main/werewolf.dylanhttps://github.com/brucehoult/werewolf/blob/generated_files/werewolf.c