Hi guys, I’ve been following the SOUL development for a while, and first off just want to say thanks for providing this project!
P.S. This is basically a verbatim copy of my question on Github at https://github.com/soul-lang/SOUL/issues/21 as to open up a discussion here, as this seems to be a better place.
I’ve been reading the SOUL Project Overview, and this pretty much outlines a couple of strong points for SOUL that rely on SOUL at some point being able to run on bare-metal or a “SOUL-processor”. What I grasp from this is the idea that SOUL could eventually run on hardware platforms through a software VM/JIT, or who knows at some point, a hardware VM or “SOUL-chip”.
From what I can gather, SOUL code gets compiled into an intermediate language called HEART, which I assume is similar to other intermediate representations such as JVM bytecode, LLVM IR, or NVIDIA PTX. I’m assuming this IR currently gets translated into whatever supported target platform, e.g. C/C++ or WebAssembly.
Now, I’m pretty interested in trying to find out how one would go from SOUL to actual (embedded) bare-metal, and which routes would be feasible. I am therefore trying to find out more about the design and structure of the HEART intermediate format, so am looking for a specification or design document of some kind.
However, I cannot seem to find any documentation on HEART.
Going by Jules’ answer, I know now that you are being conservative in declaring it final. The language still seems “fluid” and in an unstable phase at this stage, so that makes sense actually.
Jules also mentioned that the docs are still being written at this point. This leads me to think that the language was designed-whilst-being-implemented, instead of having been spec’ed out first before any sort of implementation; kind of a hands-on approach. That’s just an assumption, as I have no idea what’s been going on internally at ROLI.
It however makes me curious how you guys see the future development of both SOUL and HEART, as in will things will be spec’ed out (and reviewed) where the specification will define the implementation, or will the language be defined by ROLI’s implementation (which seems to be the case currently)?
I’m curious because I’m guessing this could have an effect for those e.g. looking to develop non-updateable hardware (or silicon) solutions that would support SOUL (and HEART). Again, I’m just going by what I can find on the net, and trying to extrapolate