メインコンテンツまでスキップ
バージョン: 開発中

複数ファイルとライブラリ

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 のソース制限があります。同一の文字列定数関数はコードを共有します。巨大アプリ用の分割コンパイルは今後の対象です。パッケージは 公開レジストリ から完全一致の版を取得できます。