The osr Lisp compiler
Project description
Osiris
Osiris is the project for osr, a small, data-oriented Lisp-to-Python
compiler. The language is designed around readable Python output, explicit
Python decorators, hygienic macros, static types, Unicode names, and
tooling-readable metadata.
The current compiler implements a lossless tokenizer, a recoverable nom
reader, surface AST lowering, hygienic macro expansion, name and alias
resolution, typed HIR, defstruct, static schemas and records, and structured
Python code generation. It also emits deterministic .osri interfaces and
source maps, compiles source modules as one dependency graph, and validates
locked static extension interfaces without importing Python packages.
The versioned prelude supplies Clojure-inspired control flow without making
the reader or Rust core grow for every form. The implemented surface includes
threading (->, ->>, cond->, some->, as->, doto), binding and
branching (when, if-let, if-some, case, condp), comprehensions
(for, doseq, dotimes), constant-stack loop/recur, letfn, defn- and
trampoline, lazy sequences and reductions, structured exceptions/resources
(assert, throw, time),
typed ^:dynamic Var bindings, and the initial future/promise/locking
primitives plus eager, ordered parallel forms (pmap, pcalls, pvalues) and
the typed sequence predicates (empty?, seq?, coll?, sequential?). Dynamic
values use Python contextvars,
including context capture when a future is submitted. See the
control-flow coverage matrix
for exact semantics, tests, and intentionally deferred facilities such as
with-bindings, with-local-vars, with-redefs, STM, Agents, and the complete
Clojure sequence/transducer protocols. Osiris borrows these designs but does
not claim Clojure compatibility.
Requirements
- Rust 1.85 or newer
- Python 3.9 or newer for the optional Python package
uvfor Python development
Project Quick Start
Create a new uv project with an Osiris source root and starter module:
osr init my-project
cd my-project
uv run osr run src/main.osr
To add Osiris to an existing uv project, run this from its root (or pass the directory explicitly):
osr init --existing
osr init --existing path/to/project
init preserves the existing pyproject.toml layout, comments, project
metadata, and dependencies. It adds missing [tool.osiris] defaults, creates
src/main.osr only when that file does not exist, and asks uv to add
osiris-lang to the development dependency group. Re-running the command is
safe. A new project path must not already exist; use --existing when joining
an established uv project.
Osiris discovers the nearest pyproject.toml containing a [tool.osiris]
table. The smallest project configuration for the checked-in example is:
[tool.osiris]
source = ["examples"]
target-python = "3.9"
strict = true
extensions = []
build-groups = []
display-locale = "zh-CN"
With that configuration and examples/hello.osr:
cargo run --bin osr -- check examples/hello.osr
cargo run --bin osr -- compile examples/hello.osr
The multi-file examples/tutorial/app.osr
demonstrates importing another Osiris module with :as and :refer, importing
a macro with import-for-syntax, and keeping Python py/import separate:
(import tutorial.transforms :as transforms :refer [sum-values])
(import-for-syntax tutorial.macros :refer [unless])
(py/import math :as math)
Run cargo run --bin osr -- check examples/tutorial/app.osr to analyze the
whole local dependency graph. See examples/README.md
for the module-to-path mapping and generated outputs.
check parses and validates the project and leaves the working tree
unchanged. compile prints the output directory (target/osr/ by default)
and publishes one artifact set atomically:
target/osr/hello.pyis the readable generated Python module.target/osr/hello.osriis the public, versioned Osiris compilation interface used by downstream modules and tools.target/osr/hello.py.mapmaps generated Python spans back to source and macro-expansion spans.- A distribution-level
*.records.jsonsidecar is emitted only when the compiled modules own public static records (or when--emit recordsis requested).
Python dependencies are still ordinary Python project dependencies. Add them
from PyPI (or another index/path supported by uv) in the standard
[project].dependencies or a dependency group, then let uv resolve and lock
them. [tool.osiris].extensions is only a list of explicitly enabled static
Osiris extension IDs: it points discovery at wheel osiris.toml markers and
their .osri interfaces; it is not a package registry, installer, or second
lock file, and the compiler never imports extension Python code during
discovery.
Native CLI
cargo run --bin osr -- --version
cargo run --bin osr -- check source.osr
cargo run --bin osr -- compile source.osr
cargo run --bin osr -- expand source.osr
cargo run --bin osr -- inspect --semantic source.osr --format json
cargo run --bin osr -- lsp
cargo test --all-targets --all-features
check runs the frontend and semantic gates. compile emits readable Python,
an .osri compilation interface, and a .py.map source map into
target/osr/. expand shows macro output. inspect exposes either the
lossless syntax tree or the versioned semantic model used by the LSP and Agent
APIs. Compilation errors return status 1; command-line misuse returns status
2.
The reader is implemented as composable nom grammar productions over a
lossless token stream. All whitespace, commas, comments, original Unicode
spelling, and raw string spelling remain available to future formatting and
LSP stages. Symbols and keywords also carry an NFC canonical spelling for
collision-safe name resolution.
Python package
The Python package embeds the same Rust core through PyO3 and installs an
osr console command. osiris_build provides the PEP 517 backend used by
Osiris source distributions; Python dependencies continue to be declared in
pyproject.toml and locked by uv.
The PyPI distribution is named osiris-lang because the osiris project name
is already occupied. The installed Python package remains osiris:
uv tool install osiris-lang
osr --version
For repository development:
uv sync
uv run osr --version
The package version is defined once in Cargo.toml; maturin supplies it to the
Python package during the build. The Python console script delegates to the
same Rust CLI dispatcher as the native executable, so parsing and diagnostics
do not diverge.
VS Code
The extension lives in editors/vscode and delegates all
semantic behavior to osr lsp. Until Marketplace publishing is enabled, open
the repository's GitHub Releases,
select the latest vscode-vX.Y.Z release, download its .vsix, and run
Extensions: Install from VSIX... in VS Code.
Maintainers publish Python releases with a vX.Y.Z tag and VS Code releases
with a separate vscode-vX.Y.Z tag. Both tags must match the corresponding
package version committed in the repository. Trusted Publisher fields and the
full tag procedure are documented in docs/releasing.md.
The current language design is in
docs/language-design.md. Compiler ownership and
the kernel/macro/extension boundary are documented in
docs/architecture.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file osiris_lang-0.2.0.tar.gz.
File metadata
- Download URL: osiris_lang-0.2.0.tar.gz
- Upload date:
- Size: 531.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e80172838415ee30cdd0467f2dc862449f1ea93ce2b594fed8d46a7df7d7b322
|
|
| MD5 |
529a1c037b5e2253a772984b07fc1c88
|
|
| BLAKE2b-256 |
28dd02c072ec79fc1917d743f336365497cd97937672e12b1e50ed9f556948ae
|
Provenance
The following attestation bundles were made for osiris_lang-0.2.0.tar.gz:
Publisher:
publish-pypi.yml on mjason/osiris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osiris_lang-0.2.0.tar.gz -
Subject digest:
e80172838415ee30cdd0467f2dc862449f1ea93ce2b594fed8d46a7df7d7b322 - Sigstore transparency entry: 2223852042
- Sigstore integration time:
-
Permalink:
mjason/osiris@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mjason
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file osiris_lang-0.2.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: osiris_lang-0.2.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 2.9 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38a858a50d81ad65f7837b2d2a6216d9075620271d07a83c035e31ea12d9f42e
|
|
| MD5 |
35c90ac7727a718aec049e5469c3eb4b
|
|
| BLAKE2b-256 |
e259fe9276de401474689b63dd871e5f4c7d7e3744aa8ae468b2a302e0ebc3da
|
Provenance
The following attestation bundles were made for osiris_lang-0.2.0-cp39-abi3-win_amd64.whl:
Publisher:
publish-pypi.yml on mjason/osiris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osiris_lang-0.2.0-cp39-abi3-win_amd64.whl -
Subject digest:
38a858a50d81ad65f7837b2d2a6216d9075620271d07a83c035e31ea12d9f42e - Sigstore transparency entry: 2223854743
- Sigstore integration time:
-
Permalink:
mjason/osiris@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mjason
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.8 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35526630534b8953dd9708b174e4a4ab3252614821b48cd1dfd5bc5b62dba26c
|
|
| MD5 |
ec2204b053ac61d08991032e5149c7dd
|
|
| BLAKE2b-256 |
96ba58f5c627d0a42c328a8f141dea8b782cfa925006fa0d52334567cdb7545c
|
Provenance
The following attestation bundles were made for osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-pypi.yml on mjason/osiris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
35526630534b8953dd9708b174e4a4ab3252614821b48cd1dfd5bc5b62dba26c - Sigstore transparency entry: 2223852798
- Sigstore integration time:
-
Permalink:
mjason/osiris@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mjason
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
976c2c6cd4111b3a8efbbdb3762f35409b67868f0b82d889e308c22ee7bede18
|
|
| MD5 |
586e5cbfae3c963e6261666b9a40a332
|
|
| BLAKE2b-256 |
a67cf8fedf4aeeee408a2a95a802daff08b55297965faaa59a69c960d3d6d554
|
Provenance
The following attestation bundles were made for osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish-pypi.yml on mjason/osiris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osiris_lang-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
976c2c6cd4111b3a8efbbdb3762f35409b67868f0b82d889e308c22ee7bede18 - Sigstore transparency entry: 2223854024
- Sigstore integration time:
-
Permalink:
mjason/osiris@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mjason
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file osiris_lang-0.2.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: osiris_lang-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8f92187e6b30a2b830afc031d4cbe5210e780317738a18da57638b0a03cdb58
|
|
| MD5 |
057f3d2fcbfefef6382e79bf1cf21939
|
|
| BLAKE2b-256 |
e641923b4f764c68fe94086c33f77599418a0eac68f9f967e2e6e98f6e1286ee
|
Provenance
The following attestation bundles were made for osiris_lang-0.2.0-cp39-abi3-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on mjason/osiris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osiris_lang-0.2.0-cp39-abi3-macosx_11_0_arm64.whl -
Subject digest:
b8f92187e6b30a2b830afc031d4cbe5210e780317738a18da57638b0a03cdb58 - Sigstore transparency entry: 2223855872
- Sigstore integration time:
-
Permalink:
mjason/osiris@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mjason
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@26ffad4ae108f9ef640cf271421a3d9280a094e1 -
Trigger Event:
push
-
Statement type: