- Hydra has become a research implementation of Digamma, written in Digamma, that can run itself. It also is written in a style that allows it to be compiled with a preDigamma compiler.
- Eprime has been tossed in favor of Enyalios, which is smaller, has a better performance profile, and is easier to extend.
- Vesta is still alive & kicking as the reference implementation of Digamma proper, although Hydra may grow to fill that role.
- The plan now is that all non-core development should be in Digamma/PreDigamma, and only the necessary items should be written in C.
Thursday, June 21, 2012
Still Alive
Wednesday, February 16, 2011
Quick Performance Update
Wednesday, December 29, 2010
Aneris, Ceres update & more (for the end of the year)
Aneris
Aneris is a simple AST walking interpreter, that supports delimited continuations, W7, POSIX & most everything that Vesta does. I created it as a useful test of E-prime's & Enyo's ability to meaningfully compile preDigamma programs. The nice thing about Aneris is that it doesn't use any code that is specific to preDigamma, and, as such, it can run itself. I'm pretty happy with the way it came out.
Ceres
Ceres has been updated to support the full W7 system, as well as continuations (it had delimited continuations before). I hope that I'll be able to release Ceres, Vesta, E-prime, & Aneris early-2011.
Grid Computing
I've been using the SHARK (Scheme Hacks Against Raging Kingdoms *or* Scheme High Availability Research Kit) Grid for some time now; I hope to allow users to log in shortly after I release Digamma. I hope to add serializable environments to Vesta/Aneris/Ceres before then, so that grid nodes can fail & still hold the vast majority of a user's state (esp. since snap shotting the VM on a regular basis & storing to SHARK's data nodes shouldn't be that big of an issue).
2011 & Beyond
Once I've released the Digamma environment, I'll move towards an IPN-style format here: the blog will start hosting my experiments & labs that focus on using Digamma in the "real world," as well as the usual developments wrt compilers, interpreters, operating systems & language design.
Happy 2011!
Friday, October 29, 2010
Update, E' & contains
I've been working heavily on Digamma, to the point where I've not blogged about it in a year, so here's a quick update.
Vesta is working well; so well that I don't have any other scheme interpreters installed on any of my machines anymore. That's a good sign, since I use Scheme & C for just about everything. Vesta itself is just about as fast as you can possible get with an AST walking interpreter; a simple fib program, that computes & prints the Fibbonacci values for 3,4,5,10,15,20 runs in about 0.245u, where as C runs at 0.00u and natively compiled PreDigamma runs at 0.01u. I don't have timings for Ceres yet, as I'm still working on that.
E'
Enyo, the PreDigamma compiler, is a rather large piece of software; it has a type inference engine, nice code generation back-end (so that PreDigamma can target other systems, such as Inferno's Limbo or even Plan9's ken cc). This isn't fun though, so I thought about having some fun. Enter E': a tiny compiler for PreDigamma to C. It's 400 or so lines, a tail call optimizer & support for PreDigamma save for macros, syntax,c-macros, c-syntax, FFI & types. That's quite a few features missing, but it works well; I've been using it for quite a few little utilities here & there, and it compiles nicely. For instance, it turns this:
(def fib (fn (t i j n)
(if (<= n 1)
i
(fib i (+ i j) t (- n 1)))))
into this:
SExp *
fib(SExp *t, SExp *i, SExp *j,SExp *n)
{
SExp *ret = nil;
int s1 = 0;
while(!s1)
{
SExp *it0 = flte(list(2,n,makeinteger(1)));
if(it0 == nil || it0->type == NIL || ((it0->type == BOOL || it0->type == GOAL) && it0->object.c))
{
s1 = 1;
ret = i;
}
else
{
t = i;
i = fplus(list(2,i,j));
j = t;
n = fsubt(list(2,n,makeinteger(1)));
}
}
return ret;
}
Which is pretty nice, and quite speedy.
Contains
There's a new primitive in Digamma, called contains. This is analogous to Python's in, and it works on all collexions:
contains c : COLLEXION v : ATOMIC [key-or-value : BOOL] => BOOL
the key-or-value part is for if you're testing a dict: you may want to test whether it has the key v or the value v, so there's a boolean flag for that. Nice, semantically simple & clean; Total positive in my book.
Thursday, December 10, 2009
Networking & Enyo improvements
Vesta's networking core is now complete (under c/posix.c for those with source access). This includes a "raw ip pack" function, to build up IP datagrams (as well as higher level protocols). One thing I'm working on now is an implementation of RUDP, for use in client libraries.
Enyo
I've been working on Enyo quite a bite lately, and it now is a relatively nice system for PreDigamma development. PreDigamma is similar to PreScheme, but with GC (since nowadays it's perfectly acceptable for a "lower than application but higher than OS" level language). I was thinking about rewriting the GC in PreDigamma, and compiling bootstrapping the runtime from C, but that's mostly just notes & tests right now.
I'm getting close to the point where many other people can have access to the source & I can move to a Caerwyn-style FPN (Digamma Programmer's Notebook).
Monday, November 23, 2009
Format, define-syntax (rules)
Format
The format form:
(format specification-string rest-list)
Now works for all internal types, including all collexions. Formatting of tries, vectors, strings, and lists is supported. There are (generally) two types of formatting for each object: display form and write form; the two types correspond to their top-level forms. The switch is case: lower case is display, upper is write. So, "~t" displays a t(able | rie) as display would, whereas "~T" displays it as write would.
Syntax rules
I've fixed pattern matching in define-syntax so that you can use the usual forms:
(let ((name . val) ...) . body)
Will expand exactly how you expect (unlike before...).
More to come
I've started to bring Ceres & Enyo up to where Vesta is currently; even though Vesta is almost the same speed as TinyScheme, this isn't really fast enough for many applications. Ceres is a SECD-like VM, and Enyo has some neat tricks in it. Hopefully they can be made production ready before year's end.