March 12, 2007 Implementing Scheme as DSL for D | ||||
|---|---|---|---|---|
| ||||
I want to implement a library for D.
It's better to show as I imagine it now:
mixin(scheme("
(define my_plus (lambda (a b) (+ a b)))
"));
int a = 1;
int b = 2;
writefln("%d + %d = %d", a, b, my_plus(a, b));
function scheme() is a function which translates code in Scheme to code in D. I'm planning that resulting D code will just reflect all the structure, except few cases such as defining new functions. In the case above it would be translated in next code:
"
SExpr my_plus(SExpr a, SExpr b) {
return new List(lambda, new List(a, b), new List(PLUS, a, b));
}
"
And after applying mixin() on this it introduces new function, which could be used naturally as plain D function. Of course it requires a supporting library.
Is there any things which could make my task impossible at all? As I see, functions which could be run in compile-time are restricted, but for simple parser (especially for such syntactically simple language as Scheme) they are powerful enough. Any ideas are welcome.
| ||||
March 13, 2007 Re: Implementing Scheme as DSL for D | ||||
|---|---|---|---|---|
| ||||
Posted in reply to vsb | This looks like allot of fun, I look forward to following your progress :). I don't see any show stoppers, but I only have a little experience with this.
Charlie
vsb wrote:
> I want to implement a library for D.
> It's better to show as I imagine it now:
>
> mixin(scheme("
> (define my_plus (lambda (a b) (+ a b)))
> "));
>
> int a = 1;
> int b = 2;
> writefln("%d + %d = %d", a, b, my_plus(a, b));
>
> function scheme() is a function which translates code in Scheme to code in D. I'm planning that resulting D code will just reflect all the structure, except few cases such as defining new functions. In the case above it would be translated in next code:
>
> "
> SExpr my_plus(SExpr a, SExpr b) {
> return new List(lambda, new List(a, b), new List(PLUS, a, b));
> }
> "
>
> And after applying mixin() on this it introduces new function, which could be used naturally as plain D function. Of course it requires a supporting library.
>
> Is there any things which could make my task impossible at all? As I see, functions which could be run in compile-time are restricted, but for simple parser (especially for such syntactically simple language as Scheme) they are powerful enough. Any ideas are welcome.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply