rubyの御先祖clu(くるう)のお話(osc2013 hamamatsu 発表資料)
TRANSCRIPT
Rubyの御先祖CLU(くるう)のお話
CLU動態保存整備士東平洋史
内容•プログラミング言語CLUの特徴
•CLUの処理系 clu2c の特徴と実演
CLUのプログラム例
start_up = proc()stdout:stream:= stream$primary_output()stream$putl(stdout, “Hello World!”)
end start_up
•変数は使いたい時に宣言•プロシージャ―の呼び出し方type$procedure
プログラミング言語CLUの特徴(1)
• MITのBarbara Liskov考案(1974)• 強い型付• コンパイル時に全てのオブジェクトの型が決まる• でも、任意の場所で変数宣言可能
• プロシージャを定義可能複数の戻り値が可能a:int, b: real := type$procedure(c, d)
• 変数の値は全てヒープ上のオブジェクト• Garbage Collection
プログラミング言語CLUの特徴(2)
• イテレータを定義可能• 繰り返しを抽象化• for文で使用• 複数の値を引き渡し可能
• 抽象型(クラスタ)を定義可能• 属性、プロシージャ、イテレータを持つ• 具体表現は外から隠蔽• 継承はできない
• 例外処理• 伸縮自在な配列• パラメータ機能
イテレータ
• for文から呼び出す
• ユーザ定義可能
• 呼び出しの流れ
1. 初期呼び出し
2. イテレータの初期設定
3. 値を引き渡す。
4. ループ本体を実行する。
5. 次の値を貰いに行く。
• まつもとゆきひろ氏がRubyでブロックへ拡張
for i:int in int$from_to(1,100) do
...
end
from_to=iter(first:int, last:int) yields(int)
n:int := first
while n <= last
yield(n)
n := n + 1
end
end from_to
呼び出し元
イテレータ
1
35
CLUの基本型
型の種類 書き換え可能
書き換え不能
配列 array sequence
構造体 record struct
共用体 oneof variant
• int 整数
• real 実数
• bool 論理
• char 文字
• string 文字列
• proctype プロシージャ
• Itertype イテレータ
• any
• null
• 書き換え可能• オブジェクトの状態が変化するもの
• 書き換え不能• オブジェクトの状態が変化しないもの
クラスタの例
stack=cluster[t: type] is
new, push, pop
rep=array[t]
new=proc() returns(cvt)
return(rep$new())
end new
push=proc(r: cvt, x: t)
rep$addh(r, x)
end push
pop=proc(r: cvt) returns(t) signals (empty)
return(rep$remh(r))
except when
bounds:
signal emptyend
end pop
end stack
東京工業大学木村泉研究室とプログラミング言語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のプログラムに変換
CLU処理系clu2c
• CLUをCに変換し、さらに実行形式を生成する処理系
• CLUとCで実装
• GCは Boehm GC を使用
•以下のプログラムで構成• clu2c
• CLUをCに変換するプログラム
• MIT製処理系cluを改造• 主にコード生成部を作成
• clulink• 実行形式を生成
• Cコンパイラとリンカ
• plink• パラメータ機能の分析
• ユーザは直接呼び出さない。clulinkが呼びだす。
CLUのプログラム
clu2c Cのプログラム
ライブラリclulink 実行形式
Boehm GC
動作確認OS(一部)
• Cygwin
• Ubuntu 12.04.1(i386、amd64)
• OpenSUSE 12.2 (32bit、64bit)
• CentOS 6.3(i386)
• Fedora 17(i386)
• Solaris 11/11 (32bit、64bit)
• OpenIndiana 151a5
• FreeBSD 9.0(i386)
• NetBSD 5.1.2(i386)
• Boehm GCが動作する環境であれば動作可能
clu2cプロジェクト参加者
• 江原善(初代リーダー)
• 木原誠司(コンパイラ実装)
• 地引昌弘(デバッガなど)
• 孫音(ライブラリ実装)
• 牛嶋哲(二代目リーダー)• 日本語文字使用部分実装
• 富沢伸行(ライブラリ実装)
• 浦野幹夫(ライブラリ実装)
• 野澤義雄(ライブラリ実装)
• 林智子(ライブラリ実装)
• 森村健司• Human68k、MS-DOSへの移植
• 森玲人(デバッガ担当)
• 東平洋史(最適化など)
など以上、東京工業大学理学部情報科学科木村泉研究室在籍者
プロジェクト終了後
• 前田修吾さん• Linuxへの移植およびPorts化
• 東平洋史• 前田さんの改造をCLU使用部
分に反映
• Cygwin、Ubuntu 9.04への移植
• 64bit環境対応
clu2c現在の状態
開発自体は終了
• 木村泉先生退官により木村泉研究室消滅
• 東工大 理学部 情報科学科での公開は終了
• 現在は「動態保存」• 実用されなくなった機械類を、操作や運用が可能な状
態で保存しておくこと。「デジタル大辞泉」より
•こちらでソースを公開中• http://touhei.sakura.ne.jp/clu2c/
• http://sourceforge.jp/projects/clu2c/
clu2cに残る課題
いずれもプロジェクト終了後に発生したもの
• UTF対応• ISO-2022-JP、Shift_JIS、EUC-JPには対応済み
• 文字、文字列のリテラル
• 識別子
• ユーザーインタフェースの多言語化• 現状は英語のみ
まとめ
•プログラミング言語CLUの特徴• 強い型付け
• 抽象型
• 複数の戻り値
• イテレータ
• 例外処理
• パラメータ処理
などなど
•東京工業大学木村泉研究室とCLU• CLU処理系の移植
• CLUマシン• CLU言語を命令セットとするOS
• nclu• 2バイト文字使用
• !記法
• clu2c• CLU→C→実行形式
• CLUを授業に使用
参考文献(CLU関係)
• 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
• Amazonでも書籍購入可能
• CLUとその仲間たち• 久野靖 著
• 共立出版 bit 1989年5月号~12月号 に連載された雑誌記事
• http://www.oreilly.co.jp/books/9784873113630/#files
参考文献(clu2c関係)
• 開発効率と移植性を重視したCLU言語処理系の作成• 江原善 著
• 東京工業大学理工学研究科情報科学専攻 修士論文
• http://touhei.sakura.ne.jp/clu2c/clu2c-thesis.tar.gz• TeX → Postscript 形式で公開
• ポータブルな言語処理系の日本語化方式• 牛嶋 哲 著
• 情報処理学会研究報告. PRO, [プログラミング] 96(58), 13-18, 1996-05-31
• http://ci.nii.ac.jp/naid/110002929515