もっと楽しむ! プログラミング言語 「豆」談義

第5回 おしゃべり程度のプログラミング「Smalltalk」(前編)

この記事を読むのに必要な時間:およそ 3 分

今回から2回にわたりプログラミング言語「Smalltalk」についてお話しします。Smalltalkと言えば,オブジェクト指向プログラミング言語と,開発環境と実行環境を統合したようなプログラミング環境が大きな特徴です。そこで前編はSmalltalkの登場背景とオブジェクト指向プログラミング言語としての特徴的な構文,後編はプログラミング環境を取り上げます。

生まれはパロアルト研究所

Smalltalkは1970年代にXerox社のパロアルト研究所(以降はPARCと称す)で,アラン・ケイ率いる学習研究グループにより作成されました。PARCと言えば,レーザープリンタ,インターネットの基礎となるイーサネット(ethernet),そしてSmalltalkが深く関係するパーソナルコンピュータのアルトを生み出した伝説的な研究所です※1)。メインフレームやミニコンピュータが主流の時代に,机のキャビネットサイズで,ディスプレイ,キーボード,そしてマウスが一体となった個人専用マシンのアルトが誕生したのですから驚きですね。

※1)
PARCについて詳しく知りたい方は参考文献[1]を一読ください。

ダイナブックの理想のもとに

もともとアルトは,アラン・ケイがコンピュータのあるべき姿(=メディア)として思い描いたダイナブック※2を目指して開発されものでした。

ダイナブックが成し遂げたかった仕様とは,次のようになります。

  • ノート程度の大きさ
  • 子供でも持ち運べる
  • 絵から楽譜に至るまで,いろいろな情報を出し入れできる
  • 直感的な操作ができる

つまりユーザが求める操作に即座に対応できる装置といえます。しかし,残念ながら当時のハードウェア技術ではダイナブックのすべてを実現できませんでしたが,それでもアルトは誕生しました。

※2)
ダイナブックを含めアラン・ケイについて詳しく知りたい方は参考文献[2]を一読ください。

Smalltalkの誕生

ケイはソフトウェア面からダイナブックにアプローチし,誰でもプログラミングできることを目指してプログラミング言語を設計しました。そして同じ学習研究グループのダニエル・H・インガルズやアデル・ゴールドバーグらの実装により完成したのがSmalltalkです。SmalltalkはアルトにGUI環境を提供し,現在のGUI環境の基礎となるオーバーラッピングウィンドウやポップアップメニューなどの優れたアイデアを実現しました。これはコマンドベースのユーザインタフェースしかなかった当時からすると画期的なことでした。 Smalltalkを搭載したアルトは暫定版ダイナブックと呼ばれました。

暫定版ダイナブックは当時もの凄い代物だったにも関わらず,上層部の理解が得られず,Xerox社から販売されることは永遠にありませんでした。代わりにGUI環境の優れたアイデアは,暫定版ダイナブックを視察に訪れたアップルが販売したパーソナルコンピュータのLisa(これが後のMacにつながる)により世界に知れ渡ることとなりました。一方,Smalltalkは1983年にSmalltalk-80としてXerox社から販売されました。

みんなのSmalltalk

本講座の第3回「LOGO」で触れてたように,ケイはLOGOの影響を強く受けていたので,暫定版ダイナブックにさまざまな人(特に子供達)に試用してもらい,フィードバックを集め,Smalltalkを洗練していきました。

この試用では,少女は図形を描くドローツール,高校生は電気回路のレイアウトを行うシステム,そして音楽家は譜面を作成するシステムなど,プログラマでない人がシステムを作成したのです。自分の用途に応じたアプリケーションを誰もがプログラミングできるほど,Smalltalkは本当にシンプルに設計されたのです。

Smalltalkのプログラミングをしてみよう

Smalltalkは,コマンドを入力し命令するとタートルが反応するというLOGOのシンプルな操作環境,1960年代に作成されたSIMULAのクラスやオブジェクトの影響を受け,全ての命令はオブジェクトにメッセージを送ることで行う,オブジェクト指向プログラミング言語として設計されました。

Smalltalkの特徴的な構文を見ていきます。なお,ここからの説明はSqueakというSmalltalk-80の直系にあたる環境を基に進めます。そのため標準のSmalltalkと一部異なる表記を使用しているので,他のSmalltalkの環境を使用する際は注意してください。Squeakについては後編で説明します※3)。

Smalltalkのプログラムは全てオブジェクトとメッセージから構成します。Smalltalkで特徴的なのは,メッセージが3種類あることです。以下のソースを見てください。

array ← #(1 2 3 4 5).
array size.
array at: 3.
array + array.

#(・・・)を使用すると配列のオブジェクトを生成できます。配列はArrayクラスのインスタンスです。←は代入を表しています※4)。←が代入は分かりやすいですね。命令文が複数続く場合はピリオド"."を最後に付けます。ピリオド"."で終わるのは英語では自然なことなので,これもわかりやすいですね。arrayは変数を表していて,Javaのように型は指定できません。Smalltalkの変数はあらゆるオブジェクトを代入できます。2~4行目で配列のオブジェクトにメッセージを送り,それぞれ結果は5,3,#(2 4 6 8 10)になります。sizeメッセージは単項メッセージ,at:メッセージはキーワードメッセージと呼び,Javaに例えると単項メッセージは引数のないメソッド,キーワードメッセージは引数のあるメソッドになります。キーワードメッセージは:が付いているのが特徴です。最後の行の+も立派なメッセージで,2項メッセージと呼びます。Javaで配列と配列を足し合わせるとエラーになりますが,Smalltalkは演算子のようなものも全てメッセージなのでちゃんと動作します。

※3)
後編まで待てないという方は参考文献[3][4]を一読ください。
※4)
標準のSmalltalkでは代入に:=を使用します。Squeakでは代入に_(アンダースコア)を使用し,表示は←となります。

著者プロフィール

チーム北海道

居酒屋北海道をこよなく愛するエンジニア集団(伊藤清人,江川崇,荻原利雄,長谷川裕一,吉野雅人 以上株式会社豆蔵所属)。

URLhttp://www.mamezou.com/

コメント

コメントの記入