VisualWorks(旧称ObjectWorks、後にCincom Smalltalk )は、 Smalltalk言語のクロスプラットフォーム実装です。これは、システムイメージに格納されたソフトウェアオブジェクトの動的な集合であるイメージに基づいた開発システムとして実装されています。
VisualWorksのルーツは、 Xerox PARCによる最初のSmalltalk-80実装に遡ります。1980年代後半、Smalltalk-80開発者グループがParcPlace Systemsをスピンオフさせ、Smalltalk-80を商用製品としてさらに開発しました。この商用製品は当初ObjectWorksという名称でしたが、後にVisualWorksと改名されました。1999年8月31日、VisualWorksはCincom Systemsに売却されました。VisualWorksは、 Windows、macOS、Linux、および複数のUnixバージョンを含む多くのオペレーティングシステムで動作します 。
VisualWorksは、組み込みのマルチプラットフォーム機能により、クロスプラットフォーム開発プロジェクトをサポートします。例えば、グラフィカルユーザーインターフェイス(GUI)アプリケーションは一度開発すれば、その後は異なるウィジェットスタイルに切り替えることができます。VisualWorksアプリケーションは、サポートされているすべてのプラットフォームで変更なしに実行できます。プラットフォームに依存するのは仮想マシンのみです。
VisualWorksでは、開発対象のプログラムを実行中でも個々のメソッドをコンパイルできるため、非常に高速なアプリケーション開発が可能です。Smalltalkメソッドのコンパイルは通常1秒未満で完了しますが、C++プロジェクトの場合は1分以上かかることが多く、プロセスを再起動せずに簡単に実行することはできません。VisualWorksの各種コードブラウザーを使用すれば、開発者は目的のクラスやメソッドをすばやく見つけることができます。
Smalltalk プログラムのパフォーマンスとスループットは、頻繁に使用される型に特化したマシン コードを生成することで、ジャストインタイム コンパイラを使用してC++、Fortran、Pascal、Adaなどの静的言語のパフォーマンスに近づくことができますが、数値処理や正確なメモリ レイアウトの恩恵を受けるプログラムは、依然として遅くなる可能性があります。世代別ガベージ コレクタは、ほとんどのコレクションの一時停止を最小限に抑えますが、長時間のフル コレクションが発生する可能性があり、ヒープ サイズに比例して数十ミリ秒から数百ミリ秒の間、世界が停止する可能性があるため、ハード リアルタイムや決定性の要件には適さない場合があります。ただし、オブジェクト指向言語では、ガベージ コレクションは手動のメモリ管理よりも好ましいものであり、プログラマはガベージ コレクションがいつ、どのくらいの時間発生するかを制御するためにさまざまなアクションを実行できます。したがって、ほとんどの場合、ガベージ コレクションは問題になりません。
VisualWorks システムのすべてのコンポーネントは、Windows 7 以降では、インストールされているシステムのバージョン番号にちなんで名付けられたProgram Files\Cincomディレクトリにインストールされます(例: )。このディレクトリには、bin、doc、examples など、多数のサブディレクトリが含まれています。vw7.5nc
<Select>VisualWorks は、論理名、<Operate>、 、を持つボタンを備えた 3 ボタン マウスを前提としています。ただし、 Ctrl、Option、またはCommandキー<Window>と併用して、1 ボタンまたは 2 ボタン マウスを使用することもできます。は、任意のインターフェイス オブジェクトを選択します。は、現在のビュー/選択に対する操作メニューを表示します。 は、VisualWorks ウィンドウ上でアクション (移動、閉じるなど) を開始します。<Select><Operate><Window>
ファイルイン形式は、クラスをテキストファイルとして表現するための、Smalltalkのオリジナルの形式です。これらのファイルはVisualWorks IDEに「ファイルイン」することで、Smalltalkイメージに含まれていないクラスを生成できます。各ファイルインドキュメントは、サフィックス付きのテキストファイルで、Smalltalkクラス(または複数のクラス)のシンプルなテキスト表現を提供します。VisualWorksでは現在もサポートされていますが、Parcelsメカニズムに置き換えられています。ファイルイン形式の例は、examplesサブディレクトリにあります。.st
パーセルとは、パッケージを外部ファイルとして表現したものです。
サンプルブラウザーは、examples ディレクトリにパーセルとして提供されます。イメージ起動時にパーセルを読み込むように指定するためのイメージレベルのスイッチがいくつかあります。[ 1 ] パーセルパスは、VisualWorks がパーセルを探すディレクトリのリストです。これは、システム設定ツールを使用して設定できます。
パーセルは、 VisualWorks のコンポーネント技術を提供します。パッケージとバンドルは、コードを整理し、パーセルの内容をモデル化します。パーセルは、パッケージ/バンドルを公開することによって作成されます。VisualWorks の分野では、特に区別する必要がない場合、パーセル、パッケージ、バンドルを指すのに「コンポーネント」という用語が使用されます。
読み込み時の小包コードの構成は、その作成方法によって決まります。パッケージの公開によって作成された場合は、同じパッケージに読み込まれます。バンドルから作成された場合は、バンドルとして、または単一のパッケージとして再読み込みできます。
パッケージのロード順序は次のとおりです。
Parcel Manager は、パーセル パス上のすべてのパーセルをロードおよびアンロードするために使用されます。Suggestions ビューには、主要なアドイン パーセルを含むカテゴリが一覧表示されます。カテゴリを選択すると、推奨パーセルの一覧が表示されます。たとえば、UI Painter は Essentials カテゴリにあります。Suggestions ビュー以外のパーセルを検索するための、パーセル パスのディレクトリ ツリー ビューもあります。Loaded ビューには、イメージに既に存在するすべてのパーセルが一覧表示されます。参照できるのは、ロードされたパーセルのみです。
VisualWorksでサポートされている製品パッケージは、小包のようなアイコンで表示されます。他のベンダーのパッケージは、買い物袋のようなアイコンで表示されます。Smalltalkクラスの開発は複雑な経緯をたどってきたため、このアイコンは非常に役立ちます。例えば、小包アイコンは、ArborハイパーテキストシステムがVisualWorksでサポートされていることを示しています。
アプリケーションからプログラムによって荷物の積み下ろしを行うこともできます。
パーセルがロードされると、パッケージ、またはパッケージのバンドルとして構成されます。パーセルからロードされたコードを探す場合、システムブラウザーで同じ名前のバンドルまたはパッケージを見つけることができます。パッケージは、コンポーネントに基づいてクラスを関連するグループに整理するカテゴリです。パッケージはバンドルにグループ化できます。パッケージとバンドルは、パーセルとして保存(公開)することも、ソースコードリポジトリに保存することもできます。
初期イメージvisual.imには、基本的なクラスライブラリを使用した最小限の開発機能が含まれています。追加のクラスライブラリは、VisualWorks またはサードパーティベンダーによって、通常はパーセルファイルとして提供されます。ほとんどの Smalltalk 以外の開発環境では、コードライブラリはコンパイル時にincludeコマンドを使用してインポートされます。Smalltalk では、コードライブラリは実行中のシステムにロードされ、環境の一部となります。たとえば、UI ペインターはパーセルとしてロードされます。
VisualWorks Launcher(通常は単にLauncherと呼ばれる)は、VisualWorksシステムの制御センターであり、主要なツールすべてを起動するためのプラットフォームです。
Smalltalkは純粋なオブジェクト指向プログラミング言語です。つまり、Smalltalk内で何らかの処理を実行するには、オブジェクトにメッセージを送信するしか方法がありません。VisualWorksは標準としてSmalltalk-80言語を使用していますが、独自のクラスとメソッドを備えています。そのため、Objectのような基本的なクラスでさえ、SqueakやDolphin Smalltalkといった他のSmalltalk-80 IDEのクラスとは異なります。ここに示す例はVisualWorks Smalltalkでは動作しますが、クラスやメソッドが異なる可能性があるため、他のSmalltalkでは動作しない場合があります。
従来のオブジェクト指向プログラミング環境では、開発者はクラスとメソッドの定義を含むプレーンテキストのソースコードファイルを直接編集します。VisualWorksでは、すべてのSmalltalkと同様に、クラスを含めすべてが実行オブジェクトです。Smalltalkクラスを参照する際、開発者は実行オブジェクトから定義を取得します。VisualWorksの主要なブラウザー/エディターはシステムブラウザーです。システムブラウザーを使用すると、開発者はクラス階層全体またはパッケージを介してクラスを参照できます。システムブラウザーはVisualWorksランチャーから起動します。
システムブラウザーのリストペインを使用すると、開発者はクラスやメソッドの定義に移動できます。その後、コードビューで表示または編集したり、新しい定義を追加して変更したりできます。
変数が削除された際に、その変数への参照がまだ存在する場合、またはパーセルを介してロードされたものの宣言されていない場合、その変数名は未宣言名前空間に入ります。未宣言変数は、特定のプログラムエラーを引き起こす可能性があります。
CincomによるVisualWorksの最初のチュートリアルでは、 VisualWorksを使用してサーバーログファイルを操作する方法を解説しています。文字列やファイルなどをVisualWorks内のオブジェクト構造に簡単に組み込む方法を示しています。Smalltalkの式を考えてみましょう。
'ws000101.log' をファイル名として編集
VisualWorksワークスペースでは、操作メニューのコマンドを1つ使用して、この式をそのまま評価できます。これにより、次の式が生成されます。
後者は、ファイルの内容を含むシンプルなノートブックのようなエディタです。つまり、評価プロセスでは、ファイルへのゲートウェイとしてファイル名ws000101.logオブジェクトを作成し、その上にエディタを開きます。エディタ自体もオブジェクトであり、そのすべてのコンポーネント(メニューの文字に至るまで)もオブジェクトです。これらのオブジェクトのソースコードはすべて利用可能で、VisualWorksには、静的モードまたは動的モードでコードを評価および検査するためのインスペクタ、ブラウザー、その他のツールが豊富に用意されています。
Cincom Smalltalkのチュートリアルは頻繁に作成されており、Seasideのチュートリアルも存在します。