Closed ShalokShalom closed 3 years ago
I graduated from uni last year and, having much less free time, have had to be more selective in what projects I spend time on - sadly Amulet hasn't been near the top of the list.
There's a couple of reasons for this, some of which are personal and some technical:
Don't get me wrong, I really like Amulet, it's just that its execution is lacking (fair, we started this as high-school & uni students) which means that every time I open the project in an editor I end up exhausted before I've even written any code :/.
The first two points sound like a rewrite could solve these issues 😅
I love this idea of a small, compact ML. FSharp is my favorite language, and well, it sits on .Net.
Lua is a great compilation target, why do you have to write the bindings from scratch?
Do you know any other ML of this kind? I see you are also the dev of Urn, great work.
I am super sad. I thought I found my new language 😂
The first two points sound like a rewrite could solve these issues
I don't think it would solve the optimiser one. It's a hard problem whichever angle you come from, and while a different IR might make things easier, it's no magic bullet either.
Lua is a great compilation target, why do you have to write the bindings from scratch?
Because Lua has no type information, whenever you use a non-builtin library (such as lfs, luasocket, etc...) you need to write out all the types yourself (and sometimes do additional work to cajoule them into a form Amulet is happy with).
Obviously many languages have this problem, it's just normally someone has done the hard work for you! Given Lua's relatively small community, I dunno, this feels less tenable.
Do you know any other ML of this kind?
Bucklescript springs to mind here, which complies OCaml to JS - the same model could be used for Lua instead. Looking at https://github.com/hengestone/lua-languages#functional, hypatia seems to be the only one really maintained, but is probably a little too haskelly for my tastes.
Thanks a lot. When you say optimizer, do you mean that one, that optimizes the code for having only one parameter in functions, which causes a lot of currying, which causes a lot of closures?
The optimiser does a whole bunch of things:
match
/if
elimination: for instance, optimising match Foo x with | Foo x -> ...
. Obviously doesn't happen on its own, but combined with function inlining, happens surprisingly often.Most of the passes are sane, however the "reduce" pass (which does function inlining and that match elimination) is incredibly brittle and doesn't cover several cases it really should.
@overminddl1 can you help?
My free time has basically vanished since I got a daughter, so not currently... ^.^;
Oh, congratulations!
Yeah, applause 🎉
One new form of life is born, one software project dies. The circle of life, I guess. 😉
Much fun with the daughter!
Do I assume correctly, that no community has been build, since nobody wants to maintain it?
I think this language is wonderful, and I wonder if there is any interest.
P.S: So far as I can see, is using the language as dedicated Lua compiler less of a goal?
I imagine, I can use it on top of the Lua implementation fo Godot and Luerl, eventually