Skip to content

Releases: chrismichaelps/pudu-lang

Pudu 0.1.2

Pudu 0.1.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Sep 23:06

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 version

The 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.build renders 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, _headers and _redirects for
    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_64 and --target lambda-x86_64 fetch 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 with toInt(),
    toFloat(), and toDecimal().
  • 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, and Std.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 = 3 followed by n.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
    every toText() 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

Pudu 0.1.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Sep 21:36
32a302f

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 version

The 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 install adds a dependency from GitHub (@alice/json, @alice/json@1.4.2), a Git URL, or a
    local path, and installs what pudu.toml and pudu.lock name into deps/. --locked refuses
    to change the lock, and a failed install changes neither the lock nor deps/.
  • pudu uninstall, update, upgrade, deps, and tree manage and show the dependency graph.
  • pudu login, whoami, and pudu 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 init writes a manifest with the package fields a publication needs: name, version,
    description, license, keywords, language, and source.
  • pudu init --lib --name @owner/repo starts a library under its package's module root, with a
    test that imports it.
  • A suite under test/ imports the project's modules from src/ without declaring anything.
    Manifests from 0.1.0 that name src = "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 --confined runs 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

Pudu 0.1.0 Pre-release
Pre-release

Choose a tag to compare

@chrismichaelps chrismichaelps released this 16 Sep 02:38
5495db8

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 version

The 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.