hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
パブロ・ピカソ 死後
ピカソは非常に多作な作家であり、世界中の多くの美術館がピカソの作品を保有している。ピカソの名を冠する美術館だけでも、まず生まれ育ったスペインではバルセロナに1963年にピカソ美術館 (バルセロナ)が開館し、2003年には遺族がピカソの出身地であるスペインのマラガにピカソ美術館 (マラガ)を開館した。
ピカソは1973年の死の時点で、多数の作品を手元に残していた。また友人の画家（アンリ・マティスなど）の作品を交換や購入によって相当数持っていた。フランス政府は遺族から相続税としてこれらの作品を徴収し、1985年に国立ピカソ美術館を開館した。一作家の美術館としては世界最大の規模を誇るもので、ピカソの作品だけで油絵251点、彫刻と陶器160点、紙に描かれた作品3,000点を所蔵している。
このほか、アンティーブにピカソ美術館 (アンティーブ)、カンヌ近郊のヴァロリスにピカソ美術館 (ヴァロリス)が存在し、パリと合わせてフランスには合計3つのピカソ美術館が存在する。
1996年、映画『サバイビング・ピカソ』が公開された。フランソワーズ・ジローとピカソの関係を描いたもので、アンソニー・ホプキンスがピカソを演じた。
パブロ・ピカソ 死後
2004年、ニューヨークのサザビーズの競売で、ピカソの『パイプを持つ少年』（1905年）が1億416万8000ドル（約118億円）で落札され、絵画取り引きの最高額を更新した。2006年5月には、同じくサザビーズの競売で『ドラ・マールの肖像』（1941年）が9521万6000ドル（約108億円）で落札された。
2010年5月4日、ピカソの『ヌード、観葉植物と胸像』がニューヨークのクリスティーズで約1億650万ドル（約101億円）で落札され、最高額を更新した。ロサンゼルスの収集家が1950年代に購入した作品で事前予想でも8000万ドル以上と予想されていた。それまで（2010年2月当時）の最高額はアルベルト・ジャコメッティのブロンズ像『歩く男』の約1億430万ドルだった。
パブロ・ピカソ 死後
2006年10月、ラスベガスのホテル王で美術品収集家としても知られるスティーブ・ウィンが、1億3900万ドル（約165億円）で別の収集家に売却する予定だったピカソの名画「夢」に誤ってひじを食らわせ、直径約2.6cmの穴を開けてしまった。事件を目撃した友人がインターネットのブログに書き込みをして詳細が発覚した。ウィンは1997年にこの絵を4840万ドル（約58億円）で購入し、長年大切にしてきた。もうすぐお別れとなる絵の前に立ち、友人らに説明していたところ、誤って名画の真ん中に穴を開けてしまった。結局、契約はないことになり、名画は修理され、ウィンの元にとどまることになった。ウィンは穴を開けた瞬間、「何てことをしてしまったのか。でも（破ったのが）私でよかった」と話したという。
2012年7月、オランダのクンストハル美術館が所蔵していた「アルルカンの頭部」が、クロード・モネやルシアン・フロイドの絵画と共に盗難に遭う。翌年になって犯人は逮捕されたが、絵画は既に焼却されていた。
2015年5月11日には、ニューヨークのクリスティーズの競売で、ピカソの「アルジェの女たち バージョン0」が1億7936万5000ドル（約215億円）で落札され、絵画取引の最高額を更新した。
2018年5月8日、クリスティーズで『花のバスケットを持つ裸の少女』が1億1500万ドル（約125億円）で落札された。
パブロ・ピカソ 家族
子供
1921年、息子パウロ 誕生。
1935年、娘マリア（マヤ）誕生。
1947年、息子クロード誕生。
1949年、娘パロマ誕生。
パロマ・ピカソは著名なジュエリー・デザイナーとなり、1980年からはティファニー社のデザイナーとして活躍している。
孫
孫のマリーナ（パウロの娘）にはフロリアン・ピカソというベトナムから迎えた養子がおり、ピカソの義理の曽孫にあたる。フロリアンは、ミュージシャンとして活動している。
鳩
ピカソにはかけがえのないパートナーがいた。それは鳩である。1949年には鳩を描いたリトグラフ『鳩』を制作し、世界平和評議会のポスターに使用されるなど、世界で平和の象徴として使用された。ピカソにとって鳩は、重要な政治的シンボルであると同時に、個人的なシンボルでもあった。
パブロ・ピカソ 家族
また鳩は、ピカソに画家としての技術を教えた画家である父、ホセ・ルイス・イ・ブラスコのことを思い出させるものだった。父は、1880年代にピカソが幼少期を過ごしたマラガの家で鳩を描いていた。
1955年に南フランスのカンヌに移り住んだピカソは、自宅に鳩舎を建てた。1957年、ピカソは鳩に囲まれた開いた窓を描いた『スタジオ（鳩・ベラスケス）』を描いた。
幼い頃から鳩が大好きだったピカソにとって、鳩は生涯の友であり、重要なモチーフでもあった。アトリエには妻さえ入れなかったが、鳩は特別に入れていた。『鳩』を描いた1949年にフランソワーズ・ジローとの間に生まれた娘には、スペイン語で鳩を意味する「パロマ」と名付けた。
パブロ・ピカソ 語録
「スペイン内戦は、スペイン人民と自由に対して、反動勢力が仕掛けた戦争である。私の芸術家としての生涯は反動勢力に対する絶え間なき闘争以外の何物でもなかった。私が反動勢力すなわち死に対して賛成できるなどと誰が考えることができようか。私は「ゲルニカ」と名付ける現在制作中の作品において、スペインを苦痛と死の中に沈めてしまったファシズムに対する嫌悪をはっきりと表明する。」（「ゲルニカ」制作時の声明より）
パブロ・ピカソ 名前
ピカソの本名は、聖人や縁者の名前を並べた長いもので、出生証明書によると、下記のとおりである。
本名
「Pablo Diego José Francisco de Paula Juan Nepomuceno Cipriano de la Santísima Trinidad Ruiz y Picasso」
（パブロ・ディエゴ・ホセ・フランシスコ・デ・パウラ・ホアン・ネポムセーノ・シプリアーノ・デ・ラ・サンティシマ・トリニダード・ルイス・イ・ピカソ）
洗礼名
「Pablo Diego Jose Francisco de Paula Juan Nepomuceno Maria de los Remedios Crispin Crispiano de la Santisima Trinidad Ruiz y Picasso」
（パブロ・ディエゴ・ホセ・フランシスコ・デ・パウラ・ホアン・ネポムセーノ・マリア・デ・ロス・レメディオス・クリスピン・クリスピアーノ・デ・ラ・サンティシマ・トリニダード・ルイス・イ・ピカソ）
パブロ・ピカソ 作品
ピカソは、1924年に友人となった芸術出版業者クリスチャン・ゼルヴォス（クリスチャン・ゼルボス）に目録（カタログ・レゾネ）の作成を依頼した。目録の第一巻『Works from 1895 to 1906』（1895年から1906年までの作品）は1932年に出版されたが、ゼルヴォスの出版会社カイエ・ダールの財政が傾き、コレクションの一部を売却せざる得ない事態を招いた。ゼルヴォスの死後、ミラ・ガガーリン（Mila Gagarine）が1970年から1978年にかけて11巻の追加刊行を監修した。
1895年から1972年までの全作品を網羅した目録は、全33巻となり、ピカソの意向で、約16,000枚の白黒写真が掲載された。
Smalltalk
Smalltalk（スモールトーク）は、Simula のオブジェクト（およびクラス）、LISPの徹底した動的性、LOGO のタートル操作や描画機能に、アラン・ケイの「メッセージング」というアイデアを組み合わせて作られたクラスベースで手続き型の純粋オブジェクト指向プログラミング言語、および、それによって記述構築された統合化プログラミング環境の呼称。
Smalltalk で一語であり、「Small Talk」「SmallTalk」などは誤りである。
大規模な開発実績としてはCargill Lynx Projectがあり、国産製品の開発実績としてはMCFrameがある。
Smalltalk 概要
ゼロックスのパロアルト研究所（PARC）で1970年代に約10年かけ3世代（Smalltalk-72、76、80）を経て整備された。当初は、ダイナブックである Alto（アルト） のオペレーティングシステム的位置付けだったが、Alto のゼロックス社製品としての販売の可能性が同社上層部決定により完全に排除されたこと、発案者であるアラン・ケイの研究開発グループ離脱などを受けてダイナブック色は失せ、Alto のハードウェア技術を基にした商用マシン上で動作するプロの開発者向け統合化プログラミング環境「Smalltalk-80」として1983年に発売されることになる。現在はシンコムより VisualWorks（ビジュアルワークス）という製品名で主要なオペレーティングシステム向けに販売されている。
※この節はを元に執筆されている。
豊富で整備されたクラスライブラリーは、特にオブジェクト指向プログラミングの手本とされ、デザインパターンの宝庫と称されるまで洗練されたものになっている。また、後世の多くのオブジェクト指向プログラミング言語に直接間接的に多大な影響を与えた。
Smalltalk 概要
アラン・ケイが「オブジェクト指向」という言葉を創った当初は、Smalltalk システムが体現した「パーソナルコンピューティングに関わる全てを『オブジェクト』とそれらの間で交わされる『メッセージ送信』によって表現すること」を意味していた。しかしのちに、C++ の設計者として知られるビャーネ・ストロヴストルップが（自身、Smalltalk の影響は受けていないと主張する）C++ の設計を通じて整理し発表した「『継承』機構と『多態性』を付加した『抽象データ型』のスーパーセット」という考え方として広く認知されるようになった（カプセル化、継承、多態性）。現在は、両者の渾然一体化した曖昧な概念として語られることが多い。
Smalltalk 概要
Smalltalk は、オブジェクトへのメッセージ送信を率直に記述する表記の特殊性や、制御構造をもたずオブジェクトへのメッセージ送信の形で記述する徹底ぶりとも併せて、C言語や C++ などの流れを強く受け継ぐ言語、およびその開発手法に慣れた開発者にとって極めてとっつきにくい言語・環境であるといわれている。このことは、Smalltalk が単なるプログラミング言語ではなく、従来のオペレーティングシステムの概念をも包括する「環境」であることが一つの理由である。Smalltalk を単なる言語としてとらえると、他の言語と比較したとき、使用するオペレーティングシステムのグラフィカルユーザインターフェースに全く従わないなど、その独自性が大きな「欠点」として映る場合もある。
これは VisualWorks や Squeak（スクイーク） など、旧来の Smalltalk 環境、つまりダイナブックコンピュータ環境の要素を引き継ぐ統合開発環境を通じて Smalltalk 言語や処理系を学ぶなら、多かれ少なかれ新たなオペレーティングシステムに接するような心構えを持つべきことを意味する。
Smalltalk 環境および処理系としてのSmalltalk
Smalltalk 環境から見た Smalltalk 言語は、いわば bash などのシェルに近い。Smalltalk 環境内であればどこでもマウスで選択した文字列を Smalltalk のソースコードとして実行できるためシェルにコマンドを打ち込んだ時の様に簡単な問い合わせをすぐ実行できるようになっている。
例えばオブジェクト(クラスやメソッドも含む)の構造を調べたければ、そのオブジェクトに#browse（ブラウズ）セレクターあるいは#inspect（インスペクト）セレクターを使ったメッセージ式を書き、そのメッセージ式をマウスで選択してdo it(WindowsであればCtrl+Dを押す)すれば良い。
また、設定値の指定に Smalltalk 言語のメッセージ式が使われる。現在設定されている値がメッセージ式として取得でき、値の設定をメッセージ式として指定する。この設定値を指定するメッセージ式は Smalltalk 環境の実行中に設定用のウィンドウから入力される。
Smalltalk 環境および処理系としてのSmalltalk
Smalltalk 環境は、Smalltalk 環境の実行方法として現実のハードウェアに依存している機械語命令を使わず、現実のハードウェアから独立した中間言語命令(仮想機械に対する機械語命令)を仮想機械により実行する仮想機械方式を採用している。 Smalltalk の中間言語命令は、全てイメージファイルというファイルに書き込まれ Smalltalk の仮想機械はそのイメージファイルを読み込んでSmalltalk 環境を実行する。
この仮想機械方式による Smalltalk の実行方法は Smalltalk の言語仕様にも含まれている。
なお、Smalltalk が導入したこの仮想機械方式はEULERのpコードマシンからアラン・ケイが着想を得たものである。
イメージファイルは、Smalltalk 環境の実行状態をそのまま保存したファイルである。イメージファイルは Smalltalk 環境実行中に生成された全てのオブジェクトを直列化して保存することでSmalltalk 環境の実行状態を保存している。この直列化されたオブジェクトには、Smalltalk の中間言語も含まれている。イメージファイルに含まれる中間言語命令は、Smalltalk 自身によって記述されたコンパイラーによってソースコードから翻訳された、バイト列のオブジェクトである。
Smalltalk 環境および処理系としてのSmalltalk
Smalltalk の実行環境が全く存在しない初期の状況ではコンパイラーも仮想機械も Smalltalk で用意する事はできない。このため Smalltalk の初期段階ではALTOのアセンブリ言語によりコンパイラーや仮想機械が実装されていた。
Smalltalk 環境および処理系としてのSmalltalk
Smalltalk環境は翻訳方式を使う処理系としては珍しくプログラムの実行時書き換えを基本とする。例えば後述のClass Browserに入力したプログラムはソースコードを中間言語に変換したあとSmalltalk環境の一部として取り込まれ、環境を再起動したり読み込み操作をしなくても起動中のSmalltalk環境内で実行することができる。C++のような翻訳式の言語であれば原則、ソースコードを書き換えた場合は原則プログラムの再起動が必要となる。またPythonの様な言語ではソースコードを再読み込みする処理を予め書き換えたい処理の呼び出し元に組み込んでおかなければソースコードをいくら書き換えても動作に反映できない。Smalltalkではその再起動や再読み込み処理の組み込みが必要ない。このため環境をソースコードを書き換える都度環境全体を再起動しなくて済むのはもちろん、Windowを表示するプログラムを作った場合であれば、Window内のButtonの動作を変更する時もWindowを表示したままソースコードを書き換えて動作を変更できる。このためButtonを押すまでに複数の手順が必要なプログラムやWindowの表示に時間がかかるプログラムでもButtonを表示した状態から再起動せず何度でもやり直しができ効率的なソースコード変更が可能になっている。
Smalltalk 環境および処理系としてのSmalltalk
GUIを使わないような特殊なものを除き、大半のSmalltalk環境では次のようなGUIツールが用意されている。
Smalltalkの開発ではこれらのツールを使って開発する事が半ば前提となっている。
Smalltalk環境内に存在する全てのクラスを(存在する場合は名前空間も)表示/編集できるツールで、Smalltalk開発において中核となるツールである。
言うなれば出力しかできないコンソールといったツールで、プログラムの実行結果を簡易的に表示したいときに使われるツールである。Smalltalk環境内でTranscript変数に書き込まれたメッセージは、全てこのTranscriptに表示される。
言うなればコンソールの入力側とテキストエディターを組み合わせた様なツールである。一見すれば書いたコードを実行できるだけの簡易的なテキストエディターにしか見えないが、WorkspaceはWorkspace変数というWorkspace固有の変数を持っており、Workspace内で実行されたSmalltalkコードの実行結果を保持することができる。このため、長いコードを書くような用途では使わず、Smalltalk環境に対するパッケージの追加や、環境設定、ファイルの一時的な操作など一時的な操作を実行する場所として使われる。
オブジェクトの内部構造を再帰的に表示するツールである。また、多くの場合オブジェクトの編集が可能でありWorkspaceと組み合わせてオブジェクトを組み立てていくことが可能である。例えば画面部品をWindowを表すオブジェクトに組み込み、クラス変数に格納するといった具合である。Inspectorに限らずSmalltalk環境全体に共通することであるが、オブジェクト内の変数を表示するときは内部構造そのままではなくオブジェクトの文字列表現で表示する。このため内部がHash map等複雑な構造になっている場合でもDictionary (#key -> 'value' )といった読み易い表示となる。
Smalltalk 言語としてのSmalltalk
言語として Smalltalk が目指したもの。それは計算機を計算機の集合体として構築し、さらに計算機を構成する個々の計算機も計算機の集合体で構築するというように、再帰的な計算機を構築することであった。この再帰的な計算機を構築している無数の計算機は、個々の内部には干渉せずメッセージによる通信のみによって相互作用を発生させ目的の計算を完遂させる。
ここでいう計算機が Smalltalk ではオブジェクトという形で実装された。
この設計思想の誕生は、ロバート・S・バートンとB5000の設計者らが会談した際の次の発言をアラン・ケイが聞き「計算機の全体を計算機とみなした場合、その計算機の構成要素を計算機に分解するのではなく関数やデータ構造に分解したいと誰が思うのか」と疑問を浮かべた事がきっかけとなっている。
“The basic principle of recursive design is to make the parts have the same power as the whole.”「再帰設計の基本原理は、部品が全体と同じ力を持つようにすることだ」
ここで言及された再帰という概念は、オブジェクトの成立以外にも Smalltalk の至るところに影響を与えている。
Smalltalk 言語としてのSmalltalk
Smalltalk の言語仕様は原則として非常に単純なため、環境もしくは処理系の相違による互換の有無は、クラスライブラリーの差異程度に由来するもの（ある意味、バージョンの違いもこれも含まれる）から、言語仕様自体の改変に由来のものまで空間的に連続で多岐にわたる。このため、単に Smalltalk として語弊のある場合、一般にその環境および処理系の呼称もしくは商標（必要ならそのバージョン）をして他と区別するために用いる慣習がある。
「"～"」のようにダブルクオーテーションでくくった文字列がコメントとして扱われる。
主な定数表現には次のようなものがある。
定数ではないが、よく用いられるオブジェクトの生成式には次のようなものがある。
言語機能の様に見えるが「/」や「@」などはただのセレクターであり、Smalltalk の使用者も同様の機能を作ることが出来る。
一時変数は宣言が必要で、「|」で挿むように記述する。変数への代入は「:=」。古い処理系では「_」が使用された（字形は「←」）。変数に型はなく全てハンドルになっている。
Smalltalk 言語としてのSmalltalk
他の言語で予約語にあたる擬変数は self、super、nil、true、false、thisContext の6つ。self と super はそのメソッドを呼び出したメッセージの受け手（レシーバー）を、nil と true と false はそれぞれ UndefinedObject、True、False に属するソルインスタンス（唯一の実体）を、thisContext は実行中のコンテキスト（スタックフレーム）を参照するのに使える。
self と super は同種のオブジェクトだが、メッセージ式でメッセージレシーバーに指定されたときのメソッド検索の起点が異なり、self ではオブジェクトが属するクラス、super ではその基底クラスである。
Smalltalk では「メッセージ式」と呼ばれる書式でコードを記述する。メッセージ式は「レシーバー」に「メッセージ」を送ることを表すためのもので、そのまま
Smalltalk 言語としてのSmalltalk
と記述する。メッセージはさらに、呼び出されるされるメソッド（方法）の名前を表す「メッセージセレクター」と0個以上の引数の組み合わせからなる。ただし Smalltalk の場合必ずしもセレクターとメソッド名は一致しない。また、メッセージの送り先はメソッドではなくブロックや外部の関数になっている場合もある。セレクターは引数の数だけコロンを自身に含まなければならず、メッセージとして記述する際にはコロンの直後に引数を挿入する。
引数なしのメッセージを単項メッセージ、そのセレクターを単項セレクターと呼び、引数ありのメッセージをキーワードメッセージ、そのセレクターをキーワードセレクターと呼ぶ。メッセージ記述の際に引数の挿入により分断されたキーワードセレクター断片（例えば firstArg:secondArg: なら firstArg: と secondArg:）をキーワードと呼ぶが、あくまで便宜的な呼び名に過ぎず、そうした言語要素は存在しない。他の言語に見られる「キーワード引数」のように省略できるものではなく、また引数順を入れ替えられるものでもない。
Smalltalk 言語としてのSmalltalk
セレクターは原則としてアルファベットと数字と0個以上（かつ、引数と同数）のコロンから成るが、例外として二項演算を模した記述が可能となるように記号のみから成る引数1つのセレクターを使ってメッセージ式を記述することもできる。これを二項メッセージ、そのセレクターを二項セレクターと呼ぶ。
この場合、上の「3 + 4」では、「3」がレシーバーで「+ 4」がメッセージである。
通常の処理系では、単項メッセージ、二項メッセージ、キーワードメッセージの順で評価される。二項メッセージ間で乗除の優先はない。
セミコロン「;」でメッセージ式を区切る事により、1個のレシーバーに対して複数のメッセージを送ることが出来る。これをカスケード式という。
カスケード式を用いて書いた上記の文は、カスケード式を用いない次の文と等価である。
複数の式を順次実行する場合は、式をピリオドで区切る。メソッドを中断し戻り値を指定するには復帰文「^ 戻り値式」を使う。言語機能として持つ制御構文は復帰文を除いて存在せず、復帰文以外の制御は制御構文と同等の機能を持ったメッセージ式で代用する。
ブロックは、他の言語で言えば無名関数やクロージャーに該当する機能である。ただし Smalltalk のブロックは関数ではなくオブジェクトである事に加え、無名関数というより制御構文としての性格が強くなっている。並列実行の基本単位にもなる。
Smalltalk 言語としてのSmalltalk
ブロックは、引き数の数毎に複数定義された「value」を含むメッセージを送る事で、ブロック内に記述されたメッセージ式を実行し結果を返す。
ブロック内の:value1 :value2は引き数であり、「|」以降は「value」を含むメッセージが送られた際実行するメッセージ式である。「value」を複数ならべたセレクターは4個程度まで( #value:value:value:value: )しか定義されておらず。5個以上引き数を取る場合は、配列を引き数とする#valueWithArguments:を使う必要がある。メソッドが値を返す際は、復帰文の記述が必要となるがブロックの場合は値を返すのに復帰文は必要ない。最後に実行されたメッセージ送信の結果あるいは、最後に書かれた値が戻り値となる。ブロックは制御の基本となるオブジェクトであるため、「value」を含むメソッド以外にも膨大なメソッドを持っている。ただし、後述する他の制御構文はブロックに対し#valueセレクターまたは、#value:セレクターを使ったメッセージしか送らない。
ブロックにはvalueと合わせてよく使われるセレクターとして「cull」がある。cullの振る舞いは、ほぼvalueと同じであるが、ブロックがメッセージに含まれる引き数を無視できるという違いがある。
Smalltalk 言語としてのSmalltalk
cullはブロックによる分岐制御が主目的であるが、分岐の基準になったオブジェクトを参照する場合もあるようなセレクターで使われる。典型的な例は、オブジェクトがnilで無いときだけブロックを実行する#ifNotNil:である。
条件分岐は #ifTrue:ifFalse: セレクターを用いたメッセージ式として、条件式の結果の真偽値へのメッセージ送信の形で次のように記述する。
Smalltalk では nil がオブジェクトである。これを利用した nil 専用の条件式も存在する。
条件分岐の制御において、他の言語でいうswitchに直接該当する文は存在しない。多態性を利用して分岐するか、次のように連想配列を利用して分岐するため不要である。
但し一部の処理系では、次のようなswitchに類似した書き方ができるものも存在する。
反復制御においてfor に直接該当する文は存在しない。代わりに回数を指定した反復がある。回数を指定した反復は、整数型へのメッセージ送信の形で次の様に記述する。
現在の反復回数を参照しながら反復する事も出来る。
for　に該当する文は存在しないものの、while に該当する文は存在する。while に該当する反復は、ブロックに対するメッセージ送信の形で次の様に記述する。
Smalltalk 言語としてのSmalltalk
#whileTrue: セレクターは、条件が真である間反復する事を意味している。逆に条件が偽である間反復する #whileFalse: というセレクターも存在する。
また do-while に該当する文も存在する。do-while に該当する反復は、ブロックに対するメッセージ送信の形で次の様に記述する。
Smalltalk では条件なしの反復も存在する。無条件反復は、ブロックに対するメッセージ送信の形で次の様に記述する。
Smalltalk では、反復方法が複数存在するが、実は全てメソッドの再帰呼び出しによって実装されているという事になっている。ただし、こちらも #ifTrue:ifFalse 同様実際にメソッドの再帰呼び出しとして実行されていない事が多い。
C言語の break や Perl の last に相当する反復脱出は thisContext に対し #return セレクターを使ったメッセージを送る。
thisContext には、引き数を取り、引き数を脱出するブロックの戻り値として返す #return: セレクターや、戻り先のメソッドを指定する #return:to: セレクターなど多数の return 系セレクターに対応するメソッドが定義されており、他の言語には珍しい多様な反復の脱出方法を備えている。
Smalltalk 言語としてのSmalltalk
Smalltalk にも例外処理機構が存在する。こちらも、その他の構文と同じくメッセージ式とブロックによって実現されている。例外処理は次の様に記述する。
なお#ensure:は後述のブロックによる資源の開放があるため多用されることはない。
例外の制御はメッセージ送信毎に連結リストとして積み上げられたコンテキスト情報の末端のコンテキスト（メソッドスタック）を表す thisContext オブジェクトを操作し、コンテキストを巻き戻す事で実現されている。複数の例外は、#on:do:on:do・・とon:do:を繰り返し(処理系が定義している限りの数で)記述して補足する事もできるが、次の様に例外の型を,で並べて補足する事も出来る。
なお、Smalltalkでは正常な結果を返せない異常な状態と通知両方を合わせたものが例外である。例外は正常な戻り値を返せない異常な場合と割り込みの様に非同期な通知に利用される。特徴的な点として異常な場合と通知の場合では動作が異なる。異常な場合は他の言語の例外同様、補足しなければその時点で停止しDebugウィンドウに移行するが、通知の場合は補足しなければ例外発生地点から処理を継続する。
Smalltalkでは、標準で並列処理が存在する。並列処理は次の様に記述する。
Smalltalk 言語としてのSmalltalk
並列処理はスレッドに類似するプロセスという仕組みにより実装されている。プロセスはSmalltalk環境内で構築された並列処理の仕組みであり、グリーンスレッドで実装されている事が多い。このため、プロセスは論理的に非プリエンプティブなスレッド(グリーンスレッド)を前提しており、現在実行している処理を切り替える切り替え点を必要とする。論理的な前提は非プリエンプティブではあるものの、POSIX環境で動作させたGNU Smalltalkの様に実際はプリエンプティブなスレッドで実装されている場合もある。プロセスは他のプロセスから割り込みとして任意の例外を投げる機能があり(記述方法は環境によって異なる)、切り替え点はプリエンプティブなスレッドを使う場合でも例外の発生地点として機能する。
Smalltalk は、クラスの定義をメッセージ式による実行環境へのクラスオブジェクトの登録として実現する。他の言語と異なりクラスオブジェクトの登録は単なる定義ではなく実行環境に対する操作である。1度クラスオブジェクトを登録してイメージファイルを保存すると、明示的にクラスオブジェクトを削除しないかぎりはクラスオブジェクトがイメージファイルに残り続ける。Smalltalk 環境に対するクラスオブジェクトの登録は次の様に記述する。
Smalltalk 言語としてのSmalltalk
poolDictionaries と category を除いては、C++ から派生した言語のクラス定義と概ね同じである。インスタンス変数はインスタンスメソッドのみから参照でき、クラス変数はクラスメソッドとインスタンスメソッドから参照できる。他の言語と異なりインスタンス変数をクラスメソッドから参照することはできない。
Smalltalk におけるクラスの作成は、特殊構文ではなく単なるメッセージ送信である。クラスを登録する際のメッセージは、上記の例のように次のセレクターを使用することが多い。
しかし、クラスの登録はあくまでメッセージであり自由に作れるため、実行環境には大抵その他のメソッドが用意されている。例えば、近代的な Smalltalk 環境の一つ Pharo では、次のセレクターに対応したメソッドが用意されている。
クラスオブジェクトには、クラス変数とは別途、クラスオブジェクトが Class クラスから派生したインスタンスとして状態を持つためのインスタンス変数がある。このクラスオブジェクトのインスタンス変数はクラスオブジェクト内だけで共有され、インスタンスオブジェクトからは直接使用できない。
Smalltalk 環境に対するクラスオブジェクトのインスタンス変数の登録は次の様に記述する。
Smalltalk 言語としてのSmalltalk
クラスオブジェクトがもつインスタンス変数には変数を登録した基底クラスと派生クラスで別々の変数領域が確保されるという特筆すべき点がある。これを使用して下記の様にクラスに所属するオブジェクトだけを保持する変数としてつかったりする事ができる。
メソッド（処理方法）の登録は、コード文字列を引数として与えたクラスへのメッセージ送信でも行えるが、通常は環境に組み込まれたクラスブラウザ（システムブラウザ）と呼ばれるGUIツールを用いる。
メソッドは、「メッセージパターン」と呼ばれるメッセージ式のメッセージ部分を模した書式に続けて0個以上のメッセージ式を連ねることで記述する。例えば、前出の、レシーバーか引数を比べてより小さな方を返す「min:」というメソッドの登録は次のようなものになる。
一行目の「min: anOtherObject」がメッセージパターンで、メソッド名（セレクター）と仮引数となる擬変数の宣言を兼ねる。念のためここでメソッド名は「min:」、仮引数となる擬変数名は「anOtherObject」である。仮引数は仮引数自体の書き換えは不能なハンドル渡しとなっている。メッセージパターンのあとに処理を続けて書くこともできるが、通常は行を改めて（さらに、ここでは省いたが慣習としてメソッドの説明をするコメントを書き、それに続けて）処理を記述する。
Smalltalk 言語としてのSmalltalk
なお、メッセージパターンのみで具体的な処理を記述せずにメソッドを登録した場合を含め、復帰文による明示的な戻り値の指定が無い場合、メソッドは戻り値として常に self を返す。したがって Smalltalk では値を返さないメソッドを書くことはできない。
Smalltalkは、多くの動的型付き言語やDelphiの様にクラスがオブジェクトである。このためSmalltalkではインスタンスオブジェクトと同様にクラスオブジェクトを変数に束縛してメッセージを送ることができる。
クラスオブジェクトは、オブジェクトにclassメッセージを送ることでも取得できる。
Smalltalk のブロックは一種の制御構文であるという性質上、復帰文が他の言語と比べ極めて異質な振る舞いをする。
Smalltalk 言語としてのSmalltalk
上記のメソッドを登録したオブジェクトに#example セレクターを使ったメッセージを送ると結果としては何が返ってくるか。Smalltalk 以外の言語では 0 が返ってくるのが一般的であるが Smalltalk では 1 が返ってくる。Smalltalk はブロック内の復帰文からでもメソッド自体を抜けることができるようになっている。この例では、「block value.」を評価し、block 中の「^ 1.」で制御が戻ると example 自体も中断して結果を返す。そして example は戻り値として block が戻した 1 を戻すようになっている。
上記の様なメソッドをまたいでブロックを評価する場合はどうなるだろうか、この場合も Smalltalk は example の戻り値として block の戻り値である1を返す。Smalltalk はブロック内で復帰文が実行された際、ブロックの生成地点の呼び出し元までコンテキストを巻き戻すようになっている。この特性により Smalltalk では、#ifTrue:ifFalse: セレクターを使った分岐でメソッドを中断したり #repeat セレクター等を使った反復処理を復帰文だけで中断する事ができるようになっている。
Smalltalk 言語としてのSmalltalk
ただし、上記の様にブロックを生成したコンテキストと、ブロックを評価する際のコンテキストが枝分かれする様な場合は復帰文を実行する事はできない。この場合は BlockContext が例外を出力し処理が停止してしまう。
メソッドに対する注釈(Pragma)は、メッセージ式だけではどうしても実現が難しい機械語でしか記述できない演算子の実装や主記憶領域の確保、仮想機械外部との入出力等の実現や、特定の目的のメソッドを自動で列挙するといった目的で使用される特殊構文である。いくつかの注釈はSmalltalk環境に組み込まれているが、利用者やライブラリーの提供者が注釈を定義する事も出来る。
メソッドに対する注釈はメソッドの翻訳時に評価されるため、メソッドにしか記述でない。Behaviorのevaluate:による評価などメッセージ式をメソッドの外部で評価する場合は、評価対象の式に注釈を含める事はできない。具体的にはSmalltalk環境のWorkspaceに注釈を記述して評価するとエラーとなる。
メソッドに対する注釈は次の様に記述する。
<と>で囲まれた範囲は、メッセージ式のメッセージ部分と同じになる。但し引き数を取らない注釈の記述はできない。
次にメソッドに対する注釈の具体例を挙げる。注釈はSmalltalk環境によって異なり、どの環境でも次の注釈が使えるわけでない事に注意すること。
Smalltalk 言語としてのSmalltalk
Smaltallkでは、Smalltalk環境全体で参照できる大域変数を作成する事が出来る。大域変数は同じく大域変数であるSmalltalk変数に格納されたSmalltalkImageのインスタンスオブジェクトにメッセージを送って作成する。また、大域変数の削除もSmalltalkImageのインスタンスオブジェクトに対するメッセージ送信となっている。
SmalltalkImageは一種の連想配列であり、Smalltalkの大域変数は、Smalltalk変数を介す事で連想配列として操作する事が出来るようになっている。
なお、Smalltalkのクラス名と大域変数は同じものであり、クラス名にオブジェクトを代入すれば、そのクラスを破壊してしまうことが出来る。また、Smalltalkオブジェクトが格納されたSmalltlak変数もオブジェクトを代入し破壊する事が出来る。このように大域変数を代入により破壊してしまった場合は、最悪Smalltalk環境が起動しなくなる事態に陥り非常に危険である。このためSmalltalkではよほどの理由がなければ大域変数を使うべきではない。
Smalltalk 言語としてのSmalltalk
プール辞書は、クラスの変数として連想配列または、他のクラスオブジェクトのクラス変数を取り込むという機能である。取り込む連想配列の要素やクラスオブジェクトのクラス変数はプール変数と呼ばれる。連想配列やクラスオブジェクトは大域変数でなくてはならない。
プール辞書には複数の連想配列やクラスオブジェクトを指定できるが、プール変数が重複した場合は、先に指定した連想配列やクラスオブジェクトのプール変数が使われる。
Pharo, GNU Smalltalkといった近代の環境では、定数以外に式の結果を指定可能な非定数要素の配列定数を使用できる。配列の要素は空白ではなく.で区切る。
継続渡し形式を支援する機能として継続があり、PharoやGNU Smalltalkで使用できる。もっぱら反復の中断や、メソッド内の処理を飛ばすために使われる。継続の使用は次の様に記述する。
遅延評価を支援する機能として生成器があり、PharoやGNU Smalltalkで使用できる。生成器はCoroutineにも利用できる。生成器の使用は次の様に記述する。
生成器を使って処理を作ることは多くないが、配列などを使用する際、間接的に使用していることが多い。
Smalltalk 言語としてのSmalltalk
Smalltalk のプログラムは基本的に中間言語としてイメージファイルの中に格納され、ソースコードの編集は Smalltalk のGUI環境から行われる。このため基本的にファイルという形で Smalltalk のソースコードやプログラムを目にすることはない。しかし、ソースコードの交換目的などでどうしても Smalltalk 環境外でソースコードを管理する必要がある場合に備えファイル用の構文が存在する。ファイル用の構文は次のようになる。
本来他の言語の様なブロックが存在しないため、ブロックとして「!」が使用される。クラスの登録は「!」の一組で囲まれる。メソッドはプロトコル毎に「 クラス名 methodsFor: 'プロトコル' ! 〜 !!」というブロックで囲まれる。一つのプロトコルには複数のメソッドを定義でき、メソッド同士は一個の「!」によって区切られる。
ちなみに、クラス登録は単なるメッセージ送信であり特別な文ではないため、登録用ブロック外にも次のように単純なメッセージ送信の記述に使用する事が出来る。
ファイル用構文で記述されたメソッドの登録は、可読性や記述性の面からメッセージ式からかけ離れた変則的な構文が使用される。しかし、この変則的な構文を用いなければメソッドを登録できないわけではなく、次のように通常のメッセージ式でメソッドを登録する事も出来る。
Smalltalk 言語としてのSmalltalk
上記では、クラスオブジェクトExampleのプロトコルInstance Methods Cに対し、メソッドselectorCを登録している。
Smalltalk において、継承とは特殊な委譲に過ぎない。
このため、例えば上記のクラスオブジェクトの生成では、Derived クラスオブジェクトの基底クラスオブジェクトとして Object を指定しているが、処理系によっては下記の様に #superclass: メッセージを送る事で、基底クラスに別のクラスオブジェクトを指定する事が出来る。
処理系により不可能な事もあるがクラスオブジェクトだけでなく、インスタンスオブジェクトから派生することも出来る。
なお通常、派生元の基本となるProtoObjectやObjectはnilから派生しており継承関係は再帰的に循環している。
Smalltalk において、メッセージ、セレクター、メソッドはそれぞれ別物である。C++ 系統の言語の様にオブジェクトに対しメッセージを送るという事は単なる比喩ではない。
Smalltalk 言語としてのSmalltalk
あるオブジェクトに対し #hello というセレクターを使ったメッセージを送る事を考える。この時、Smalltalk においては hello というメソッドが必ず呼ばれる保証はない。例えば「hello」メッセージを受け取るオブジェクトが hello メソッドを実装していなければレシーバーに指定されたオブジェクトの doesNotUnderstand: メソッドが呼ばれる事になる。
なお、多くの Smalltalk の処理系では doesNotUnderstand: の引き数で得られたメッセージを返すだけのクラスが用意されている。例えば Smalltalk 環境のひとつである Pharo ではメッセージ作成用クラス MessageCatcher が用意されており次のようにメッセージを拾い、他のオブジェクトに渡すことが出来る。
また、セレクターとメソッドが独立していることを利用して一つのメソッドを複数のセレクターに結びつける事もできる。
メッセージにはセレクターと引き数が含まれている。このため受け取ったセレクターと引き数を編集する事も出来る。
Smalltalk 言語としてのSmalltalk
プログラミング言語一般の概念として型検査をソースコードの翻訳時に実行するか、実行時に実行するかにより静的型付けと動的型付けという区分が存在するが、Smalltalkは、そのどちらでもなく型なし言語（英: untyped）に区分される。Smalltalk の場合、変数に対する操作は全てメッセージ送信であり、変数の種類(型)毎にできる操作は決まっていない。また、オブジェクトに対しメッセージを送った場合、そのオブジェクトがメッセージに対応するメソッドを持っていなくとも実行環境がエラーを発生させる事はない。メッセージに対応するメソッドが存在しない場合、例外を出すか無視するかは、クラスに実装されたメソッドの内容次第である。したがって Smalltalk には型付けの概念はない。例えば、Pharo の MessageCatcher は全てのメッセージを拾うため、どんなメッセージを与えられても例外が発生することはない。また、GNU Smalltalkではnilから派生したクラスのオブジェクトに存在しないメソッドに対するメッセージを送ると何も反応しない。ただし高速化のため後述の特殊セレクターを使用した場合実行時に型検査する処理系が多い。ちなみに Smalltalk は基本的に中間言語に翻訳され、翻訳時にエラーを発生させるため構文検査は静的である。
Smalltalk 言語としてのSmalltalk
制御構文の節で述べた通り、Smalltalkの殆どの制御構文はメッセージ式である。Smalltalkに明るくないプログラマーからは言い方や見方を変えただけと捉えられがちである。Smalltalkの制御構文は実際にメッセージであるがゆえに究極には制御構文の構文要素を次のように変数に分解してしまうことが出来る。
変数に分解した分岐制御の例：
これらの変数に分解された構文要素は、どのクラスのオブジェクトで無いといけないという制限はない。送られたメッセージを処理することさえ出来ればあらゆるオブジェクトに置き換える事が出来る。
Smalltalk 言語としてのSmalltalk
Smalltalkでは高速化のためいくつかのメッセージを特別扱いする。これを特殊セレクター（英: special selector）という。
典型的な例は#ifTrue:ifFalse:である。下記のコードはでは「ifTrue: [5] ifFalse: [6]」を評価した時にメッセージが送られる訳ではなく、バイトコードレベルでインライン展開され飛越し命令の表現に置き換えられる。このため実際にifTrue:ifFalse: という名のメソッドが呼ばれることもない。また、trueやfalse以外に上記のようなBoolean用のメッセージを送ると処理系によってはMustBeBoolean例外を発生させる。このように頻繁に使用する分岐や反復を特別扱いすることで性能低下を防いでいる。
セレクターと名がつくが特殊セレクターは、特別扱いする条件が引数の状態を含んでおり、たとえ同じセレクターを使ったメッセージでも引数が条件に一致しなければ特別扱いしない。例えば下記のように引数に直接ブロックを指定していない場合では多くの処理系(VisualWorks, GNU Smalltalk等)は特別扱いせずメッセージ送信を実行する。
特殊セレクターはあくまで高速化の手段であるため種類は処理系によって異る。どの処理系が何を特殊セレクターとして扱うかは処理系ごとに提供される説明資料に記述されている。
Smalltalk 言語としてのSmalltalk
またPharoのように設定から特殊セレクターを通常のメッセージ送信に切り替えられる処理系も存在する。
クラスオブジェクトもオブジェクトであるため、所属するクラスが存在している。クラスオブジェクトが所属するクラスはMetaclassというクラスのインスタンスオブジェクトである。
Metaclassも当然ながらクラスに所属しており、再帰的にMetaclassに属するようになっている。
クラスオブジェクトが所属するMetaclassのインスタンスオブジェクトは特殊なオブジェクトであり、クラスの継承階層と同様に継承階層を持っている。
クラスオブジェクトはMetaclassから生成された単なるオブジェクトで有ることから、Smalltalkが標準で提供するクラスオブジェクトとは異なる独自の構造をもったクラスオブジェクトを作ることができる。
例えば以下のようにメソッドの代わりにブロックを持つ無名クラスを作成することも出来る。
文法の節で述べた通りSmallatalkでは定数も全てオブジェクトである。どんな定数であれ#classや#inspectといった基本的なセレクターを使ったメッセージを受け取ることが出来るため、基本的な操作であれば定数と他のオブジェクトを区別する必要はない。
Smalltalk 言語としてのSmalltalk
Smalltalk は、任意の広さで確保した領域を持つ可変長オブジェクトを作ることが出来る。Smalltalkには配列を表わすためArray等が存在するが、これらのクラスオブジェクトは可変長オブジェクトを使って構築されている。可変長オブジェクトの領域は、オブジェクトの生成したときの一度だけしか広さを指定できない。また、クラスオブジェクトの登録時にvariable〜で始まるセレクターを使っている必要がある。
Smalltalk は、ハンドルとごみ回収機能(ガーベッジコレクター)の全面的な導入によりハンドルテーブルの書き換えを利用した特殊な制御を提供している。
ハンドルが参照している記憶領域上のテーブルを書き換えることによりSmalltalkは、あるオブジェクトを参照している全ハンドルの参照先を一気に変更することができる。ハンドルテーブルの書き換えには#become:を用いる。ただし、数字や文字列といった定数オブジェクトは置き換えることはできず、定数を置き換える際は定数を保持しているオブジェクトを置き換える必要がある。
#become:を使っている良い例はクラスオブジェクトの再登録である。Smalltalkではクラスオブジェクトはインスタンスオブジェクトが生きている間でも再登録可能でなければならず、インスタンスオブジェクトを生きたままクラスオブジェクトを再登録するために使われている。
Smalltalk 言語としてのSmalltalk
弱参照は参照カウント方式を使う言語でよくライブラリーとして実装されるがSmalltalkではハンドルの制御を用いた言語機能として用意されており相互参照しているが不要になっているオブジェクトを迅速に解放するために使われている。弱参照には#makeWeakを用い、#makeWeakを受け取ったオブジェクトは弱参照となる。
カゲロウ(Ephemeron)は、どこからも参照されなくなった連想配列の要素を解放するために導入された記憶領域の管理機構でありSmalltalkで初めて実装された。例えば連想配列の添字として#keyがあったとして、#keyが連想配列以外の変数で参照されていなければ連想配列の要素は必要ない。このように不要となった要素を解放するために用いる。オブジェクトをカゲロウ状態にするには#makeEphemeronを用いる。
ここでは連想配列の要素としてよく使われるAssociationを例としているが、カゲロウが消滅する基準は最初のインスタンス変数でクラスに依存しないためどんなクラスでもカゲロウにすることができる。
Smalltalk 言語としてのSmalltalk
変数を表す識別子については、1文字目に大文字と小文字のどちらを使うか、大域変数か否かを基準にして決めることが慣習になっている。
環境自体も大文字小文字の使い分けを認識しておりメソッドを翻訳する際小文字の変数は局所変数かメンバーとして定義していないと、警告が発生したり翻訳失敗になる。
クラス名が大文字から始まるのは、クラス名が大域変数だからである。
よく使われるクラス以外の大域変数:
セレクターを表す識別子については、基本的に1文字目に小文字を使うが、メソッドが存在するセレクターを避けたい場合は大文字を使う事が慣習になっている。
GNU SmalltakやVisualWorksで用意されている名前空間は、大文字のセレクターを使う典型的な例である。
なお、名前空間が使える環境の多くは、翻訳時に名前空間の名前解決できる「.」区切りの拡張構文が用意されており、実際にはこちらの構文が使われることが多いため、セレクターを使った名前空間の指定を見る機会は少ない。
オブジェクトの生成には #new セレクターを使ったメッセージを使う。他の言語と違い、new は演算子ではない。
Smalltalk 言語としてのSmalltalk
Smalltalk ではクラスオブジェクトのメソッドもインスタンスオブジェクトのメソッドと同様に派生クラスによる再定義が可能である。このため new メソッドを再定義し初期化処理を記載する事が出来る。new メソッドを再定義してしまうとオブジェクトの生成自体が不可能になるように思われるが、本来 new メソッドは #basicNew セレクターを使ったメッセージをBehavior に送ってオブジェクトを生成しているためオブジェクトの生成手段がなくなるわけではない。このため new メソッドを再定義しても 「basicNew」メッセージをBehaviorに送ることでインスタンスオブジェクト生成することが出来る。
ただし、実際の初期化に new メソッドが使われる事は多くない。実際には慣習としてクラスの作者が新たに登録したインスタンス・クリエイションと呼ばれる new とは別の初期化用メソッドが使用される。インスタンス・クリエイションは一般的なクラスオブジェクトのメソッドであり、そのメソッドの内部で 「new」メッセージやその他のインスタンス・クリエイションを使って初期化済みのオブジェクトを生成する役割を持っているだけで基本的にその他のメソッドと変わらない。一般的にinstance creationというプロトコルに登録される。
Smalltalk 言語としてのSmalltalk
Smalltalk では1個のセレクターに対し1個のオブジェクトから複数のメソッドを関連付けられないため 「new」メッセージの送信によりできる初期化は1個のオブジェクトにつき一通りの初期化だけである。このため複数のインスタンス・クリエイションを用意することで用途に応じた複数の初期化方法を提供しているのである。インスタンス・クリエイションは一般的なメソッドのひとつでしかない。このためインスタンス・クリエイション持つクラスオブジェクトはアブストラクト・ファクトリーとして機能する。
具体的には次のように使われる。
また、Smalltalk はクラスメソッドを上書きできるため、インスタンス・クリエイションを次の様に実装する事で基本的な初期化処理を派生元のクラスに任せることができる。
上記は、2次元座標用のクラスオブジェクトのインスタンスオブジェクトを初期化する派生元のクラスオブジェクトに実装されたインスタンス・クリエイションである。このクラスオブジェクトを継承した2次元座標用のクラスオブジェクトでは#x:y:セレクターを使ったメッセージに対応するメソッドを実装する必要はない。インスタンス・クリエイションを利用したパターンは Smalltalk では広く利用され、いたる所で見ることが出来る。
Smalltalk 言語としてのSmalltalk
Smalltalk では、単一の値を出し入れするメッセージの事を特にアクセッサ―と呼ぶ。引き数の有無により値の入出の方向を区別する。
例：
Smalltalk においてアクセッサーはその他のメソッドと役割に違いはなく特別な意味を持たないが、プロトコルとして明示的に accessing（アクセッシング）として登録される点が特徴的である。
Smalltalk においてアクセッサーはインスタンス変数の出し入れや、クラス変数の単純な出し入れに使用される事は多くない。Smalltalk においてアクセッサーは次の用途でよく使われる。
定数は、単に定数を返すアクセッサ―で定義する。C言語の影響を受けた言語のように定数を#defineや変数で定義するという慣習はない。
Smalltalk では、非常に利用頻度の低いインスタンス変数やクラス変数を管理する方法として附帯情報（英: property）というパターンが使用される。附帯情報はインスタンス変数やクラス変数などの内部変数の代わりに連想配列によりオブジェクトを保持する仕組みである。
附帯情報の使用例：
Smalltalk 言語としてのSmalltalk
附帯情報が有効な身近な例としてはXMLやHTMLのタグ属性が挙げられる。例えばHTMLの id 属性や onClick といったイベント属性は、必ずしも全てのタグで使用されることはない。特にイベント属性については一つのHTML上に一切記述されない事もよくある。この様な使用頻度の低い属性のためにオブジェクトに一個一個変数を定義するのは記憶領域の無駄である。ましてや onClick、onMouseDown、onMouseUp等大量に属性があればこの無駄は馬鹿にならない。この様な無駄を省くために Smalltalk では附帯情報というパターンがよく使用される。
全てのインスタンス変数やクラス変数は原理的に全て附帯情報によって表現することが出来る。この点に着目しオブジェクトに所属する変数を全て附帯情報に置き換えた言語が後の Self であり、JavaScript である。これらの言語でオブジェクトに所属する変数をプロパティーと表現するのは、この Smalltalk における附帯情報(プロパティー)に由来するもので、附帯情報の仕組みの有無に関わらずインスタンス変数やクラス変数をプロパティーと表現するのは間違いである。