2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【小話】独自パラダイムがOOPを超えるかも

2
Last updated at Posted at 2026-03-24

私は今、構造体であり、インターフェースでもある「フレーム」という概念を扱う、なんともヘンなパラダイム、Frame-Oriented Programmingを設計しています

FOPは

  • 派生実装の不完全性
  • 自己等価性
    • 相互等価性

といった性質を持ちます

派生実装の不完全性

こちらはOOPでいうところの基底クラスの抽象メソッドが、派生クラスで実装が欠落している状態がFOPでは許容されているのです
そのため、コンパイル時検証が必要になります

自己等価性

これは、OOPでは絶対に許されていない行為になります

  • 例えば、フレームAが抽象関数fを持っているとしましょう。同時に具象関数fも持っています(構文上、抽象と具象は分けられているものとします)
  • これを、自己実装すると、抽象関数fに対して、具象関数fが実装されたことになります
  • この時、抽象関数fは具象関数fだといえます
  • そして、抽象関数fは「派生実装の不完全性」により無視できますから、Aは具象関数fのみを持っているといえます
具体的なコードコード
frame A : A {
    abs impl Self {
        abs func f(i: i32) -> i32
    }
    impl A {
        pub func f(i: i32) -> i32 {
            i * 2
        }
    }
}

自身を自身で実装しているのがわかると思います

ここで大事なのが、AA自身にキャストができるということです

FOPの制約

FOPには制約があります

FOPでは、構造体かインターフェースかが不確定です

例えば、フレームBを引数にとる関数gがあったとしましょう
この時、フレームBは構造体として扱うのか、インターフェースとして扱うのかどちらかは分かりません
フレームが構造体でもありインターフェースでもあるからです

FOPでは、構造体として扱うのかインターフェースとして扱うのか明示しないといけません
しかし、それでは基底フレームと派生フレーム両方を扱うことができません

自己等価性による解決

「インターフェースとして扱う」ということは、キャストする必要があります
派生フレームであれば、キャストができるので問題ありませんが、基底フレームはできません
ここで、自己等価性を利用すると基底フレームも基底フレームにキャストができます
これで解決できるのです

相互等価性

これは、OOPの循環継承にあたります

しかし、FOPは自己実装ができるわけですから、同じ理由で相互実装ができます

終わりに

実は、後二つの性質は副産物のようなものでした

FOPはOOP以上のことができるのです

引き続き言語の実装を頑張ってまいります

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?