Skip to content

Releases

Velt 0.6.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 19:38
3282544

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.6.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.6.0/get-velt.ps1 | iex

Then 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, -a and ~a call [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...
Read more

Velt 0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 22:17
aad18dd

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.5.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.5.0/get-velt.ps1 | iex

Then 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.length counts 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...
Read more

Velt 0.4.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 21:57
8aeb012

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.4.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.4.0/get-velt.ps1 | iex

Then 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 @...
Read more

Velt 0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 16:22

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.3.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.3.0/get-velt.ps1 | iex

Then 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 @...
Read more

Velt 0.2.2

Choose a tag to compare

@github-actions github-actions released this 13 Oct 11:42
04660ea

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.2/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.2.2/get-velt.ps1 | iex

Then 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

Choose a tag to compare

@github-actions github-actions released this 11 Oct 15:26
a2401ab

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.1/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.2.1/get-velt.ps1 | iex

Then 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

Choose a tag to compare

@github-actions github-actions released this 11 Oct 00:03
613a07d

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.2.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.2.0/get-velt.ps1 | iex

Then 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 velt pin 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

Velt release index Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Oct 00:03
613a07d

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

Choose a tag to compare

@github-actions github-actions released this 09 Oct 22:47
e489365

Install

Linux and macOS:

curl -fsSL https://github.com/velt-lang/velt/releases/download/v0.1.0/get-velt.sh | sh

Windows (PowerShell):

irm https://github.com/velt-lang/velt/releases/download/v0.1.0/get-velt.ps1 | iex

Then 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...
Read more