Repository navigation
Releases
Velt 0.6.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.6.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.6.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
Breaking change: .vlt is now .velt
Source files move from .vlt to .velt, and a package's manifest from package.vlt to package.velt. Rename your files; a build that finds the old names says so. scripts/velt-ext.py in this repository does it for a checkout, and for a branch. The VS Code extension needs its new version for the new extension.
What's Changed
- simd: f32x4/f64x2 mulAdd (fused, exact) and mulAddFast (may fuse) (#1981 step 7) by @andtii in #2020
- lang: host functions (declare host("m") function) become wasm imports by @andtii in #1989
- prelude: rotateLeft, rotateRight and swapBytes on every integer type (#1981 step 6) by @andtii in #2023
- vir, codegen, opt: one registry of the runtime math operations (#1981 step 1) by @andtii in #1988
- opt: fold runtime math operations on constants (#1981 step 2) by @andtii in #1993
- vir: Rvalue::Intrinsic, pure operations as statements (#1981 step 3a) by @andtii in #1997
- opt: numrep on math operations as statements (#1981 step 3b) by @andtii in #2003
- docs: the intrinsics design (#1981) by @andtii in #2004
- vir: lowering emits math operations as statements (#1981 step 3b) by @andtii in #2016
- vir: MathOp::signature and Intrinsic::signature return a static slice, no allocation (#1981) by @andtii in #2017
- velt_build_cache: one lock order for a shard, so collecting garbage and storing can't deadlock by @andtii in #2031
- loader: conditional imports (#name specifiers resolved by build conditions) by @andtii in #1987
- simd: i32x4.dotAdd, the int8 dot product (#1981 step 7) by @andtii in #2032
- veltc: link to a temporary file and rename it into place, so concurrent velt test runs never start a half-linked program by @andtii in #2035
- sema: the prelude's extend methods are checked when code reaches them (#1981) by @andtii in #2041
- sema: two doc-comment links point at the veltlang.com reference pages by @andtii in #2042
- wasm: tasks wait on host promises; the executor runs turns the host drives by @andtii in #2007
- llvm, rt: i32x4.dotAdd is one sdot on arm64 CPUs with the dot product; --cpu's arm64 features and their start-up check (#1981 steps 5b, 7) by @andtii in #2033
- prelude: checked, saturating and wrapping Add, Sub and Mul on every integer type (#1981 step 6) by @andtii in #2025
- http-server: the idle-timeout test measures from before the last request by @andtii in #2046
- vir, opt, codegen: math operations are statements only; the call-form paths go (#1981 step 3c) by @andtii in #2038
- generators: editor diagnostics, a time limit and --no-generators, unforgeable host records by @andtii in #1966
- std: fetch on JS hosts goes through the host's fetch (#http-transport) by @andtii in #2044
- numrep: call_result no longer computes an argument fact it doesn't use by @andtii in #2053
- sema, vir, runtime: read callbacks keep what they make as the same object, and storing the lock's parts outside a read is an error by @andtii in #1559
- doc: the std type package declares its symbol keys (#2055) by @andtii in #2060
- vir, codegen, std: f32.toBits() and f32.fromBits(), math operations no runtime defines (#2049 step 0) by @andtii in #2059
- rt: function-property tables hash addresses with one multiply instead of SipHash by @andtii in #2068
- vir, codegen: f16 and bf16 conversions as math operations, one instruction or a branchless sequence by @andtii in #2090
- host: velt build --host ; hosts are packages, the glue's core is host-neutral by @andtii in #2047
- sema: operator methods,
a op b,-aand~acall[Symbol.op](#2050 steps 1-2) by @andtii in #2093 - codegen (Cranelift): memory locals share stack slots when their live ranges are disjoint (#2048) by @andtii in #2064
- sema: this-functions as values, generator types and expressions, then and reject for sigx (#942, #943, #379) by @andtii in #2073
- cloudflare: R2, D1, KV, cache and Durable Object stubs as a package (#1738) by @andtii in #2131
- ci: the merge queue's full check gets 75 minutes by @andtii in #2130
- sema, vir, opt, llvm: std's inlining markers, inline() and noInline() (#1884) by @andtii in #2116
- sema: compound assignment and indexing through operator methods (#2050 steps 3-4) by @andtii in #2094
- vir, std: any objects convert to Record<string, V>; Array.prototype methods through any take the this apply/call/bind pass (#1219, #942) by @andtii in #2052
- std, sema: velt/ops, operators in generic code (#2050 step 5) by @andtii in #2095
- http-server: serve on a JS host, over std's velt/host/worker by @andtii in #2138
- sema: casts, structural field reads and object unions on sigx's server path (#924, #930, #1185) by @andtii in #2133
- Release blockers: memory safety, server state, catchable byte-buffer errors, JS evaluation order by @andtii in #2024
- std, sema: operators on velt/simd vectors, BigInt and Duration (#2050 step 6) by @andtii in #2096
- sema, vir: f16 and bf16, storage floats that compute in f32 by @andtii in #2108
- lsp, ts-compat: operators in the editor and in the TypeScript subset (#2050 step 7) by @andtii in #2097
- sema, vir, std: f16 and bf16 compound assignment, ++/--, toBits/fromBits, sort, and as from any by @andtii in #2153
- sema: the BigInt mixed-operand note uses the operands as written by @andtii in #2167
- std, vir, opt: numbers as text in Velt, built in registers and stored into the string (#1982) by @andtii in #1996
- sema: a literal on the right of an f16/bf16 compound assignment is an f32; an any there needs as by @andtii in #2166
- std: JSON numbers, StringBuilder numbers and toFixed in Velt (#1982) by @andtii in #2005
- docs: design note for declared write effects (#854, #2014) by @andtii in #2180
- veltc, ci: a Worker under workerd in the merge queue and nightly, with size, start-up and CPU budgets (#1739) by @andtii in #2185
- http-server, docs: two comment lines wrapped at 100 columns by @andtii in #2193
- docs: design note for native code through declare c and unsafe (#2187) by @andtii in #2200
- vir, llvm, cl, std: integer vector sum() wraps in the lane type, sumWide() widens (#1981) by @andtii in #2194
- rt, llvm, std, http-server: a panic in a request handler answers 500; catchPanic in velt/task (#2008) by @andtii in #2137
- sema: f16 and bf16 compute as number: arithmetic in f64, a store rounds once (#2049) by @andtii in #2191
- common, xtask: the hook table names the externs each hook replaces and its benchmark; a guard against new uses by @andtii in #2211
- sema: generator widening, generator results of interface methods, object | undefined (sigx batch 5) by @andtii in #2171
- loader: the program loader is its own crate, velt_loader, so tests and tools load programs as velt build does by @andtii in #2210
- std, http-server: a received Request's signal aborts when the client goes away (#2074, part 1) by @andtii in #2215
- vir: lowering a large function in linear time; compile-speed scale benchmark (#2189) by @andtii in #2202
- registry-core: package and user names, semver versions and package archives in Velt, checked against vpm (#1740 step 1a) by @andtii in #2207
- syntax, sema: m[i, j], an operator indexer with s...
Velt 0.5.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.5.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.5.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- sema: overload callbacks with a rest parameter, conditional spreads, optional method calls, template-literal regex groups (#379) by @andtii in #1583
- sema, vir: a throw inside a proxy trap leaves the operation that ran it (stage 1 of #1174) by @andtii in #1474
- sema, std: ReadonlySet/ReadonlyMap, number-keyed records, globalThis with variable keys and declare global, Record<symbol, unknown> casts (#379) by @andtii in #1558
- syntax, sema: a script may declare its own main and call it, as in Node (#1567) by @andtii in #1604
- lsp: a std file opened in the editor is checked as its std module by @andtii in #1611
- sema, std: classes as plain values, x.constructor, Object.create/assign cases, call/bind and Error.stack for sigx by @andtii in #1585
- std: BTreeMap, an ordered map as a B+tree in pure Velt (#1543 step 1) by @andtii in #1545
- bench: check_all_std checks every std module; the bench job runs on a fixed image by @andtii in #1616
- sema: extend X implements I, retroactive implements with the most specific block per type (#1546) by @andtii in #1548
- opt: Math.min / Math.max without a rest array; module state looked up once per function call by @andtii in #1575
- opt: local number[] arrays of whole numbers stored as integers (#525 step 5) by @andtii in #1617
- std: BTreeMap on public APIs any package can use; faster than Rust std and bbtree on Apple M4, behind bbtree on x86 u64 delete (#1543 step 2) by @andtii in #1560
- sema, vir: generic interface methods called on interface values (#943) by @andtii in #1561
- sema: generic recursive union aliases, Awaited and uninitialized module lets for sigx (#379) by @andtii in #1626
- sema: narrowing of module-level lets, record keys and loop updates (#379) by @andtii in #1603
- sema, vir: getter literals as views, accessor writes through any, identity keys and symbol record reads for sigx (#379) by @andtii in #1628
- Array length limit: at most 2^52 - 1 elements, enforced, so
i <= xs.lengthcounts in integers by @andtii in #1581 - sema, vir: generic function values through tables of instantiations (#943) by @andtii in #1562
- sema: types and values share a name in separate namespaces, as in TypeScript, for sigx (#379) by @andtii in #1634
- vir, codegen: velt_atomic_* externs emitted inline by both backends (atomics step 1a) by @andtii in #1619
- goldens: timer_captures orders its timers by creation and delay, not by how fast the setup runs by @andtii in #1648
- sema, vir, std: Atomic, a word in place that threads change at once (atomics step 1b) by @andtii in #1620
- std: velt:sync (Backoff, VersionLatch) on Atomic, and bench/atomics against Rust (atomics step 1c) by @andtii in #1621
- sema: calls of prelude helpers throw what the helper throws, so sigx's signal() lowers (#379) by @andtii in #1652
- rt: spawned tasks that compute start at once on idle workers (atomics step 1d) by @andtii in #1623
- simd, std: T.loadOptimistic, a vector load of Atomic words for optimistic reads (atomics step 2a) by @andtii in #1639
- sema: closures before the const they use, and unknown narrowing, for sigx (#379) by @andtii in #1647
- sema, std: records hold symbol keys and defined accessors in tables of their own (#1629) by @andtii in #1643
- codegen, cli: x86_64 code is for x86-64-v2 by default; --cpu, VELT_CPU and build.cpu choose another CPU; a start-up check names a missing feature (#1613) by @andtii in #1614
- opt: read fields of frozen borrowed params once, also around atomics, fences and calls (atomics step 1e) by @andtii in #1624
- opt: frozen fields are read once also through pointers to them and when their address is taken (atomics step 2b) by @andtii in #1641
- opt: decide range checks an earlier check proves (bounds) (atomics step 2b) by @andtii in #1640
- std: ConcurrentMap, a u64 map many threads read and write at once (atomics step 2) by @andtii in #1644
- sema: static methods of primitive types,
f64.half(x)(#1679) by @andtii in #1684 - docs: CLAUDE.md lists the pitfalls agents hit by @andtii in #1698
- docs: CLAUDE.md: a shared target directory also reads the other worktree's std by @andtii in #1703
- docs: design notes for the JSON engine and for building strings fast by @andtii in #1691
- docs: concurrent_map's x86 numbers after the cheaper leaf split; rewrap two long lines by @andtii in #1705
- sema: rejecting promises stored into Promise written without an error type, for sigx (#379) by @andtii in #1650
- syntax, sema: abstract classes and abstract members (#1568) by @andtii in #1683
- std: String.fromCodePoint and string codePointAt (#1678) by @andtii in #1692
- opt: elide read-only string copies (clone/drop pairs) (#1670) by @andtii in #1693
- lang: f64 bit casts, x.toBits() and f64.fromBits(b) by @andtii in #1704
- lang: Atomic and Atomic, with add, sub, max and min as compare-and-swap loops by @andtii in #1712
- sema: getters in object literals and callback parameter types from the call, for sigx (#379) by @andtii in #1671
- rt, vir, sema: promises compare and hash by identity, through shares and conversions (#1682) by @andtii in #1687
- codegen: string byte loads carry the array element alias tag (#1669) by @andtii in #1694
- std: ConcurrentMap reuses emptied leaves, so keys moving to new ranges fit a fixed capacity (#1689) by @andtii in #1708
- lang: ThreadLocal, one value per thread, as the platform's thread-local storage (reclamation step 1, #1696) by @andtii in #1714
- vir: zero-sized members and promises through
any, for sigx SSR (#379) by @andtii in #1731 - docs: maintainer loop driven by events, resumed reviewers, what a review requires, queue triage by @andtii in #1730
- vir, codegen: static atomics, a module const made by
new Atomic<T>(literal)is a writable word with no module lock (reclamation step 2a, #1696) by @andtii in #1741 - docs: design note for compiling std's Velt code once, a cached std object (#1728) by @andtii in #1743
- bench: the JSON corpora (canada, citm_catalog, twitter) against serde_json, sonic-rs, simd-json and Node (part of #1657) by @andtii in #1746
- link: Windows executables get an 8 MiB main-thread stack, as on Linux, macOS and WebAssembly by @andtii in #1750
- vir: a receiver holding an Atomic is never copied to hold it against later arguments by @andtii in #1761
- rt: threads that run tasks get an 8 MiB stack, as the main thread has by @andtii in #1759
- lang: Atomic<shared> and Atomic<shared | null>, a word owning one counted reference (reclamation step 2b, #1696) by @andtii in #1742
- vir: Promise combinators over an array the program keeps, for sigx (#379) by @andtii in #1749
- opt: numrep's flow analysis linear in the size of a function (#1658) by @andtii in #1767
- lang: load() of an Atomic of a shared value is an uncounted borrow (reclamation step 2c, #1696) by @andtii in #1763
- sema: error types through recursion and adapted closures, for sigx (#379) by @andtii in #1753
- rt: the monitor rescues a stalled worker only when another worker can take its tasks (#1673) by @andtii in #1748
- std: velt:sync/epoch, epoch-based reclamation in Velt (reclamation step 2d, #16...
Velt 0.4.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.4.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.4.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- codegen_cl: described scalars stay in registers, written through to their slot by @andtii in #1030
- runtime: per-core workers as one-worker multi-thread runtimes, so a cross-worker wake unparks only an idle worker (#211 step 3, part 1) by @andtii in #1034
- debug info: variables in Windows debug builds by @andtii in #1031
- bench: stdport, standard-library components against the Rust crate for the same job by @andtii in #1051
- codegen: Math.umulh as one multiply instead of a runtime call by @andtii in #1052
- codegen_cl: a variable's scope is a few ranges, not one per later statement (nightly compile-stress on Linux) by @andtii in #1054
- std: a null value in a Map is a value, not a deleted entry by @andtii in #1008
- bench/stdport: executable run.sh, a limb-multiply row; umulh in the inline-helper goldens by @andtii in #1062
- vir: JSON.stringify pushes a member's separator and key together by @andtii in #1067
- std/encoding: Base64 without a table and copies per call by @andtii in #1058
- TS compat: the in operator with string keys, and generator methods in object literals by @andtii in #1026
- std/url: parse by scanning in place instead of copying each component by @andtii in #1063
- WeakMap, WeakSet and WeakRef in the language (#823 step B2) by @andtii in #969
- runtime: SQLite rows reach JSON.parse in binary form by @andtii in #1060
- bench: the feed API of the $12 server challenge on std/http + std/sqlite by @andtii in #1061
- Module constant tables: an array of number or boolean literals is read-only data by @andtii in #1065
- sema: Velt-only type names (u8, f32, bool, …) are shadowed by the program's type declarations by @andtii in #1086
- bench: chatbench and the WebSocket benchmark (#1023) by @andtii in #1059
- vir: transfer checks treat only classes something extends as reaching any subclass; regression goldens for #1057 by @andtii in #1085
- undefined as its own value: T | undefined, void, typeof, ==, printing, JSON (phase 1a of #930) by @andtii in #1013
- TS compat: function expressions, this types, assertion functions and more sigx syntax by @andtii in #1089
- simd: 128-bit vector types from velt:simd (u8x16, f32x4, …), inline in both backends by @andtii in #1068
- std: console levels, toString(radix), Error.name and the standard error classes by @andtii in #1092
- TS compat: overload signatures without semicolons, unions after as, computed keys, import.meta, declare global/module by @andtii in #1090
- Compile npm workspace packages from source: package.json exports, define, ambient declare const, scoped names by @andtii in #1091
- Conditional, mapped and template literal types (phase 1 of #934) by @andtii in #1099
- Promise then, catch, finally and queueMicrotask in Node's order by @andtii in #1097
- std: btoa, atob and DOMException as in Node (step 2 of #946) by @andtii in #1116
- any and unknown as one run-time-checked dynamic value (phase 1a of #924) by @andtii in #1103
- await resumes through the task's microtask queue, in Node's order by @andtii in #1122
- TS compat: generic object-literal methods, optional parameters in function types, variadic and optional tuple elements, generic method signatures in types, var, catch annotations by @andtii in #1113
- Function.prototype.call and apply on function values by @andtii in #1127
- Deferred conditional, mapped and template literal types in generic code (phase 2 of #934) by @andtii in #1120
- std: typed arrays, ArrayBuffer and DataView as in Node (step 1 of #946) by @andtii in #1118
- TS compat: namespaces of types and call signatures in interfaces and object types by @andtii in #1108
- std: hexEncode and hexDecode with SIMD by @andtii in #1070
- std: ReadableStream, its controller and reader, and stream bodies, as in Node (step 3 of #946) by @andtii in #1119
- Promise.reject of a field's error keeps it alive by @andtii in #1147
- Nested functions as hoisted closures, generators in local async closures, closure error types in recursion (#1081, #1084, #1111) by @andtii in #1145
- Object literals implementing interfaces with methods: contextual parameter types, getters and setters (part of #941) by @andtii in #1130
- lower: keep a function value alive while a call through its holder runs (#1146) by @andtii in #1150
- any: member reads and calls through the descriptor (phase 1b of #924, part 1) by @andtii in #1134
- Module-level let as module state, one per process; non-constant module constants evaluated once (#76, #802) by @andtii in #1123
- any: member writes through the descriptor, Array.isArray / generic instanceof narrowing (phase 1b of #924, part 2) by @andtii in #1156
- Nested functions calling themselves or each other through closures: recursive closure groups (#1142) by @andtii in #1157
- undefined phase 1b, part 1: T | void, bare return and fall-off, finished iterator results, async promise returns, destructured narrowing (#930) by @andtii in #1160
- sema: async arrows in module constants typed T | Promise (#1163); async results inferred through returned promises, adopted (#1166) by @andtii in #1170
- velt check past syntax errors (#1155); value: undefined in finished iterator results; rest parameters of any array type (part of #943) by @andtii in #1158
- Proxy (get / set / has traps) and Reflect.get / set / has as a descriptor of the any value (#823, part 1) by @andtii in #1171
- sema: write fields through interface values and bounded generics (#1112) by @andtii in #1173
- Interface method calls keep their receiver alive across arguments by @andtii in #1180
- object and Function types (part of #926) by @andtii in #1176
- sema: omitted optional any/unknown parameters are undefined; compound setter assignment evaluates the receiver once by @andtii in #1184
- vir: borrows rooted in module state survive a call that replaces it (#1161) by @andtii in #1164
- build: no bench harness for the runtime libraries (#1135 C1) by @andtii in #1194
- object: x as object of an unbounded T; object as a weak key and WeakRef target (part of #926) by @andtii in #1187
- ci: check pull request text and commit hygiene (#1135 A2) by @andtii in #1193
- sema: generic interface values convert to unknown type arguments through a checked adapter (#1153) by @andtii in #1179
- sema: a function applies its own default of a dynamic parameter (interfaces, base classes, function values) by @andtii in #1189
- this parameters on function declarations: call, apply and plain calls pass the receiver by @andtii in #1208
- Typed proxies: proxiable types, a tagged Proxy pointer, typed field get / set through the traps (#823, part 2) by @andtii in #1181
- vir: a method's receiver stays alive when the method replaces its holder by @andtii in #1191
- sema: k! keeps its variable for a borrowed parameter; generator defaults through function values; Generator ICE by @andtii in #1209
- sema: type-parameter bounds that are not interfaces, checked at calls and choosing overloads (#1198) by @andtii in #1213
- vir, sema: Record converted from any prints and serializes; spreading a Record builds a Record by @...
Velt 0.3.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.3.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.3.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- codegen_cl: described scalars stay in registers, written through to their slot by @andtii in #1030
- runtime: per-core workers as one-worker multi-thread runtimes, so a cross-worker wake unparks only an idle worker (#211 step 3, part 1) by @andtii in #1034
- debug info: variables in Windows debug builds by @andtii in #1031
- bench: stdport, standard-library components against the Rust crate for the same job by @andtii in #1051
- codegen: Math.umulh as one multiply instead of a runtime call by @andtii in #1052
- codegen_cl: a variable's scope is a few ranges, not one per later statement (nightly compile-stress on Linux) by @andtii in #1054
- std: a null value in a Map is a value, not a deleted entry by @andtii in #1008
- bench/stdport: executable run.sh, a limb-multiply row; umulh in the inline-helper goldens by @andtii in #1062
- vir: JSON.stringify pushes a member's separator and key together by @andtii in #1067
- std/encoding: Base64 without a table and copies per call by @andtii in #1058
- TS compat: the in operator with string keys, and generator methods in object literals by @andtii in #1026
- std/url: parse by scanning in place instead of copying each component by @andtii in #1063
- WeakMap, WeakSet and WeakRef in the language (#823 step B2) by @andtii in #969
- runtime: SQLite rows reach JSON.parse in binary form by @andtii in #1060
- bench: the feed API of the $12 server challenge on std/http + std/sqlite by @andtii in #1061
- Module constant tables: an array of number or boolean literals is read-only data by @andtii in #1065
- sema: Velt-only type names (u8, f32, bool, …) are shadowed by the program's type declarations by @andtii in #1086
- bench: chatbench and the WebSocket benchmark (#1023) by @andtii in #1059
- vir: transfer checks treat only classes something extends as reaching any subclass; regression goldens for #1057 by @andtii in #1085
- undefined as its own value: T | undefined, void, typeof, ==, printing, JSON (phase 1a of #930) by @andtii in #1013
- TS compat: function expressions, this types, assertion functions and more sigx syntax by @andtii in #1089
- simd: 128-bit vector types from velt:simd (u8x16, f32x4, …), inline in both backends by @andtii in #1068
- std: console levels, toString(radix), Error.name and the standard error classes by @andtii in #1092
- TS compat: overload signatures without semicolons, unions after as, computed keys, import.meta, declare global/module by @andtii in #1090
- Compile npm workspace packages from source: package.json exports, define, ambient declare const, scoped names by @andtii in #1091
- Conditional, mapped and template literal types (phase 1 of #934) by @andtii in #1099
- Promise then, catch, finally and queueMicrotask in Node's order by @andtii in #1097
- std: btoa, atob and DOMException as in Node (step 2 of #946) by @andtii in #1116
- any and unknown as one run-time-checked dynamic value (phase 1a of #924) by @andtii in #1103
- await resumes through the task's microtask queue, in Node's order by @andtii in #1122
- TS compat: generic object-literal methods, optional parameters in function types, variadic and optional tuple elements, generic method signatures in types, var, catch annotations by @andtii in #1113
- Function.prototype.call and apply on function values by @andtii in #1127
- Deferred conditional, mapped and template literal types in generic code (phase 2 of #934) by @andtii in #1120
- std: typed arrays, ArrayBuffer and DataView as in Node (step 1 of #946) by @andtii in #1118
- TS compat: namespaces of types and call signatures in interfaces and object types by @andtii in #1108
- std: hexEncode and hexDecode with SIMD by @andtii in #1070
- std: ReadableStream, its controller and reader, and stream bodies, as in Node (step 3 of #946) by @andtii in #1119
- Promise.reject of a field's error keeps it alive by @andtii in #1147
- Nested functions as hoisted closures, generators in local async closures, closure error types in recursion (#1081, #1084, #1111) by @andtii in #1145
- Object literals implementing interfaces with methods: contextual parameter types, getters and setters (part of #941) by @andtii in #1130
- lower: keep a function value alive while a call through its holder runs (#1146) by @andtii in #1150
- any: member reads and calls through the descriptor (phase 1b of #924, part 1) by @andtii in #1134
- Module-level let as module state, one per process; non-constant module constants evaluated once (#76, #802) by @andtii in #1123
- any: member writes through the descriptor, Array.isArray / generic instanceof narrowing (phase 1b of #924, part 2) by @andtii in #1156
- Nested functions calling themselves or each other through closures: recursive closure groups (#1142) by @andtii in #1157
- undefined phase 1b, part 1: T | void, bare return and fall-off, finished iterator results, async promise returns, destructured narrowing (#930) by @andtii in #1160
- sema: async arrows in module constants typed T | Promise (#1163); async results inferred through returned promises, adopted (#1166) by @andtii in #1170
- velt check past syntax errors (#1155); value: undefined in finished iterator results; rest parameters of any array type (part of #943) by @andtii in #1158
- Proxy (get / set / has traps) and Reflect.get / set / has as a descriptor of the any value (#823, part 1) by @andtii in #1171
- sema: write fields through interface values and bounded generics (#1112) by @andtii in #1173
- Interface method calls keep their receiver alive across arguments by @andtii in #1180
- object and Function types (part of #926) by @andtii in #1176
- sema: omitted optional any/unknown parameters are undefined; compound setter assignment evaluates the receiver once by @andtii in #1184
- vir: borrows rooted in module state survive a call that replaces it (#1161) by @andtii in #1164
- build: no bench harness for the runtime libraries (#1135 C1) by @andtii in #1194
- object: x as object of an unbounded T; object as a weak key and WeakRef target (part of #926) by @andtii in #1187
- ci: check pull request text and commit hygiene (#1135 A2) by @andtii in #1193
- sema: generic interface values convert to unknown type arguments through a checked adapter (#1153) by @andtii in #1179
- sema: a function applies its own default of a dynamic parameter (interfaces, base classes, function values) by @andtii in #1189
- this parameters on function declarations: call, apply and plain calls pass the receiver by @andtii in #1208
- Typed proxies: proxiable types, a tagged Proxy pointer, typed field get / set through the traps (#823, part 2) by @andtii in #1181
- vir: a method's receiver stays alive when the method replaces its holder by @andtii in #1191
- sema: k! keeps its variable for a borrowed parameter; generator defaults through function values; Generator ICE by @andtii in #1209
- sema: type-parameter bounds that are not interfaces, checked at calls and choosing overloads (#1198) by @andtii in #1213
- vir, sema: Record converted from any prints and serializes; spreading a Record builds a Record by @...
Velt 0.2.2
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.2/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.2.2/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- tooling: debug a single test (velt test --filter/--no-run/--json, test lenses) by @andtii in #987
- debug info: variables are in scope from their declaration to the end of their block by @andtii in #980
- runtime: per-core mode accepts on every worker (#211 step 4) by @andtii in #993
- codegen_cl, velt_link: DWARF in Windows debug builds by @andtii in #981
- toolchain: revoke a leaked release key through the index; freshness survives a rotation by @andtii in #1009
- examples/actors: bench scripts executable; Linux rerun of #182 on current main by @andtii in #1024
- tests: async_closure_void no longer depends on two timers a few ms apart firing in order by @andtii in #1028
- toolchain: velt toolchain install --from ; get-velt.sh reads inputs as the launcher does by @andtii in #1011
- std/net, std/http: listen backlog for bursts; close() releases the port; fetch retries a stale pooled connection by @andtii in #1027
- toolchain: velt toolchain self-update by @andtii in #1012
- toolchain: advisories in the index of releases; velt update takes the newest published patch by @andtii in #1014
- task: placement API: spawn(p, { worker }), workerCount, currentWorker; per-core selected automatically (#211 step 2) by @andtii in #1032
- std/websocket: drop tokio-tungstenite (handshake keys from sha1 and base64) by @andtii in #1040
- editors/vscode: Marketplace icon, .vlt file icon, publisher andtii by @andtii in #1042
- editors/vscode: Marketplace README, repository links, 0.1.1 by @andtii in #1043
- docs: new README pitch and front-door pages (TS in, native and multi-core out) by @andtii in #1045
- README: any Rust crate, a few lines away by @andtii in #1046
- gitattributes: highlight .vlt files as TypeScript on GitHub by @andtii in #1047
- velt new/init: .gitattributes so GitHub highlights .vlt files by @andtii in #1048
- README: memory and startup at a glance by @andtii in #1049
- release: velt 0.2.2 by @andtii in #1044
Full Changelog: v0.2.1...v0.2.2
Velt 0.2.1
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.1/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.2.1/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- lower: a cell for each pattern binding, so closures may assign for-of, Map/Set loop and destructured variables by @andtii in #962
- TS compat: destructured parameters, parameter types from defaults, rest parameters and generic function types by @andtii in #995
- vir: describe source variables for debuggers in debug builds by @andtii in #972
- xtask: run the VS Code extension's tests when editors/vscode changes by @andtii in #982
- std: memcpy slice/concat and xorMask for u8[], utf8Valid in the runtime; TcpStream.read allocates once data is ready by @andtii in #977
- runtime: per-core scheduler behind VELT_SCHEDULER=per-core (#211 step 1) by @andtii in #992
- runtime: own WebSocket codec for std/websocket (queued sends, one write per batch, no idle buffers) by @andtii in #976
- toolchain: trust a backup release key beside the signing key by @andtii in #1000
- toolchain: velt toolchain prune by @andtii in #1003
- ci: lint pull requests on Windows and macOS when they touch OS-specific code by @andtii in #1001
- std/websocket: topics (subscribe, publish), encoded once and queued per subscriber by @andtii in #985
- toolchain: a new patch version gets the target packs of the one it follows by @andtii in #1004
- TS compat: Record and JsonValue index-key order, object-literal assignment holders, live map loops over elements and getters by @andtii in #917
- velt_rt: the call-order WebSocket test no longer depends on how far the writer got by @andtii in #1007
- symbol: Symbol(), Symbol.for, well-known symbols, unique symbol keys by @andtii in #968
- codegen_cl: DWARF variables and types for debug builds by @andtii in #973
- toolchain: velt.lock.json records the velt that builds the package by @andtii in #1002
- editors/lldb: formatters for strings, arrays, unions and options by @andtii in #974
- TS compat: typeof in types and index signatures by @andtii in #999
- release: velt 0.2.1 by @andtii in #1010
Full Changelog: v0.2.0...v0.2.1
Velt 0.2.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.2.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- velt_rt: the checking allocator catches reads of freed blocks by @andtii in #882
- sema: callbacks and promise unions (async arrows, sync handlers, function unions, error unions, timer callbacks) by @andtii in #813
- sema: JSX.IntrinsicAttributes checked as in TypeScript (attributes of every component, e.g. client:load) by @andtii in #815
- examples/sigx-ssr: sigx islands rendered by Velt by @andtii in #817
- TS compat: string methods with a RegExp, toExponential/toPrecision, as on literals by @andtii in #881
- TS compat: this/super in static methods, static methods as values, extend statics inherited, generic statics, #x in with primitives, TS18014, class expressions by @andtii in #883
- velt dev: set new functions' slots before redirecting running code to a swap; report a host that crashes during a reload (#880) by @andtii in #907
- TS compat: type-parameter defaults on functions, literal-union index keys, number ports and statuses in std by @andtii in #905
- TS compat: String(x)/Number(x)/Boolean(x), JSON.stringify indent and array replacer, -0 in printed unions, ?: unions, generic truthiness by @andtii in #915
- sema: an HTTP handler that calls a callback assigning a variable it captured is an error by @andtii in #901
- sema: TS compat for functions and callbacks (predicate truthiness, fewer parameters, function unions, variadic push, tuple spreads, void parameters) by @andtii in #908
- sema: a closure created in a closure assigns the variable the outer one captured by @andtii in #906
- tscompat: object-in-template reports only errors and promises (nightly fix) by @andtii in #949
- runtime: debug check that no two tasks use one captured variable's cell by @andtii in #959
- toolchain: velt_toolchain crate and the
veltpin in package.vlt (#948, part 1) by @andtii in #951 - TS compat: type predicates, readonly arrays, satisfies and small syntax, method signatures in object types, object-literal methods by @andtii in #947
- difftest: std/regex shim follows lastIndex (#881); generated programs fit the number model (#685) by @andtii in #965
- toolchain: the velt launcher and
velt toolchain(#948, part 2) by @andtii in #956 - velt_rt: weak-reference core and the ephemeron rule (prototype) by @andtii in #950
- tooling: zero-config VS Code debugging (velt debug type, build --json, CodeLens, .vscode scaffolding) by @andtii in #961
- TS compat: for...in and TypeScript-form overloads by @andtii in #957
- toolchain: installers, packaging and the release workflow for side-by-side versions (#948, part 3) by @andtii in #967
- vir: constructors for LocalDecl and Function, Default for Program by @andtii in #970
- bench/async: pingpong_pinned, request/reply between tasks (#211 step 0) by @andtii in #986
- velt_launcher tests: build the stand-in toolchain in a directory of each test process's own by @andtii in #988
- release: velt 0.2.0 by @andtii in #979
Full Changelog: v0.1.0...v0.2.0
Velt release index
The list of Velt releases the velt launcher installs from (releases.json, signed: releases.json.sig). Not a release of Velt.
Velt 0.1.0
Install
Linux and macOS:
curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.1.0/get-velt.sh | shWindows (PowerShell):
irm https://github.com/velt-lang/velt/releases/download/v0.1.0/get-velt.ps1 | iexThen run velt doctor. The toolchain brings its own linker: no Visual Studio Build Tools,
Xcode or C compiler needed
(Platforms and installation).
What's Changed
- codegen: JIT modules allocate from one arena on every platform by @andtii in #126
- vpm: the per-user directory is ~/.velt by @andtii in #127
- codegen: Windows arm64 unwind tables; honor MACOSX_DEPLOYMENT_TARGET by @andtii in #129
- Windows verification: daylight saving time test for other time zones by @andtii in #132
- design: package manifest written in Velt (#128) by @andtii in #133
- syntax: parser decides where JSX starts (#111) by @andtii in #118
- packages: native code in packages (prebuilt per-target libraries, runtime function table, sqlite prototype) by @andtii in #98
- vpm: read package.vlt, the manifest written in Velt (#128) by @andtii in #135
- velt:channel: typed channels with backpressure by @andtii in #119
- Small fixes: safe doc links, alias parameter names, options of zero-sized types, bench target dir by @andtii in #151
- syntax: lexer speed back to pre-JSX levels by @andtii in #152
- packages: the manifest is package.vlt (#128) by @andtii in #153
- sema: a use after a join blames every move that reaches it (Pool use after free) by @andtii in #163
- new Promise((resolve, reject) => ...) executor constructor by @andtii in #108
- release: tag-triggered release workflow and one-line installers by @andtii in #172
- fmt: keep comments inside object types by @andtii in #174
- packages: velt manifest check mode, registry errors name package.vlt, fmt reports velt.toml by @andtii in #158
- json: decode unions, literals, enums, tuples, Map and Record; edit JsonValue; parse options by @andtii in #140
- ci: run the checks a change needs, in parallel jobs, with a cache that is reused by @andtii in #179
- docs: refresh stale docs and comments after recent rounds by @andtii in #178
- lsp: JSX completion, definition and hover; scope walker descends into elements by @andtii in #170
- registry: yank, owners, search, per-user tokens; https without curl by @andtii in #173
- velt_rt: race test checks the order of events, not a wall-clock bound by @andtii in #237
- Codegen: Cranelift memory on huge functions, LLVM codegen units, Cranelift and JIT line tables by @andtii in #105
- prelude: splice, truncate, flat, JS join, localeCompare, Number.*, assertThrows by @andtii in #177
- tests: never relink an executable that has just run by @andtii in #215
- tests: timer goldens ordered by awaits, not by how fast tasks run by @andtii in #248
- tests: format two goldens; difftest writes integer division as Math.trunc and builds again by @andtii in #253
- json: a type with private fields has no JSON form (no forged runtime handles) by @andtii in #245
- Promise.all rejects as soon as one promise rejects by @andtii in #112
- std: Node-style IoError messages and locations, no body headers on 204/304 by @andtii in #168
- lower: read a returned place before the function's cleanup frees it by @andtii in #258
- editors: package.vlt is a manifest, not a program (#128) by @andtii in #246
- fmt: JSX layout like Prettier ({" "} at line breaks, JSX-mode conditionals) by @andtii in #159
- tests: velt_vir native tests use the gate's prebuilt runtime by @andtii in #260
- xtask: check tests/difftest; difftest corpus agrees on crypto and datetime by @andtii in #269
- prelude: ES2023 copying array methods (toSorted, toReversed, toSpliced, with) by @andtii in #244
- velt:task: AbortController/AbortSignal, timeout(p, ms) and taskScope by @andtii in #120
- lsp: inlay hints and mutating highlighting for inferred throws and mutation by @andtii in #180
- tests: three more goldens ordered by awaits, not by how fast tasks run by @andtii in #261
- fmt: linear tidy of JSX children by @andtii in #281
- lsp: semantic token range and delta, workspace symbol index with file watcher, fix all in file by @andtii in #181
- dev: a save during a build always leads to another build by @andtii in #275
- editors: live registry data in package.vlt (#128) by @andtii in #288
- velt_rt: deleting JSON object members is checked for linear work by counting, not timing by @andtii in #283
- lsp: closing tags as names, innermost element after </, JSX completion and hint fixes by @andtii in #285
- codegen: place codegen units by the call graph and split large programs by default; velt dev JIT timings; nightly memory stress by @andtii in #289
- sema: std membership comes from the loader; only std declares runtime functions by @andtii in #282
- Fix the bugs from the virtual actors port (#182), their follow-ups and small std gaps by @andtii in #257
- difftest runs nightly; TZ names UTC or a fixed offset on Windows too; randomInt checks its bounds like Node by @andtii in #286
- tests: velt dev sessions end their programs and remove their directories by @andtii in #295
- velt_rt: task tests wait on the signal and count polls instead of timing by @andtii in #301
- sema: a finally runs after a return, break or continue in its try by @andtii in #293
- sema: a field taken out of a class instance doesn't make the root owned (getter results are shares) by @andtii in #296
- vpm: velt.lock.json, index.json and native.json replace the TOML files by @andtii in #294
- sema: a closure capture used again shares only that variable, not the closure's other captures by @andtii in #302
- process: stdout.write, stderr.write and env on the builtin process by @andtii in #308
- native: outside std, declare function names only the package's own native exports by @andtii in #303
- golden: values captured by a spawned task stay intact across an await by @andtii in #312
- tests: goldens that raced short timers against main are ordered by awaits by @andtii in #307
- sema: class methods returning a promise carry their errors in the promise, like interface methods by @andtii in #306
- registry: removed users lose ownership, tokens only over TLS or loopback, client deadlines, durable and locked writes by @andtii in #313
- process: envAll() lists every environment variable by @andtii in #321
- tests: leak checks for the task_scope and task_abort goldens by @andtii in #322
- ci: comment-only Rust edits check only their crate; a failed queue job cancels the rest by @andtii in #235
- editors: registry lookups with short deadlines, only over TLS or loopback; no line breaks in HTTP requests (#317) by @andtii in #323
- ci: orphaned merge-queue runs check nothing; wasmtime comes from the cache by @andtii in #325
- velt check: library modules need no main; goldens for #83 and #242 by @andtii in #327
- packages: description and keywords in package.vlt, matched by search (#184) by @andtii in #333
- vpm: a prebuilt bundle's exports must be its library's own; reserve libc-prefix package names by @andtii in #311
- json: decoded map keys own their bytes (a temporary source is freed after the parse) by @andtii in #338
- http: registry keys for servers and responses; std handle fields a...