[obsidian] vault backup: 2025-08-03 22:54:20[
All checks were successful
Build / build (push) Successful in 11m36s
All checks were successful
Build / build (push) Successful in 11m36s
This commit is contained in:
@@ -60,7 +60,7 @@ modname::foo!()
|
|||||||
これがあったとすると、
|
これがあったとすると、
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let modname = ${
|
extern modname = ${
|
||||||
foo = | | { },
|
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 `
|
||||||
|
|
||||||
|
ここまでしか型は決定できないということに
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user