Post by Eduardo Julian on Apr 20, 2019 2:53:23 GMT
Sorry for not replying before.
I changed browsers from Chromium to Firefox a few months ago and forgot to add the RSS feed of the forum to Firefox, so I didn't receive any notification.
I just entered the forum website out of curiosity and saw your post.
I've been working a lot on Lux lately, as I've arrived at a nice period of focused work, without many of the distractions I had last year.
I'm not going to give any kind of deadline, because I've missed all the past ones, and so I recognize I'm a terrible estimator.
But I can tell you what's still missing, and what I'm working on.
The first thing I'm going to say is that I'll deliver the full v0.6 experience.
In an earlier post, back in December, I wrote that I would release a much reduced version of 0.6 than I anticipated.
I said that because I was feeling somewhat frustrated and sad, since 0.6 has taken me so long and no matter how much I worked, it didn't feel like any progress was being made.
I reconsidered my position, and thought that it would be pointless to make a half-baked release.
I started focusing more on just getting the new compiler working, and seeing it come alive again has given me a lot of energy and momentum.
It is one thing to work on something for months and not see it moving, and a different thing to actually see the program running and doing what it's supposed to do (even if only partially).
So, for the last few months, I've been much more motivated and energized, and I think I can go all the way with the plans for v0.6.
So, what's missing?
1. The vast majority of the compiler infrastructure (which is platform-independent, and thus shared) is working well, but it needs a few tweaks (mostly for the type-checker and some analysis/extensions work). I've been able to make some good progress in this, so I think finishing the work here won't be too much.
2. The alternate (non-JVM) backends need to be finished. Most of the work there has already been done, but they just miss some machinery to be able to do macro-expansion in those platforms. I'm working on it, and I've already finished the necessary work for JS, and Python, have partial support in Ruby and Lua, and I'm still missing macro-support for CL, Scheme, PHP and R.
3. I still have to implement the caching machinery for the compiler. The same goes for parallel compilation. But I'll get into both once I've got the JVM compiler fully working.
4. After I'm done getting the JVM backend to work, I have to "rewrite it". This might sound crazy, but here's the deal: currently, the JVM compiler relies on a library called ASM to do bytecode generation. Pretty much all non-Java JVM languages use the same library, since generating bytecode on your own is a bad idea. However, in order to implement code-generation extensibility (on the JVM), I can't rely on that library, because it would mean anybody using Lux on the JVM would have to import that library too, which kinda sucks. So I've been working on a pure-Lux JVM-bytecode library which is partially made (I paused work on that for a while to work on getting the new compiler working again). Replacing ASM with that library (which will just be included as part of the stdlib) will allow code-generation extensibility on the JVM to not require any outside dependencies, which will be ideal for me. The backend "rewrite" will be fairly quick though, as there will be analogues for all the operations ASM provides, and it will just be a fairly quick port.
5. Inside the compiler, the machinery for extending the analyser, the synthesizer/optimizer and the code-generator is already there, but I haven't tested it yet. Now that I've got a working (new) compiler, I can finally test it out and write the stdlib macros and code to make it easy to define your own extensions.
Besides the 5 points above, I've got a few minor tasks I'm working on, mostly to polish the design of the language, and the standard library a bit further.
Lux has become a very different language than it was back in v0.5, and there are still a few big changes left before I release 0.6 (mostly because I want to avoid big language changes later, so it's better for me to do them now, since 0.6 is already backwards incompatible with 0.5 anyway).
Anyway, sorry for the long answer, but I wanted to be transparent about where things are right now.
I hate giving estimations, but I think I should be done in less than 6 months. I'm thinking about 1~1.5 months to finish the non-JVM back-ends, 1 month for all the JVM matters, maybe 1~2 weeks for the extensions, 1~2 weeks for caching and parallel compilation. And 1~2 month for miscellaneous changes and such.
I've got no plans for adding new features to the language, and I'm trying to avoid getting side-tracked by working on other projects on the side while pausing work on Lux (a very bad practice I fell into multiple times last year :/ )
I'll try to prioritize getting some of the non-JVM compilers fully usable earlier. Maybe then people can play with them while I finish the rest.