Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)

1,047 views

Published on

Rubyの先祖でありながら、いまいちマイナーな存在であるプログラミング言語CLUの紹介です。合わせて日本で唯一CLUを使い続けた、東京工業大学理学部情報科学科木村泉研究室の取り組みについて簡単に触れます。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)

  1. 1. Rubyの御先祖 CLUのお話clu2c動態保存整備士 東平洋史
  2. 2. 内容• プログラミング言語CLUの特徴• 東京工業大学情報科学科木村泉研究室とCLU
  3. 3. プログラミング言語CLUの特徴(1)• MITのBarbara Liskov考案(1974)• 強い型付 • コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能• 抽象型(クラスタ)を定義可能 • 具体表現は外から隠蔽 • 継承はできない• 複数の戻り値が可能 a:int, b: real := type$procedure(c, d)• 変数の値は全てヒープ上のオブジェクト • Garbage Collection
  4. 4. プログラミング言語CLUの特徴(2) イテレータ• for文から呼び出す • まつもとゆきひろ著「Rubyist for i:int in int$from_to(1,100) do のための他言語探訪 【第 2 ... 回】 CLU」より end – イテレータの定義の仕方は驚く ほど Ruby に似ています。真似 したんだから当然です。元々• ユーザ定義可能 Ruby のブロックは CLU のイテ from_to=iter(first:int, last:int) レータに似たものを実現するた yields(int) めにデザインされたからです。 n:int := first while n <= last yield(n) n := n + 1 end end from_to
  5. 5. プログラミング言語CLUの特徴(3) 例外処理• signal文で例外発生 • まつもとゆきひろ著「 Rubyist のための他言語 signal 例外名[(値, …)] 探訪 【第 2 回】 CLU」よ り• except文で例外捕捉 – Ruby が例外処理を持つ のは CLU の影響だと思 例外を発生する文 います。 except when 例外1: 文… when 例外2:文… … others: 文… end
  6. 6. クラスタの例(int型のスタック)intstack=cluster is pop=proc(r: cvt) new, push, pop returns(int) rep=array[int] signals (empty) new=proc() returns(cvt) return(rep$remh(r)) return(rep$new()) except when end new bounds: push=proc(r: cvt, x: int) signal empty rep$addh(r, x) end end push end pop end intstack
  7. 7. パラメータ機能の例stack=cluster[t: type] is pop=proc(r: cvt) new, push, pop returns(t) rep=array[t] signals (empty) new=proc() returns(cvt) return(rep$remh(r)) return(rep$new()) except when end new bounds: push=proc(r: cvt, x: t) signal empty rep$addh(r, x) end end push end pop end stack
  8. 8. 東京工業大学木村泉研究室と プログラミング言語CLU• MITのBarbara Liskov考案(1974)• 東京工業大学理学部情報科学科木村泉研究室で使用開始 (1979以前)• CLU処理系をFACOM230-45S、HITACMシリーズヘ移植 (1979以前)• CLUを授業に使用• CLUマシン作成(1985夏~1992) • Lispマシンと似たコンセプト• CLU処理系nclu作成(1985以前) • 2バイト文字使用可能 • !記法• CLU処理系clu2c作成(1991~1998頃) • CLUをCのプログラムに変換
  9. 9. 東京工業大学木村泉研究室と プログラミング言語CLU• MITのBarbara Liskov考案(1974)• 東京工業大学理学部情報科学科木村泉研究室で使用開始 (1979以前)• CLU処理系をFACOM230-45S、HITACMシリーズヘ移植 (1979以前)• CLUを授業に使用• CLUマシン作成(1985夏~1992) • Lispマシンと似たコンセプト• CLU処理系nclu作成(1985以前) • 2バイト文字使用可能 • !記法• CLU処理系clu2c作成(1991~1998頃) • CLUをCのプログラムに変換
  10. 10. CLU処理系clu2c• CLUをCに変換する処理 • 以下のプログラムで構成 系 – clu2c• CLUとCで実装 • CLUをCに変換するプログ ラム• GCは Boehm GC を使用 • MIT製処理系cluを改造 – 主にコード生成部を作成 – plink • パラメータ機能の分析 • ユーザは直接呼び出さな い。clulinkが呼びだす。 – clulink • 基本ライブラリ、GCライブラ リとリンクし、実行形式を生 成
  11. 11. clu2cプロジェクト参加者• 江原善(初代リーダー) • 森村健司• 木原誠司(コンパイラ実装) – Human68k、MS-DOSへの移植• 地引昌弘(デバッガなど) • 森玲人(デバッガ担当)• 孫音(ライブラリ実装) • 東平洋史(最適化など)• 牛嶋哲(二代目リーダー) など – 日本語文字使用部分実装 プロジェクト終了後• 富沢伸行(ライブラリ実装) • 前田修吾さん• 浦野幹夫(ライブラリ実装) – Linuxへの移植およびPorts化• 野澤義雄(ライブラリ実装) • 東平洋史 – 前田さんの改造をCLU使用部• 林智子(ライブラリ実装) 分に反映 – Cygwin、Ubuntu 9.04への移植
  12. 12. clu2c現在の状態開発自体は終了• 木村泉先生退官により木村泉研究室消滅• 東工大 理学部 情報科学科での公開は終了• 現在は「動態保存」 – 実用されなくなった機械類を、操作や運用が可能な 状態で保存しておくこと。「デジタル大辞泉」より• こちらでソースを公開中 – http://touhei.sakura.ne.jp/clu2c/ – http://sourceforge.jp/projects/clu2c/
  13. 13. clu2cに残る課題いずれもプロジェクト終了後に発生したもの• UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み• 64ビットOSへの対応 – 32ビットアプリケーションとしてなら動作する – 64ビットアプリケーションとして動作するかは未検証 • Boehm GCは64ビットアプリケーションに対応済み • ポインタ関連の改修が必要か?
  14. 14. まとめ• プログラミング言語CLU • 東京工業大学木村泉研 の特徴 究室とCLU – 強い型付け – CLU処理系の移植 – 抽象型 – CLUマシン – 複数の戻り値 • CLU言語を命令セットとす るOS – イテレータ – nclu – 例外処理 • 2バイト文字使用 – パラメータ処理 • !記法 などなど – clu2c • CLU→C→実行形式 – CLUを授業に使用
  15. 15. 参考文献• CLU Reference Manual – Liskov, B., Atkinson, R.R., Bloom, T., Moss, E.B., Schaffert, R. and Snyder, A. 著 – http://publications.csail.mit.edu/lcs/specpub.php?id=793• CLUとその仲間たち – 久野靖 著 – 共立出版 bit 1989年5月号~12月号 – http://www.oreilly.co.jp/books/9784873113630/#files• 開発効率と移植性を重視したCLU言語処理系の作成 – 江原善 著 – 東京工業大学理工学研究科情報科学専攻 修士論文 – http://touhei.sakura.ne.jp/clu2c/clu2c-thesis.tar.gz

×