Arantium Maestum

プログラミング、囲碁、読書の話題

JOSSについての覚え書き

JOSSという言語とプログラミング環境があった、らしい。

en.wikipedia.org

初出は1963年、LISPの5年後でBASICの1年前である。RANDコーポレーションのJOHNNIACマシンを数学者が対話的に扱うための言語とシステムで、開発者はCliff Shaw。以前ブログで取り上げたリスト処理やプログラミングにおける再帰の初出だと思われるInformation Processing Languageの開発者の一人である。

JOSSは最初期の対話的プログラミングシステムであり、インタラクティブなエディタで入力した行を逐次実行して結果を得ることができた。JOSSよりも先に存在していた対話的環境はあったのだろうか?LISPwikipediaのREPL記事によると1964年にREPLが開発されたということなのでJOSSの登場後となる。

よりアセンブリ言語に近いようなもので原始的な対話が可能だった環境はあってもおかしくない気はするが、モダンな意味での対話的環境としてはLISPやBASICより先だったのだからJOSSが初めてである可能性は充分ある。

もう一つJOSSが歴史的に面白いかもしれないポイントとしては、LETによって変数を定義する初めての言語である可能性があることだ。JOSSの言語仕様を読むと、変数定義にはSETという予約語が存在していて、LETは本来関数定義に使われるための予約語なのだが、仮引数を指定しない場合はLETもただの変数定義として使えたようだ。ここら辺のSETとLETの使い分けに関してはややこしいので集合知としてNewsletterで取り上げられた、とThe Joss Years: Reflections on an ExperimentというRANDコーポレーションの回顧録的な資料にある:

Problem areas thus discovered were often discussed for the benefit of all users in the JOSS Newsletter until its discontinuation in June 1971. Newsletter items differentiated between Set and Let, Do and To, and Done and Quit and Stop and Cancel.

もしもこのLETの機能がJOSSが出た1963年に存在したならば、LETの関数型プログラミングにおける初出である1965年のThe Next 700 Programming Languages・ISWIMは元より、プログラミング全体での初出だと私が考えていたDartmouth BASICの1964年よりも早いことになる。

ただ、Cliff Shawが1965年に書いたJOSS: Experience with an Experimental Computing Service for Users at Remote Typewriter ConsolesではLETが出てこない。初期のJOSSでは関数定義の機能がなかったのでは?という疑問があり、その場合1965年時点では変数定義の予約語はSETのみとなって、LETの導入は前述のISWIMやBASICより後になる。

ちなみにアラン・ケイがJOSSについて非常に好意的なコメントを残している。ケイがJOSSの対話的環境を参考にしていたなら、後世への影響としては非常に大きなものだと言える。この件についてはまた今度まとめたい。