SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
Rubyの御先祖
 CLUのお話

clu2c動態保存整備士
     東平洋史
内容

• プログラミング言語CLUの特徴
• 東京工業大学情報科学科木村泉研究室とCLU
プログラミング言語CLUの特徴(1)
• MITのBarbara Liskov考案(1974)
• 強い型付
  • コンパイル時に全てのオブジェクトの型が決まる
  • でも、任意の場所で変数宣言可能
• 抽象型(クラスタ)を定義可能
  • 具体表現は外から隠蔽
  • 継承はできない
• 複数の戻り値が可能
  a:int, b: real := type$procedure(c, d)
• 変数の値は全てヒープ上のオブジェクト
  • Garbage Collection
プログラミング言語CLUの特徴(2)
        イテレータ
• for文から呼び出す                          • まつもとゆきひろ著「Rubyist
 for i:int in int$from_to(1,100) do     のための他言語探訪 【第 2
   ...                                  回】 CLU」より
 end                                    – イテレータの定義の仕方は驚く
                                          ほど Ruby に似ています。真似
                                          したんだから当然です。元々
• ユーザ定義可能                                 Ruby のブロックは CLU のイテ
 from_to=iter(first:int, last:int)        レータに似たものを実現するた
 yields(int)                              めにデザインされたからです。
   n:int := first
   while n <= last
    yield(n)
    n := n + 1
   end
  end from_to
プログラミング言語CLUの特徴(3)
        例外処理
• signal文で例外発生          • まつもとゆきひろ著「
                          Rubyist のための他言語
 signal 例外名[(値, …)]       探訪 【第 2 回】 CLU」よ
                          り
• except文で例外捕捉            – Ruby が例外処理を持つ
                            のは CLU の影響だと思
 例外を発生する文                   います。
  except when 例外1: 文…
    when 例外2:文…
    …
    others: 文…
  end
クラスタの例(int型のスタック)
intstack=cluster is              pop=proc(r: cvt)
             new, push, pop                 returns(int)
   rep=array[int]                           signals (empty)
   new=proc() returns(cvt)           return(rep$remh(r))
      return(rep$new())                 except when
   end new                                  bounds:
   push=proc(r: cvt, x: int)                  signal empty
      rep$addh(r, x)                    end
   end push                      end pop
                               end intstack
パラメータ機能の例
stack=cluster[t: type] is        pop=proc(r: cvt)
              new, push, pop                returns(t)
   rep=array[t]                             signals (empty)
   new=proc() returns(cvt)           return(rep$remh(r))
      return(rep$new())                 except when
   end new                                  bounds:
   push=proc(r: cvt, x: t)                   signal empty
      rep$addh(r, x)                    end
   end push                      end pop
                               end stack
東京工業大学木村泉研究室と
      プログラミング言語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のプログラムに変換
東京工業大学木村泉研究室と
      プログラミング言語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のプログラムに変換
CLU処理系clu2c
• CLUをCに変換する処理       • 以下のプログラムで構成
  系                   – clu2c
• CLUとCで実装               • CLUをCに変換するプログ
                           ラム
• GCは Boehm GC を使用       • MIT製処理系cluを改造
                                – 主にコード生成部を作成
                      – plink
                         • パラメータ機能の分析
                         • ユーザは直接呼び出さな
                           い。clulinkが呼びだす。
                      – clulink
                         • 基本ライブラリ、GCライブラ
                           リとリンクし、実行形式を生
                           成
clu2cプロジェクト参加者
•   江原善(初代リーダー)     • 森村健司
•   木原誠司(コンパイラ実装)    – Human68k、MS-DOSへの移植
•   地引昌弘(デバッガなど)    • 森玲人(デバッガ担当)
•   孫音(ライブラリ実装)     • 東平洋史(最適化など)
•   牛嶋哲(二代目リーダー)    など
    – 日本語文字使用部分実装   プロジェクト終了後
