Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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用資料)

1,067 views

Published on

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

    その上で:

    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

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

×