vercel-labs--zerolang
e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
178 行
4.6 KiB
Markdown
178 行
4.6 KiB
Markdown
## The Pieces The Graph Stores
|
|
|
|
Zerolang exposes language pieces as graph facts and as `.0`
|
|
projection syntax. The graph stores the type and layout facts. The projection
|
|
lets humans read them.
|
|
|
|
## Scalar Values
|
|
|
|
| Type | Purpose |
|
|
| --- | --- |
|
|
| `Bool` | Conditions and logical results. |
|
|
| `i8` `i16` `i32` `i64` | Signed fixed-width integers. |
|
|
| `u8` `u16` `u32` `u64` | Unsigned fixed-width integers. |
|
|
| `usize` `isize` | Pointer-sized integers. |
|
|
| `f32` `f64` | Floating-point values. |
|
|
| `char` | Byte-sized character value for ASCII/parser/codec work. |
|
|
| `String` | Text value used by string literals and current I/O examples. |
|
|
| `Void` | Return type for functions that produce no useful value. |
|
|
|
|
Integer literals support decimal, hexadecimal, binary, octal, `_` separators,
|
|
and optional suffixes such as `_u8` or `_usize`. An unsuffixed integer literal
|
|
adopts the type of a typed integer operand in arithmetic and comparisons when
|
|
the value fits, so `index + 1` and `index < 10` work when `index` is `usize`.
|
|
Out-of-range literals are rejected, so `byte > 300` fails for a `u8` operand.
|
|
|
|
```zero
|
|
let count: u32 = 0x12c_u32
|
|
let byte: u8 = 255
|
|
let page: usize = 4_096
|
|
```
|
|
|
|
Primitive numeric types do not implicitly narrow, widen, or change signedness.
|
|
Use an explicit cast when the conversion is intentional.
|
|
|
|
```zero
|
|
let count: u32 = 300
|
|
let byte: u8 = count as u8
|
|
```
|
|
|
|
## Absence
|
|
|
|
`Maybe<T>` represents an optional value:
|
|
|
|
```zero
|
|
let parsed: Maybe<u32> = std.args.parseU32(1)
|
|
if parsed.has {
|
|
return parsed.value
|
|
}
|
|
return 0
|
|
```
|
|
|
|
`.value` reads require a visible `.has` guard or fallible handling. That rule is
|
|
part of the graph semantics, not a formatter convention.
|
|
|
|
## Fixed Storage And Views
|
|
|
|
| Type form | Meaning |
|
|
| --- | --- |
|
|
| `[N]T` | Fixed-size array with `N` elements of `T`. |
|
|
| `Span<T>` | Read-only borrowed pointer plus length. |
|
|
| `MutSpan<T>` | Mutable borrowed pointer plus length. |
|
|
| `ref<T>` | Immutable reference. |
|
|
| `mutref<T>` | Mutable reference. |
|
|
|
|
```zero
|
|
var scratch: [16]u8 = [0_u8; 16]
|
|
let bytes: Span<u8> = std.mem.span("hello")
|
|
let copied: usize = std.mem.copy(scratch, bytes)
|
|
```
|
|
|
|
These types are central to Zero's size and memory model. Helpers generally
|
|
write into caller-owned storage so allocation behavior remains visible.
|
|
|
|
Fixed-size locals live in one stack frame per function, and a single function
|
|
may declare at most 131072 bytes of locals. `zero check` reports `MEM003` when
|
|
a frame exceeds that limit; split the buffer into smaller buffers in helper
|
|
functions so each frame stays within the limit, or process the data in
|
|
fixed-size chunks. `PageAlloc` and `GeneralAlloc` handles type-check but do
|
|
not lower to the direct backends yet, so they cannot replace frame-sized
|
|
buffers today.
|
|
|
|
## Ownership
|
|
|
|
Owned values use explicit ownership forms:
|
|
|
|
```zero
|
|
fn drop(self: mutref<Self>) -> Void {
|
|
return
|
|
}
|
|
```
|
|
|
|
The canonical non-raising `fn drop(self: mutref<Self>) -> Void` shape lets the
|
|
graph model cleanup without a hidden runtime cleanup registry. Owned resources,
|
|
allocators, and cleanup behavior should be visible through graph inspection.
|
|
|
|
## User Types
|
|
|
|
```zero
|
|
type Point {
|
|
x: i32,
|
|
y: i32,
|
|
}
|
|
```
|
|
|
|
Fields, defaults, and constructor-like projections are graph declarations and
|
|
edges. Public type surfaces should stay explicit because agents rely on stable
|
|
field and type facts.
|
|
|
|
## Enums And Choices
|
|
|
|
```zero
|
|
enum Status {
|
|
Pending,
|
|
Ready,
|
|
}
|
|
```
|
|
|
|
Enums are named value sets. Choices and payload-bearing cases are represented
|
|
as graph facts so `match` can be checked semantically.
|
|
|
|
## Fallibility
|
|
|
|
Fallible functions use `raises`:
|
|
|
|
```zero
|
|
fn validate(ok: Bool) -> i32 raises [InvalidInput] {
|
|
if !ok {
|
|
raise InvalidInput
|
|
}
|
|
return 42
|
|
}
|
|
```
|
|
|
|
`check` propagates failure explicitly. There is no hidden exception system.
|
|
|
|
## Compile-Time Values
|
|
|
|
Compile-time facts currently cover bounded integer, `Bool`, and enum static
|
|
values. The metadata surface includes facts such as `compileTime`,
|
|
`target.pointerWidth`, `fieldType`, and `hasEnumCase`.
|
|
|
|
Use `zero inspect --json` or `zero check --json` when an agent needs those facts
|
|
for a patch.
|
|
|
|
## Projection Examples
|
|
|
|
Projection syntax is for humans. The graph stores the same facts directly.
|
|
|
|
```json-render
|
|
{
|
|
"messages": [
|
|
{
|
|
"role": "user",
|
|
"text": "what types does this helper use?"
|
|
},
|
|
{
|
|
"role": "assistant",
|
|
"text": "I’ll inspect the function facts and summarize the types."
|
|
},
|
|
{
|
|
"role": "tools",
|
|
"calls": [
|
|
{
|
|
"command": "zero query --fn add",
|
|
"output": "fn add(x: i32, y: i32) -> i32\n return x + y"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
For manual review, export the projection:
|
|
|
|
```sh
|
|
zero export
|
|
```
|