Refocus manual on public language usage

This commit is contained in:
2026-08-14 08:17:25 +09:00
parent e0a9a8efb7
commit e0970acdcc
41 changed files with 611 additions and 1982 deletions
@@ -49,7 +49,7 @@ object の要素 range では左辺にしかない field がエラーになり
要素制約のない抽象配列型は提供しない。
旧来の `Array` primitive type は使用できず、`[...T]``T` は必須である。
`[String]` は配列制約ではなく、未解決の `String` 制約を 1 要素に持つ concrete array になる。
長さ制約、位置別の tuple 制約、unique 制約は現在サポートしない。
配列制約は要素範囲だけを表す。長さ制約、位置別の tuple 制約、unique 制約は持たない。
## Array concat
@@ -60,7 +60,7 @@ primitive constraint や合成 constraint は通常どおり値を検証する
右辺が concrete scalar または array literal の場合は、左辺も同じ値または同じ長さ・要素構造である必要がある。
function は右辺の範囲として使用できない。
左辺は concrete value に限らない。処理系が包含を確認できる constraint 同士であれば abstract value も使用できる。primitive type、numeric bound、同一 regex / predicate、array/map の要素範囲は包含確認の対象になる。
左辺は concrete value に限らない。包含関係を判定できる constraint 同士であれば abstract value も使用できる。primitive type、numeric bound、同一 regex / predicate、array/map の要素範囲は包含確認の対象になる。
関数 parameter の `name: range` も、引数が force された時点で `as` と同じ絞り込み規則を使う。
@@ -24,4 +24,4 @@ Patched = Base // {
};
```
詳細は [合成演算子](../operators.md) に置く
詳細は [合成演算子](../operators.md) を参照する
@@ -7,9 +7,9 @@ port = Int default 8080;
```
`default` は制約ではない。
詳細は [制約と default](../constraints-and-defaults.md) に置く
詳細は [制約と default](../constraints-and-defaults.md) を参照する
## 評価
fallback 値は thunk として保持できる。
明示値がある場合、default採用されない。
fallback expression は materialize 時に必要になった場合だけ評価される。
明示値がある場合、`default` は評価も採用されない。
@@ -8,10 +8,7 @@ increment(41)
## 評価
引数は thunk として渡せる。
関数本体内で引数が参照されたときに評価する。
引数は関数本体から参照された時点で評価される。
同じ引数を複数回参照した場合は評価結果が再利用される。
parameter に range が指定されている場合、引数は `narrower as wider` と同じ規則で絞り込まれる。
parameter 側だけにある field は abstract のまま残り、default はこの時点では選択されない。
関数呼び出し結果そのものはグローバルには memoize しない。
フィールドに束縛された呼び出し結果は、そのフィールド thunk の評価結果として memoize される。
@@ -6,9 +6,9 @@ function expression は、引数を受け取り式を返す値である。
(value: Int) => value + 1
```
関数仕様の詳細は [関数](../functions.md) に置く
関数仕様の詳細は [関数](../functions.md) を参照する
## 評価
関数は定義時の環境を参照として保持する。
関数は定義された lexical scope の bindings を参照する。
関数本体は、関数値の生成時ではなく呼び出し時に評価される。
@@ -1,6 +1,6 @@
# Identifier Expression
identifier expression は、現在の環境に束縛された名前を参照する式である。
identifier expression は、lexical scope に束縛された名前を参照する式である。
```dcdl
Port
@@ -10,5 +10,5 @@ mkConfig
## 評価
識別子は対応する束縛の thunk を参照する。
識別子は対応する binding の値を必要になった時点で評価する。
束縛が存在しない場合は未定義識別子エラーになる。
@@ -1,15 +1,14 @@
# Import Expression
import expression は、外部ファイルを読み込み、そのファイルの評価結果を返す。
import expression は、ホストが解決した DCDL module または structured value を返す。
```dcdl
import ./config.n
import "./config.n"
import "./config.dcdl"
```
import 仕様の詳細は [モジュールと import](../modules-and-imports.md) に置く
specifier は string literal であり、path や resource name としての解釈はホストが定義する
詳しくは [モジュールと import](../modules-and-imports.md) を参照する。
## 評価
import 先はモジュール単位で読み込まれる
ただし、各 field は thunk として保持され、必要になるまで評価されない。
import 先は遅延評価され、参照されない field は評価されない
@@ -20,8 +20,7 @@ Expr
├─ import
├─ composition
├─ range refinement (`as`)
─ default
└─ string interpolation
─ default
```
各式の個別仕様へのリンクは [Manual Index](../../index.md) に集約する。
+2 -2
View File
@@ -12,5 +12,5 @@ in
## 評価
let 束縛は thunk として保持される。
参照されない束縛は評価されない
binding は参照された時点で評価される。
参照されない binding は評価されず、同じ binding を複数回参照した場合は評価結果が再利用される
@@ -50,7 +50,7 @@ Services = {...{
```
`{...T}` は key の集合を固定せず、すべての value が `T` を満たす object を表す。
空 object も許容される。runtime と materialize 後の表現は通常の object と共通であり、別の map value variant は持たない
空 object も許容される。materialize 後は named fields を持つ object と同じ object data になる
```dcdl
services = {
@@ -85,4 +85,4 @@ rest constraint は field を生成せず、materialize 時には実際に存在
```
`...T` は object の末尾に一つだけ書ける。省略した object は閉じており、`as` の左辺に未宣言 field があればエラーになる。
名前付き field を持たない `{...T}`従来どおり抽象的な map constraint であり、単独でmaterializeするにはdefaultまたは具体値が必要になる。
named field を持たない `{...T}` abstract な map constraint であり、単独で materialize するには `default` または concrete value が必要になる。
@@ -1,8 +0,0 @@
# String Interpolation
文字列補間は初期実装には含めない。
Decodal の string literal は、現時点では literal text として扱う。
式を埋め込む構文は定義しない。
必要になった場合は、文字列連結や明示的な formatting function として別途設計する。