hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

林恒俊教授退職記念講演会に行った

形式言語オートマトンを教えてくださってた林先生の退職記念講演があったので、メモを取ってきました。
おもしろい講演会でした。
ところどころ、間違っているかもしれません。


08.01.30 15:00~16:00

All These Days of Software Practice & Experience

  • イギリスの雑誌 Software Practice and Experience
    • これといって目新しいことはないが知りたい人は知りたがるような論文の雑誌
    • その昔、どこを工夫したのか分からないという理由で掲載を受け付けてもらえない時代があった
    • こういうところに投稿すると掲載してもらえる
  • 学生の頃よりプログラムを書いてきた
    • うまくいったものも、挫折したものも
    • 今日の話は、自分がどういうことをしたかと、その反省

修士

  • 修士になってからプログラミング生活
  • 京大 電気工学第二
    • 長尾先生

Lispインタプリタを作ってみる

  • Lisp1.5のマニュアルを読んだ(英語の)
    • 今ほど英語ができないので苦労
  • なんとか作れた
  • m表現(Lispインタプリタの定義)
    • Lispはデータを記述するための強力なS表現を持つ
    • tree構造
    • S表現に対する演算をm表現という
  • m表現をS表現に変えて埋め込むと、m表現で自分自身のインタプリタを作ることができる
  • アセンブラでプログラムを書いた
  • もとのm表現の一部にアセンブラのコードが含まれたので、オリジナルのインタプリタも同様の仕組みで作られているものと思われる
  • 反省:当時のアメリカの研究を知らなかった
  • 2200(メインフレーム)で、紙テープにソースをパンチして実行するものを作った
  • Lispはctss上にあって、端末から使うものとあとで知る
  • 知識不足(やる前に勉強すべき)
  • 大したものを作ったという印象はなかったので、論文にもしなかったが、当時そういうことをやった人はいなかった

ドクター

  • あまり勉強できなかった
  • ローカルエリアネットワークを構築
  • (TCP/IPができる前)
  • 音声データをネットワークでメインフレームに送って処理する
  • 北沢先生
    • 今は音声処理の人だが、ネットワークもやってはった
  • メインフレーム用のOS
  • ネットワークプロトコルスタック(TCPICP)
  • 実時間連続音声信号転送
  • 作業は多いが内容は難しくない
  • 1回アセンブルするのに数時間かかる
    • 印刷されると厚さ3cmくらい
    • 10時にはじめて2時か3時に終わる
  • アセンブルでもちゃんと作れば動く
  • telnetでクライアントとサーバーを作る
  • サーバーは簡単
    • 受信して処理して返すだけ
  • クライアントが大変
    • 送受信で2個のリンクが必要
    • 今は1つのリンクで双方向できるが、当時は一方向のみだったため
    • Display, Keyboardで2本必要
    • telnetのスレッドを2つに分けるのがオーソドックス
    • 都合でそれができなかった
  • 受信と入力をECB(イベント通知ブロック)に通知
    • イベント待ちループが??(聞き逃した)
    • GUIプログラミングと同じ考え方
    • 疑似多重プログラミング

??大学の計算センターで仕事(聞き逃した)

  • ちょうどUnixが話題
  • 文系の大学なので貧乏で計算機は買えない
  • メインフレームOSでUnixのアプリケーションを動かすことを試みる
  • ファイルシステムを作って、その上でUnixコマンドを動かす
  • しばらくやったが、どうもぱっとしない
  • C言語の移植で挫折
  • 失敗はしたがUnixのファイル形式は分かった

C言語の移植で挫折

  • ベル研のUNIXコマンド一覧を送ってもらった
  • Catch-22
  • 処理系は実装できるが、プリプロセッサyaccが必要
    • #ifの式をパースするためにyacc
  • 移植にpull型とpush型がある
    • target側で対応するのがpull型、 source側で対応するのがpush型
    • ポータブルCとクラシックC
    • ポータブルCにyacc使われている
    • クラシックCはpull型
    • BCPLはpull型

下降型パーサを作った

  • 1回作って勉強するため
  • 拡張BNF定義から加工型パーサを直接生成
    • PL/1
    • emptiness, first set, follow setを計算
    • PL/1を出力
    • 集合表現にビットマップ
    • オーソドックスなもの

