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のお話clu2c動態保存整備士     東平洋史
内容• プログラミング言語CLUの特徴• 東京工業大学情報科学科木村泉研究室とCLU
プログラミング言語CLUの特徴(1)• MITのBarbara Liskov考案(1974)• 強い型付  • コンパイル時に全てのオブジェクトの型が決まる  • でも、任意の場所で変数宣言可能• 抽象型(クラスタ)を定義可能  • 具体表現は...
プログラミング言語CLUの特徴(2)• イテレータ• 例外処理• 伸縮自在な配列• 書き換え可能なオブジェクト• 書き換え不能なオブジェクト• パラメータ機能
イテレータ• for文から呼び出す                          • まつもとゆきひろ著「Rubyist for i:int in int$from_to(1,100) do     のための他言語探訪 【第 2   ......
例外処理• signal文で例外発生          • まつもとゆきひろ著「                          Rubyist のための他言語 signal 例外名[(値, …)]       探訪 【第 2 回】 CLU」...
Syntax Sugar(構文糖)任意の型(クラスタでも)で次の表現を使用可能↓構文糖の一部•type$add(a, b) ⇔ a:type + b:type•type$sub(a, b) ⇔ a:type - b:type•type$mul(...
伸縮自在な配列array型      B C    D E ← F   後ろに追加         ↓  A → B C    D E F     先頭に追加         ↓    A B C    D E F → F 後ろから削除    ...
書き換え可能な型と書き換え不能な型• 例:配列 – array    • 要素の書き換え、参照が可能。    • 要素の追加と削除も可能。    • 動的に値が変わる変数に使用 – sequence    • 要素の書き換えは不能。参照のみ可能...
クラスタの例(int型のスタック)intstack=cluster is              pop=proc(r: cvt)             new, push, pop                 returns(int)...
パラメータ機能の例stack=cluster[t: type] is        pop=proc(r: cvt)              new, push, pop                returns(t)   rep=arr...
CLUのプログラム例start_up = proc()   stdout:stream:= stream$primary_output()   stream$putl(stdout, “Hello World!”)end start_up
東京工業大学木村泉研究室と      プログラミング言語CLU• MITのBarbara Liskov考案(1974)• 東京工業大学理学部情報科学科木村泉研究室で使用開始  (1979以前)• CLU処理系をFACOM230-45S、HITA...
CLUマシン• CLUで実装 – 一部、アセンブラを使用• CLUの特徴(特にデータ抽象型)を活かした実装• 単一言語系 – 走らせるプログラムはCLUで記述したもののみ• ダイナミックリンカ使用• 文字は16ビットに統一 – 英字も日本語文字...
CLUマシンプロジェクト参加者•   久野靖(指導者)      • 関啓一•   暦本純一(オブザーバ)   • 吉屋英二•   鈴木友峰          • 藤崎智宏•   荒井俊史          • 伊藤義行•   中村秀男    ...
nclu 処理系CLUの拡張(new CLU? 日本語CLU?)•MIT製処理系cluを改造   •!記法•2バイト文字使用可能       – 暦本純一氏考案の構文 – 木村泉先生の要望         糖                  ...
ncluを使ったプログラムの例赤字は2バイト文字使用部分start_up = proc()  標準出力:stream:= stream$primary_output()  for i:int in int$from_to(1, 5) do   ...
CLU処理系clu2c• CLUをCに変換する処理       • 以下のプログラムで構成  系                   – clu2c• CLUとCで実装               • CLUをCに変換するプログ        ...
clu2cプロジェクト参加者•   江原善(初代リーダー)     • 森村健司•   木原誠司(コンパイラ実装)    – Human68k、MS-DOSへの移植•   地引昌弘(デバッガなど)    • 森玲人(デバッガ担当)•   孫音(...
clu2c現在の状態開発自体は終了• 木村泉先生退官により木村泉研究室消滅• 東工大 理学部 情報科学科での公開は終了• 現在は「動態保存」 – 実用されなくなった機械類を、操作や運用が可能な   状態で保存しておくこと。「デジタル大辞泉」より...
clu2cに残る課題いずれもプロジェクト終了後に発生したもの• UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み• 64ビットOSへの対応 – 32ビットアプリケーションとしてなら動作する – 64ビットアプ...
まとめ• プログラミング言語CLU   • 東京工業大学木村泉研  の特徴              究室とCLU – 強い型付け          – CLU処理系の移植 – 抽象型            – CLUマシン – 複数の戻り値 ...
参考文献• CLU Reference Manual  – Liskov, B., Atkinson, R.R., Bloom, T., Moss, E.B., Schaffert,    R. and Snyder, A. 著  – http...
Upcoming SlideShare
Loading in …5
×

Rubyの御先祖CLUのお話(原本)

2,373 views

Published on

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

Published in: Technology
  • Be the first to comment

Rubyの御先祖CLUのお話(原本)

  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)• イテレータ• 例外処理• 伸縮自在な配列• 書き換え可能なオブジェクト• 書き換え不能なオブジェクト• パラメータ機能
  5. 5. イテレータ• 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
  6. 6. 例外処理• signal文で例外発生 • まつもとゆきひろ著「 Rubyist のための他言語 signal 例外名[(値, …)] 探訪 【第 2 回】 CLU」よ り• except文で例外捕捉 – Ruby が例外処理を持つ のは CLU の影響だと思 例外を発生する文 います。 except when 例外1: 文… when 例外2:文… … others: 文… end
  7. 7. Syntax Sugar(構文糖)任意の型(クラスタでも)で次の表現を使用可能↓構文糖の一部•type$add(a, b) ⇔ a:type + b:type•type$sub(a, b) ⇔ a:type - b:type•type$mul(a, b) ⇔ a:type * b:type•type$div(a, b) ⇔ a:type / b:type•type$get_name(a) ⇔ a.name•type$set_name(a, 式) ⇔ a.name := 式
  8. 8. 伸縮自在な配列array型 B C D E ← F 後ろに追加 ↓ A → B C D E F 先頭に追加 ↓ A B C D E F → F 後ろから削除 ↓A ← A B C D E 先頭から削除 ↓ B C D E
  9. 9. 書き換え可能な型と書き換え不能な型• 例:配列 – array • 要素の書き換え、参照が可能。 • 要素の追加と削除も可能。 • 動的に値が変わる変数に使用 – sequence • 要素の書き換えは不能。参照のみ可能。 • 要素の追加と要素の削除を行なう場合はオブジェクトを 作りなおす。 • 値が変わらない静的な変数に使用
  10. 10. クラスタの例(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
  11. 11. パラメータ機能の例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
  12. 12. CLUのプログラム例start_up = proc() stdout:stream:= stream$primary_output() stream$putl(stdout, “Hello World!”)end start_up
  13. 13. 東京工業大学木村泉研究室と プログラミング言語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のプログラムに変換
  14. 14. CLUマシン• CLUで実装 – 一部、アセンブラを使用• CLUの特徴(特にデータ抽象型)を活かした実装• 単一言語系 – 走らせるプログラムはCLUで記述したもののみ• ダイナミックリンカ使用• 文字は16ビットに統一 – 英字も日本語文字なども使用可能
  15. 15. CLUマシンプロジェクト参加者• 久野靖(指導者) • 関啓一• 暦本純一(オブザーバ) • 吉屋英二• 鈴木友峰 • 藤崎智宏• 荒井俊史 • 伊藤義行• 中村秀男 • 木原誠司• 佐藤直樹 • 江原善• 二瓶勝敏 • 地引昌弘• 明石修 • 富沢信行• 根岸康 • 牛嶋哲 など
  16. 16. nclu 処理系CLUの拡張(new CLU? 日本語CLU?)•MIT製処理系cluを改造 •!記法•2バイト文字使用可能 – 暦本純一氏考案の構文 – 木村泉先生の要望 糖 a!proc(b) ⇔ type$proc(a, b) – 識別子に多バイト文字使 用 – .はすでに使われていた a.name := b ⇔ – 演算子にも多バイト文字 type$set_name(a, b) 使用 a.name ⇔ type$get_name(a) – 久野靖氏「CLUは立派な オブジェクト指向言語に 昇格」←少し言い過ぎ (^^;
  17. 17. ncluを使ったプログラムの例赤字は2バイト文字使用部分start_up = proc() 標準出力:stream:= stream$primary_output() for i:int in int$from_to(1, 5) do 標準出力!putl(”No. ” || i!unparse() || ” Hello World!”) endend start_up
  18. 18. CLU処理系clu2c• CLUをCに変換する処理 • 以下のプログラムで構成 系 – clu2c• CLUとCで実装 • CLUをCに変換するプログ ラム• GCは Boehm GC を使用 • MIT製処理系cluを改造 – 主にコード生成部を作成 – plink • パラメータ機能の分析 • ユーザは直接呼び出さな い。clulinkが呼びだす。 – clulink • 基本ライブラリ、GCライブラ リとリンクし、実行形式を生 成
  19. 19. clu2cプロジェクト参加者• 江原善(初代リーダー) • 森村健司• 木原誠司(コンパイラ実装) – Human68k、MS-DOSへの移植• 地引昌弘(デバッガなど) • 森玲人(デバッガ担当)• 孫音(ライブラリ実装) • 東平洋史(最適化など)• 牛嶋哲(二代目リーダー) など – 日本語文字使用部分実装 プロジェクト終了後• 富沢伸行(ライブラリ実装) • 前田修吾さん• 浦野幹夫(ライブラリ実装) – Linuxへの移植およびPorts化• 野澤義雄(ライブラリ実装) • 東平洋史 – 前田さんの改造をCLU使用部• 林智子(ライブラリ実装) 分に反映 – Cygwin、Ubuntu 9.04への移植
  20. 20. clu2c現在の状態開発自体は終了• 木村泉先生退官により木村泉研究室消滅• 東工大 理学部 情報科学科での公開は終了• 現在は「動態保存」 – 実用されなくなった機械類を、操作や運用が可能な 状態で保存しておくこと。「デジタル大辞泉」より• こちらでソースを公開中 – http://touhei.sakura.ne.jp/clu2c/ – http://sourceforge.jp/projects/clu2c/
  21. 21. clu2cに残る課題いずれもプロジェクト終了後に発生したもの• UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み• 64ビットOSへの対応 – 32ビットアプリケーションとしてなら動作する – 64ビットアプリケーションとして動作するかは未検証 • Boehm GCは64ビットアプリケーションに対応済み • ポインタ関連の改修が必要か?
  22. 22. まとめ• プログラミング言語CLU • 東京工業大学木村泉研 の特徴 究室とCLU – 強い型付け – CLU処理系の移植 – 抽象型 – CLUマシン – 複数の戻り値 • CLU言語を命令セットとす るOS – イテレータ – nclu – 例外処理 • 2バイト文字使用 – パラメータ処理 • !記法 などなど – clu2c • CLU→C→実行形式 – CLUを授業に使用
  23. 23. 参考文献• 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

×