•   富沢伸行(ライブラリ実装)   • 前田修吾さん
•   浦野幹夫(ライブラリ実装)    – Linuxへの移植およびPorts化
•   野澤義雄(ライブラリ実装)   • 東平洋史
                     – 前田さんの改造をCLU使用部
•   林智子(ライブラリ実装)
                       分に反映
                     – Cygwin、Ubuntu 9.04への移植
clu2c現在の状態
開発自体は終了
• 木村泉先生退官により木村泉研究室消滅
• 東工大 理学部 情報科学科での公開は終了
• 現在は「動態保存」
 – 実用されなくなった機械類を、操作や運用が可能な
   状態で保存しておくこと。「デジタル大辞泉」より
• こちらでソースを公開中
 – http://touhei.sakura.ne.jp/clu2c/
 – http://sourceforge.jp/projects/clu2c/
clu2cに残る課題
いずれもプロジェクト終了後に発生したもの
• UTF対応
 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み
• 64ビットOSへの対応
 – 32ビットアプリケーションとしてなら動作する
 – 64ビットアプリケーションとして動作するかは未検証
   • Boehm GCは64ビットアプリケーションに対応済み
   • ポインタ関連の改修が必要か?
まとめ
• プログラミング言語CLU   • 東京工業大学木村泉研
  の特徴              究室とCLU
 – 強い型付け          – CLU処理系の移植
 – 抽象型            – CLUマシン
 – 複数の戻り値            • CLU言語を命令セットとす
                       るOS
 – イテレータ
                  – nclu
 – 例外処理
                     • 2バイト文字使用
 – パラメータ処理           • !記法
 などなど             – clu2c
                     • CLU→C→実行形式
                  – 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
• CLUとその仲間たち
  – 久野靖 著
  – 共立出版 bit 1989年5月号~12月号
  – http://www.oreilly.co.jp/books/9784873113630/#files
• 開発効率と移植性を重視したCLU言語処理系の作成
  – 江原善 著
  – 東京工業大学理工学研究科情報科学専攻 修士論文
  – http://touhei.sakura.ne.jp/clu2c/clu2c-thesis.tar.gz

Más contenido relacionado

La actualidad más candente

Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介mozk_
 
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Kohta Ishikawa
 
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)洋史 東平
 
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義するblackenedgold
 
Python vs ruby
Python vs rubyPython vs ruby
Python vs rubyosamunmun
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)MITSUNARI Shigeo
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用MITSUNARI Shigeo
 
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」Nagi Teramo
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 

La actualidad más candente (20)

Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
llvm入門
llvm入門llvm入門
llvm入門
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
 
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
 
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
 
Python vs ruby
Python vs rubyPython vs ruby
Python vs ruby
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
 
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 

Destacado

SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARK
SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARKSPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARK
SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARKTsuyoshi Horigome
 
Apresentação do Victoria Clube Residence
Apresentação do Victoria Clube ResidenceApresentação do Victoria Clube Residence
Apresentação do Victoria Clube ResidencePonto R Comunicação
 
Review of work in progress March 2012 - Part 6
Review of work in progress   March 2012 - Part 6Review of work in progress   March 2012 - Part 6
Review of work in progress March 2012 - Part 6Peter Missen
 
Almuerzo Con Arantxa
Almuerzo Con ArantxaAlmuerzo Con Arantxa
Almuerzo Con Arantxajazmin1210
 
Notebook de mimio 8
Notebook de mimio 8Notebook de mimio 8
Notebook de mimio 8nmoradell
 

Destacado (6)

SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARK
SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARKSPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARK
SPICE MODEL of 2SK2700 (Standard+BDS Model) in SPICE PARK
 
Guerrilla marketing
Guerrilla marketingGuerrilla marketing
Guerrilla marketing
 
Apresentação do Victoria Clube Residence
Apresentação do Victoria Clube ResidenceApresentação do Victoria Clube Residence
Apresentação do Victoria Clube Residence
 
