Hi, I'm trying to post a blog but always get the 'Failed to create blog entry' error. I'm using latest Firefox on Windows XP Home Edition SP 3. Could someone help me get this blog up?
Here is the blog I'm attempting to post (entry fields are labeled) -
AML, DOL, F#, Language, Declarative, DSL
First Blog about AML
A blog about developing AML, a purely-functional, sexpr-based, 'lifting' language for declarative DSLs.
(For those who read my threads about AML here and here. I'm going to do an update on my progress in a blog rather than continually bumping those posts.)
AML is being developed steadily, but there have been a couple of delays. First, there was moving to another house due to real-life stuff (I am happy about my new place though!) Second, implementing the protocol / projection design has been a little more difficult that I figured it might be. To implement projection constraints (which are similar to type constraints in Haskell), I need a little constraint solver. Here's an example from the stdlib -
; Queries for semantic equality.
[protocol equatable [a]
[sig = [a a]]
[sig /= [a a]]]
; Performs semantic comparisons.
[protocol comparable [a] where :> [[equatable a]]
[sig < [a a]]
[sig > [a a]]
[sig <= [a a]]
[sig >= [a a]]]
; Instantiates the equatable protocol over ints.
[projection equatable [x y] where :> [[int x] [int y]]
[def = [x y] (int= x y)]; int= and it's ilk are built-in functions
[def /= [x y] (int/= x y)]]
; Instantiates the comparable protocol over ints.
[projection comparable [x y] where :> [[int x] [int y]]
[def < [x y] (int< x y)]
[def > [x y] (int> x y)]
[def <= [x y] (int<= x y)]
[def >= [x y] (int>= x y)]]
Synthesizing all these declarations is non-trivial. So I've decided to build a little non-deterministic solver to make the solution paractical. Fortunately, I found the beginnings of a nice one here (thanks once again to our friend Tomas Petricek!)
If I understand it correctly, it's non-strict due to use of seq, but not truly lazy due to lack of memoization. The big problem with non-determinism is speed. I'm thinking about throwing some lazy keywords in there or replacing the use of seq with a LazyList. We will need some level of memoization since some synthesis can only be done a run-time (in the interpreter).
So, I estimate this will push out the first release of the core language a few weeks or so. One hates to be delayed, but it's better to side-step to move forward rather than hammering against a rock wall.
Anywho, just wanted update any one that is interested in what is going on!