From 8f1fd8c0484ffae001fc9af4cb7f0fbadace5bd4 Mon Sep 17 00:00:00 2001 From: "Matsuura Tomoya(Windows)" Date: Sun, 3 Aug 2025 18:51:27 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-08-03 18:51:27[ --- content/mimiumのモジュールシステム.md | 42 ++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/content/mimiumのモジュールシステム.md b/content/mimiumのモジュールシステム.md index 6a9cffe5..ab69bc11 100644 --- a/content/mimiumのモジュールシステム.md +++ b/content/mimiumのモジュールシステム.md @@ -4,7 +4,22 @@ ### 必要要件 -分割コンパイルできる、かつ、意味論的にもある程度一貫性がある +理想としては、以下を全部満たしたい + +- 分割コンパイルしたうえで、コンパイル済みのモジュールは変更がなければ再利用できる +- 操作的意味論的にもある程度一貫性がある +- モジュール内ではシンボルの相互参照が可能(後から定義されるシンボルでも参照可能) + +で、デザインチョイスのトレードオフとしては意味論を楽にしようと思うと分割コンパイルがめんどくさくなる + +複数のコードを合体させるときに、流用されるコードの複製が増える問題 + +ただ、どっちみちDSPにおけるコードの量なんてたかが知れているのでは?という問題も + +実際、そこまでモジュール内での相互参照って必要か?というのもある、Letrecで十分じゃね? + +モジュールの循環参照が起きたらどうなるのかという問題もある + #### モジュール内での宣言一覧 ```rust @@ -13,8 +28,8 @@ pub fn (){ } pub const Foo = 100 -type Bar = Constructor(()->float) //新しい型宣言 -type alias Hoge = ()->float //エイリアス宣言 +pub type Bar = Constructor(()->float) //新しい型宣言 +pub type alias Hoge = ()->float //エイリアス宣言 ``` @@ -54,6 +69,13 @@ modname.foo!() こういう感じかなー、あ、でもこうするとモジュール内での相互参照が解決できないか +トップレベルでのモジュールの名前解決は後から定義されたシンボルも参照できるので、型推論のやり方はなんか考える必要がありそう + +一旦トップレベルの宣言の名前だけを回収して、あとから実際の定義の型推論を行っていく形になる + +しかし、そうするとラムダ計算として定義する旨味はあんまりないのでは、という気がしてくる + + --- @@ -68,4 +90,16 @@ Program = FunctionDefinition ModuleDeclaration = Visibility(stage) { Program } -``` \ No newline at end of file +``` + + +Pythonのモジュールシステム [Python's Import System - Module object|Regular/Namespace Packages|Finders & Loaders|Relative imports - YouTube](https://www.youtube.com/watch?v=QCSz0j8tGmI) + +モジュールはオブジェクトであり、`__file__`などはモジュールオブジェクトに付属するメンバ変数 + + +[[Gluon]]のモジュール [Modules - Gluon Documentation](https://gluon-lang.org/doc/crates_io/book/modules.html) + +これマクロとして実装してあるので、分割コンパイルとかは全然考慮されてないけど意味論はすっきり + +