A statically typed programming language for scientific computations with first class support for physical dimensions and units
命令行科学计算器,支持很多种单位量
https://numbat.dev/

David Peter c60b304d70 Bump version to v1.13.0 1 vuosi sitten
.github 0e74e58684 Port 'book/build.sh' to python 1 vuosi sitten
assets 8ce1eea5c3 Auto-format JS/CSS files 1 vuosi sitten
book c60b304d70 Bump version to v1.13.0 1 vuosi sitten
examples 9073f19d4f Major documentation update 1 vuosi sitten
numbat c60b304d70 Bump version to v1.13.0 1 vuosi sitten
numbat-cli c60b304d70 Bump version to v1.13.0 1 vuosi sitten
numbat-exchange-rates 0524524924 Bump numbat-exchange-rates version 1 vuosi sitten
numbat-wasm c60b304d70 Bump version to v1.13.0 1 vuosi sitten
vscode-extension 2e778bdafd Change syntax to … where … and …, solve remaining tasks 1 vuosi sitten
.gitignore c0dda22e0d Properly store history in .local/share 3 vuotta sitten
Cargo.lock c60b304d70 Bump version to v1.13.0 1 vuosi sitten
Cargo.toml 2588b06b67 Add LTO+strip profile 2 vuotta sitten
Cross.toml c72a290b6c Add volume mount for /usr/share/zoneinfo 1 vuosi sitten
LICENSE-APACHE bb1417febb Add license files 2 vuotta sitten
LICENSE-MIT a9b33fd520 Update LICENSE 1 vuosi sitten
README.md 35a6b488ca style: status badge for `CICD` in `README.md` 1 vuosi sitten

README.md

**[Try online!] • [Documentation] • [Tutorial] • [Syntax reference] • [Installation] • [Development]** *Numbat* is a statically typed programming language for scientific computations
with first class support for physical dimensions and units.

Key Features

Click to learn more.

Physical dimensions as types

Numbat has a static type system where physical dimensions like `Length` and `Time` act as types. Definitions of constants and functions can optionally contain type annotations that will be statically enforced. If the types are not specified, they will be inferred (`Speed`, `Money` and `Frequency` in the screenshot). See [this article](https://numbat.dev/doc/type-system.html) to learn more about Numbat's type system.
First-class physical units

Numbat is focused on computations with units. Units are therefore treated as first-class citizens. They can be [entered in various ways](https://numbat.dev/doc/unit-notation.html) (`km/h` or `kilometer/hour`, `GiB` or `gibibytes`, `°` or `degree`, `m²` or `m^2`). New units can be [introduced](https://numbat.dev/doc/unit-definitions.html) on the spot (`unit pixel`). Compatible units can be converted easily [using the `->` operator](https://numbat.dev/doc/unit-conversions.html) (`30 km/h -> mph`, `1 mrad -> degree`, `5 in + 2 ft -> cm`, `27 weeks -> days`). And unit expressions are simplified using various heuristics (`15 km/h * 30 min = 7.5 km`).
Comprehensive standard library

Numbat's [standard library](https://numbat.dev/doc/prelude.html) comes with a large number of physical dimensions and units (SI, US Customary, Imperial, Nautical, Astronomical, Atomic, Nuclear, …). See [this reference page](https://numbat.dev/doc/list-units.html) for a complete overview. It also contains a lot of [mathematical and physical constants](https://numbat.dev/doc/list-constants.html) as well as a large range of [pre-defined functions](https://numbat.dev/doc/list-functions.html).
Strict syntax

Numbat's parser never tries to be "smart" on syntactically incorrect input. This means you will either get a (descriptive) error message, or you can trust the result of your calculation.
Excellent error messages

Numbat aims to provide [descriptive and helpful error messages](https://github.com/sharkdp/numbat/blob/master/assets/numbat-error.png).
Interactive terminal

Numbat has been designed for an interactive use-case with small "one off" computations. Opening the `numbat` interpreter without any arguments starts a [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) with a familiar readline interface, including all the usual features like a command history, Ctrl-R search or tab completion.
Modular and customizable

The whole system of physical dimensions and units is specified Numbat's standard library, which is [written in the Numbat language](https://github.com/sharkdp/numbat/tree/master/numbat/modules) itself. It is therefore easily extensible by [providing a `init.nbt` file](https://numbat.dev/doc/cli-customization.html). For example, a single line (`unit bathtub = 150 L`) is usually enough to add a new unit. Users can even choose to write their own `prelude` module, allowing for arbitrary modifications to the unit system.
Assertions

With its static type system, Numbat already enforces correctness of your calculations on a physical dimension level. But some checks can only be made at runtime. Numbat provides an `assert_eq` procedure that allows you to check for exact equality using `assert_eq(12 ft, 1 in)` or approximate equality using `assert_eq(c, 300_000 km/s, 1% × c)`. This can be useful to make sure that intermediate results do not change during a restructuring of your calculation.
Non-features

Numbat is a scientific calculator. It's not a computer algebra system that solves differential equations or computes intergrals. Try [WolframAlpha](http://www.wolframalpha.com/) instead.
There is no graphical user interface with buttons like `x²`, `1/x` or `DEG/RAD`. [Qalculate!](http://qalculate.github.io/) is a fantastic tool that supports both text as well as graphical input.
Numbat supports a huge range of physical units. If you need something even more comprehensive, please consider contributing. Or try [GNU units](https://www.gnu.org/software/units/).

 

 

 

 

Installation

See this page for details on how to install the native command-line version of Numbat.

Development

CICD

Run Numbat CLI

cargo run -- <numbat args>

Install the CLI version

cargo install -f --path numbat-cli

Run all tests

cargo test

Working on the prelude

If you are working on Numbat's standard library, it is convenient to point the NUMBAT_MODULES_PATH environment variable to the numbat/modules/ folder. This way, you don't have to recompile Numbat to see your changes.

Alternatively, you can create a symlink from ~/.config/numbat/modules to the numbat/modules/ folder in the repository (see this page for the standard paths on other operating systems).

Contact us

To contact us, either open a GitHub issue or discussion, or pop into #numbat on Libera.Chat (link to webchat).