NEPLg2.0 → NEPLg2.1 変更点まとめ

NEPLg2.0(現行実装)から NEPLg2.1(目標仕様)への主要な変更を記したドキュメント群。
ここでいう NEPLg2.1 は、Zenn #1「カリー化」と Zenn #2「型と制御構文」で明示されたコア構文を正とする。


ドキュメント一覧

ドキュメント内容
syntax.md宣言構文・型記法・引数リスト記法の変更
module_system.mdモジュールシステムの変更(import 廃止等)
memory_model.mdメモリモデルの変更(raw pointer 隔離・stdlib 移行計画)

変更の全体像

削除されるもの

削除対象理由
fnstructenumtraitimpl 宣言キーワードlet に統一
型記法 Name<A, B>(angle bracket)Name A B(juxtaposition)に変更
型記法 (A, B) -> C(A) *> Bfn A fn B Cfn* A B に変更
型注釈 <TypeExpr>(angle bracket)%TypeExpr に変更
% の意味を「宣言専用注釈開始」とみなす旧 2.1 案「続く 1 個の式に掛かる前置演算子」に変更
関数宣言の %fn ... \ ... 必須形式let <name> <expr> に変更
unit 型 ()unit へ置き換える旧 2.1 案() のまま維持
引数リスト (a, b):\a \b ... に変更
Tuple 組み込み構文PairTriple の stdlib struct を使用
#import ディレクティブuse(モジュール依存)と merge(ソース結合)に分離
use path::*(グロブ形式)use path as * に変更
#entry main(名前付き形式)#entry 単独ヘッダに変更
旧 2.1 案の if <cond> : <suite> / match arm: suiteif cond a b / match arm expr に変更
括弧グループ (expr)(式・型文脈)型推論(arity/kind-directed)で境界確定
文区切りセミコロン ;文区切りとしては廃止し、前置 ; expr に再定義
alloc/dealloc の公開 APIResult/Option 前提の安全 API に統一
raw pointer の公開面(mem_ptr_addr 等)compiler/runtime 境界に隔離
entry 関数の強制 Impure 特例署名どおりの effect 判定に変更

追加されるもの

追加対象内容
%TypeExpr 型注釈記法続く 1 個の式に作用する前置型注釈
kind-directed 型解析括弧なしで型境界を決定
where複数制約の分離記述
同一シグネチャ再定義の保護現在の 2.1 core では専用キーワードを持たず、将来拡張候補として保留
& <expr> / &mut <expr> borrow 記法式文法に組み込まれた borrow
module name: ブロックファイル内の論理サブモジュール分割(新規)
EnumType::Variant バリアント修飾形モジュール修飾と独立した型名修飾(型検査器が処理)
or / span patternmatch pattern の直接表現
block:明示的 block 式
前置 ; expr評価して () に落とす演算子
Region InferencePure persistent value の自動回収
Drop Elaborationowned/linear resource の自動 drop 挿入
Resource IRownership/borrow/region/drop の解析中間表現
InternalAlloc / ExternalIO 内部効果分類効果判定の精密化
pub use 再エクスポート・循環検出モジュール public surface の再構成
Orphan Rule(グローバルCoherence)クロスモジュール実装一意性の保証
NLL(ライフタイム注釈なし)borrow スコープはコンパイラが "last use" で推論(明示構文なし)
ジェネリクスの不変(invariant)意味論変位バグを構造的に排除
On this page