Review of work in progress March 2012 - Part 6
Review of work in progress   March 2012 - Part 6Review of work in progress   March 2012 - Part 6
Review of work in progress March 2012 - Part 6
 
Almuerzo Con Arantxa
Almuerzo Con ArantxaAlmuerzo Con Arantxa
Almuerzo Con Arantxa
 
Notebook de mimio 8
Notebook de mimio 8Notebook de mimio 8
Notebook de mimio 8
 

Similar a Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)

clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)洋史 東平
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波洋史 東平
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPyKenta Oono
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Seiya Tokui
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化についてAimingStudy
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cythonAtsuo Ishimoto
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKazuki Fujikawa
 

Similar a Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料) (20)

clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPy
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular Properties
 

Más de 洋史 東平

Microsoft Excelでgoogle chromeを動かした話
Microsoft Excelでgoogle chromeを動かした話Microsoft Excelでgoogle chromeを動かした話
Microsoft Excelでgoogle chromeを動かした話洋史 東平
 
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~洋史 東平
 
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話洋史 東平
 
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~洋史 東平
 
大人の事情が自販機に超自然現象を起こした アマゾンライダー編
大人の事情が自販機に超自然現象を起こした アマゾンライダー編大人の事情が自販機に超自然現象を起こした アマゾンライダー編
大人の事情が自販機に超自然現象を起こした アマゾンライダー編洋史 東平
 
大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編洋史 東平
 
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン洋史 東平
 
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)洋史 東平
 
大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2洋史 東平
 
大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした洋史 東平
 
自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?洋史 東平
 
続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした洋史 東平
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした洋史 東平
 
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話洋史 東平
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話洋史 東平
 
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行洋史 東平
 
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみたFreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた洋史 東平
 
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみたSolaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた洋史 東平
 

Más de 洋史 東平 (20)

Microsoft Excelでgoogle chromeを動かした話
Microsoft Excelでgoogle chromeを動かした話Microsoft Excelでgoogle chromeを動かした話
Microsoft Excelでgoogle chromeを動かした話
 
関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~関東地方で北海道を味わおう~上京した皆様へ~
関東地方で北海道を味わおう~上京した皆様へ~
 
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話
 
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~
関東地方で北海道を味わおう ~北海道の宿がとれない皆様へ~
 
ぼくnmonです
ぼくnmonですぼくnmonです
ぼくnmonです
 
大人の事情が自販機に超自然現象を起こした アマゾンライダー編
大人の事情が自販機に超自然現象を起こした アマゾンライダー編大人の事情が自販機に超自然現象を起こした アマゾンライダー編
大人の事情が自販機に超自然現象を起こした アマゾンライダー編
 
大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編
 
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
 
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
 
大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2
 
大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした
 
自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?
 
続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした
 
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話
 
