The JIT in OTP 24 mentioned at the top was discussed in <a href="https://news.ycombinator.com/item?id=24441841" rel="nofollow">https://news.ycombinator.com/item?id=24441841</a><p>I am looking forward to more blog posts about it.<p>A few interesting snippets from the PR comments from it:<p>---<p>[...] number of Estones as computed by the estone benchmark suite becomes about 50% larger, meaning about 50% more work can be done during the same time period. Individual benchmarks within the estone benchmark suite vary from a 170% increase (pattern matching) to no change at all (huge messages)<p>[...] If we run the JSON benchmarks found in the Poison or Jason, BeamAsm achieves anything from 30% to 130% increase (average at about 70%) in the number of iterations per second for all Erlang/Elixir implementations.<p>---
I’ve heard that errors in native code called via FFI in BEAM code is the primary place where the runtime can behave uncharacteristically. I haven’t seen anyone in the community describe it this way but it has the feel of undefined behavior to it.<p>There’s apparently some heightened interest in Rust for these purposes because its guarantees offer some additional robustness here.<p>But having JIT for the BEAM changes the calculus of whether it’s worth maintaining your code in two languages for a speed improvement that comes with additional liabilities. It will be interesting to see what libraries and tools become pure as the JIT covers more territory.
well, this is pretty timely. I have been peeking at some of the opcodes in the BEAM and some of this stuff I had gotten wrong; since there isn't AFAICT easy-to-find documentation on how this works. Does anyone know of other resources along these lines?
I was surprised to read that the BEAM has no concept of processes.<p>I assume that the BEAM has some primitives to do with reduction counting and pre-emption that can be used to implement the full erlang process, but the BEAM book (<a href="https://blog.stenmans.org/theBeamBook/#_concurrency_parallelism_and_preemptive_multitasking" rel="nofollow">https://blog.stenmans.org/theBeamBook/#_concurrency_parallel...</a>) isn't very clear which bits are in the C code (the BEAM) or the Erlang code (the ERTS).
In the exception example, there is a line saying:<p><pre><code> {'try',{y,0},{f,13}}.
</code></pre>
Why is the symbol `try` quoted here? Does it need to, if its name is all lowercase?
Has anyone seen benchmarks of the new JIT vs HiPE?<p>Everything I’ve read is comparing the JIT to the interpreter, but HiPE itself is faster than the interpreter. So is JIT faster than HiPE?
what's the recommended IDE for erlang dev? I've tried getting emacs setup but boy it's a struggle. I tried following this beast of a guide with questionable results,<p><a href="https://www.lambdacat.com/post-modern-emacs-setup-for-erlang/" rel="nofollow">https://www.lambdacat.com/post-modern-emacs-setup-for-erlang...</a>