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

2.5 KiB

Introduction

Decodal は Deferred Constraint Data Language、略称 DCDL である。 ファイル拡張子には .dcdl を使う。

Decodal は、設定値・スキーマ・制約・派生設定を同じ式体系で記述し、検証済みの構造化データを得るための言語である。

目的

一般的な設定システムでは、値、スキーマ、デフォルト値、派生設定、バリデーションが別々の仕組みになりやすい。 Decodal では、それらを合成可能な式として扱う。

Port = Int & >= 1 & <= 65535;

Service = {
    host = String;
    port = Port default 8080;
};

Config = {
    host = "127.0.0.1";
    port = 8000;
} as Service;

Service は許容する値の範囲を表す。 Config の各値は Service によって検証され、Service にだけ存在する範囲は抽象的なまま結果へ残る。 materialize 時には明示値が優先され、値がない範囲には default が使われる。

中心概念

  • 値と制約は同じ式として参照・合成できる。
  • & は両辺の制約を保つ対称な合成を行う。
  • as は左辺が右辺より具体的で狭いことを検証しながら合成する。
  • // は右辺優先の構造的な patch を行う。
  • default は制約ではなく、materialize 時にだけ選ばれる fallback である。
  • object field、関数引数、import は必要になった時点で評価される。
  • Unknown は任意の具体値を受け入れる最上位 range だが、抽象的なまま materialize はできない。

適用範囲

Decodal は、設定、スキーマ、制約、派生データの記述に特化している。 汎用的な状態変更、時刻・乱数・ネットワークアクセス、例外を値として捕捉する try / catch は言語機能に含まれない。 filesystem や外部形式の読み込みはホストが提供し、Decodal の評価は同じ source・import 結果・global bindings に対して決定的に動作する。

正規表現制約は利用する runtime の regex feature に依存する。 高度な型推論、match の網羅性検査、到達不能分岐の静的検査は提供しない。

次に読む章