tobleron

tobleron

If any of you knows a resource (website, docs, articles) where I can access to see a comparison of how both of these ecosystems works, it would be great.

Delving into NodeJS a bit, I feel like there is a lot of similarities:

  1. npm ↔ hex
  2. Chrome V8 (Javascript → C++ → machine code) ↔ Erlang Runtime (Elixir → Erlang → machine code)
  3. As far as my research can tell both ecosystems can run asynchronous code but would love to read more resources about this topic if exists.
  4. NodeJS speed depends on asynchronous processing whereas Erlang depends on ultra lightweight synchronous processing (optionally asynchronous).

One thing I am trying to get my head around is a missing layer. NodeJS is not a framework, but isn’t it doing a lot of the work that a phoenix web server is doing, or is it more fair to compare Elixir with NodeJS and Phoenix with ExpressJS?

The purpose of the comparison is not to see what is superior as obviously the use cases may be different, but it’s more like to understand where they are similar and where they are different. I am just brainstorming with you!

Showing Posts 1 to 3

mythicalprogrammer

mythicalprogrammer

Chrome V8 doesn’t goes from javascript to C++ to machine code. It compiles directly to machine code according to the wikipedia.

As far as my research can tell both ecosystems can run asynchronous code but would love to read more resources about this topic if exists.

NodeJS runs on one giant event loop last time I check. I believe there is a threading library API over yonder. So the programmers themselves are doing to “thread logic” when they do async stuff and catching all those error and weird logic cases.

Erlang you can just create bunch of Erlang’s processes. The whole concurrency concept is built into the language unlike Javascript so it’s pretty nice to write logic in Erlang/Elixir. The actor model that Erlang/Elixir uses is imo easier to reason with and easier to mentally model than NodeJS async style. But then again you’re asking in an Elixir forum…

One thing I am trying to get my head around is a missing layer. NodeJS is not a framework, but isn’t it doing a lot of the work that a phoenix web server is doing, or is it more fair to compare Elixir with NodeJS and Phoenix with ExpressJS?

NodeJS is just this technology that enable programmer to do javascript backend using V8. It also push for this async style concurrency paradigm.

You can compare Javascript to Elixir (they’re both languages).

Phoenix to ExpressJS (web framework).

NodeJS’s concurrency model (Async) to Elixir/Erlang’s concurrency model (Actor Model).

V8 vs BEAM VM I guess.

You can read about Erlang/Elixir’s VM here: Distributed Systems Chair

It’s a paper what makes Erlang’s VM unique and why it’s suited for concurrency.


For an overview of Erlang’s/Elixir’s Concurrency model try this:

hauleth

hauleth

As it was said earlier V8 do not translate JS to C++ but rather uses its’ own internal representation that then is converted to the machine code. This is called JIT.

This isn’t true either, at least not in general case. IIRC Erlang do not have JIT compiler right now (but there is work in progress to allow that) and it always interpreted intermediate language which is low-level description of instructions, something like WASM. However there is HiPE compiler that is ahead-of-time compiler of Erlang code to native code which enables performance boost but with cost (barrier between HiPE and non-HiPE code is slow and it disables few Erlang features).

Node/V8 cannot process data in parallel within single VM instance, BEAM does that natively. It is worth remembering that Node/V8 is single-threaded environment that runs big event loop (kqueue/epool/etc.).

Yes, in Node everything depends how few cycles you spend in the JS and instead you will allow everything to spend in wait. BEAM in that manner do not care that much as it allows you to run things in parallel when possible.


Comparison to be fair should be made between:

  • V8/NodeJS vs BEAM as an virtual machine - and to make it even more fair it should be Nx NodeJS + IPC (where N is the amount of CPU cores available) vs BEAM, or NodeJS vs BEAM with 1 scheduler enabled.
  • Elixir vs JavaScript/NodeJS - as a language and a “standard library”
  • Phoenix vs ExpressJS/whatever other web framework there is
tobleron

tobleron OP

Wow, this topic seems more complex than I thought, but I am thankful for all your detailed responses!

— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
matt-savvy
Anyone here using Honeybadger? My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of Bandit.HTTPError...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews