diff --git a/assets/deed-v0.2.8-wasm32-unknown-unknown.wasm b/assets/deed-v0.2.8-wasm32-unknown-unknown.wasm deleted file mode 100644 index 23a2e08..0000000 Binary files a/assets/deed-v0.2.8-wasm32-unknown-unknown.wasm and /dev/null differ diff --git a/assets/deed-v0.2.9-wasm32-unknown-unknown.wasm b/assets/deed-v0.2.9-wasm32-unknown-unknown.wasm new file mode 100644 index 0000000..8e668bd Binary files /dev/null and b/assets/deed-v0.2.9-wasm32-unknown-unknown.wasm differ diff --git a/assets/errors.js b/assets/errors.js index ab6dbf0..3877424 100644 --- a/assets/errors.js +++ b/assets/errors.js @@ -5,8 +5,8 @@ // artifact carries all of them, so this page cannot document a code the // compiler does not have, or miss one it does. -const TAG = "v0.2.8"; -const VERSION = "0.2.8"; +const TAG = "v0.2.9"; +const VERSION = "0.2.9"; const WASM_URL = `../assets/deed-${TAG}-wasm32-unknown-unknown.wasm`; const STATUS = document.getElementById("status"); diff --git a/assets/play.js b/assets/play.js index a7f45d7..380fc2e 100644 --- a/assets/play.js +++ b/assets/play.js @@ -13,8 +13,8 @@ // release, because a release asset cannot be fetched from a browser at all: // both the download URL and the API one redirect to a host that sends no // `Access-Control-Allow-Origin`. See decisions/2026-07-31-no-build-step.md. -const TAG = "v0.2.8"; -const VERSION = "0.2.8"; +const TAG = "v0.2.9"; +const VERSION = "0.2.9"; const WASM_URL = `../assets/deed-${TAG}-wasm32-unknown-unknown.wasm`; const SOURCE = document.getElementById("source"); diff --git a/examples/index.json b/examples/index.json index 0c2c237..a77dc91 100644 --- a/examples/index.json +++ b/examples/index.json @@ -1,5 +1,5 @@ { - "tag": "v0.2.8", + "tag": "v0.2.9", "examples": [ { "file": "calculator.deed", diff --git a/index.html b/index.html index a07ed66..10b89ef 100644 --- a/index.html +++ b/index.html @@ -126,7 +126,7 @@

Its signature only admits to reading one.

href="install/" > Install it - Binaries for Linux, macOS and Windows, or build from source. + One line, or one file, on Linux, macOS and Windows. Read it diff --git a/install/index.html b/install/index.html index 6d5c1fc..81e0e8a 100644 --- a/install/index.html +++ b/install/index.html @@ -63,7 +63,7 @@

Install

-

Take the file for your machine

+

One line

+

On Linux, or on an Apple-silicon Mac:

+
$ curl -fsSL https://raw.githubusercontent.com/deed-lang/deed/main/install.sh | sh
+

On Windows:

+
> irm https://raw.githubusercontent.com/deed-lang/deed/main/install.ps1 | iex
+

+ Either one works out which release asset fits the machine, downloads + it along with the checksum list the release published, refuses it if + the hash does not match, and leaves one file in your own profile: + ~/.local/bin, or + %LOCALAPPDATA%\Programs\deed. It never asks for a + password, because it never writes anywhere that would need one, and + there is nothing to uninstall but the file. +

+

+ What the hash buys is worth stating exactly, since a + sha256 in an install script tends to read like it proves + more than it does. The checksums come from the same release as the + binary, so this catches a truncated or corrupted download and does + not catch a compromised release. +

+

+ Piping a script into a shell is a thing worth being uneasy about. + Both scripts are short and are in the repository beside the compiler + — install.sh + and + install.ps1 + — and the rest of this page is the same work done by hand. +

+ +

By hand instead

@@ -84,15 +118,15 @@

Take the file for your machine

- + - + - +
Linux, 64-bit Intel or AMDdeed-v0.2.8-x86_64-unknown-linux-gnu.tar.gzdeed-v0.2.9-x86_64-unknown-linux-gnu.tar.gz
macOS, Apple silicondeed-v0.2.8-aarch64-apple-darwin.tar.gzdeed-v0.2.9-aarch64-apple-darwin.tar.gz
Windows, 64-bitdeed-v0.2.8-x86_64-pc-windows-msvc.zipdeed-v0.2.9-x86_64-pc-windows-msvc.zip
@@ -101,7 +135,7 @@

Take the file for your machine

the latest release. There is no Intel Mac build and no Linux ARM build; on those, - build from source. + build it with Rust.

