Home   Archive   Permalink

New Meta language launched, for Atari 8-bit

The big day is finally here! I am releasing Meta, first as a cross-compiler producing Atari 8-bit programs, running on Windows, Apple Mac, Linux, FreeBSD, NetBSD and OpenBSD:
Now that this milestone has been reached, I will make quick incremental improvements in the coming time, perhaps incorporating some feedback here.

posted by:   Kaj de Vos     28-Oct-2021/13:19:39-7:00

Hi Kaj,
Interesting project, and with a lot of potential. Congratulations!
Seeing that Meta is build on Rebol, can it be used together with Rebol for low level programming as well?
If I may ask, Why did you part from Red? What were your main pain points?
And what are your thoughts about including the compiler in a single download?
Red compiler efficiency?

posted by:   Daniel     2-Nov-2021/4:35:38-7:00

Hi Daniel,
Meta generates standard executables. The most obvious way to use it from REBOL would probably be to have Meta generate dynamic libraries and then use REBOL's library interfaces. The fact that Meta is currently written in REBOL doesn't matter for this approach, except that you could go further by having the languages communicate in REBOL dialects. For REBOL 3, Meta could generate R3 plug-ins. I did that many years ago for Red. I am not particularly interested in this anymore, but if there is strong demand, I could do it. Other approaches are possible, too, for example through my old ZeroMQ bindings for REBOL and Red.
For many years, I planned to build my language on Red. But when I made the final evaluation a year and a half ago, I saw that Red was a non-starter. For a number of reasons, most importantly because it still doesn't support 64-bit.
Efficiency is also an issue, because Red doesn't bring you anything. A compiled Red program is as slow as an interpreted REBOL program. An interpreted Red program is about eight times as slow as an interpreted REBOL program.
The current Meta release is a remote client that is a single download, emulating what REBOL and Red are. The compiler itself needs to run on the build server, because it is far too complex to produce downloads for various systems and have people install those. Here is the plan for them:

posted by:   Kaj     2-Nov-2021/9:22:13-7:00

Is your long term goal for Meta to run on embedded systems/SOC/IOT?
Also, what is your take on the RenC build, seeing that you are using R3?

posted by:   Daniel     4-Nov-2021/3:45:41-7:00

Yes, Meta's goal is to run on many systems, including embedded ones. The current Atari 2600 target is also meant to develop this. A 2600 has no operating system and is much smaller than most current embedded systems, so they are basically no problem to target. The challenge will be in setting up the required toolchains and supporting system-specific functionality. This will be informed by user demand.
Ren-C has removed itself quite far from REBOL, in opposite directions in which Meta is going, and it's unstable, so it is little relevant to Meta and its current R3 implementation.

posted by:   Kaj     4-Nov-2021/6:53:58-7:00

Thank you Kaj for the feedback.
In a past talk (presentation, possibly 7-8 years ago) you said that the current C compilers are bloated and an ever-changing target. What is your viewpoint on the currently available mainstream compilers, and how does your setup fit into this? Sorry, total newbie but I find this quite interesting.
Are you using R2 at all in development?
Seeing that you are using Webassembly, any chance of Meta running in a browser? This is what made me look at RenC.
Your expert view is appreciated.

posted by:   Daniel     4-Nov-2021/10:40:58-7:00

You're quite well informed for a newbie. :-)
C is a half a century old technology from not far after the dawn of computing. It's excusable that it is the way it is, but I am still disappointed that the world is still based on it. I'm still trying to come to terms with that, but that being the case, it's not unreasonable to try to build the next level of expression onto the previous level. It's a case of, if you can't beat them, join them.
Red promised to do it without C, and that seemed great, but it has been a decade, and it hasn't succeeded.
It does inject a lot of bloat, and I'm measuring it to try to quantify the problem:
I'm touching C with a ten-foot pole now, but I wouldn't be tied to it. It's just one of the back-ends, WebAssembly being the first, but C is such a black hole that it's drawing in most of the attention, and requiring the most effort.
I'm not using R2.
I definitely designed the back-end architecture around WebAssembly to run in browsers. It's yet another reason to produce tiny executables, so you don't have to load an entire REBOL interpreter into every web page. As usual, there is also a way through C to do it. Time will tell which one is most practical. So far, it looks both ways will be useful.

