1
0

Edit README.md

This commit is contained in:
Jeff 2025-01-21 05:13:30 -05:00
parent 94130309f0
commit 511bb1a6ca

View File

@ -54,27 +54,26 @@ aspirations are to be **fast**, **safe** and **easy**.
- **Low Resource Usage** Memory and CPU power should be used conservatively and predictably. - **Low Resource Usage** Memory and CPU power should be used conservatively and predictably.
- **Safe** 🛡️ - **Safe** 🛡️
- **Static Types** Typing should prevent runtime errors and improve code quality, offering a - **Static Types** Typing should prevent runtime errors and improve code quality, offering a
superior development experience despite some additional constraints. Like any good statically superior development experience despite some additional constraints.
typed language, users should feel confident in the type-consistency of their code and not want
to go back to a dynamically typed language.
- **Null-Free** Dust has no "null" or "undefined" values. All values are initialized and have a - **Null-Free** Dust has no "null" or "undefined" values. All values are initialized and have a
type. This eliminates a whole class of bugs that are common in other languages. type. This eliminates a whole class of bugs that are common in other languages.
- **Memory Safety** Dust should be free of memory bugs. Being implemented in Rust makes this easy - **Memory Safety** Dust should be free of memory bugs, using both safe Rust and sound, correct
but, to accommodate long-running programs, Dust still requires a memory management strategy. "unsafe" Rust to maximize performance. Dust should employ a concurrent mark-and-sweep garbage
Dust's design is to use a separate thread for garbage collection, allowing other threads to collecter, allowing other threads to continue executing instructions while the garbage collector
continue executing instructions while the garbage collector looks for unused memory. looks for freeable memory.
- **Easy** 🎂 - **Easy** 🎂
- **Simple Syntax** Dust should be easier to learn than most programming languages. Its syntax - **Simple Syntax** Dust should be easier to learn than most programming languages. Its syntax
should be familiar to users of other C-like languages to the point that even a new user can read should be familiar to users of other C-like languages to the point that even a new user can read
Dust code and understand what it does. Rather than being held back by a lack of features, Dust Dust code and understand what it does. Rather than being held back by a lack of features, Dust
should be powerful and elegant in its simplicity, seeking a maximum of capability with a minimum should be powerful and elegant in its simplicity, seeking a maximum of capability with a minimum
of complexity. of complexity.
- **Practical Tooling** Shipped as a single binary, Dust should provide logging and tools for
disassembly and tokenization that make the lexer, compiler and runtime as transparent as
possible. Dust should also include an official formatter through the same binary. Additional
tools such as a language server and linter should be adopted when possible.
- **Excellent Errors** Dust should provide helpful error messages that guide the user to the - **Excellent Errors** Dust should provide helpful error messages that guide the user to the
source of the problem and suggest a solution. Errors should be a helpful learning resource for source of the problem and suggest a solution. Errors should be a helpful learning resource for
users rather than a source of frustration. users rather than a source of frustration.
- **Practical Tooling** Shipped as a single binary, Dust should be easy to install and use. In
addition to compiling and running Dust code, the Dust binary provides tools for inspecting Dust
code, such as disassembling bytecode and tokenizing source code.
### Author ### Author
@ -90,8 +89,8 @@ languages.
### CLI ### CLI
The Dust CLI has commands to run run, compile and disassemble or tokenize Dust code. It can also The Dust CLI has commands to run, disassemble or tokenize Dust code. It can also provide logging at
provide logging at different levels and measure the time taken for compilation and execution. different levels and measure the time taken for compilation and execution.
```text ```text
Usage: dust [OPTIONS] [FILE] Usage: dust [OPTIONS] [FILE]
@ -117,12 +116,27 @@ Options:
-V, --version Print version -V, --version Print version
``` ```
#### Running a program
If not specified, the CLI will use `run` mode. This mode compiles and executes the Dust program,
printing the return value to the console. You can also run Dust code directly from the command line
using the `--command` or `-c` flag.
```sh
dust foobar.ds
dust -c 'let x = 42; x'
```
#### Disassembly #### Disassembly
Dust's disassembly output is a detailed, human-readable representation of the internal Dust's disassembly output is a detailed, human-readable representation of the internal
representation of the Dust program. It shows every piece of information that the compiler sends to representation of the Dust program. It shows every piece of information that the compiler sends to
the virtual machine and explains what each instruction does and what data it uses. the virtual machine and explains what each instruction does and what data it uses.
```sh
dust -d example.ds
```
<details> <details>
<summary>Show disassembly</summary> <summary>Show disassembly</summary>
@ -165,6 +179,21 @@ the virtual machine and explains what each instruction does and what data it use
</details> </details>
The instruction notation reflects the Dust VM's register-based architecture. Values are referred to
by their address in the register or constant table. For example, `R_INT_42` refers to the
forty-second integer register, and `C_INT_0` refers to the first integer constant.
```text
R_INT_0 = R_INT_0 + C_INT_2
```
The info section for the ADD instruction shows what the instruction does: it adds the value at
`R_INT_0` to the value at `C_INT_2` and stores the result in `R_INT_0`. As the "Constants" section
shows, `C_INT_2` is the integer constant `1`. This means that this add instruction increments the
value in `R_INT_0` by `1`. In the "Locals" section, we can see that `R_INT_0` is the register used
by the `i` variable.
## Installation ## Installation
Eventually, Dust should be available via package managers and as an embeddable library. For now, Eventually, Dust should be available via package managers and as an embeddable library. For now,