Más contenido relacionado
La actualidad más candente (20)
Similar a clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料) (20)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
- 2. CLU関連の私の略歴を
1988年4月 東京工業大学第1類に入学
1989年4月 東京工業大学理学部情報科学科に配属
1990年4月 情報科学実験第二(木村泉先生担当)受講
→CLU、ncluと出会う
1991年4月 木村泉研究室に入る →clu2cの開発始まる
1991年9月末 卒業論文のテーマ決まる
1994年3月 東京工業大学大学院博士課程前期修了
→CLUから離れる
2009年11月頃 京都御所へ行くついでにKOFへ行くことにし、
そういえばclu2cもオープンソースだよなあ、と
思い出す。→これが活動開始のきっかけ。
- 3. CLU(くるう)とは何ですか?
プログラミング言語
• MITのBarbara Liskov考案(1974) ← 結構、古い
• 強い型付
• コンパイル時に全てのオブジェクトの型が決まる
• でも、任意の場所で変数宣言可能
• 抽象型(cluster)を定義可能
• 継承はできない
• 複数の戻り値が可能 → Rubyもパクった取り入れた
a:int, b: real := type$procedure(c, d)
• 変数の値は全てヒープ上のオブジェクト
• Garbage Collection
• イテレータ → Rubyのブロックになった
• 例外処理 → Rubyもパクった取り入れた
いわばRubyの先祖です
- 4. CLUのプログラム例
start_up = proc()
stdout:stream:= stream$primary_output()
stream$putl(stdout, “Hello World!”)
end start_up
• 変数は使い始める場所で宣言
– 変数名: 型名
– 変数名: 型名 := 初期設定値
• 型$手続き名 という形で手続きを呼び出し
- 6. 稼働確認済みの環境
• Cygwin • CentOS 6.3
• Ubuntu 12.04.1 – i386
– i386 • Fedora 17
– amd64 – i386
• OpenSUSE 12.2 • FreeBSD 9.0
– 32bit – i386
– 64bit • NetBSD 5.1.2
• OpenIndiana 151a5 – i386
– i386 • Vine61
• Solaris 11/11 – i686
- 7. デモ
次のどれかで動かしますよ
• Cygwin • OpenIndiana 151a5
• Ubuntu 12.04.1 – i386
– i386 • Solaris 11/11
– amd64 • CentOS 6.3
• OpenSUSE 12.2 – i386
– 32bit • Fedora 17
– 64bit – i386
- 8. clu2cの実行例
CLUで書いたプログラム Cのプログラム(一部)
赤字は2バイト文字使用部分 int AFstart__up() {
start_up = proc() if (OFstream_Dprimary__output()
== SIG) {
標準出力:stream:=
stream$primary_output() goto except0;
}
for i:int in int$from_to(1, 5) do
LV_X49383d603d504e4f =
標準出力!putl(”No. ” || retval_area[0];
i!unparse() || for (t1 = 1; t1 <= 5; t1++) {
” Hello World!”) OFint_Dunparse(t1);
end (略)
end start_up }
}
- 11. 整数型とビット数
データ システ char short int long long ポイ
モデル ム long ンタ
ILP32 Win32 8 16 32 32 64 32
LLP64 Win64 8 16 32 32 64 64
LP64 64bit 8 16 32 64 64 64
Linux
ILP64 8 16 64 64 64 64
ILP32…ポインタは32bit → long
LLP64、LP64、ILP64…ポインタは64bit → long long
- 13. ヘッダファイルを修正
プリプロセッサで判定 #if defined(__LP64__) ||
• 64ビット環境 defined(__LLP64__) ||
ポインタ(object型)を defined(__ILP64__)
long longで宣言(64bit) typedef long long object;
• 32ビット環境 #else
ポインタ(object型)を typedef long object;
longで宣言(32bit) #endif
ほぼこれだけで済みました
- 17. clu2cプロジェクト参加者
• 江原善(初代リーダー) プロジェクト終了後
• 木原誠司(コンパイラ実装) • 前田修吾さん
• 地引昌弘(デバッガなど) – Linuxへの移植およびPorts化
• 孫音(ライブラリ実装) • 東平洋史
• 牛嶋哲(二代目リーダー) – 前田さんの改造をCLU使用部
分に反映
– 日本語文字使用部分実装
– Cygwin、Ubuntu 9.04への移植
• 富沢伸行(ライブラリ実装) – 64bit環境への対応
• 浦野幹夫(ライブラリ実装)
• 野澤義雄(ライブラリ実装)
• 林智子(ライブラリ実装)
• 森村健司
– Human68k、MS-DOSへの移植
• 森玲人(デバッガ担当)
• 東平洋史(最適化など)
など
- 18. 参考文献
• 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