Open kskarthik opened 10 months ago
I do have a work in progress statically linked program representation that can be serialized to bytes - I guess the workflow could be something like this:
Rather than calling something like steel main.scm
- you'd be able to do something like:
steel build main.scm
(or something like that)
That would then generate a main.rs
file, with the whole program embedded statically in the file alongside an engine instance to run it - we then just compile this to a binary.
I think that would get the job done?
Another approach that I've experimented with is generating the entire VM + handlers dynamically specific to the program that you've given, but that requires some more work :) (but would be a cool future goal)
That would then generate a main.rs file, with the whole program embedded statically in the file alongside an engine instance to run it - we then just compile this to a binary.
This is interesting too!
My idea is more like https://deno.com/manual@v1.34.1/tools/compiler#compiling-executables
I'll have to go look at the deno implementation, my hunch is its doing something more or less like what I've described though. Of course, I could be totally wrong
a quick search showed https://github.com/denoland/deno/blob/main/cli/tools/compile.rs
Nice, looks like they had discussed my approach but didn't end up landing on it. Would it be a deal breaker if it required the rust tool chain? It would certainly make the implementation trivial
Whipped up a proof of concept in #113 - I will continue to iterate on it and update the progress here
Would it be a deal breaker if it required the rust tool chain? It would certainly make the implementation trivial
At this point, I am not sure :smile:
That would then generate a main.rs file, with the whole program embedded statically in the file alongside an engine instance to run it - we then just compile this to a binary.
What could be the file size of the resulting binary ?
This is a great feature to have! Many scheme implementations do not have this.
This feature makes it easy to deploy steel apps.
Basically, The approach could be
steel runtime + script + dependencies -> ELF binary
I am open to more thoughts on this!