Eko: New Programming language write entirely in D (Feedback welcome)

pouya1dev poyaxc545 at gmail.com
Sat Aug 22 07:11:45 UTC 2026


On Saturday, 22 August 2026 at 01:04:40 UTC, Adam D. Ruppe wrote:
> On Friday, 21 August 2026 at 18:25:43 UTC, pouya1dev wrote:
>> I think that windows could not be combined into a hash map.
>
> It should be possible but idk how your script language works. 
> Simpledisplay assumes D templates are available but you can 
> make a few wrapper functions too for assigning events.
>
>> It is really interesting that it even has a scripting 
>> language. Do you have more information about it? Or if 
>> possible, could you put a link to the project's GitHub?
>
> all the public arsd stuff is in the same github, 
> github.com/adamdruppe/arsd there are about 100 different libs 
> as files in the one repo.
>
> If you use dub you have to list the pieces separately though, i 
> think it is called "arsd-official:script" there.
>
> My script language exists mostly just to blur the line between 
> compiled D and the eval script. I wanted to see how close they 
> could get. Its interpreter is in the script.d file and the data 
> structure is in the jsvar.d file.
>
> Let me show you a little demo:
>
> ```
> import arsd.simpledisplay;
> import arsd.script;
>
> void main() {
>         var scriptGlobals = var.emptyObject;
>
>         // you can expose functions to the script by assigning 
> them to the globals
>         scriptGlobals.writeln = (var a) { import arsd.core; 
> writeln(a); };
>
>         // for objects, there are two options, one is a class 
> with explicitly marked
>         // scriptable methods like this one:
>         static class PainterWrapper {
>                 private ScreenPainter p;
>                 private this(ScreenPainter p) {
>                         this.p = p;
>                 }
>
>                 @scriptable:
>                 void setFillColor(string s) { p.fillColor = 
> Color.fromString(s);};
>                 void drawRectangle(int x, int y, int w, int h) 
> { p.drawRectangle(Point(x, y), Size(w, h)); }
>                 void clear() { p.clear(); }
>         }
>
>         // and the other is to mark them as "subclassable" 
> which lets the script override
>         // its methods and create its own instances
>         static class SimpleWindow {
>                 arsd.simpledisplay.SimpleWindow wrappedWindow;
>
>                 this() { wrappedWindow = new 
> arsd.simpledisplay.SimpleWindow; }
>
>                 void close() { wrappedWindow.close(); }
>                 void eventLoop() { wrappedWindow.eventLoop(50, 
> &onTimerInternal, &onChar); }
>
>                 void onChar(dchar s) {}
>                 void onTimer() { }
>                 void paint(PainterWrapper p) {}
>                 private void onTimerInternal() {
>                         this.onTimer();
>                         scope pw = new 
> PainterWrapper(wrappedWindow.draw());
>                         this.paint(pw);
>                 }
>         }
>         scriptGlobals.SimpleWindow = subclassable!SimpleWindow;
>
>         // once you set up your initial globals, you pass it to 
> interpret along with a script string
>         // (which can be at runtime, of course) to run it
>         interpret(`
>                 var frameCounter = 0;
>                 var window = new SimpleWindow();
>                 window.onChar = function(c) {
>                         writeln(c);
>                 };
>                 window.onTimer = function() {
>                         frameCounter += 1;
>                 };
>                 window.paint = function(painter) {
>                         painter.clear();
>                         painter.setFillColor("green");
>                         painter.drawRectangle(frameCounter % 
> 500, 0, 100, 100);
>                 };
>                 window.eventLoop();
>
>         `, scriptGlobals);
> }
> ```
>
> When it works, it is kinda cool, this will make a green 
> rectangle slowly moving right across the window.
>
> When it doesn't work, you will get some pretty ugly error 
> messages and good luck making sense of them lol.

Thanks Adam. I'll try your code. The code I wrote was old code 
that I don't use anymore in the project. I want to rewrite the 
graphics library from scratch with SimpleDisplay. And I saw the 
code here at 
https://github.com/adamdruppe/arsd/blob/master/script.d and it 
was really cool that you can call the D globals in your script 
code. I think it has become a very efficient scripting language.



More information about the Digitalmars-d mailing list