おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

バッチ処理とかBasicとか何か

または、「記憶だけで知ったかぶりを書くと恥をかきますよ」な話。

先日 Twitter で「BASIC のようなバッチ指向の」という記述を見かけたので、文脈は無視してキーワードマッチで、

いいたいことは分からないでもないが、Fortranのバッチ指向のアンチテーゼとしてTSS向けのインタプリタを指向して開発されたBasicバッチ処理の代表に持ってくるというのは、言葉遣いとして違和感ありまくりである。
http://twitter.com/naru0ga/status/45244798721990656

と書いて、その補足として以下の三つの Tweet をしたのね。

(1)
バッチ処理というのはパンチカード文化で、指定を与えたプログラムとデータの列をオペレータがカードデッキにかけて一気に実行して結果を受け取るってのがまずあったわけで。
http://twitter.com/naru0ga/status/45250804197761024

(2)
TSSができて記憶容量が増大して、プログラムもデータも記憶装置に格納できるようになってからも、カードの代わりにジョブ記述言語に指定を記述して、ジョブを投入して結果を待つ、という文化は変わらなかった。
http://twitter.com/naru0ga/status/45251262215749633

(3)
TSSなら端末が目の前にあるんで、もっと電卓っぽく使いたい、といってダートマス大学で作られたのがBasicなわけで、今でいえばREPL風の環境に入ってそこでちょっとコード書いて試すこともできて、編集も実行もできるってのがウリだったんだよなぁ。
http://twitter.com/naru0ga/status/45252161755557888

そしたらすごい勢いで反論されたので、まあそのやりとりは適当に見ていただくとして、論点は:

  • バッチ処理は企業業務における日報・月報処理の流れから来ており、カードではなくMT (Magnetic Tape:磁気テープ) が基本
  • TSS は CPU の時分割のことであって、端末をたくさん並べるかどうかではない
  • BASICFortran を簡単にしようという意図で設計されたのであり TSS とはまったく独立した概念

ということらしかったので、出勤前で時間もなかったし、資料探ってる時間もなかったし、私のいいたいことの本質とは違うところで混ぜっ返されてイラっときてたのもあって*1 記憶だけでこう書きなぐったのね。

(4)
馬鹿くさいので付き合うのやめた。本ひっくり返すのはめんどくさいからやめとくが1950年代からBatchって言葉はあったしMTなんてその頃はなかった。TSSはMITのCTSSが最初でMULTICSはそのずっと後。
http://twitter.com/naru0ga/status/45264823604359168

(5)
Basicについてはインタラクティブにするには一人一台の環境が必須だったけど当時のコンピュータは高価だったからTSSが必然だったというだけ。計算機コストが下がって一人一台にできればシングルユーザになるのは当然。
http://twitter.com/naru0ga/status/45266072588402688

んで書いたはいいけどずーっと小骨がささってて、こりゃもうちょっと調べなあかんなということで、こんな記事を書いているわけですよ。

書籍はごめんなさい、ひっくり返しても出てこなかったので:

ハッカーズ

ハッカーズ

新装版 計算機屋かく戦えり

新装版 計算機屋かく戦えり

日本コンピューター発達史 (1978年)

日本コンピューター発達史 (1978年)

日本のコンピュータ史

日本のコンピュータ史

ぐらいしか当たってません。

基本的には知的好奇心によって自分の発言を検証するということを意図しており、Twitter で議論された方 (仮にAさんとします。私の TL 見ていただければ分かることですし、その方に向けたメッセージではないのでハンドルは出しません) に対する反論というつもりではありません。
記憶の棚卸をさせていただく機会をいただいたという意味でAさんには感謝しておりますが、お名前を出すと却ってご迷惑になるのではないかと思うのと、私はAさんの認識を変えたいとか説得したいとかそういうことは思っていないので、その点ご了承ください。

バッチ処理の語源とMTとの関係

先の(1)の発言、

(1)
バッチ処理というのはパンチカード文化で、指定を与えたプログラムとデータの列をオペレータがカードデッキにかけて一気に実行して結果を受け取るってのがまずあったわけで。

と、その反論に対する再反論、

(4)
1950年代からBatchって言葉はあったしMTなんてその頃はなかった。

が本当かどうかという話。

1950 年代に MT はなかった?

まず検証が容易な方から。MT についてですが、MT の元祖といえば UNIVAC I に決まっています。
Wikipediaによれば、UNIVAC I は1950年完成なので、私大嘘つきでございました。ゴメンナサイ。これは素直に皆様に謝罪せねばなりません。

バッチ処理の語源

ですが、「バッチ処理とは日報・月報処理という処理単位から生まれた言葉か」ということについては、さてどうなのでしょう。

ここは正直、自信がないです。

とりあえず引きやすいので Wikipedia を調べますと、 バッチ処理 には

「バッチ (batch)」という言葉は、プログラマがプログラミングをする際、紙にコードを書き、紙テープか80カラム仕様のパンチカードにパンチしていった時代の言葉。

とありますが、Wikipedia に限らず全ての百科事典は「一次資料」にはなりえないので、もうちょっと探してみました。

見つけたものとしては、Gordon Collage という大学の数学・計算機科学科の授業で CS322: A Brief History of Computer Operating Systems というのがあって、この記事を読むと

  • バッチジョブそのものはカードで与えられた (source program cards / data cards という文字列がある)
  • コンパイルされた結果や中間データは磁気テープや磁気ドラムに格納された

と読めますね。ですが、Gordon Collage の方には申し訳ないですが、私はこの大学の格式とかそういうことを知らないので、これを「証拠」とはいえないです。せいぜい私の「記憶」よりは正しいんじゃないか、ぐらいかと。

