$ cat elixir/week/2026-10-19.log
the week in review · Oct 19 – Oct 25, 2026
Base validation rewritten with SWAR, beam shrinks 14.5%
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
The same week brought a second pass fixing the large-input regression this rewrite introduced, plus formatter fixes for output that had changed program meaning.
Optimize Base validation with SWAR case folding and 8-byte streaming elixir-lang/elixir
ASCII case folding via `bor` with 0x20 masks and SWAR word checks replaced the per-byte path in Base16, Base32 and Base64 validation: faster, less memory, and Elixir.Base.beam comes out 14.5% smaller (-31.1 KB). Validation of user-supplied encoded input is a common hot path, so the win shows up without code changes.
Fix large-input regressions in Base validation elixir-lang/elixir
The 8-byte stepping in the original patch extracted an extra byte and re-evaluated the character check, regressing large inputs. This follow-up fixes that while also improving small and medium inputs and cutting both LOC and beam size.
Keep parens on anonymous function calls with do-end blocks elixir-lang/elixir
The formatter printed anonymous function calls with :skip_if_do_end, so `callback.(conn, opts) do` came out as `callback. conn, opts do`, which does not parse, and `fun.(a).(b) do c end` could parse to something else entirely. If a file was formatted on the broken build, reformatting it is worth a diff review.
Keep parens on unary operators on the left of in elixir-lang/elixir
`!!x in y` was rewritten as `!(!x in y)`, which the parser reads as `!(!(x in y))`, changing the result; it now prints as `!((!x) in y)`. Fixed for `not` and in Macro.to_string/1 as well, so anything that round-trips quoted expressions through the formatter was affected.
Keep formatter output stable with comments elixir-lang/elixir
Comments could attach to the leftmost operand of an operator and get printed mid-expression, then move again on the next run. The fix pops the operand's comments together with the operator, which is what restores stable output across repeated `mix format` runs.
Keep formatter output stable for comments inside tuple arguments elixir-lang/elixir
The check for whether a call's last-argument tuple can start right after the call (`foo({`) had lost its comment lookahead, so comments inside the tuple moved the output. Restoring `eol_or_comments?` keeps those files stable.
Only mark global attributes as changed when they change phoenixframework/phoenix_live_view
A `:global` attribute declared on a function component is never in `__given__`, so Phoenix.Component.assign/3 marked it changed on every render and every expression reading it recomputed. That is a per-render waste in any component declaring globals.
Use batched Algorithm L in Enum.take_random/2 elixir-lang/elixir
Enum.take_random/2 drops the separate clauses for count == 1 and count <= 128 and the inside-out shuffle that needed random access per element, now using a batched Algorithm L that walks the enumerable once. Enum.shuffle/1 follows the same path, calling :rand.shuffle/1 directly on Erlang/OTP 29+.
$ ls elixir/week/ # the briefings behind this review
Keep up with Elixir & Phoenix in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.
Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.