Download Latest Version Bend 2.0.39 source code.zip (60.3 MB) Google Add to Preferred Sources
Home / v2.0.38
Name Modified Size InfoDownloads / Week
Parent folder
bend-2.0.38-darwin-arm64.tar.gz 2026-10-20 25.8 MB
bend-2.0.38-darwin-x64.tar.gz 2026-10-20 28.8 MB
bend-2.0.38-linux-arm64.tar.gz 2026-10-20 36.9 MB
bend-2.0.38-linux-x64.tar.gz 2026-10-20 36.9 MB
Bend 2.0.38 source code.tar.gz 2026-10-20 59.5 MB
Bend 2.0.38 source code.zip 2026-10-20 60.3 MB
README.md 2026-10-20 7.0 kB
Totals: 7 Items   248.3 MB 1
  • A compiled program's runtime options go between +RTS and -RTS (#1466, PR [#1530] by viridale). Breaking: ./main --threads 4 now passes --threads 4 to the program (IO.args); write ./main +RTS --threads 4 -RTS. A trailing -RTS may be left off, BENDRTS holds options too (the command line wins), -- stops option reading and reaches the program, and an unknown option inside the bracket is an error. --threads takes digits, --gpu takes on, off or a size in GB or MB.
  • JS modules keep their names apart. Breaking for JS hosts: a constructor's JS tag is its name in the file that declares it, so a value crosses modules and matches the right arm (#1105, PR [#1488] by oxura); imported export keys and foreign JS def ids keep their : (#1758, [#1759], [#1766], PR [#1760] by oxura).
  • TCP.send and TCP.try_send hand back unsent bytes, a List<&2, U32> to resume with TCP.send_bytes, so a write cut inside a UTF-8 character loses nothing (#1764, PR [#1765] by oxura). Breaking for code that read the residue as a String.
  • Native windows emit Text events with the typed characters on Linux and macOS (#1019, PR [#1441] by oxura).
  • A Char holds any u32 on every lane; a non-scalar becomes U+FFFD only where text leaves Bend (#1080, PR [#1411] by oxura).
  • --verdict:
  • The verdict says why each def it lists relies on unsafe or foreign code (PR #1531 by MattCozendey), and hints when those defs come only through unused imports (#1463, PR #1558).
  • A def specialized at a finite ~ parameter is checked by the kernel over each value, so an empty type no longer passes unchecked (#1186, PR #1225 by nicolas-abril); a ~ constant takes its model from the template's instances (PR #1580 by nicolas-abril).
  • The kernel accepts a self-call on a constructor rebuilt around a smaller part of its input, as the checker does (#1167, PR #1200 by nicolas-abril).
  • Fixes: annotations under η and let inlining (#1665, [#1669], PR [#1666] by aaaxn); a bare constructor in a type (#1619, PR #1620 by ScottMoore0); shared group prefixes (PR #1704 by sebastian-griego); kernel failures show their details (#1535, PR #1536 by viridale).
  • Faster:
  • A GPU bang chains its rounds on the device, three command buffers in flight, with no host round trip per stage (PR #1447 by nicolas-abril).
  • A flat generic def's spin takes words at its instance's layouts (#1195, PR #1588).
  • String.order walks both strings once: 8x on C, and String.eq of long strings no longer overflows the JS lane (PR #1459 by aldeni); String.contains is linear on JS (PR #1628 by sebastian-griego).
  • Emission allocates 40% less on large files (PR [#1617] by nicolas-abril); word matches with many literals compile faster (PR #1387 by Iann29).
  • U32.pow by squaring and F32.show without a second conversion on C (PRs #1567 and #1591 by sebastian-griego); F32.read rejects bad input in linear time (PR #1625 by toprameen); expired channel waiters leave in constant time (PR #1671 by sebastian-griego).
  • CUDA keeps its L1 cache in bend_dev (PR [#1602] by wakamex).
  • Fixes:
  • Metal: a full lane stack spills to the heap, so non-tail recursion under ! no longer faults at 1023 frames (#1393, #1394, PR #1439 by totaland).
  • C: a shared word is written back to its fork frame slot (PR [#1615] by viridale); a recursive spine is freed cell by cell (#1307, PR #1438 by oxura); native channels free their rows and unread values (#1268, PR #1532 by oxura); Nat powers and bit widths take checked paths (#1709, #1710, PR #1713 by oxura); functions only an effect calls stay reachable (#1711, #1712, PR #1714 by oxura); the crash trap is async-signal-safe (PR #1655 by adeerkhan).
  • IO: ready effects yield to other computations every 64 (#1719, PR #1723 by oxura); IO.exit flushes buffered output (PR #1519 by vicmcorrea); file and JS stream writes fail on zero progress (#1445, PRs #1446 by oxura and #1747 by vicmcorrea); nested JS IO schedulers are isolated and resume their own channel waiters (#1524, #1761, #1770, PRs #1525 and #1762 by oxura); UDP receive buffers are bounded (#1695, PR #1698 by oxura); TCP.connect checks its arguments on JS (PR #1618 by vicmcorrea); JS Audio.write counts whole frames and paces on monotonic time (PRs #1683 by toprameen and #1597 by vicmcorrea).
  • Base: List.any, all, contains and find stop once the answer is known (#1726-#1729, PR #1730 by oxura); prefix checks stop at the prefix (#1640, PR #1645 by EpsilonPhoenix); F32.round keeps negative zero and rounds once (#1611, PRs #1613 by oxura and #1547 by vicmcorrea); F32.lerp stays finite and keeps its endpoints (#1607, #1749, PRs #1608 and #1754 by oxura); F32.to_nat keeps wide values (#1636, PR #1642 by oxura); JS U32.to_f32 keeps zero positive and scalar F32 host inputs are rounded (#1692, #1568, PRs #1693 and #1569 by oxura).
  • Effects: CID/FID are scanned with the source's own comment rules (#1604, PR #1653 by adeerkhan); a bad Nat from a JS host says its range (#1634, PR #1656 by oxura).
  • CLI:
  • bend page.html -o <dir> never overwrites its own page (PR [#1690] by toprameen); inline HTML modules stay apart from real assets and from each other (#1752, #1753, #1767, PRs #1756 and #1768 by oxura); decoded module paths are classified right (#1570, PR #1571 by oxura).
  • Output finishes after short writes to a pipe (PR [#1691] by toprameen); a failed update check keeps the command's status (PR #1603 by vicmcorrea); filtered Base output keeps @unsafe (PR #1538 by toprameen).
  • Tools: the formatter keeps column-pinned blocks, nested match arms, inline bodies and mixed line endings (PRs [#1302] by dearlordylord, [#1755], [#1672] by oxura, [#1583], [#1584], [#1590], [#1757] by vicmcorrea and sebastian-griego); the LSP keeps match scopes across forall bodies (PR [#1791] by vicmcorrea). Breaking for bend-lint rule authors: option constructors are OptionNum, OptionFlag and OptionText (PR [#1565] by vicmcorrea); bend-lint also fixes new buffers, cancelled runs and downloaded checkouts (PRs [#1745], [#1746] by oxura, [#1587], [#1605] by vicmcorrea).

Install: curl -fsSL https://bend-lang.com/install.sh | sh (or Homebrew: brew install bendlang/bend/bend, or Nix: nix profile install github:bendlang/bend).

sha256:

  • 9d5331d01e82dac40dd012953e78221f533f7df7ad7e16b07f1f7bd0dcd088dd bend-2.0.38-darwin-arm64.tar.gz
  • 870be3b91290e14259dba432788c71d7190d8984f8606255e5333c3a03896d5a bend-2.0.38-darwin-x64.tar.gz
  • 1f7c6e74a6ef7412cf08eee0e4d45fe5960f89d66fdaca2466f6a4856f0d400a bend-2.0.38-linux-arm64.tar.gz
  • f19d088b079c9e1a8834ecd153b7d58c11a5f8f9ab1bdb78dbc96a6bf49aaa81 bend-2.0.38-linux-x64.tar.gz
Source: README.md, updated 2026-10-20