Files
Decodal/doc/manual/source/introduction.md
T

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.