posted by:   Kaj     4-Nov-2021/12:22:29-7:00

Ah, wait, AltME is still based on R2, so I'm using it a bit for communication:
On WINE, unfortunately.

posted by:   Kaj     4-Nov-2021/12:35:55-7:00

Hi Kaj,
You stated that the website for Meta is served from Meta code. What is the size of the exec file (single file?), and how are you handling http requests?
Any chance to have a peek into the code?
Also, what do you see as shortcomings in the use of Red System, and where is your code generation methodology better than Red System.
Lastly, any advice for a newbie to Atari (where/what is important to learn, minimal background info needed to be up and running).
Appreciate the response.

posted by:   Daniel     19-Nov-2021/2:38:07-8:00

The web service executable is currently 33 KB on 64-bit Linux.
It is a CGI program behind a web server, so it handles the semantic part of HTTP, but not the network part yet. I will publish a CGI use case, but first the release for other than Atari needs to be done. :-)
Red/System is the wrong abstraction level and the wrong format for an intermediate language, certainly for a REBOL language. The abstraction level is that of C, which is too low for the intermediate layer. The format is that of REBOL, which is free form for human use. Red is parsed from free form to something more suitable for machine processing, then a lot of Red/System is generated, then all of that needs to be reparsed. The compiler is painfully slow.
This should be a suitable thread:
Have fun playing Atari every day!

posted by:   Kaj     19-Nov-2021/5:04:18-8:00

I'm excited to your work on this! Looking forward to browser port :)

posted by:   Nick     21-Nov-2021/17:59:36-8:00

I'm excited to your work on this! Looking forward to browser port :)

posted by:   Nick     21-Nov-2021/17:59:39-8:00

Thanks, Nick, appreciated! It will take a while longer, but not too long.

posted by:   Kaj     22-Nov-2021/1:20:19-8:00

I understood your code for the 2600 (rainbow) and cannot understand why the crowd at atariage seems a bit hostile towards you. I for one are checking for your updates on multiple occasions each day.
How do you handle security wrt to cgi script?
Any builtin help system to browse/explore keywords/syntax?
My plan is to try and port over one of the 2600 games soon. Am I free to ask questions when I get stuck?
Also on Win10 Pro, which emulator do you suggest I should use?

posted by:   Daniel     23-Nov-2021/8:38:54-8:00

I was hoping we could rally around Atari for a while, but I'm knee deep in the old REBOL misconceptions already, so I had to narrow down the target audience. I guess it had to happen eventually.
Security in CGI is mostly making sure the path doesn't point outside the folder. I'm also doing a simple check for CORS, and I'm detecting a number of attack patterns, but it's not really necessary because the attacks can't find anything to break, anyway. It's funny to see most of them try to break into Perl. :-)
The compiler is very minimal now. I will be adding REBOL-like help options over time.
By all means, ask questions, especially if you're doing a 2600 game! :-)
For Atari 8-bit, I like Atari800, but Altirra is very capable on Windows. For Atari 2600, the standard emulator is Stella.
It will take a little more time to release the 2600 backend for Meta.

posted by:   Kaj     23-Nov-2021/11:22:34-8:00

Sorry, that's PHP of course, not Perl.

posted by:   Kaj     23-Nov-2021/11:26:13-8:00

Sorry, that's PHP of course, not Perl.

posted by:   Kaj     23-Nov-2021/11:26:16-8:00

Nick, I launched the browser version, with a web console:

posted by:   Kaj     16-May-2022/13:49-7:00

Daniel, I published a CGI example here.

posted by:   Kaj     26-Jul-2022/5:34:14-7:00



Type the reverse of this captcha text: "e n i f e r - o n"