rubyの御先祖clu(くるう)のお話(osc2013 hamamatsu 発表資料)

17
Rubyの御先祖 CLU(くるう)のお話 CLU動態保存整備士 東平洋史

Upload: -

Post on 11-Jun-2015

873 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

Rubyの御先祖CLU(くるう)のお話

CLU動態保存整備士東平洋史

Page 2: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

内容•プログラミング言語CLUの特徴

•CLUの処理系 clu2c の特徴と実演

Page 3: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

CLUのプログラム例

start_up = proc()stdout:stream:= stream$primary_output()stream$putl(stdout, “Hello World!”)

end start_up

•変数は使いたい時に宣言•プロシージャ―の呼び出し方type$procedure

Page 4: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

プログラミング言語CLUの特徴(1)

• MITのBarbara Liskov考案(1974)• 強い型付• コンパイル時に全てのオブジェクトの型が決まる• でも、任意の場所で変数宣言可能

• プロシージャを定義可能複数の戻り値が可能a:int, b: real := type$procedure(c, d)

• 変数の値は全てヒープ上のオブジェクト• Garbage Collection

Page 5: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

プログラミング言語CLUの特徴(2)

• イテレータを定義可能• 繰り返しを抽象化• for文で使用• 複数の値を引き渡し可能

• 抽象型(クラスタ)を定義可能• 属性、プロシージャ、イテレータを持つ• 具体表現は外から隠蔽• 継承はできない

• 例外処理• 伸縮自在な配列• パラメータ機能

Page 6: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

イテレータ

• 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

呼び出し元

イテレータ

35

Page 7: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

CLUの基本型

型の種類 書き換え可能

書き換え不能

配列 array sequence

構造体 record struct

共用体 oneof variant

• int 整数

• real 実数

• bool 論理

• char 文字

• string 文字列

• proctype プロシージャ

• Itertype イテレータ

• any

• null

• 書き換え可能• オブジェクトの状態が変化するもの

• 書き換え不能• オブジェクトの状態が変化しないもの

Page 8: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

クラスタの例

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

Page 9: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

東京工業大学木村泉研究室とプログラミング言語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のプログラムに変換

Page 10: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

CLU処理系clu2c

• CLUをCに変換し、さらに実行形式を生成する処理系

• CLUとCで実装

• GCは Boehm GC を使用

•以下のプログラムで構成• clu2c

• CLUをCに変換するプログラム

• MIT製処理系cluを改造• 主にコード生成部を作成

• clulink• 実行形式を生成

• Cコンパイラとリンカ

• plink• パラメータ機能の分析

• ユーザは直接呼び出さない。clulinkが呼びだす。

CLUのプログラム

clu2c Cのプログラム

ライブラリclulink 実行形式

Boehm GC

Page 11: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

動作確認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が動作する環境であれば動作可能

Page 12: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

clu2cプロジェクト参加者

• 江原善(初代リーダー)

• 木原誠司(コンパイラ実装)

• 地引昌弘(デバッガなど)

• 孫音(ライブラリ実装)

• 牛嶋哲(二代目リーダー)• 日本語文字使用部分実装

• 富沢伸行(ライブラリ実装)

• 浦野幹夫(ライブラリ実装)

• 野澤義雄(ライブラリ実装)

• 林智子(ライブラリ実装)

• 森村健司• Human68k、MS-DOSへの移植

• 森玲人(デバッガ担当)

• 東平洋史(最適化など)

など以上、東京工業大学理学部情報科学科木村泉研究室在籍者

プロジェクト終了後

• 前田修吾さん• Linuxへの移植およびPorts化

• 東平洋史• 前田さんの改造をCLU使用部

分に反映

• Cygwin、Ubuntu 9.04への移植

• 64bit環境対応

Page 13: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

clu2c現在の状態

開発自体は終了

• 木村泉先生退官により木村泉研究室消滅

• 東工大 理学部 情報科学科での公開は終了

• 現在は「動態保存」• 実用されなくなった機械類を、操作や運用が可能な状

態で保存しておくこと。「デジタル大辞泉」より

•こちらでソースを公開中• http://touhei.sakura.ne.jp/clu2c/

• http://sourceforge.jp/projects/clu2c/

Page 14: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

clu2cに残る課題

いずれもプロジェクト終了後に発生したもの

• UTF対応• ISO-2022-JP、Shift_JIS、EUC-JPには対応済み

• 文字、文字列のリテラル

• 識別子

• ユーザーインタフェースの多言語化• 現状は英語のみ

Page 15: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

まとめ

•プログラミング言語CLUの特徴• 強い型付け

• 抽象型

• 複数の戻り値

• イテレータ

• 例外処理

• パラメータ処理

などなど

•東京工業大学木村泉研究室とCLU• CLU処理系の移植

• CLUマシン• CLU言語を命令セットとするOS

• nclu• 2バイト文字使用

• !記法

• clu2c• CLU→C→実行形式

• CLUを授業に使用

Page 16: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

参考文献(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

Page 17: Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

参考文献(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