Files
hakorune/docs/private/papers/_archive/unified-lifecycle/related-work.md

178 lines
4.7 KiB
Markdown
Raw Normal View History

# Related Work
## 1. 所有権・ライフサイクル管理システム
### 1.1 Rust
**アプローチ**: 型システムによる静的所有権管理
```rust
fn example() {
let s = String::from("hello"); // sが所有
let t = s; // 所有権移動
// println!("{}", s); // コンパイルエラー
}
```
**Nyashとの比較**:
- Rust: コンパイル時に所有権を検証
- Nyash: 実行時に統一契約で管理
- **利点**: Nyashはプラグインも同じ契約で管理可能
### 1.2 Swift (ARC)
**アプローチ**: 自動参照カウント
```swift
class Person {
let name: String
init(name: String) { self.name = name }
deinit { print("Person is being deinitialized") }
}
```
**Nyashとの比較**:
- Swift: ネイティブオブジェクトのみARC
- Nyash: プラグインBoxも含めて統一管理
- **利点**: FFI境界でも一貫したライフサイクル
### 1.3 C++ (RAII)
**アプローチ**: スコープベースのリソース管理
```cpp
{
std::unique_ptr<File> f = std::make_unique<File>("data.txt");
// スコープ終了時に自動的にデストラクタ
}
```
**Nyashとの比較**:
- C++: テンプレートとデストラクタ
- Nyash: @must_drop/@gcableアテーション
- **利点**: GCオン/オフ切り替え可能
## 2. FFIシステム
### 2.1 JNI (Java Native Interface)
**アプローチ**: 複雑なAPI経由でのネイティブ呼び出し
```java
public native void nativeMethod();
```
```c
JNIEXPORT void JNICALL Java_ClassName_nativeMethod(JNIEnv *env, jobject obj) {
// 複雑なJNI API使用
}
```
**問題点**:
- グローバル参照の管理が複雑
- 例外処理の境界が不明確
- パフォーマンスオーバーヘッド大
**Nyashの解決**:
- ハンドルベースinstance_idで単純化
- 例外は戻り値で表現
- 静的リンクで高速化
### 2.2 Python ctypes
**アプローチ**: 動的型付けでのFFI
```python
from ctypes import *
lib = CDLL('./library.so')
lib.function.argtypes = [c_int, c_char_p]
result = lib.function(42, b"hello")
```
**Nyashとの比較**:
- Python: 実行時の型チェック
- Nyash: TLVで型情報を含む
- **利点**: より安全で予測可能
### 2.3 WASM Component Model
**アプローチ**: インターフェース定義言語
```wit
interface calculator {
add: func(a: s32, b: s32) -> s32
}
```
**Nyashとの比較**:
- WASM: モジュール間の境界定義
- Nyash: 言語レベルでの統一契約
- **利点**: より深いライフサイクル統合
## 3. マルチバックエンド実行システム
### 3.1 GraalVM
**アプローチ**: ポリグロット実行環境
- 複数言語を同一VMで実行
- Truffle フレームワークでAST解釈
**Nyashとの比較**:
- GraalVM: 言語間の相互運用重視
- Nyash: 単一言語の実行戦略多様性
- **利点**: より軽量で予測可能
### 3.2 PyPy
**アプローチ**: トレーシングJIT
- Pythonコードを高速化
- RPythonで実装
**Nyashとの比較**:
- PyPy: 既存言語の高速化
- Nyash: 最初から多バックエンド設計
- **利点**: クリーンな設計で保守性高
### 3.3 .NET/CLR
**アプローチ**: 共通中間言語CIL
```csharp
// C#コード → CIL → JIT/AOT
public class Example {
public static void Main() { }
}
```
**Nyashとの比較**:
- .NET: 巨大なランタイム
- Nyash: 最小限のランタイム(~4K LoC
- **利点**: 理解・検証が容易
## 4. プラグインシステム
### 4.1 COM (Component Object Model)
**アプローチ**: インターフェースベース
```cpp
interface IUnknown {
virtual HRESULT QueryInterface(REFIID riid, void **ppv) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
};
```
**問題点**:
- 複雑なレジストリ管理
- Windowsプラットフォーム依存
- バージョニングの悪夢
### 4.2 OSGi (Java)
**アプローチ**: 動的モジュールシステム
- バンドルのライフサイクル管理
- サービスレジストリ
**Nyashとの比較**:
- OSGi: Javaエコシステム専用
- Nyash: 言語中立的なC ABI
- **利点**: より単純で移植性高
## 5. 学術的位置づけ
### 5.1 新規性
1. **統一ライフサイクル**: ユーザーBoxプラグインBox
2. **GC切り替え可能**: 意味論を保持
3. **実行戦略の透明性**: 5つのバックエンドで同一動作
### 5.2 関連する理論
- **線形型システム**: Rustの所有権との比較
- **エフェクトシステム**: @must_drop/@gcableとの関連
- **抽象機械**: MIR設計の理論的基礎
### 5.3 応用可能性
- **組み込みシステム**: 決定的メモリ管理
- **ゲームエンジン**: 高性能プラグイン
- **科学計算**: 予測可能な性能