What’s a port?
It’s how a process reaches the outside world. A port is regular Go code that looks like another process: you send it a request, it does the file or network work, and it sends back an answer. The process never opens a file itself. That also makes testing easy, because you can swap in a fake port that just records what it was asked.
How is Goer different from Erlang?
The ideas are the same family: small private processes, supervisors that restart them, changing code live, and several machines working together. What’s underneath is different. Goer runs inside a normal Go program. You write the process code in a cut-down version of Go called imgo (files marked //go:build goer), and Goer runs it in its own small virtual machine inside your program.
When should I write a process in regular Go instead?
When what it holds is ordinary Go stuff, like a map of connections or something that needs interfaces. Register it and start it with go Native("name"). Use imgo, our cut-down Go, when you want the stronger promises: nothing can reach in, the code can be changed live, and the only way out is through a port (Go code the process sends requests to). Both kinds run side by side and can message each other.
How does changing code live actually work?
A process switches to the new code between two messages, never in the middle of one. Messages already waiting stay in line. If the data’s shape changed, your conversion function runs once at that moment. HotSwap changes the running process; Migrate also changes what a later restart will use.
What gets compiled to machine code?
Any function in a process’s code that’s been called 1,000 times. (That code is written in imgo, our cut-down Go.) It helps most with loops and number work. If a function can’t be compiled it just keeps running in the interpreter, and the two are tested against each other to give identical results.
Why is the WebAssembly node interpreted only?
Because the compiler produces amd64 or arm64 machine code, and WebAssembly is neither. WebAssembly sets that limit. The whole runtime still runs there, and it’s a full member of the cluster.
What does “you’re told when a machine dies” mean in practice?
Every process watching something on that machine gets a Down message. A supervisor treats it like a crash and uses up one restart. So a dead machine can’t leave a process missing without anyone knowing.
Do I need to learn Erlang first?
No. The tutorials explain each idea in plain words and Go code. Nothing assumes you’ve seen Erlang.
Where does a process keep its data?
In its own block of memory inside your Go program. When the process ends, the whole block is handed back. That memory goes away when the program stops, so saving things to disk is up to you. If you need data to survive across machines, that’s what goer/crdt, our library for shared data, is for.