mattwparas / steel

An embedded scheme interpreter in Rust
Apache License 2.0
1.17k stars 52 forks source link

[feature] self-contained steel program executables #110

Open kskarthik opened 10 months ago

kskarthik commented 10 months ago

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!

mattwparas commented 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)

kskarthik commented 10 months ago

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

mattwparas commented 10 months ago

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

kskarthik commented 10 months ago

a quick search showed https://github.com/denoland/deno/blob/main/cli/tools/compile.rs

mattwparas commented 10 months ago

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

mattwparas commented 10 months ago

Whipped up a proof of concept in #113 - I will continue to iterate on it and update the progress here

kskarthik commented 10 months ago

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:

kskarthik commented 2 months ago

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 ?