北海道大学大型計算機センター

  • 計算機センターの主な利用者は物理、建築、化学の研究者
    • 90%を10%の人が使ってる状態

ユーザー支援のためにTeXを移植

  • 方法
    • TeXのソースを送ってもらう
    • 調べる
    • どうやるか考える
    • 移植(pull型)
    • 動いた
  • 検証
    • 移植が正しくできたか検証するためのソースをコンパイルして、見た目が正しければ正しい
    • TeX周りのユーティリティのプログラムも動かす必要がある(検証できない)
    • TeXはdviファイルしか出さないので、dviを読んでプリンタに出力するプログラムも必要(dviプリンタドライバ)
    • ユーティリティのdviをダンプするプログラムをもとに作成
  • バグレポート
    • ソースコードの誤りをKnuth先生にメール(手紙) -> 小切手もらった
    • 引っ越しを繰り返して小切手は紛失
    • 「文芸的プログラミング」の付録に名前が乗ってる
    • イギリスの雑誌にも掲載
    • ラッキー
  • 考えたこと
  • TeX自身はweb言語で記述(この辺あやしい)
    • ソースとドキュメントが一体になったもの
    • weaveの処理系を使ってドキュメントを生成できる
    • tangleを動かすとweaveからソースを生成できる
    • TexWareも全部weaveで書かれている
    • tangleはPascalのソースがある
    • tangleがコンパイルできればあとは楽
    • weaveはコンパイルするときにパッチを当てられる(元のソースを触らなくてよい)
    • UNIXメインフレームでは入出力が違うので、そこだけはソースを触る
  • tangleを移植
    • Pascal構文が不適
    • default付きcase文が使われている
    • 標準のPascal、日立のPascalにはない
    • パーサを生成してソースを書き換えて入出力周りを書き換える
    • メインフレームではddネームを使ってパッチを当てる
    • グルールーチン
    • ダイナミックアロケータ
  • TeXはdviしか出さないのでプリンタドライバを作る
    • オーバーレイでグラフィックを出力
    • ビットマップフォントをベクター出力
    • DPIが標準フォントと違う
    • B4に出す->A4に縮小
  • グルールーチン

その他

  • 助教授なので雑用が来る
  • 頻繁に東大に出張
  • 共同利用番号制
    • 同じアカウントを複数のセンターで使えるようにするもの
    • 北大のセンターが混んでたので、東大の客を取ろうとした

N1Mail

  • インターネット以前はN1しかなかった
    • 当時としては大規模なネットワーク
    • 大型センター同士のメールのシステム
    • センター間で内部の漢字コードとかが違う
  • N1Mailプロトコル
    • 漢字利用可能
    • telnetで転送
  • 実装方法
    • データベースはVSAMファイル
    • メール処理 ユーザ手続きと常駐タスク
    • PL/1
    • 1人で実装
    • ユーザーインターフェイス 漢字モードと英語モードの切り替え
    • メインフレームのダンプを取ってインターフェイスを調べる

日本語web

  • web言語を日本語化
  • web言語については文芸的プログラミングに載ってる
  • プログラミング演習 コンパイラ作成
    • 学生が何をやっていいか分からない
    • 配布資料として、weaveで印刷したコンパイラのソースを配布
  • あまり流行らないが、こういう風にするべきだと思う
  • 立命館に来てからあまり仕事していない
  • プログラミングをテキストから解放したい

感心したもの

  • Doom(FPS ゲーム)
    • 画面上を自分が動き回る
    • 386の処理能力で実装
    • 原コード公開
  • 工夫
    • 解像度半分
    • 2.5次元
    • オブジェクトはスプライト
    • 衝突判定の壁の情報がバイナリツリーになってる
    • 通常と逆で、手前から奥にレンダリング
    • あまり遠くに行くとレンダリングしない

最近作ったもの

  • LR(1) parser simulator
    • 上に式を入れてカチカチやるとパースの過程が見える
    • LR(1)パーサーは簡単なものだが分からないと難しい
    • reduce, shift
    • Webアプリケーション(html, javascript, css)
    • アニメーションが大変

質問

  • プログラミングはいつまでなさっていた?
    • 今でもやっている
  • 何歳でもできる?
    • 何歳でもできる