55 lines
2.6 KiB
Markdown
55 lines
2.6 KiB
Markdown
# Introduction
|
|
|
|
Decodal is the **Deferred Constraint Data Language**, abbreviated **DCDL**.
|
|
Its source files use the `.dcdl` extension.
|
|
|
|
Decodal is a language for describing configuration values, schemas, constraints, and derived configuration in one expression system, producing validated structured data.
|
|
|
|
## Purpose
|
|
|
|
In conventional configuration systems, values, schemas, defaults, derived settings, and validation are often handled by separate mechanisms.
|
|
Decodal treats them as composable expressions.
|
|
|
|
```dcdl
|
|
Port = Int & >= 1 & <= 65535;
|
|
|
|
Service = {
|
|
host = String;
|
|
port = Port default 8080;
|
|
};
|
|
|
|
Config = {
|
|
host = "127.0.0.1";
|
|
port = 8000;
|
|
} as Service;
|
|
```
|
|
|
|
`Service` describes a range of accepted values.
|
|
Each value in `Config` is validated against `Service`, while ranges that exist only in `Service` remain abstract in the result.
|
|
During materialization, explicit values take precedence and `default` supplies values for ranges that remain unspecified.
|
|
|
|
## Core concepts
|
|
|
|
- Values and constraints are expressions that can be referenced and composed in the same way.
|
|
- `&` performs symmetric composition and preserves constraints from both sides.
|
|
- `as` verifies that the left side is more specific and narrower than the right side, then combines them.
|
|
- `//` performs a right-biased structural patch, including overrides.
|
|
- `default` is not a constraint. It is a fallback selected only during materialization.
|
|
- Object fields, function arguments, and imports are evaluated when they are needed.
|
|
- `Unknown` is the top range that accepts any concrete value, but it cannot be materialized while it remains abstract.
|
|
|
|
## Scope
|
|
|
|
Decodal is specialized for describing configuration, schemas, constraints, and derived data.
|
|
General-purpose state mutation, time, randomness, network access, and `try / catch` for treating errors as values are not language features.
|
|
The host provides filesystem and external-format access. Given the same source, import results, and global bindings, Decodal evaluation is deterministic.
|
|
|
|
Regular-expression constraints depend on the runtime's `regex` feature.
|
|
Decodal does not provide advanced type inference, exhaustiveness checking for `match`, or static detection of unreachable branches.
|
|
|
|
## Continue reading
|
|
|
|
- [Language Specification](./language/index.md): syntax, values, expressions, constraints, evaluation, and materialization.
|
|
- [Embedding](./embedding.md): Rust and JavaScript execution, host environments, structured imports, and language services.
|
|
- [Packages and Integrations](./components.md): crates and JavaScript packages for each use case.
|