Smalltalk
[Wikipedia|▼Menu]
例えばオブジェクト(クラスやメソッドも含む)の構造を調べたければ、そのオブジェクトに#browse(ブラウズ)セレクターあるいは#inspect(インスペクト)セレクターを使ったメッセージ式を書き、そのメッセージ式をマウスで選択してdo it(WindowsであればCtrl+Dを押す)すれば良い。

また、設定値の指定に Smalltalk 言語のメッセージ式が使われる。現在設定されている値がメッセージ式として取得でき、値の設定をメッセージ式として指定する。この設定値を指定するメッセージ式は Smalltalk 環境の実行中に設定用のウィンドウから入力される。
仮想機械方式
仮想機械による実行

Smalltalk 環境は、Smalltalk 環境の実行方法として現実のハードウェアに依存している機械語命令を使わず、現実のハードウェアから独立した中間言語命令(仮想機械に対する機械語命令)を仮想機械により実行する仮想機械方式を採用している。 Smalltalk の中間言語命令は、全てイメージファイルというファイルに書き込まれ Smalltalk の仮想機械はそのイメージファイルを読み込んでSmalltalk 環境を実行する。

この仮想機械方式による Smalltalk の実行方法は Smalltalk の言語仕様にも含まれている。[6]なお、Smalltalk が導入したこの仮想機械方式はEULERのpコードマシンからアラン・ケイが着想を得たものである。[7]
イメージファイル

イメージファイルは、Smalltalk 環境の実行状態をそのまま保存したファイルである。イメージファイルは Smalltalk 環境実行中に生成された全てのオブジェクトを直列化して保存することでSmalltalk 環境の実行状態を保存している。この直列化されたオブジェクトには、Smalltalk の中間言語も含まれている。イメージファイルに含まれる中間言語命令は、Smalltalk 自身によって記述されたコンパイラーによってソースコードから翻訳された、バイト列のオブジェクトである。
仮想機械とブートストラップ

Smalltalk の実行環境が全く存在しない初期の状況ではコンパイラーも仮想機械も Smalltalk で用意する事はできない。このため Smalltalk の初期段階ではALTOアセンブリ言語によりコンパイラーや仮想機械が実装されていた。[8]
実行時書き換え

