5. Compare and Swap for ETS

OTP-14319 Application(s): stdlib

Related Id(s): PR-1076



Add new function ets:select_replace/2 which performs

atomic "compare-and-swap" operations for ETS objects

using match specifications.

This one is something many of us were waiting for and working around in super-nasty ways for a long long time. A nice compare-and-swap for ETS is something I will certainly use in the future.

4. You can use ct_slave with rebar3 now

OTP-13806 Application(s): common_test



The ct_slave modules now handle nodenames in the same

way as nodenames passed to -sname. That means

ct_slave:start('b@127.0.0.1'). will now work.

Another one that we have fought for a long time. As stated in this article (look for The Bad there), ct_slave and rebar3 weren’t friends. There was a workaround, of course, but it was super ugly and it basically involved not using ct_slave at all. That’s why this fix is more than welcomed.

3. Limit the logs backup on CT

OTP-14179 Application(s): common_test



Added the new option, keep_logs. If setting the value

for this option to an integer, N, common_test will

remove all ct_run.* directories in the current log

directory, except the N newest.

Besides making Loïc extra happy, this option will prevent me from starting every test run with rm -rf logs and then hating myself for not keeping track of previous runs 🤦‍♂️.

2. Write Pids and ports in the shell

OTP-14296 Application(s): debugger, stdlib



The Erlang shell, qlc:string_to_handle(), and the

Debugger (the Evaluator area and Edit variable window

of the Bindings area) can parse pids, ports,

references, and external funs, as long as they can be

created in the running system.

I still have to try it (I use Erlang Solution’s OSX Installer and it doesn’t provide RCs), but if it means what I think it means (i.e. that erlang:is_process_alive(<0.1.0>). will work in the Erlang shell)… That would be the single most amazing feature of this release! I’ve been expecting this (particularly for ports, thanks Fred for recon:port_info/1,2!!! 😱) since my first encounter with an Erlang shell 10 years ago.

1. Drop all the Callback Boilerplate

OTP-13801 Application(s): stdlib



Making code_change, terminate and handle_info callbacks

optional in the OTP behaviours.

I honestly don’t know how this is not a highlight. Check the full conversation started by this tweet below…