Skip to content

v0.0.3

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Oct 15:22
· 397 commits to main since this release
41eac77

Install

curl -fsSL https://vxlang.org/install.sh | sh

The Linux toolchains include the LLVM they need. On macOS, Vx requires LLVM 22. For
--verify-seams, every platform needs the z3 binary. The installer checks for what
is missing and prints the command to install it. See
the install guide.

Platforms

Platform Artifact
macOS, Apple Silicon vx-<version>-aarch64-apple-darwin.tar.gz
Linux x86_64, glibc 2.35+ vx-<version>-x86_64-unknown-linux-gnu.tar.gz
Linux x86_64 with an NVIDIA GPU, glibc 2.35+ vx-<version>-x86_64-unknown-linux-gnu-cuda.tar.gz

Verify a download against its .sha256 before unpacking.

What's Changed

  • stdlib: preserve file paths and use unsigned file I/O lengths by @minzyfox in #1076
  • codegen: usize arithmetic traps on overflow and never wraps by @hiraditya in #1149
  • core::libm: asin, acos, atan and atan2 for f32, f16 and bf16 by @hiraditya in #1156
  • core::libm: hypot for f32, f16 and bf16 by @hiraditya in #1157
  • core::libm: pow for f32, f16 and bf16 by @hiraditya in #1173
  • core::libm: log, log2, log10 and log1p for f64 by @hiraditya in #1176
  • core::libm: exp, exp2 and expm1 for f64 by @hiraditya in #1184
  • hir: a call moves its by-value arguments wherever it is by @hiraditya in #1175
  • hir: a unary operator drops the tensor it moves by @hiraditya in #1172
  • hir: two drop points that would free a tensor twice, found in review of #1174 by @hiraditya in #1181
  • docs: design note for the view type by @hiraditya in #1185
  • Implement responsive styles for small screens of code blocks by @SebbeBroman in #1182
  • blog: proving tensor indices at compile time by @hiraditya in #1196
  • fuzz: count what each program frees, and a generator that moves tensors by @hiraditya in #1189
  • blog: a layout diagram of the KV cache in the tensor-index post by @hiraditya in #1208
  • flat: a row returned as a ?-shaped tensor is returned as a copy by @hiraditya in #1190
  • hir: a call through an expression moves its by-value arguments by @hiraditya in #1198
  • drops: free each tensor at its drop, on both code generators by @hiraditya in #1200
  • core::libm: sin, cos and tan for f64 by @hiraditya in #1207
  • codegen: share the type-lowering helpers in the legacy generator by @hiraditya in #1192
  • core::libm: f16 and bf16 hypot keep a NaN input's payload by @hiraditya in #1199
  • codegen: share the type-lowering helpers in the legacy generator by @hiraditya in #1193
  • core::libm: asin, acos, atan and atan2 for f64 by @hiraditya in #1210
  • core::libm: hypot for f64 by @hiraditya in #1213
  • core::libm: pow and exp10 for f64 by @hiraditya in #1215
  • cla: one queue per pull request, so waiting runs are not cancelled by @hiraditya in #1228
  • update discord server invite link by @minzyfox in #1227
  • www: keep wide posts from scrolling sideways on a phone by @SebbeBroman in #1201
  • contributing: a person must be the author of every commit by @hiraditya in #1218
  • core::libm: sinh, cosh and tanh for f64, built on its exp by @hiraditya in #1223
  • drops: every program frees its tensors at their drops by @hiraditya in #1225
  • drops: the Drop trait, and dropping a struct by @hiraditya in #1229
  • emacs-vx: add an Emacs major mode for .vx files by @Andrewfeng123 in #1221
  • examples: make llama.vx generate the right text by @Andrewfeng123 in #1217
  • drops: a struct nothing names is dropped at the end of its statement by @hiraditya in #1231
  • hir: a generic struct or enum moves as any other, unless it is Copy by @hiraditya in #1233
  • core::libm: asinh, acosh and atanh for f64, f16 and bf16 by @hiraditya in #1244
  • core::sync::atomic: atomic integers and bool over mlir! by @hiraditya in #1248
  • core::num: shortest text for f64 and f32, written in Vx (Ryu) by @hiraditya in #1249
  • tests: topology_dispatch expects the vx.drops module attribute by @hiraditya in #1254
  • blog: Vx fully embraces {ML, IR, MLIR} by @hiraditya in #1257
  • stdlib: use unsigned stdio and network I/O lengths by @minzyfox in #1214
  • core::fmt: a Write trait, FormatSpec, and integers in any radix by @hiraditya in #1247
  • check: Trait::method(&x) calls that trait's method by @hiraditya in #1256
  • core::libm: cbrt for f64, f32, f16 and bf16 by @hiraditya in #1262
  • core::libm: erf and rsqrt, for the activations and norms of ML models by @hiraditya in #1263
  • core: usize gets the impls the other integer widths have by @hiraditya in #1261
  • blog: correct the {ML, IR, MLIR} post by @hiraditya in #1270
  • drops: dropping an enum drops its payload by @hiraditya in #1266
  • drops: the library types implement Drop by @hiraditya in #1267
  • lang: panic(msg), and expect on Option and Result by @hiraditya in #1274
  • lang: -> ! for a function that never returns, and core::panic by @hiraditya in #1278
  • check: an untyped number takes its enum payload's type by @hiraditya in #1294
  • driver: print the flat-path line only when VX_FLAT_DBG is set (#1179) by @YodHeVauHe in #1191
  • drops: a Vec drops its elements by @hiraditya in #1277
  • views: a view of GPU memory keeps its placement, and a field read names itself by @joissriram99 in #1250
  • codegen: a non-generic enum keeps its payload on the legacy path by @hiraditya in #1282
  • codegen: a match binds every value of an enum variant on the legacy path by @hiraditya in #1285
  • tests: two fixtures set VX_FLAT_DBG to see the flat-path line by @hiraditya in #1312
  • lang: match on a tuple by @hiraditya in #1304
  • lang: enum variants inside a tuple pattern by @hiraditya in #1305
  • lang: operators on a struct call the core::ops traits by @hiraditya in #1313
  • lang: a[i] on a struct goes through Index and IndexMut by @hiraditya in #1314
  • lang: comparisons on a struct with only PartialOrd by @hiraditya in #1315
  • drops: non-generic enums and variants of several values are dropped by @hiraditya in #1320
  • flat: a struct inside a generic struct or an enum has a layout by @hiraditya in #1322
  • flat: an Option can hold an enum whose variants carry nothing by @hiraditya in #1323
  • flat: a field read through a returned reference knows its struct by @hiraditya in #1324
  • lang: a call that never returns can stand where a value is expected by @hiraditya in #1327
  • gid: remove TYPE_NEEDS_DROP, which nothing set or read by @hiraditya in #1332
  • drops: a spawn region frees the tensors it makes by @hiraditya in #1333
  • prover: a call must meet the called function's requires by @hiraditya in #1334
  • drops: a spawn region's value moves to the function around it by @hiraditya in #1339
  • prover: a call's result is known from the called function's ensures by @hiraditya in #1336
  • drops: a placed tensor is freed by the drop of its last owner by @hiraditya in #1337
  • blog: how Vx frees memory by @hiraditya in #1350
  • check: a reference to a tensor in GPU memory can be passed to a kernel by @hiraditya in #1340
  • docs: bring the drop semantics plan's status up to date by @hiraditya in #1345
  • prover: facts follow the paths, and ensures is checked at each return by @hiraditya in #1346
  • drops: a tensor a device region creates is made before the region by @hiraditya in #1347
  • drops: a placed uninit() tensor is allocated on its device by @hiraditya in #1354
  • drops: Verified<..> and Pinned<..> tensors are dropped like the tensor inside by @hiraditya in #1359
  • provision: build our own LLVM in the checkout by @hiraditya in #1272
  • ci: build and test against our own LLVM, kept in the Actions cache by @hiraditya in #1363
  • lang: a for loop goes over the items of a tensor by @hiraditya in #1366
  • benchmarks: RoPE uses the index within the head by @hiraditya in #1365
  • codegen: c = a @ b is not written in place when c's pointer is taken by @hiraditya in #1377
  • check: an empty shape means rank 0, not "any shape" by @hiraditya in #1378
  • check: the liveness walk sees inside every kind of expression by @hiraditya in #1380
  • check: a void value is not moved when it is used by @hiraditya in #1381
  • codegen: an assert in a transfer lowering stays in that lowering by @hiraditya in #1379
  • lowering: a transfer into shared memory must be inside a spawn region by @hiraditya in #1384
  • codegen: a const generic function is named by its argument's value by @hiraditya in #1385
  • blog: why void is a value in Vx by @hiraditya in #1390
  • codegen: a rank-0 tensor is a buffer on the legacy code generator by @hiraditya in #1392
  • codegen: rows of a tensor with run-time extents on the legacy code generator by @hiraditya in #1393
  • codegen: the legacy code generator emits only the functions a program uses by @hiraditya in #1394
  • blog: can a library describe the memory hierarchy? by @hiraditya in #1396
  • tests: run the standard library's tests, and test a cloud fleet by @hiraditya in #1399
  • docs: state when one tensor type fits another by @hiraditya in #1402
  • blog: programming a GPU fleet as one program by @hiraditya in #1404
  • check: print types in errors the way a program writes them by @hiraditya in #1405
  • check: a wrong reshape gives one error, E3047, with its line by @hiraditya in #1406
  • checker: an if with no else cannot be used as a value by @hiraditya in #1408
  • check: Result<void, E>::Ok(..) has the type it names by @hiraditya in #1409
  • codegen: a void function can be called through a function pointer by @hiraditya in #1410
  • parse: a program cannot declare a type named void by @hiraditya in #1411
  • docs: a plan for padding tensors by @hiraditya in #1425
  • memory: a sub-byte tensor element takes a whole byte by @hiraditya in #1426
  • check: PadMode::Pad and PadMode::Trim may only do what their names say by @hiraditya in #1423
  • std::tensor: declare PadMode by @hiraditya in #1427
  • reshape: PadMode::Pad makes a new tensor by @hiraditya in #1429
  • flat codegen: lower reshape with PadMode::Pad by @hiraditya in #1430
  • tensor: t.pad(shape) pads each axis with zeros by @hiraditya in #1431
  • docs: reshape, PadMode and pad by @hiraditya in #1432
  • checker: an array literal and Tensor::fill need as for another number type by @hiraditya in #1436
  • docs: list the coercions the compiler actually allows by @hiraditya in #1412
  • release: the Linux toolchains carry their own LLVM by @hiraditya in #1382
  • stdlib: define the byte I/O error contract and fallible file bridge by @minzyfox in #1349
  • docs: list the language rules that let bodies be checked in parallel by @hiraditya in #1442
  • release: version 0.0.3 by @hiraditya in #1439
  • blog: when the build order changes the program by @hiraditya in #1444
  • docs: larger examples on the autodiff page, each checked by a test by @hiraditya in #1453
  • release: ship the macOS dispatch library that vxc --run links by @hiraditya in #1458
  • install.sh: save Homebrew's LLVM link folder, which survives brew upgrade by @hiraditya in #1461
  • docs: set VX_VERSION for the sh that runs the installer by @hiraditya in #1465
  • release: leave llama.vx out of the toolchain, and compile every shipped example by @hiraditya in #1466
  • tests: topology_dispatch no longer expects unused printMemref declarations by @hiraditya in #1459
  • docs: plan for addressability and scaled number formats by @hiraditya in #1438
  • check: number literals given to grad, vjp and jvp take the parameter types by @hiraditya in #1460
  • driver: run-jit passes only the program's own arguments by @hiraditya in #1478
  • release: ship Enzyme in the macOS toolchain, so grad, vjp and jvp work by @hiraditya in #1482
  • driver: --package name=dir imports a library by name by @hiraditya in #1484
  • parser: accept as after an unsafe block by @hiraditya in #1480
  • codegen: decline enums with unsupported payload layouts by @minzyfox in #1470
  • docs: define the roadmap for GPU backends by @hiraditya in #1138

New Contributors

Full Changelog: v0.0.2...v0.0.3