複数ファイルとライブラリ
Dicks 0.2 のプロジェクトは、ファイルごとに独立した関数・型の名前空間を持ちます。main は部品を組み合わせる入口です。ルート、認証、ストレージなどを別ファイルに分けられます。ソースの文字集合は従来どおり 8=D~ と ASCII 空白だけです。人間向けのモジュール名は dicks.json に置きます。
dicks init は最初から main.dicks と lib.dicks を作成します。
{
"name": "hello",
"target": "module",
"entry": "main.dicks",
"modules": {
"app": {
"source": "main.dicks",
"exports": {"main": 1},
"imports": {"2": {"from": "lib", "name": "value"}}
},
"lib": {
"source": "lib.dicks",
"exports": {"value": 1}
}
},
"dependencies": {},
"tests": []
}
main.dicks はローカル関数 1、引数なし、戻り値なし。ローカルの import スロット 2 を呼んで結果を出力します。
8========================D~
8=========================D
8==========================D
8===========================D
8============================D~~
8===D
8======================D
lib.dicks は同じローカル関数 1 を使えます。値 1 を返します。
8========================D~
8=========================D
8==========================D~
8=D~
8===========================D
8=D~
8======================D
dicks lock
dicks run
dicks inspect
dicks fmt --check
境界と型
- 宣言しない関数はファイル内だけで使用できます。隣のファイルの数値 ID を直接呼ぶことはできません。
exportsの名前をimportsのローカルスロットへ割り当てます。未定義・非公開の export、重複 ID、循環 import はビルドエラーです。exportTypes/typeImportsで nominal 型も明示的に共有できます。形が同じ別モジュールの型は別物です。- 組み込み ABI の型は共有されます。
@dicks/coreが 5–12, 16–17、@dicks/httpが 13–14 を予約します。ローカル型や型 import で上書きできません。 - 入口のローカル関数は 1。その他の ID はビルド時に再配置します。リンク後の ID を永続データへ保存しないでください。
- import は静的です。動的 import、循環依存、ジェネリクス、クラス、デコレータは未実装です。
リンカーは開発用 Node ツールです。字句解析、宣言の連結と ID 再配置を担当し、型検査と JavaScript 生成は検証済みの Dicks 製コンパイラへ渡します。型エラーは元ファイルの行へ戻し、dicks inspect と source-map.json に元ソースの位置を残します。全ソースをハッシュへ含めるので、子モジュールだけの変更も再ビルドされます。
パッケージ
ライブラリの package.json は name, version, license, files, modules を持ちます。files に載せたファイルだけを同期します。
{
"name": "my-library",
"version": "0.1.0",
"license": "AGPL-3.0-only",
"files": ["lib.dicks"],
"modules": {
"default": {"source": "lib.dicks", "exports": {"value": 1}}
}
}
default の import 元はパッケージ名です。それ以外のモジュールは my-library/module-name です。プロジェクト内モジュールからもライブラリ間でも同じ仕組みで import できます。dicks add ../my-library でローカル依存を追加できます。自動インストールスクリプトは実行しません。
テストは tests に列挙する .dicks ファイルです。テストファイルも modules へ登録すると、テスト専用 import を持てます。dicks test は各テストを入口にしてリンクし直します。プラットフォーム I/O を実行するテストには専用ホストが必要です。CLI は純粋な標準ホストを供給し、ネットワークや DB を暗黙に許可しません。
現在は全依存モジュールを静的に検査します。実行可能な出力には入口から到達できる関数だけを含めますが、静的検査の入力には合計 256 関数・1 MiB のソース制限があります。同一の文字列定数関数はコードを共有します。巨大アプリ用の分割コンパイルは今後の対象です。パッケージは 公開レジストリ から完全一致の版を取得できます。