Hylas-Lisp - A JIT-compiled Lisp targeting LLVM
github.com
github.com
It's nice how closely languages like Python and Lua and integrated C through their various FFIs (particularly Luajit's FFI), but it's still a huge pain in the ass to continuously context switch between languages whenever you have to drop down and do something low-level, or to improve performance. I hope at least one of these languages catches on in the wider programming community so I'll have a chance to use it in "real world" programming.
ps: I really like the WSL side of things, as a lispos/lispmachine daydreamer, I'm impatient to see bare metal lisp systems running (fast).
You might be interested in http://programming.nu/
intro talk (at Bay Area Lisp Revival): https://wukix.com/mocl-balisp8
I think it would be great if you could put way more code and docs there.
I like to pretend it looks more like 'hylas' than 'aylas'.
There is no specification or anything very formal laid out except for a couple .md files in the docs folder. The language has evolved and changed a lot over the past year (Everything from the comments to the type system has changed), and is nowhere near prod-ready, but I want to eventually put it to practical use.
Coming from a mostly C/C++ background, it was an eye-opening experience, and I'm definitely a fan of languages other than C for performant code.
Of course, youngsters nowadays tend to think only C and C++ play on that league.
The lower-level language itself was statically typed, and supported pointers and arrays as native types - identical to their C equivalents. Classes either derived from "structure" (unboxed) or "boxed". The boxed types had a class pointer, much like a C++ vtable ptr, but with some more useful introspective data attached.
Runtime linkage was mostly accomplished by patching types' method slots and/or patching a global symbol table. The compiler talked to a MySQL database which was shared by the whole company, so that symbols wound up having unique and consistent ids across all machines. The "listener" ran on a PS2 devkit, and essentially just accepted object code to link and execute. The REPL worked by having the compiler compile each expression, squirt the MIPS object code over to the PS2, have the PS2 link and execute it, and return a result, which the compiler would then print (possibly peeking into the PS2's memory in order to display more useful information). Similarly, you could place your cursor inside a block of code, hit CTRL+T and have just that function/method updated on the target. (This was back when edit-and-continue was still something of a novelty!)
The ABI was close enough to C that GOAL and C could call each other almost directly (the MIPS GP register had different meanings in GOAL vs C code, and so had to be patched up).
You could also pretty much mix GOAL and assembly, and we frequently did. GOAL's backend was never going to be as efficient as gcc's, but the massive increase in productivity it provided meant that we could devote much more time to optimizing the stuff that really mattered.
I think Andy Gavin's on here somewhere - he should really write an article about it if he hasn't already :)
Just a thought.
You might be interested in http://programming.nu/