logoalt Hacker News

Epsilon: A WASM virtual machine written in Go

145 pointsby ziggy4212/01/202539 commentsview on HN

Comments

hardwaresoftonlast Tuesday at 10:41 AM

Congratulations on the progress and getting the engine out there!

One nice thing about interpreters versus JIT compilers is that they can be used in places like iOS without too much fuss (AFAIK you have to bundle all the WASM you will run though, or something like that).

I'm biased since I work on it, but any considerations around adding support for the Component Model? It's more complex than the base spec of course but incredibly robust -- really the present/future of "modern" WebAssembly across languages.

show 2 replies
shevy-javalast Tuesday at 11:55 AM

WASM seems to be rather poorly documented in general. I used to think it is only badly documented in Ruby (which it is), but I have been slowly reading "WebAssembly The Definitive Guide" and when comparing this to information on the internet, it seems WebAssembly is years behind e. g. HTML, CSS, or JavaScript in regards to documentation. Granted, it is not the same user base (more people will be interested in HTML and CSS simply because there is a bigger pool of people interested in that, rather than in WebAssembly), but still - documentation appears to become really worse in general on the internet. Finding it too.

So in this regard, having more implementations may be useful (more opportunity to improve documentation) - thus while I am in general skeptical, this is good news here, even if I do not use Go myself.

show 4 replies
simonwlast Tuesday at 9:54 AM

Do you have any plans to add timeouts or some other mechanism for limiting the amount of CPU a webassembly call can use?

I'm always interested in options for using WebAssembly as a sandbox to run untrusted code, but one of the things I need to protect against is an infinite loop.

(I had Claude knock up an experimental Python binding to try Epsilon out, notes from that here: https://github.com/simonw/research/tree/main/epsilon-python-... )

show 5 replies
Gyslast Tuesday at 9:22 AM

This could have been a Show HN?

Also: would be nice to see wazero (https://github.com/wazero/wazero) mentioned. What was the reason to create Epsilon as an alternative?

show 2 replies
sureglymoplast Tuesday at 9:43 PM

Only tangentially related, asking out of curiosity.

If one wanted to have a JIT compiler from what I understand it would essentially need to be able to get a chunk of memory, generate instructions into it and then jmp there.

Is creating such a thing possible in just Go?

show 1 reply
karel-3dlast Tuesday at 9:21 AM

How does this compare with wazero?

show 1 reply
mring33621last Tuesday at 3:36 PM

Very nice!

Seems like a next step would be automatic code generation to map user-supplied (or auto-generated) interface definitions to exported WASM module functions.

koolalalast Tuesday at 10:47 PM

I can't wait till this will be able to run in WASM on the web. Looks cool.

donatjlast Tuesday at 12:22 PM

Nice! I started building a toy Go WASM VM myself but a few hours in realized I was in way over my head. Seems very readable, I'm going to want to go to school on this!

praveen9920last Tuesday at 1:41 PM

Nice project.!

Is there anything akin to file sockets api for wasm? I see a lot of potential in using them with go channels for ipc between multiple wasm modules.

aeve890last Tuesday at 2:35 PM

>with 0 dependencies

>Looks inside

>0 dependencies

Wow. Amazing. Was that a planned feature or did you just manage to write the entire project without stepping out the go std lib?

show 1 reply
_s_a_m_last Tuesday at 9:43 AM

[flagged]

show 1 reply