Self

Selfの概略



Selfは、プロトタイプの考え方に基づいたオブジェクト指向プログラミング言語であり、1980年代から1990年代にかけて多くの実験的な言語設計が行われてきました。近年も開発は続いており、特にSelf言語で構築されたSelfバーチャルマシンのKleinプロジェクトが進行中です。2006年にはバージョン4.3がリリースされ、その更新も注目されています。

歴史



Selfは1986年パロアルト研究所でデビッド・アンガーとRandall Smithによって設計されました。この言語は、当時注目を集めていたSmalltalk-80を背景に、オブジェクト指向プログラミングの研究の一環として進められました。彼らはスタンフォード大学に移り、1987年には最初のコンパイラを完成させ、Selfのシステム全体の構築に力を入れました。1990年に一般向けの初リリースがあり、すぐ後にサン・マイクロシステムズに移籍し、その開発を継続しました。

続いていくつかのバージョンがリリースされ、1995年のバージョン4.0をもって活動は一時期停止しましたが、2004年にはバージョン4.2がリリースされ、Mac OS XとSolarisでの動作が確認されています。また、Selfは他のプログラミング言語にも影響を与えており、特にJavaScriptやNewtonScriptなど、様々な言語にその概念が取り入れられています。

プロトタイプベース・プログラミング



オブジェクト指向の伝統的なアプローチでは、「クラス」と「オブジェクト」の関係に依存していますが、Selfではプロトタイプベースのアプローチが採用されています。これは、オブジェクトをコピーして修正することで新しいオブジェクトを作成する方法です。例えば、「Vehicle」クラスを使ったとき、「Porsche 911」という特定のインスタンスを作成する際には、そのプロトタイプを変更することで特性を持たせることができます。これにより、クラスの階層を事前に設計する必要がなく、柔軟な開発が可能になります。

言語の特徴



Selfでは、オブジェクトが「スロット」と呼ばれる値の集まりから構成されています。スロットに対してメッセージを送ることによって、値を取得したり変更したりできます。Selfでは、メッセージの種類に応じて構文が異なり、例えば単項、二項、キーワードのメッセージを利用することができます。また、Selfの文法はSmalltalkに類似しており、スロットアクセスの構文もほぼ同様です。

NewObjectの生成においては、例えば`labelWidget copy label: 'Hello, World!'` と記述することで、既存のオブジェクトからプロトタイプを作成し、新しい属性を設定可能です。

継承と委譲



Selfの特徴として、通常のオブジェクトは自身のメッセージしか認識しないものですが、「親」オブジェクトを指し示すスロットを持つことで、未定義のメッセージを親に委譲することができます。この委譲によって、クラスベースの言語と同様の継承機能を実現することが可能です。

性能とガベージコレクション



Selfの仮想マシンは、C言語と比較しても一定の性能を持っており、高度なガベージコレクション機能を備えています。世代型のガベージコレクションにより、より効率的にメモリを管理し、メモリ使用の最適化が図られています。

さらに、実行時環境は最適化を行うことで、JITコンパイルを使用した際にはより高い性能を発揮することが可能です。

結論



Selfは、プロトタイプベースのオブジェクト指向プログラミングの先駆けとして、その設計思想と影響力において特筆すべき存在です。多くの言語にその概念が受け継がれており、今なお進化を続けるこの言語の特徴は、プログラミング言語の多様性を示す重要な一例と言えるでしょう。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。