|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +id: 179 |
| 4 | +title: "Erlang/OTP 28.0 Release Candidate 4" |
| 5 | +lead: "Erlang/OTP 28.0-rc4 is the fourth release candidate for OTP 28" |
| 6 | +tags: "release, OTP, 28.0-rc4, Release date" |
| 7 | +Candidate: "2025-05-05" |
| 8 | +author: "Björn Gustavsson" |
| 9 | +--- |
| 10 | +## OTP 28.0-rc4 |
| 11 | + |
| 12 | +Erlang/OTP 28.0-rc4 is the fourth release candidate before the OTP 28.0 release. |
| 13 | + |
| 14 | +The intention with this release is to get feedback from our users. |
| 15 | +All feedback is welcome, even if it is only to say that it works for you, |
| 16 | +and that it installs as it should. |
| 17 | +We encourage users to try it out and give us feedback either by creating an issue at |
| 18 | +[https://github.com/erlang/otp/issues](https://github.com/erlang/otp/issues) or by |
| 19 | +posting to [Erlang Forums](https://erlangforums.com/). |
| 20 | + |
| 21 | +All artifacts for the release can be downloaded from the |
| 22 | +[Erlang/OTP Github](https://github.com/erlang/otp/releases/tag/OTP-28.0-rc4) release |
| 23 | +and you can view the new documentation at |
| 24 | +[https://erlang.org/documentation/doc-16-rc4/doc](https://erlang.org/documentation/doc-16-rc4/doc/). |
| 25 | +You can also install the latest release using [kerl](https://github.com/kerl/kerl) like this: |
| 26 | + |
| 27 | +``` |
| 28 | +kerl build 28.0-rc4 28.0-rc4 |
| 29 | +``` |
| 30 | + |
| 31 | +Starting with this release, a source [Software Bill of Materials |
| 32 | +(SBOM)](https://www.cisa.gov/sites/default/files/2023-04/sbom-types-document-508c.pdf) |
| 33 | +will describe the release on the [Github |
| 34 | +Releases](https://github.com/erlang/otp/releases) page. We welcome |
| 35 | +feedback on the SBOM. |
| 36 | + |
| 37 | +Erlang/OTP 28 is a new major release with new features, improvements |
| 38 | +as well as a few incompatibilities. Some of the new features are |
| 39 | +highlighted below. |
| 40 | + |
| 41 | +Many thanks to all contributors! |
| 42 | + |
| 43 | +# Highlights for RC4 |
| 44 | + |
| 45 | +- The ancient ASN.1 modules used in `public_key` has been replaced with more |
| 46 | + modern versions, but we have strived to keep the documented Erlang API for the |
| 47 | + `public_key` application compatible. |
| 48 | + |
| 49 | +# Highlights for RC2 |
| 50 | + |
| 51 | +- Functionality making it possible for processes to enable reception of |
| 52 | + [priority messages](https://erlang.org/doc/system/ref_man_processes.html#priority-messages) has been introduced in accordance with |
| 53 | + [EEP 76](https://www.erlang.org/eeps/eep-0076). |
| 54 | + |
| 55 | +# Highlights for RC1 |
| 56 | + |
| 57 | +## New language features |
| 58 | + |
| 59 | +- Comprehensions have been extended with "zip generators" allowing |
| 60 | + multiple generators to be run in parallel. For example, |
| 61 | + `[A+B || A <- [1,2,3] && B <- [4,5,6]]` will produce `[5,7,9]`. |
| 62 | + |
| 63 | +- Generators in comprehensions can now be strict, meaning that if |
| 64 | + the generator pattern does not match, an exception will be raised |
| 65 | + instead of silently ignore the value that didn't match. |
| 66 | + |
| 67 | +- It is now possible to use any base for floating point numbers as per |
| 68 | + [EEP 75: Based Floating Point Literals](https://www.erlang.org/eeps/eep-0075). |
| 69 | + |
| 70 | + |
| 71 | +## Compiler and JIT improvements |
| 72 | + |
| 73 | +- For certain types of errors, the compiler can now suggest |
| 74 | + corrections. For example, when attempting to use variable `A` that |
| 75 | + is not defined but `A0` is, the compiler could emit the following |
| 76 | + message: `variable 'A' is unbound, did you mean 'A0'?` |
| 77 | + |
| 78 | +- The size of an atom in the Erlang source code was limited to 255 |
| 79 | + bytes in previous releases, meaning that an atom containing only |
| 80 | + emojis could contain only 63 emojis. While atoms are still only |
| 81 | + allowed to contain 255 characters, the number of bytes is no longer |
| 82 | + limited. |
| 83 | + |
| 84 | +- The `warn_deprecated_catch` option enables warnings for use of |
| 85 | + old-style catch expressions on the form `catch Expr` instead of the |
| 86 | + modern `try` ... `catch` ... `end`. |
| 87 | + |
| 88 | +- Provided that the map argument for a `maps:put/3` call is known to |
| 89 | + the compiler to be a map, the compiler will replace such calls with |
| 90 | + the corresponding update using the map syntax. |
| 91 | + |
| 92 | +- Some BIFs with side-effects (such as `binary_to_atom/1`) are |
| 93 | + optimized in `try` ... `catch` in the same way as guard BIFs in |
| 94 | + order to gain performance. |
| 95 | + |
| 96 | +- The compiler’s alias analysis pass is now both faster and less |
| 97 | + conservative, allowing optimizations of records and binary |
| 98 | + construction to be applied in more cases. |
| 99 | + |
| 100 | +## ERTS |
| 101 | + |
| 102 | +- The `trace:system/3` function has been added. It has a similar |
| 103 | + interface as `erlang:system_monitor/2` but it also supports trace |
| 104 | + sessions. |
| 105 | + |
| 106 | +- `os:set_signal/2` now supports setting handlers for the `SIGWINCH`, |
| 107 | + `SIGCONT`, and `SIGINFO` signals. |
| 108 | + |
| 109 | +- The two new BIFs `erlang:processes_iterator/0` and |
| 110 | + `erlang:process_next/1` make it possible to iterate over the |
| 111 | + process table in a way that scales better than `erlang:processes/0`. |
| 112 | + |
| 113 | +## Shell and terminal |
| 114 | + |
| 115 | +- The erl -noshell mode has been updated to have two sub modes called |
| 116 | + `raw` and `cooked`, where `cooked` is the old default behaviour and |
| 117 | + `raw` can be used to bypass the line-editing support of the native |
| 118 | + terminal. Using `raw` mode it is possible to read keystrokes as they |
| 119 | + occur without the user having to press Enter. Also, the `raw` mode |
| 120 | + does not echo the typed characters to stdout. |
| 121 | + |
| 122 | +- The shell now prints a help message explaining how to interrupt a |
| 123 | + running command when stuck executing a command for longer than 5 |
| 124 | + seconds. |
| 125 | + |
| 126 | +## STDLIB |
| 127 | + |
| 128 | +- The `join(Binaries, Separator)` function that joins a list of |
| 129 | + binaries has been added to the |
| 130 | + [`binary`](https://erlang.org/documentation/doc-16-rc2/lib/stdlib-7.0/doc/html/binary.html) module. |
| 131 | + |
| 132 | +- By default, sets created by module |
| 133 | + [`sets`](https://erlang.org/documentation/doc-16-rc2/lib/stdlib-7.0/doc/html/sets.html) |
| 134 | + will now be represented as maps. |
| 135 | + |
| 136 | +- Module [`re`](https://erlang.org/documentation/doc-16-rc2/lib/stdlib-7.0/doc/html/re.html) has |
| 137 | + been updated to use the newer PCRE2 library instead of the |
| 138 | + PCRE library. |
| 139 | + |
| 140 | +- There is a new `zstd` module that does |
| 141 | + [Zstandard](https://facebook.github.io/zstd/) compression. |
| 142 | + |
| 143 | + |
| 144 | +## Dialyzer |
| 145 | + |
| 146 | +- [EEP 69: Nominal Types](https://www.erlang.org/eeps/eep-0069) has been |
| 147 | + implemented. |
| 148 | + |
| 149 | +## SSL |
| 150 | + |
| 151 | +- The data handling for tls-v1.3 has been optimized. |
| 152 | + |
| 153 | +## Emacs mode (in the Tools application) |
| 154 | + |
| 155 | +- The `indent-region` in Emacs command will now handle multiline |
| 156 | + strings better. |
| 157 | + |
| 158 | +For more details about new features and potential incompatibilities see the [README](https://erlang.org/download/otp_src_28.0-rc4.readme). |
0 commit comments