Smalltalk環境は翻訳方式を使う処理系としては珍しくプログラムの実行時書き換えを基本とする。例えば後述のClass Browserに入力したプログラムはソースコードを中間言語に変換したあとSmalltalk環境の一部として取り込まれ、環境を再起動したり読み込み操作をしなくても起動中のSmalltalk環境内で実行することができる。C++のような翻訳式の言語であれば原則、ソースコードを書き換えた場合は原則プログラムの再起動が必要となる。またPythonの様な言語ではソースコードを再読み込みする処理を予め書き換えたい処理の呼び出し元に組み込んでおかなければソースコードをいくら書き換えても動作に反映できない。Smalltalkではその再起動や再読み込み処理の組み込みが必要ない。このため環境をソースコードを書き換える都度環境全体を再起動しなくて済むのはもちろん、Windowを表示するプログラムを作った場合であれば、Window内のButtonの動作を変更する時もWindowを表示したままソースコードを書き換えて動作を変更できる。このためButtonを押すまでに複数の手順が必要なプログラムやWindowの表示に時間がかかるプログラムでもButtonを表示した状態から再起動せず何度でもやり直しができ効率的なソースコード変更が可能になっている。
環境の種類@media screen{.mw-parser-output .sticky{position:sticky;top:0}body.vector-sticky-header-visible .mw-parser-output .sticky{top:3.125rem}.mw-parser-output .sticky-header>thead{position:sticky;top:0;z-index:10}body.vector-sticky-header-visible .mw-parser-output .sticky-header>thead{top:3.125rem}.mw-parser-output .sticky-header{background-color:white}.mw-parser-output .sticky-header thead,.mw-parser-output .sticky-header tbody,.mw-parser-output .sticky-header tfoot,.mw-parser-output .sticky-header tr,.mw-parser-output .sticky-header td,.mw-parser-output .sticky-header:not(.wikitable) th{background-color:inherit}.mw-parser-output .sticky-header:not(.wikitable){border-collapse:collapse}.mw-parser-output .sticky-header.wikitable{border-collapse:separate;border-color:#a2a9b1;border-spacing:0;border-width:0 1px 1px 0}.mw-parser-output .sticky-header.wikitable td,.mw-parser-output .sticky-header.wikitable th,.mw-parser-output .sticky-header.static-row-numbers.wikitable tbody tr:not(.static-row-header)::before{border-color:#a2a9b1;border-width:1px 0 0 1px!important}.mw-parser-output .sticky-header.static-row-numbers.wikitable thead tr::before,.mw-parser-output .sticky-header.static-row-numbers.wikitable .static-row-header::before{border-left:1px solid #a2a9b1}.mw-parser-output .sticky-header.static-row-numbers.wikitable thead tr:first-child::before,.mw-parser-output .sticky-header.static-row-numbers.wikitable .sortbottom::before,.mw-parser-output .sticky-header.static-row-numbers.wikitable:not(.sortable) tr:first-child::before{border-top:1px solid #a2a9b1}.mw-parser-output .sticky-header.static-row-numbers.wikitable .sortbottom~.sortbottom::before{border-top:0}}@media all and (max-width:720px){.mw-parser-output .sticky-header{display:table}.mw-parser-output .sticky-header caption{display:table-caption}}

Smalltalk環境の種類環境使用している仮想機械有償版無償版CPUOS備考
ObjectWorks-○○
[9]-Win2017年現在VisualWorksを販売するCincomのWindows向け製品となっている。
VisualWorksObject Engine○○[9]x86/x64Unix/Linux/OSX/Winゼロックス時代のSmalltalkを引き継ぐSmalltalk環境。名前空間[10]やイメージファイルからモジュールを切り離せるパーセル[11]、OSのデスクトップ上に表示できるウィンドウ等以前のSmalltalkより大きく拡張されている。2017年現在も活発に開発されている。
SqueakCog VM×○x86Unix/Linux/OSX/WinApple Smalltalkから派生したプラットフォーム非依存やマルチメディア対応を強化したSmalltalk環境。
PharoCog VM×○x86/x64/ArmUnix/Linux/OSX/Win/MacOSSqueakから開発向けに派生したSmalltalk環境。[12]
GemStone/S-○○x86/x64Unix/Linux/OSX/Winデータベース管理システムとしての用途に特化したSmalltalk環境。その用途からGUIは無い。2017年現在GemTalk systemにて無償版が配布されている。[2]2017年現在も活発に開発されている。
GNU Smalltalk-×○x86/x64/armUnix/Linux/Android/OSX/WinGUI無しでの開発に特化しており他の環境ではGUIを前提としている機能をCUIで実行できる。ただしGUI環境も用意されている。[3]Cと連携するための機能が他の処理系と比較して特に強力であり、関数のポインターを指定すべき引数にブロックを渡したり、関数呼出もできる各種ポインター操作ができるようになっている。しかも、関数のポインターとして渡すブロックは変数を束縛した状態で渡す事が可能になっている。
Strongtalk-×○-Win言語仕様に静的型検査を追加したSmalltak環境。Hot spotによる最適化を初めて実装したVMで極めて高速に動作する。Strongtalkで開発されたHot spot技術はJavaVMなどにも移植された[13]
GradualtalkCog VM×○x64Unix/Linux/OSX/WinPharoの環境を元に言語仕様に静的型検査と動的型検査を追加したSmalltak環境。[14]
Amber Smalltalk-×○Web Browserに依存Web Browserに依存Web Browser上で動作するSmalltalk環境。[15]
Dolphin Smalltalk----WinWindowsに特化しておりOS固有の機能やOS固有のGUIを使用できる。OSとの親和性が高い。[16][17]SmalltalkからJavaを呼び出すJNIPortを最初に実装した処理系であり、JNIPortが使える処理系ではDolphin Smalltalkの名前を目にする機会が多い。[18]
Smalltalk/JVM---Java VMに依存Java VMに依存Java VMを使用する。[19]
#Smalltalk---共通言語基盤に依存共通言語基盤に依存.NET Frameworkを使用する。[20]
Smalltalk/X----UnixUnixで動作するSmalltalk環境。
Smalltalk/V-----pc98で動作するSmalltalk環境。
VisualAge-----Smalltalk/VからIBMが派生させて開発したSmalltalkベースの統合開発環境。Javaで記述されたEclipseの原型でもある。
VA Smalltalk-----IBMが開発を停止したVisualAgeの派生製品。[21]2018年現在も開発が継続されている。
Smalltalk MT----WinWindowsに特化しActive Xを生成できる。[22]
Little Smalltalk-----Smalltalk環境として稼働する上で必要最低限の機能だけを備えるSmalltalk環境。
SmallScript(S#)------
Ambrai Smalltalk------
ConcurrentSmalltalk-----アクターモデルによる分散処理を導入した環境。[4]
Distributed Smalltalk------
PIC/Smalltalk------
Smalltalk Express------
ParcPlac Systems社 Smalltalk-80 V2.5---80386SX以上-pc98で動作するSmalltalk環境。動作環境として、CPU 80386SX以上、メモリ3.6Mbyte(V2.5Jでは4.6Mbyte)以上搭載、ハードディスク空き容量5Mbyte(同10Mbyte)以上とされるが、当時のマシン環境としてPC-9801DA21に7.6Mbyte以上のメモリと80Mbyte以上のハードディスクを装備した環境を推奨[23]

GUIツールLinux上で稼働するSmalltalk環境(VisualWorks)。 左上:Class Browser, 右上:Transcript, 左下:Workspace, 右中段:Debugger/Notifier, 中央下段:Inspector, 右下段:変数を表示したWorkspace
準標準的なGUIツール

GUIを使わないような特殊なものを除き、大半のSmalltalk環境では次のようなGUIツールが用意されている。

Class Browser(System Browser)

Transcript

Workspace

Debugger/Notifier

Inspector

Smalltalkの開発ではこれらのツールを使って開発する事が半ば前提となっている。
Class Browser(System Browser)

Smalltalk環境内に存在する全てのクラスを(存在する場合は名前空間も)表示/編集できるツールで、Smalltalk開発において中核となるツールである。.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この節の加筆が望まれています。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:112 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef