Edit README.md
This commit is contained in:
parent
94130309f0
commit
511bb1a6ca
53
README.md
53
README.md
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user