←back to thread

78 points ronxjansen | 7 comments | | HN request time: 1.118s | source | bottom
1. fud101 ◴[] No.44540240[source]
I thought elixir devs have cooled on the whole hot reload update or is this different?
replies(4): >>44540247 #>>44540291 #>>44541102 #>>44541400 #
2. conradfr ◴[] No.44540247[source]
That seems more about loading dynamic code.
3. elitepleb ◴[] No.44540291[source]
Elixir removed a jankier https://www.erlang.org/doc/apps/sasl/appup.html mechanism that defined how state is upgraded or downgraded, while watching a directory and recompiling a module automatically or manually from the repl is still common
replies(1): >>44540328 #
4. diggan ◴[] No.44540328[source]
> while watching a directory and recompiling a module automatically or manually from the repl is still common

That makes it sound like the "hot" part has been removed then, and it's just basically a "live reload" rather than "hot code loading", is that right? There is no persistent state and you get a fresh one after the automatic compilation happened?

replies(1): >>44540380 #
5. elitepleb ◴[] No.44540380{3}[source]
queued messages stay around in the mailboxes, so no state is lost, but don't get migrated/transformed/versioned via the appup mechanism, unless you opt back into it via libraries for it like https://github.com/ausimian/castle
6. thibaut_barrere ◴[] No.44541102[source]
Overall, it's not widely used nor pushed (blue green deployments are now very common), but it still has interesting uses.

For instance, very high availability without blue-green (using a front-end that can be hot-patched), or... musical endeavors (such as live reloading code that generates music, on the go) https://youtu.be/_VgcUatTilU?si=DDfe4FN3Nw9OzRhF&t=122

7. chantepierre ◴[] No.44541400[source]
I'm not using this to update the app itself - which is a docker container that gets updated when I push a new version. I'm simply using the BEAM's code loading capabilities to add client-specific parts to the app while it is running. They are part of the monorepo (and thus part of the app at dev time), but get stripped at build-time so they can be selectively loaded later.