jchassoul
quoting: Soon we will have chips with thousands of cores with high-bandwidth interconnect. Such chips will power the next generation of Intelligent Applications.
Since message passing between Actors is the standard method to communicate, languages like Erlang are highly relevant.
LFE is a clean, beautiful an proper Lisp for the complete BEAM ecosystem.
There are no symbols! you have lots of little processes with lots of connections between them and you change the strengths of the connections and that's how we learn things.
"In 1975 Gerald J. Sussman and Guy L. Steele Jr. began experimenting with some interpreters in an attempt to understand the consequences of the Actor model of computation. This led to the publication during 1976–1978 of a series of papers describing a new dialect of Lisp called Scheme. Scheme was one of the first languages to have taken seriously the implications of lexical scoping and first-class functions. Namely, Scheme correctly treated closures—a closure is a function along with the local environment within which it was defined."
I heart Richard Gabriel once saying that the goal of Scheme was implement Carl Hewitt's Actor model but they discover closures instead, got hyped and forget about the original mission.
Later history repeat itself twice, Robert Virding a true Lisp Hacker implement LFE his own LISP for the BEAM ecosystem and accomplish the original Scheme goal and probably without even know or care much about it, in the similar way that once Mike Williams, Joe Armstrong and him build Erlang the best implementation (in my opinion) that we got from the Actor model without know nothing about it existence at the time of the development of Erlang.
We can't have issues with channels if we're all actors and don't impedance mismatch the mixture when building our systems.
The Computer Nonsense Guide (rc3)
The Computer Nonsense Guide (rc2)
The Computer Nonsense Guide (rc1)
Yes, I notice the quote from the project github repo, just guessing I thought that it was referring to the lack of getmetatable and setmetatable functions, but I see them in the debug module, I'm no Lua expert so I don't really know how this lack of handling of __metatable feature affects the implementation.
But it's no related with the garbage collector or any type of missing feature that could make the Luerl project unusable.
About coroutines, there is no coroutines in Luerl but that's on purpose and I know it may seems counter intuitive coming from a solid Lua background.
I can't agree more with your statement about that coroutines aren't just about green threading or async I/O, I agree with you on this completely... BUT
In the BEAM ecosystem you kind of want to use processes instead, the VM it's build for handling independent isolated processes that are very small and like you said basically free at creation time and also at context switching.
The main difference between processes and coroutines is that, literally, in a multiprocessor machine a OTP release on the BEAM runs several processes concurrently in parallel. Coroutines, on the other hand, are running only one at the time on a single core and this running coroutine only suspends its execution when it explicitly requests to be suspended.
Coroutines are replaced by concurrency of multiple lua processes running in parallel if you have more than one physical core on your machine all in the same battle tested Erlang VM.
(Luerl is an implementation of that fist-class C API, but for the BEAM Erlang/OTP VM)