clu2cは64ビットosでも使えます (osc 2012 hiroshima lt用資料)

18
clu2c64ビットOSも使えます CLU動態保存整備士 東平洋史

Upload: -

Post on 29-Jun-2015

579 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2cは64ビットOSでも使えます

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

Page 2: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

CLU関連の私の略歴を

1988年4月 東京工業大学第1類に入学

1989年4月 東京工業大学理学部情報科学科に配属

1990年4月 情報科学実験第二(木村泉先生担当)受講 →CLU、ncluと出会う

1991年4月 木村泉研究室に入る →clu2cの開発始まる

1991年9月末 卒業論文のテーマ決まる

1994年3月 東京工業大学大学院博士課程前期修了 →CLUから離れる

2009年11月頃 京都御所へ行くついでにKOFへ行くことにし、そういえばclu2cもオープンソースだよなあ、と思い出す。→これが活動開始のきっかけ。

Page 3: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

CLU(くるう)とは何ですか?

プログラミング言語 • MITのBarbara Liskov考案(1974) ← 結構、古い • 強い型付

• コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能

• 抽象型(cluster)を定義可能 • 継承はできない

• 複数の戻り値が可能 → Rubyもパクった取り入れた a:int, b: real := type$procedure(c, d)

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

• イテレータ → Rubyのブロックになった

• 例外処理 → Rubyもパクった取り入れた

いわばRubyの先祖です

Page 4: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

CLUのプログラム例

start_up = proc()

stdout:stream:= stream$primary_output()

stream$putl(stdout, “Hello World!”)

end start_up

• 変数は使い始める場所で宣言

– 変数名: 型名

– 変数名: 型名 := 初期設定値

• 型$手続き名 という形で手続きを呼び出し

Page 5: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2c(くるーつーしー)とは何ですか?

プログラミング言語CLUの処理系

• プログラミング言語CLUで書かれたプログラムをCで書かれたプログラムに変換(CLU to C)

• Cで書かれたプログラムを実行形式(a.out)にコンパイル

CLUの プログラム

Cの プログラム

clu2c

ライブラリ

clulink 実行形式

a.out

Page 6: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

稼働確認済みの環境

• Cygwin

• Ubuntu 12.04.1

– i386

– amd64

• OpenSUSE 12.2

– 32bit

– 64bit

• OpenIndiana 151a5

– i386

• Solaris 11/11

• CentOS 6.3

– i386

• Fedora 17

– i386

• FreeBSD 9.0

– i386

• NetBSD 5.1.2

– i386

• Vine61

– i686

Page 7: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

デモ

• Cygwin

• Ubuntu 12.04.1

– i386

– amd64

• OpenSUSE 12.2

– 32bit

– 64bit

• OpenIndiana 151a5

– i386

• Solaris 11/11

• CentOS 6.3

– i386

• Fedora 17

– i386

次のどれかで動かしますよ

Page 8: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2cの実行例

CLUで書いたプログラム

赤字は2バイト文字使用部分

start_up = proc()

標準出力:stream:= stream$primary_output()

for i:int in int$from_to(1, 5) do

標準出力!putl(”No. ” ||

i!unparse() ||

” Hello World!”)

end

end start_up

Cのプログラム(一部) int AFstart__up() {

if (OFstream_Dprimary__output()

== SIG) {

goto except0;

}

LV_X49383d603d504e4f =

retval_area[0];

for (t1 = 1; t1 <= 5; t1++) {

OFint_Dunparse(t1);

(略)

}

}

Page 9: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

方針

32ビット環境でも 64ビット環境でも 吐くコードは同じ

Page 10: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

どう やる?

Page 11: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

整数型とビット数

データモデル

システム

char short int long long long

ポインタ

ILP32 Win32 8 16 32 32 64 32

LLP64 Win64 8 16 32 32 64 64

LP64 64bit Linux

8 16 32 64 64 64

ILP64 8 16 64 64 64 64

ILP32…ポインタは32bit → long

LLP64、LP64、ILP64…ポインタは64bit → long long

Page 12: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

なので

Page 13: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

ヘッダファイルを修正

プリプロセッサで判定

• 64ビット環境 ポインタ(object型)をlong longで宣言(64bit)

• 32ビット環境 ポインタ(object型)をlongで宣言(32bit)

#if defined(__LP64__) || defined(__LLP64__) || defined(__ILP64__)

typedef long long object;

#else

typedef long object;

#endif

ほぼこれだけで済みました

Page 14: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
Page 15: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2c現在の状態

開発自体は終了

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

• 東工大 理学部 情報科学科での公開は終了 →フランスのFTPサーバからソースを回収

• 現在は「動態保存」

• こちらでソースを公開中

– http://touhei.sakura.ne.jp/clu2c/

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

Page 16: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2cに残る課題

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

• UTF対応

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

• ドキュメントの日本語化

Page 17: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

clu2cプロジェクト参加者

• 江原善(初代リーダー) • 木原誠司(コンパイラ実装) • 地引昌弘(デバッガなど) • 孫音(ライブラリ実装) • 牛嶋哲(二代目リーダー)

– 日本語文字使用部分実装

• 富沢伸行(ライブラリ実装) • 浦野幹夫(ライブラリ実装) • 野澤義雄(ライブラリ実装) • 林智子(ライブラリ実装) • 森村健司

– Human68k、MS-DOSへの移植

• 森玲人(デバッガ担当) • 東平洋史(最適化など) など

プロジェクト終了後 • 前田修吾さん

– Linuxへの移植およびPorts化

• 東平洋史 – 前田さんの改造をCLU使用部分に反映

– Cygwin、Ubuntu 9.04への移植 – 64bit環境への対応

Page 18: clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)

参考文献

• 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