Releases: chrismichaelps/pudu-lang
Release list
Pudu 0.1.2
This is the third pre-release of Pudu. Its headline is shipping: a web application builds for the
host that serves it in one step, a program can be built for a Linux server or a serverless function
from any machine, and the download itself is about a third smaller. The language and its tooling can
still change before 1.0.
Install
Download the archive for your machine, check it, and put its bin directory on your PATH:
shasum -a 256 -c pudu-0.1.2-darwin-arm64.tar.gz.sha256
tar -xzf pudu-0.1.2-darwin-arm64.tar.gz
export PATH="$PWD/pudu-0.1.2-darwin-arm64/bin:$PATH"
pudu versionThe standard library sits beside the executable inside the archive, so nothing is installed anywhere
else and deleting the directory removes Pudu. There are archives for Linux x86-64 and for macOS on
Apple silicon. Windows is not supported yet.
Building and deploying
Std.Site.buildrenders a site's pages in parallel, places each response where static hosts
serve it, writes only the files whose bytes changed, and copies a public directory. It writes the
routing each host reads — a Build Output configuration for Vercel,_headersand_redirectsfor
Netlify and Cloudflare Pages — from routes declared once. The project website's build went from
91 s to 26 s.pudu build --target linux-musl-x86_64and--target lambda-x86_64fetch this release's runtime
pack, check every file against its published digest, and cache it, so a Linux server or function
build no longer needs a toolchain of its own.- Compiled products travel with a program to any runtime built from the same sources, including one
for another platform: a cross-built function starts in 37 ms instead of 360 ms. - The compiler download is smaller: linux-amd64 goes from 10.4 MB to 7.3 MB, with the executable
itself from 58 MB to 28 MB.
The standard library
- Every value renders as text with
toText(), and text reads itself as a number withtoInt(),
toFloat(), andtoDecimal(). - New modules:
Std.Ip(addresses and networks),Std.Human(sizes, durations, ordinals, and
relative times as people write them),Std.Checksum(CRC-32, CRC-32C, CRC-64, FNV-1a, computed
natively),Std.Cron,Std.Stats,Std.Dotenv, andStd.Term; base32 alphabets and PEM armor
in the encoding modules. - Concurrency: futures, cancellation, worker pools, retries, and scopes that cancel sibling work and
outlive none of it. - Services: problem responses, cursor pagination, idempotent retries, events with an outbox,
calendar jobs, and an API description checked against the router. - Desktop interfaces: input, theming, motion, undo, list windowing, shortcuts, controls, navigation,
modals, saved settings, menus (installed as the macOS menu bar), pointer gestures, the clipboard,
and an accessibility tree for assistive technology.
Packages
A package published on GitHub now appears on the website within minutes, with no redeploy. It needs
the pudu-package topic and a pudu.toml naming it. The listing, search, and every package page are
answered live from GitHub over the site's own snapshot, and they fall back to the snapshot when
GitHub is slow or unavailable.
Editors
- The checker now checks a method called on an integer literal:
let n = 3followed byn.bogus()
is an error.42.toText()is text, so a wrong use of it is caught before the program runs. - The language server completes every keyword the language has, and hover shows the checked type of
everytoText()call. - The VS Code extension (0.5.0) colours string interpolations as code.
Documentation
Twenty-six core modules — among them lists, maps, sets, text, options, results, paths, files,
processes, logging, decimals, and time — now document every public declaration with its edge cases
and runnable examples, and the reference on the website renders them as code blocks and sections.
Fixes
Integer literals are resolved once after checking; pudu release names modules shipped outside the
package root; package pages fit any phone.
What is not here yet
Programs still run on an interpreter. Some resources still need an explicit close. Both stand
between Pudu and a stable release.
Reporting problems
Open an issue with the program, the command you ran, and what pudu printed. Every diagnostic has a
code such as E3078, and quoting it is the fastest way to say what happened.
Pudu 0.1.1
This is the second pre-release of Pudu. Its headline is packages: Pudu code can now depend on other
Pudu code published on GitHub, and pudu init makes projects that are ready to install
dependencies and to be published. The language and its tooling can still change before 1.0.
Install
Download the archive for your machine, check it, and put its bin directory on your PATH:
shasum -a 256 -c pudu-0.1.1-darwin-arm64.tar.gz.sha256
tar -xzf pudu-0.1.1-darwin-arm64.tar.gz
export PATH="$PWD/pudu-0.1.1-darwin-arm64/bin:$PATH"
pudu versionThe standard library sits beside the executable inside the archive, so nothing is installed anywhere
else and deleting the directory removes Pudu. There are archives for Linux x86-64 and for macOS on
Apple silicon. Windows is not supported yet.
Packages
A package is a GitHub repository named @owner/repo, marked with the pudu-package topic, and a
release is a tag. There is no separate registry service.
pudu installadds a dependency from GitHub (@alice/json,@alice/json@1.4.2), a Git URL, or a
local path, and installs whatpudu.tomlandpudu.lockname intodeps/.--lockedrefuses
to change the lock, and a failed install changes neither the lock nordeps/.pudu uninstall,update,upgrade,deps, andtreemanage and show the dependency graph.pudu login,whoami, andpudu release <version>publish: the release checks the manifest,
the sources, the tests, and a clean tree, then pushes the tag and creates the GitHub release.pudu search <words>finds published packages.pudu search <query> <file>...is still the
declaration search over your own sources.
Projects
pudu initwrites a manifest with the package fields a publication needs: name, version,
description, license, keywords, language, and source.pudu init --lib --name @owner/repostarts a library under its package's module root, with a
test that imports it.- A suite under
test/imports the project's modules fromsrc/without declaring anything.
Manifests from 0.1.0 that namesrc = "src"as a dependency keep working, and no root is ever
searched twice.
The language and tooling
- Short function literals, first-class ranges with slicing, and destructuring bindings.
- The language server completes and explains code while it is half written, follows imports in open
editors, and drops superseded work. pudu run --watch --also <path>restarts for data and assets as well as sources, and
pudu run --confinedruns a program without files, processes, the network, or foreign code.- Compiled modules are reused across runs, and a program's constants are bound once at link time.
Fixes
Checker fixes for chained calls, block scoping, and aliases reached through modules; method dispatch
that considers only implementations; HTTP handlers that fail answer 500 and keep their worker; tar
paths longer than 100 bytes; and process reads that split a character.
What is not here yet
Programs still run on an interpreter. Some resources still need an explicit close, and
cancellation does not yet propagate between workers. Both stand between Pudu and a stable release.
Reporting problems
Open an issue with the program, the command you ran, and what pudu printed. Every diagnostic has a
code such as E3078, and quoting it is the fastest way to say what happened.
Pudu 0.1.0
This is the first release of Pudu, and it is a pre-release. The language works, the standard library
is broad, and the tooling is real, but the shape of both can still change before 1.0. Use it to write
programs, and tell me where it gets in the way.
Install
Download the archive for your machine, check it, and put its bin directory on your PATH:
shasum -a 256 -c pudu-0.1.0-darwin-arm64.tar.gz.sha256
tar -xzf pudu-0.1.0-darwin-arm64.tar.gz
export PATH="$PWD/pudu-0.1.0-darwin-arm64/bin:$PATH"
pudu versionThe standard library sits beside the executable inside the archive, so nothing is installed anywhere
else and deleting the directory removes Pudu. There are archives for Linux x86-64 and for macOS on
Apple silicon. Windows is not supported yet; to build for anything else, see the README.
The language
Pudu is statically typed and expression-oriented. A function that can fail returns Result, a value
that may be absent is an Option, and match has to cover every case. A signature tells you whether
a function changes what you hand it.
This release has records and sum types, generics with trait bounds, traits and dynamic trait
values, if let, let … else, while let, labelled loops, and ? for both Result and Option.
Numbers include exact decimals and fixed-width integers that are checked rather than wrapped. Modules
can hold constants. Async functions run inside structured scopes. You can assign through &mut, to a
mut field, and to an array element, and the checker refuses the writes that would not hold.
The standard library
173 modules, 3,456 public declarations, every one of them documented. Collections and text. Files and
processes. JSON, CSV, TOML, YAML and XML. HTTP clients and servers, with TLS that verifies. SQLite and
PostgreSQL, including the PostgreSQL wire protocol written in Pudu. Cryptography, workers and
channels, and a testing module with property checks. The native interface, audio and video layer is
written in Pudu too.
The tooling
One command. pudu runs, checks, tests, formats, lints, documents, searches and bundles programs,
starts a project with pudu init, and talks to editors over the Language Server Protocol.
The documentation is twenty chapters, from a first program through to HTTP services. Every example in
it is a complete program that compiles and runs as written, and all 87 of them were run against this
build.
What is not here yet
There is no package manager. Dependencies are local directories, and lock, fetch, update and
publish are specified but not implemented. If you were waiting to depend on someone else's Pudu
code, keep waiting.
Programs run on an interpreter, so this is not the release to benchmark against a compiled language.
Some resources still need an explicit close rather than being released when they go out of scope:
sockets, processes, workers and database connections rely on that or on teardown when the program
ends. Cancellation does not yet propagate between workers. This is the main thing standing between
Pudu and a stable release.
Memory use is proven flat for reading files, CSV and JSON Lines as input grows. The network, HTTP and
database readers have not been measured that way, so do not assume they hold a gigabyte-sized stream
the same way.
Reporting problems
Open an issue with the program, the command you ran, and what pudu printed. Every diagnostic has a
code such as E3078, and quoting it is the fastest way to say what happened.