Hi all, I didn't realize that my project would end up in hacker-news. I was planning to make a public announcement later when I had something more stable. But well ... There is no going back now.
Right now, I need to stabilize closures, finish the standard library, write more tests and optimizations.
I saw a comment saying: it looks like clean. Well it's different in 2 ways, LinearML is strict and every object is linear. In most languages (Clean, ATS, etc ...), linear types are used to encode side-effects, as an alternative to monads. This is not the case here, in LiML, every object is linear! sharing has to be explicit. This leads to 3 interesting properties:
1) message passing is cheap (no need to copy)
2) most operations can be done "in-place", which is normally not true for a purely functional language. This allows better caching.
3) There is no GC. No runtime overhead for garbage collection at all.
I like this project. It fits nicely with my own views of a good parallel/concurrent language. As I said in another comment, I am playing around with languuge design/implementation too.
Could you perhaps give some notes on how you implemented the linear type system? I am browsing through the source code, but finding it tough understanding whats going on. Anything at all (brief overview?) would be useful and appreciated.
This is an unfair question :-)
My plan was to release LinearML with a significant amount of non-trivial examples. The guys from "mirage" are working on a TCP stack based on LiML. I thought that would have been a really good app.
So, to answer your question. Right now, there isn't much. But the question is unfair because I am not the one who made this public anouncement ...
I didn't want to make the anouncement for 3 reasons: I just started a new job at Facebook last week, and wanted to focus on that; I wanted to release something relatively stable/fast; I wanted quite a few non-trivial examples to prove my point.
But I understand your skepticism. I would have certainly asked the same question :-)