Unpack it and ask it what it is

@@ -111,23 +145,23 @@

Unpack it and ask it what it is

Linux

-
$ tar xzf deed-v0.2.8-x86_64-unknown-linux-gnu.tar.gz
-$ ./deed-v0.2.8-x86_64-unknown-linux-gnu/deed --version
-deed 0.2.8
+
$ tar xzf deed-v0.2.9-x86_64-unknown-linux-gnu.tar.gz
+$ ./deed-v0.2.9-x86_64-unknown-linux-gnu/deed --version
+deed 0.2.9

macOS

-
$ tar xzf deed-v0.2.8-aarch64-apple-darwin.tar.gz
-$ xattr -d com.apple.quarantine deed-v0.2.8-aarch64-apple-darwin/deed
-$ ./deed-v0.2.8-aarch64-apple-darwin/deed --version
-deed 0.2.8
+
$ tar xzf deed-v0.2.9-aarch64-apple-darwin.tar.gz
+$ xattr -d com.apple.quarantine deed-v0.2.9-aarch64-apple-darwin/deed
+$ ./deed-v0.2.9-aarch64-apple-darwin/deed --version
+deed 0.2.9

The middle line is not optional and it is explained below.

Windows

-
> Expand-Archive deed-v0.2.8-x86_64-pc-windows-msvc.zip .
-> .\deed-v0.2.8-x86_64-pc-windows-msvc\deed.exe --version
-deed 0.2.8
+
> Expand-Archive deed-v0.2.9-x86_64-pc-windows-msvc.zip .
+> .\deed-v0.2.9-x86_64-pc-windows-msvc\deed.exe --version
+deed 0.2.9

What your operating system will say about it

@@ -160,10 +194,11 @@

What your operating system will say about it

Where to put it

Anywhere. It reads nothing next to itself and writes nothing beside - itself. To type deed instead of a path, move it onto - yours: + itself. The one-line install has already put it somewhere your shell + looks; if you unpacked it by hand and want to type + deed instead of a path, move it onto yours:

-
$ sudo mv deed-v0.2.8-x86_64-unknown-linux-gnu/deed /usr/local/bin/deed
+
$ sudo mv deed-v0.2.9-x86_64-unknown-linux-gnu/deed /usr/local/bin/deed

On Windows, put the folder on Path through Settings, or keep using the full path. Nothing on this page needs it on @@ -171,7 +206,33 @@

Where to put it

A first program

-

Put this in a file called hello.deed:

+

+ deed new writes one, rather than leaving you to work the + module header and the file layout out of a repository: +

+
$ deed new greeter
+greeter/greeter.deed
+greeter/main.deed
+
+next: cd greeter && deed test .
+
+$ cd greeter
+$ deed test .
+./greeter.deed
+  ok    a greeting carries the name it was given
+  ok    there is no greeting for nobody
+  ok    property greeting (100 cases)
+
+3 passed, 0 failed
+
+$ deed run main.deed
+hello, world
+

+ Three tests out of two files, and only two of them are written down. + The third is generated from the contract on greeting, + which is the point: a signature is checked rather than read. +

+

By hand instead, the whole of a program is this much:

module hello
 
 fn main(sys: System) -> Int
@@ -216,6 +277,14 @@ 

What else is in it

+ + deed new + + A project: a library module with a contract and its tests, and + a program that imports it. No manifest, because a new project + has no code outside its own tree. + + deed check The compiler. Silence is the answer. @@ -298,14 +367,22 @@

What else is in it

to a runtime check.

-

From source

+

With Rust instead

Needs Rust 1.85 or newer, and nothing else:

+
$ cargo install deed-lang
+

+ deed on crates.io belongs to somebody else, so the + package is deed-lang. The binary it installs is + deed, and it is the same one file this page has been + talking about. +

+

From a clone, if you want the tree it was built from:

$ git clone https://github.com/deed-lang/deed
 $ cd deed
 $ cargo install --path crates/deed-cli

- The workspace has no external dependencies, so this compiles what is - in the tree and nothing from anywhere else. + The workspace has no external dependencies, so either way this + compiles the compiler and nothing from anywhere else.

When it does not work

@@ -322,7 +399,7 @@

When it does not work

./, or move it as above. -
--version prints something other than 0.2.8
+
--version prints something other than 0.2.9
You are running a different deed than the one you unpacked. which deed says which. diff --git a/one-clause/index.html b/one-clause/index.html index 87a9e4e..78df177 100644 --- a/one-clause/index.html +++ b/one-clause/index.html @@ -201,14 +201,14 @@

read_only.deed The one a host without `Io.save` will run. read_write.deed The one it will not.