A contract-first language where a function signature is a promise the compiler c
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Built for code that machines write and humans review.
> **Status: the toolchain works; adoption is the open question.** The compiler lexes,
> parses, resolves names, checks types, contracts and effect rows, and runs programs through
> either the reference interpreter or a WebAssembly backend. deed build writes a core
> module, and --component writes a component when its exported values cross the canonical
> ABI. Programs get authority from explicit capabilities, with the same host rules in both
> engines. The largest unfinished technical work is value reclamation and wider component
> adapters; the largest project risk is simpler and measured: no public repository outside
> this organization contains known Deed source yet. ROADMAP.md keeps that
> distinction and the commands that measure it.
Getting it
One line, on Linux or an Apple-silicon Mac:
On Windows:
Either one downloads the release asset for your machine, refuses it if its hash
is not the one the release published, and puts a single file in your own profile.
It never asks for a password, because it never writes outside it. The checksums
come from the same release as the binary, so that catches a corrupted download
and does not catch a compromised release; saying so is better than a sha256
that reads like it proves more than it does.
By hand instead: every release carries a deed binary for Linux, macOS and Windows.
Take the one for your machine from
releases, unpack it, and run it.
There is nothing else to install: the compiler, the formatter, the test runner and the
language server are all in that one file.
Start with the tutorial if you want one program built up one step at a time.
With Rust 1.88 or newer instead, from crates.io or from a clone:
deed on crates.io belongs to somebody else, so the package is deed-lang.
The binary it installs is deed; the package README
keeps the short install and MCP entry points next to the package metadata.
**What the version promises.** 0.x says the language can still move, so a file that
compiles against one minor release may not compile against the next. Breaking moves are
called out in release notes, and deed fix carries the mechanical part when possible. The
full policy, including diagnostics and std/, is in
design/07-versioning.md.
Starting something
deed new writes a project rather than leaving you to work out the module header
and the file layout from this repository. The name becomes both the directory and
the module path.
Three tests from two files, and only two of them were written down. The third is
generated from the contract on greeting, which is what a signature being a
promise buys. There is no manifest, because a manifest here says where code
outside your tree lives and a new project has none.
crates/deed-cli/tests/new.rs runs that command into a temporary directory on
every commit and then checks, tests, runs and format-checks what came out, so the
scaffold cannot rot into something that no longer compiles.
What it looks like on real code
That number used to be 102. Seven of those tests are in std/table now, because the table
library stopped living under examples/ and a module that ships with the compiler is context
rather than subject, so the corpus does not run its tests any more. Nothing was deleted: the
modules that ship carry one hundred and ten tests of their own, and
crates/deed-driver/tests/shipped.rs runs every one of them on every commit.
For an editor, see editors. VS Code now carries both syntax
highlighting and a language-server client, while Helix and Neovim start the
language server from a few lines of configuration and no plugin.
For a coding agent, deed mcp speaks the Model Context Protocol on stdin and
stdout, so the machine writing the code can ask the compiler the same questions
an editor does rather than scraping them out of terminal output. It holds no
capability: a program arrives as text, the answer leaves as text, and a program
whose row reaches a file is refused before it runs.
Its official Registry name is mcp-name: io.github.deed-lang/deed.
how-to/let-an-agent-use-the-compiler.md
has the tool reference and the one line worth reading.
Every agent patch comes with a receipt
deed review compares the checked module set before a change with the one
after it. The first receipt names newly declared authority and obligations
that fell to a weaker contract tier:
The paths may name files or directories, and imports are resolved independently
on each side. --format json emits the same receipt as one stable object for an
agent or CI job. Findings are informational unless a policy turns them into a