Erlang/OTP 24 Release Candidate 1
erlang.org
erlang.org
Synthetic benchmarks of the Elixir GraphQL implementation show a 64% improvement! Very excited to see how this plays out with real load, but this is very promising.
I just went to leave a slack message to my team about your report in the middle of the night, and discovered that another teammate had already just excitedly mentioned it. Thanks for what you do!
Compiler warnings and errors now include column numbers in addition to line numbers.
I remember reading this warning in the the Absinthe book (pg 90).
"Notice that the column value in the error is 0. Due to a current limitation of the lexer that Absinthe uses (flex)."
Do you think this will be solved as well?
OTP23 — 467.36s
OTP24rc1 — 296.16s
So nice!
The EEP dives right into the problem of "late replies" with little detail explaining the concept. I haven't ran into the problem the EEP is trying to solve but I am interested in understanding it. Can anyone provide more details on how a late reply emerges during gen_server client/server message passing and how an alias is intended to solve the issue? Is this only a problem with distributed messages?
It looks like "late replies" are a problem under an additional constraint that's mentioned in the Motivation section,
"When the author of the client code has full control over the client process such late replies can be handled without a proxy since the code can be aware of these potential stray messages and drop them when received."
So.. you have a server sending messages over distributed erlang to a client that the author doesn't control which can risk receiving late messages if a connection is lost? Ugh.. what?
I tried thinking about this from the proxy process angle as a solution to this mysterious problem,
"Since the proxy process is not alive, a reply will be silently dropped and no stray message will reach the previous client of the request."
But, if a "connection lost" event occurs, why would a message make it to the client to begin with? Why is the client still alive? If the connection is re-establish, then why drop the message?
Wish the EEP more clearly articulated the class of bugs / issues its intending to address and when they occur.
If the call was part of a library function, you can return {error, timeout} or whatever, but the process you ran in will have that reply message in its mailbox, possibly forever if it only does selective receives. This will show up in your system as growing memory use, and slowing message processing (unless all of your messaging is selective receives with new references that benefits from the mailbox marking optimization).
In the proxy process alternative, you would spawn a new process to do the gen_X:call, and message back to the real client process. Any late replies get discarded as the spawned process will be dead. But spawning a process isn't free, even if an Erlang process is much lower cost than an OS thread or process. Without looking at details of the implementation, using a process alias seems like a reasonable optimization.
But some additions require a new Elixir release. One that comes to mind was the new guard clause to check if a key is in a map.
But. Elixir maintain a 2 otp release compatibility. So the elixir stdlib cannot use new functionality until the release of elixir in 2 years.
You can, ofc, just call the erlang lib yourself.
So on this one, you get the JIT or my float_to_string pretty printer speedup for free. But the Map module cannot use the new maps functions for 2 years.
VM Performance improvements - normally this is minor but for this release it's a big big thing
Bug fixes - to standard library and VM
New Erlang APIs to use directly - you can call Erlang functions easily from Elixir, allowing you to leverage new standard library features, but they won't be used by Elixir because of the compatibility guarantees discussed elsewhere here
Erlang/OTP 23 [erts-11.1.6] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
Elixir 1.11.3 (compiled with Erlang/OTP 23)