モジュール
Ceruneでは、importで別の.ceruファイルにある型・関数・定数を参照できます。名前の衝突を避けるため、別名(alias)を指定して参照します。
ファイルの読み込みと名前空間
Section titled “ファイルの読み込みと名前空間”import "相対パス.ceru" as 別名;を、関数や型の定義、実行文より前に書きます。
import "values.ceru" as values;
item: values::Reading = values::reading(7);print(item.amount);読み込む側の定義には、外部へ公開するものだけpubを付けます。
pub type Reading { amount: u64, }
pub fn reading(amount: u64) -> Reading { return Reading { amount: amount };}values::Readingは型、values::readingは関数を参照します。importの別名は、そのimportを書いたファイル内だけで有効です。利用する側の各ファイルに、必要なimportを明示します。
公開範囲(pub)
Section titled “公開範囲(pub)”定義は、既定でそのファイルの内部からのみ参照できます。
| 構文 | 外部から使える定義 |
|---|---|
pub fn |
関数 |
pub type |
名前付き積型と全フィールド |
pub enum |
直和型の全選択肢とフィールド |
pub const |
コンパイル時定数 |
公開関数から同じファイルの非公開補助関数を呼び出すことはできますが、import先からその補助関数を直接呼ぶことはできません。
公開関数の引数・戻り値、公開型のフィールドには、非公開型を含められません。フィールド単位の公開範囲は指定できません。
外部のenumの選択肢はalias::Enum::Variant、公開された配列長の定数はalias::COUNTの形式で参照できます。
パスと読み込み順
Section titled “パスと読み込み順”- import先は、importを宣言したファイルがあるディレクトリからの相対パスで解決します。
- パスには
/区切りと.ceru拡張子が必要です。親ディレクトリを参照する..も使えます。 - 絶対パス、ドライブ指定、バックスラッシュは認められません。
- 循環参照、同じ別名の重複、名前の衝突はコンパイル時に診断します。
CLIを実行した作業ディレクトリや環境変数から、import先を追加検索することはありません。
importしたファイルは実行しない
Section titled “importしたファイルは実行しない”importするだけでは初期化処理は実行されません。 読み込まれるファイルのトップレベルに書けるのは、importと型・関数・定数の定義だけです。
トップレベルの変数宣言やprintなどの実行文は、依存ファイル内では認められません。初期化処理が必要な場合は関数として定義し、プログラムの入口から明示的に呼び出します。
import先にmain関数があっても自動実行しません。プログラムの入口には、従来どおりトップレベル実行文か引数なしのfn main() -> voidを使います。
仮想標準モジュール
Section titled “仮想標準モジュール”ファイル以外に、std:形式の仮想標準モジュールをimportできます。現在はstd:ioが用意されています。
import "std:io" as io;io::read_line(max_bytes)は行入力を行い、io::ReadLineの値を返します。対応するホスト接続や実行ターゲットには制限があります。Windowsコンソール入力は未対応です。詳しくは標準モジュールの設計を参照してください。
再export、ワイルドカードimport、複数段のモジュール参照、外部の実行時変数へのアクセス、可変なモジュール共有状態は未実装です。パッケージ配布・バージョン解決・動的ロードも対象外です。
サンプルと一次資料
Section titled “サンプルと一次資料”- modules/main.ceru —
importと公開型・公開関数の使用 - modules/values.ceru —
pubと非公開関数 - modules/sum_lookup.ceru — 別ファイルの
enumとmatch - modules/constant_array_lengths.ceru — 公開定数を使う配列長
- モジュールのサンプル一覧
このページは仕様の要約です。名前解決、公開範囲、パスの検査、依存ファイルの扱いは言語リファレンスとモジュールの設計を参照してください。