OSUnC川越2016
OSUnC川越2016OSUnC川越2016
OSUnC川越2016
 
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
 
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみたFreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
 
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみたSolaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
 

Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)

  • 3. プログラミング言語CLUの特徴(1) • MITのBarbara Liskov考案(1974) • 強い型付 • コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能 • 抽象型(クラスタ)を定義可能 • 具体表現は外から隠蔽 • 継承はできない • 複数の戻り値が可能 a:int, b: real := type$procedure(c, d) • 変数の値は全てヒープ上のオブジェクト • Garbage Collection
  • 4. プログラミング言語CLUの特徴(2) イテレータ • for文から呼び出す • まつもとゆきひろ著「Rubyist for i:int in int$from_to(1,100) do のための他言語探訪 【第 2 ... 回】 CLU」より end – イテレータの定義の仕方は驚く ほど Ruby に似ています。真似 したんだから当然です。元々 • ユーザ定義可能 Ruby のブロックは CLU のイテ from_to=iter(first:int, last:int) レータに似たものを実現するた yields(int) めにデザインされたからです。 n:int := first while n <= last yield(n) n := n + 1 end end from_to
  • 5. プログラミング言語CLUの特徴(3) 例外処理 • signal文で例外発生 • まつもとゆきひろ著「 Rubyist のための他言語 signal 例外名[(値, …)] 探訪 【第 2 回】 CLU」よ り • except文で例外捕捉 – Ruby が例外処理を持つ のは CLU の影響だと思 例外を発生する文 います。 except when 例外1: 文… when 例外2:文… … others: 文… end
  • 6. クラスタの例(int型のスタック) intstack=cluster is pop=proc(r: cvt) new, push, pop returns(int) rep=array[int] signals (empty) new=proc() returns(cvt) return(rep$remh(r)) return(rep$new()) except when end new bounds: push=proc(r: cvt, x: int) signal empty rep$addh(r, x) end end push end pop end intstack
  • 7. パラメータ機能の例 stack=cluster[t: type] is pop=proc(r: cvt) new, push, pop returns(t) rep=array[t] signals (empty) new=proc() returns(cvt) return(rep$remh(r)) return(rep$new()) except when end new bounds: push=proc(r: cvt, x: t) signal empty rep$addh(r, x) end end push end pop end stack
  • 8. 東京工業大学木村泉研究室と プログラミング言語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のプログラムに変換
  • 9. 東京工業大学木村泉研究室と プログラミング言語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のプログラムに変換
  • 10. CLU処理系clu2c • CLUをCに変換する処理 • 以下のプログラムで構成 系 – clu2c • CLUとCで実装 • CLUをCに変換するプログ ラム • GCは Boehm GC を使用 • MIT製処理系cluを改造 – 主にコード生成部を作成 – plink • パラメータ機能の分析 • ユーザは直接呼び出さな い。clulinkが呼びだす。 – clulink • 基本ライブラリ、GCライブラ リとリンクし、実行形式を生 成
  • 11. clu2cプロジェクト参加者 • 江原善(初代リーダー) • 森村健司 • 木原誠司(コンパイラ実装) – Human68k、MS-DOSへの移植 • 地引昌弘(デバッガなど) • 森玲人(デバッガ担当) • 孫音(ライブラリ実装) • 東平洋史(最適化など) • 牛嶋哲(二代目リーダー) など – 日本語文字使用部分実装 プロジェクト終了後 • 富沢伸行(ライブラリ実装) • 前田修吾さん • 浦野幹夫(ライブラリ実装) – Linuxへの移植およびPorts化 • 野澤義雄(ライブラリ実装) • 東平洋史 – 前田さんの改造をCLU使用部 • 林智子(ライブラリ実装) 分に反映 – Cygwin、Ubuntu 9.04への移植
  • 12. clu2c現在の状態 開発自体は終了 • 木村泉先生退官により木村泉研究室消滅 • 東工大 理学部 情報科学科での公開は終了 • 現在は「動態保存」 – 実用されなくなった機械類を、操作や運用が可能な 状態で保存しておくこと。「デジタル大辞泉」より • こちらでソースを公開中 – http://touhei.sakura.ne.jp/clu2c/ – http://sourceforge.jp/projects/clu2c/
  • 13. clu2cに残る課題 いずれもプロジェクト終了後に発生したもの • UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み • 64ビットOSへの対応 – 32ビットアプリケーションとしてなら動作する – 64ビットアプリケーションとして動作するかは未検証 • Boehm GCは64ビットアプリケーションに対応済み • ポインタ関連の改修が必要か?
  • 14. まとめ • プログラミング言語CLU • 東京工業大学木村泉研 の特徴 究室とCLU – 強い型付け – CLU処理系の移植 – 抽象型 – CLUマシン – 複数の戻り値 • CLU言語を命令セットとす るOS – イテレータ – nclu – 例外処理 • 2バイト文字使用 – パラメータ処理 • !記法 などなど – clu2c • CLU→C→実行形式 – CLUを授業に使用
  • 15. 参考文献 • 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