また、UNIVAC I については確かに MT を採用していましたが、入出力については「カード→MT 変換装置」「MT →変換装置」が用意されていて、ほとんどの顧客はパンチカードでプログラムもデータも入力していた節があります。
これはもっとあとの UNIVAC File Computer (日本に初めて導入された UNIVAC 製事務用コンピュータ) についてのことになりますが、南沢さんの「日本のコンピュータ発達史」にも「MT に端末から入力する装置もあったが使い勝手が悪く、ほとんど使われなかった」という記述がありました *2。もちろん、MT に貯めておいてから一気に処理することを「バッチ」といっていたのかもしれませんが、少なくともそれを裏付ける文献を私は見つけられませんでした。

なお日報処理といえばなんといってもこの南沢さんが構築した小野田セメントの日本初の事務用情報処理システム (1956 年、IBM の CPC; ちょっと賢い PCS、を中心にして稼働) ではありますが、彼は徹底した「オンラインリアルタイム処理至上主義者」であって、バッチ処理についてはあまり触れていないんですよね……。

ということで「言い切ったのはちょっと勇み足ですが、多分パンチカード由来、というのは間違ってないんじゃないかなぁ……」ぐらいですか。

TSS の起源

まあこれは横ネタなんですが、(2)(3) に対する反応として TSS は MULTICS の影響を受けてなんとかという話があったので……。

世界初の TSS がマッカーシーの発案による MIT の CTSS (Compatible Time Sharing System) であることは論を待たないと思います。CTSS と、それに対するハッカー的アンチテーゼである ITS (Incompatible Time sharing System) については、こんな記事読むよりレヴィーの「ハッカーズ」読んだほうがいいと思いますが。

一応私の記憶より確かな記事として CTSS の初出論文を引っ張り出してきました *3

  • この論文自体が 1962 年発表ですね。
  • Wikipedia には 1961 年に稼働したと書いてあるけど、この記事にはそれは書いてない。
  • Compatible というのは CTSS 導入前の「Fortran-Fap-BSS Monitor System (FMS)」という「バッチ処理」システムとの互換性を謳っているので、ユーザーの操作感としては依然バッチだったわけで。でも、端末を占有することで「FMS 同等のシステムを専有している」感をオペレータに提供できたことが重要。
  • 自分的には以下の部分が刺さるなぁ。やっぱり TSS においては「時分割処理」は「手段」であって、目的は「インタラクティブ性を上げること」だったんだな。

now in the early 1960's, we are in the midst of a third major modification to computer usage: the improvement of man-machine interaction by a process called time-sharing.
(へぼ訳:1960年代初期の今、我々はコンピュータの使い方が大きく変わる只中にいる;タイムシェアリングと呼ばれる機構による、人と機械のインタラクションの向上という。)

さて MULTICS ですが Wikipedia から http://www.multicians.org/ なんてサイトがあるのを教えてもらった。面白い。んでまあ詳細はさておき、「プロジェクトの開始が」1964 年なんで、時系列的に「TSS には MULTICS の影響がある」というのは、少なくとも起源においては、ないと思う。

もちろん CTSS は TSS の完成形じゃないし (ダートマス Basic の環境 DTSS はダートマス大学の連中による TSS の解釈)、MULTICS は完成する前に論文がぼんぼん出てたんで、相互に影響を与えあったことはない、とは言わないですけど。

Basicインタラクティブ指向だったか? REPL だったか?

これについては最初にゴメンナサイしておきます。
ダートマスBasic は REPL っていうかインタプリタではありませんでした。環境の中でセーブロードしたりコード編集したりはできましたが、実行そのものはコンパイルして実行してました。ということで、少なくとも (3) の「今でいえばREPL風の環境に入ってそこでちょっとコード書いて試すこともできて」はデタラメです。

論文とかには当たっていないのですが (それやってるとこのエントリいつまでたっても終わらない。昔の論文おもしろすぎる)、Wikipedia によるダートマス版Basicの記事*4を参照すると、

ということで、繰り返しになりますが、

Basic は TSS によって得られたインタラクティブ性を活用することを目的に設計された言語である

は (多分) 正解だけど、

Basic は最初から REPL (昔的にいうインタプリタ) であることを指向していた

大嘘でしたね。すみませんすみませんすみません。

終わり

思い込みで書き込みすると恥を書くだけじゃなくて、間違った知識を流布してイクナイよね。ゴメンナサイ。
でも、そのおかげでこうやって歴史の振り返りをできたのは私に取っては楽しかったです。読者の皆さんが楽しんでいただけるかどうかは分かりませんが、もしこういう昔話がお好きな方、ぜひお友達になりましょう。

*1:もちろん、どういう意図で書いたものにせよ目につくところにおいたらどんな反応もありうる。イラっとするほうが悪かったです。これは素直に反省。

*2:手元に書籍がないので、細かい言い回しは違うと思います。

*3:頑張って論文検索してふと見たら、Wikipedia の参考文献にあったという……。

*4:関係ないけど、これを検索するときにぼくは Dartmouth の綴りを間違って Dartmouse だと思ってて、そう入力して Google 先生がちゃんと Wikipedia の記事を見つけてきてくれたので安心して、よくよく見たら綴り違ってて恥をかきました。ああ、s と th の発音を聞き分けられないへっぽこ日本人の悲しさよ。

*5:が、これはどうも「最初のユーザーがパンチカードで仕事してたから」って理由な気もする……けど、どこで読んだか忘れたので、眉唾でヨロシクです。