clu2cは64ビットOSで     も使えます  CLU動態保存整備士      東平洋史
CLU関連の私の略歴を1988年4月     東京工業大学第1類に入学1989年4月     東京工業大学理学部情報科学科に配属1990年4月     情報科学実験第二(木村泉先生担当)受講            →CLU、ncluと出会う19...
CLU(くるう)とは何ですか? プログラミング言語 • MITのBarbara Liskov考案(1974) ← 結構、古い • 強い型付   • コンパイル時に全てのオブジェクトの型が決まる   • でも、任意の場所で変数宣言可能 • 抽象型...
CLUのプログラム例start_up = proc()  stdout:stream:= stream$primary_output()  stream$putl(stdout, “Hello World!”)end start_up• 変数は...
clu2c(くるーつーしー)とは何ですか?プログラミング言語CLUの処理系• プログラミング言語CLUで書かれたプログラム  をCで書かれたプログラムに変換(CLU to C)• Cで書かれたプログラムを実行形式(a.out)に  コンパイル ...
稼働確認済みの環境• Cygwin              • CentOS 6.3• Ubuntu 12.04.1        – i386   – i386             • Fedora 17   – amd64      ...
デモ     次のどれかで動かしますよ• Cygwin            • OpenIndiana 151a5• Ubuntu 12.04.1        – i386  – i386            • Solaris 11/1...
clu2cの実行例CLUで書いたプログラム                           Cのプログラム(一部)赤字は2バイト文字使用部分                          int AFstart__up() {start...
方針32ビット環境でも64ビット環境でも吐くコードは同じ
どうやる?
整数型とビット数データ     システ     char short int long long   ポイモデル     ム                           long   ンタILP32   Win32   8    16 ...
なので
ヘッダファイルを修正プリプロセッサで判定              #if defined(__LP64__) ||• 64ビット環境                   defined(__LLP64__) ||  ポインタ(object型)...
clu2c現在の状態開発自体は終了• 木村泉先生退官により木村泉研究室消滅• 東工大 理学部 情報科学科での公開は終了  →フランスのFTPサーバからソースを回収• 現在は「動態保存」• こちらでソースを公開中  – http://touhei...
clu2cに残る課題いずれもプロジェクト終了後に発生したもの• UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み• ドキュメントの日本語化
clu2cプロジェクト参加者•   江原善(初代リーダー)             プロジェクト終了後•   木原誠司(コンパイラ実装)           • 前田修吾さん•   地引昌弘(デバッガなど)              – Lin...
参考文献• CLU Reference Manual  – Liskov, B., Atkinson, R.R., Bloom, T., Moss, E.B., Schaffert, R.    and Snyder, A. 著  – http...
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
Upcoming SlideShare
Loading in …5
×

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

950 views

Published on

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • 以外としられていないので、チューリング賞受賞者と宣伝?してあげてください。

    その上で:

    http://cacm.acm.org/magazines/2012/9/154567-in-honor-of-alan-turing/fulltext

    の辺りのページを良い加減に引用してRubyを弄ろう:-) といいつつ仕事ではRuby使ってますが…orz。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
950
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. clu2cは64ビットOSで も使えます CLU動態保存整備士 東平洋史
  2. 2. CLU関連の私の略歴を1988年4月 東京工業大学第1類に入学1989年4月 東京工業大学理学部情報科学科に配属1990年4月 情報科学実験第二(木村泉先生担当)受講 →CLU、ncluと出会う1991年4月 木村泉研究室に入る →clu2cの開発始まる1991年9月末 卒業論文のテーマ決まる1994年3月 東京工業大学大学院博士課程前期修了 →CLUから離れる2009年11月頃 京都御所へ行くついでにKOFへ行くことにし、 そういえばclu2cもオープンソースだよなあ、と 思い出す。→これが活動開始のきっかけ。
  3. 3. CLU(くるう)とは何ですか? プログラミング言語 • MITのBarbara Liskov考案(1974) ← 結構、古い • 強い型付 • コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能 • 抽象型(cluster)を定義可能 • 継承はできない • 複数の戻り値が可能 → Rubyもパクった取り入れた a:int, b: real := type$procedure(c, d) • 変数の値は全てヒープ上のオブジェクト • Garbage Collection• イテレータ → Rubyのブロックになった• 例外処理 → Rubyもパクった取り入れたいわばRubyの先祖です
  4. 4. CLUのプログラム例start_up = proc() stdout:stream:= stream$primary_output() stream$putl(stdout, “Hello World!”)end start_up• 変数は使い始める場所で宣言 – 変数名: 型名 – 変数名: 型名 := 初期設定値• 型$手続き名 という形で手続きを呼び出し
  5. 5. clu2c(くるーつーしー)とは何ですか?プログラミング言語CLUの処理系• プログラミング言語CLUで書かれたプログラム をCで書かれたプログラムに変換(CLU to C)• Cで書かれたプログラムを実行形式(a.out)に コンパイル CLUの clu2c Cのプログラム プログラム 実行形式 clulink a.out ライブラリ
  6. 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. 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. 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 } }
  9. 9. 方針32ビット環境でも64ビット環境でも吐くコードは同じ
  10. 10. どうやる?
  11. 11. 整数型とビット数データ システ char short int long long ポイモデル ム long ンタILP32 Win32 8 16 32 32 64 32LLP64 Win64 8 16 32 32 64 64LP64 64bit 8 16 32 64 64 64 LinuxILP64 8 16 64 64 64 64ILP32…ポインタは32bit → longLLP64、LP64、ILP64…ポインタは64bit → long long
  12. 12. なので
  13. 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 ほぼこれだけで済みました
  14. 14. clu2c現在の状態開発自体は終了• 木村泉先生退官により木村泉研究室消滅• 東工大 理学部 情報科学科での公開は終了 →フランスのFTPサーバからソースを回収• 現在は「動態保存」• こちらでソースを公開中 – http://touhei.sakura.ne.jp/clu2c/ – http://sourceforge.jp/projects/clu2c/
  15. 15. clu2cに残る課題いずれもプロジェクト終了後に発生したもの• UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み• ドキュメントの日本語化
  16. 16. clu2cプロジェクト参加者• 江原善(初代リーダー) プロジェクト終了後• 木原誠司(コンパイラ実装) • 前田修吾さん• 地引昌弘(デバッガなど) – Linuxへの移植およびPorts化• 孫音(ライブラリ実装) • 東平洋史• 牛嶋哲(二代目リーダー) – 前田さんの改造をCLU使用部 分に反映 – 日本語文字使用部分実装 – Cygwin、Ubuntu 9.04への移植• 富沢伸行(ライブラリ実装) – 64bit環境への対応• 浦野幹夫(ライブラリ実装)• 野澤義雄(ライブラリ実装)• 林智子(ライブラリ実装)• 森村健司 – Human68k、MS-DOSへの移植• 森玲人(デバッガ担当)• 東平洋史(最適化など)など
  17. 17. 参考文献• 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

×