From 90b0e36115b723426f0ae6cf9fc988d790aa6503 Mon Sep 17 00:00:00 2001 From: "Matsuura Tomoya(Windows)" Date: Sun, 3 Aug 2025 22:54:21 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-08-03 22:54:20[ --- content/mimiumのモジュールシステム.md | 42 ++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/content/mimiumのモジュールシステム.md b/content/mimiumのモジュールシステム.md index 3f54c5dc..cc64fd18 100644 --- a/content/mimiumのモジュールシステム.md +++ b/content/mimiumのモジュールシステム.md @@ -60,7 +60,7 @@ modname::foo!() これがあったとすると、 ```rust -let modname = ${ +extern modname = ${ foo = | | { }, ... } @@ -77,7 +77,47 @@ modname.foo!() しかし、そうするとラムダ計算として定義する旨味はあんまりないのでは、という気がしてくる +`extern name : Type `という宣言に変換さえできれば意味論を保ってコンパイルはできそう +型がつけられさえすればいいから、そこで循環する定義にならなければOK + +```rust +//modA.mmm +use modB +pub fn hoge(){ + modB::hoge() +} + +//modB.mmm +use modA +pub fn hoge(){ + modA::hoge() +} +``` + +(ランタイムで無限ループするけどそれはいいとして)変換するとこう + +```rust +// modA.mmm +extern modB:{ + hoge: ? +} +fn hoge(){ + modB.hoge() +} + +//modB.mmm +extern modA:{//実際は型コンストラクタとかで覆って区別できるようにすべき + hoge: ? +} +fn hoge(){ + modA.hoge() +} +``` + +`modA::hoge : 'a ()->'a, modB::hoge : 'a ()->'a ` + +ここまでしか型は決定できないということに ---