SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
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
例外処理
• signal文で例外発生          • まつもとゆきひろ著「
                          Rubyist のための他言語
 signal 例外名[(値, …)]       探訪 【第 2 回】 CLU」よ
                          り
• except文で例外捕捉            – Ruby が例外処理を持つ
                            のは CLU の影響だと思
 例外を発生する文                   います。
  except when 例外1: 文…
    when 例外2:文…
    …
    others: 文…
  end
Syntax Sugar(構文糖)

任意の型(クラスタでも)で次の表現を使用可能
↓構文糖の一部
•type$add(a, b) ⇔ a:type + b:type
•type$sub(a, b) ⇔ a:type - b:type
•type$mul(a, b) ⇔ a:type * b:type
•type$div(a, b) ⇔ a:type / b:type
•type$get_name(a) ⇔ a.name
•type$set_name(a, 式) ⇔ a.name := 式
伸縮自在な配列array型

      B C    D E ← F   後ろに追加
         ↓
  A → B C    D E F     先頭に追加
         ↓
    A B C    D E F → F 後ろから削除
         ↓
A ← A B C    D E       先頭から削除
         ↓
      B C    D E
書き換え可能な型と書き換え不能な型

• 例:配列
 – array
    • 要素の書き換え、参照が可能。
    • 要素の追加と削除も可能。
    • 動的に値が変わる変数に使用
 – sequence
    • 要素の書き換えは不能。参照のみ可能。
    • 要素の追加と要素の削除を行なう場合はオブジェクトを
      作りなおす。
    • 値が変わらない静的な変数に使用
クラスタの例(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のプログラム例
start_up = proc()
   stdout:stream:= stream$primary_output()
   stream$putl(stdout, “Hello World!”)
end start_up
東京工業大学木村泉研究室と
      プログラミング言語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マシン
• CLUで実装
 – 一部、アセンブラを使用
• CLUの特徴(特にデータ抽象型)を活かした実装
• 単一言語系
 – 走らせるプログラムはCLUで記述したもののみ
• ダイナミックリンカ使用
• 文字は16ビットに統一
 – 英字も日本語文字なども使用可能
CLUマシンプロジェクト参加者
•   久野靖(指導者)      • 関啓一
•   暦本純一(オブザーバ)   • 吉屋英二
•   鈴木友峰          • 藤崎智宏
•   荒井俊史          • 伊藤義行
•   中村秀男          • 木原誠司
•   佐藤直樹          • 江原善
•   二瓶勝敏          • 地引昌弘
•   明石修           • 富沢信行
•   根岸康           • 牛嶋哲
                  など
nclu
 処理系CLUの拡張(new CLU? 日本語CLU?)
•MIT製処理系cluを改造   •!記法
•2バイト文字使用可能       – 暦本純一氏考案の構文
 – 木村泉先生の要望         糖
                    a!proc(b) ⇔ type$proc(a, b)
 – 識別子に多バイト文字使
   用              – .はすでに使われていた
                    a.name := b ⇔
 – 演算子にも多バイト文字
                           type$set_name(a, b)
   使用
                    a.name ⇔ type$get_name(a)
                  – 久野靖氏「CLUは立派な
                    オブジェクト指向言語に
                    昇格」←少し言い過ぎ
                    (^^;
ncluを使ったプログラムの例
赤字は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
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

Mais conteúdo relacionado

Mais procurados

Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cythonfuzzysphere
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806swkagami
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10Kenta Hattori
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idiomsfimbul
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用MITSUNARI Shigeo
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxpsMITSUNARI Shigeo
 
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)Shuyo Nakatani
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
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
 

Mais procurados (20)

Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
Emcjp item33,34
Emcjp item33,34Emcjp item33,34
Emcjp item33,34
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
constexpr idioms
constexpr idiomsconstexpr idioms
constexpr idioms
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
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さんの代理アップ)
 

Semelhante a Rubyの御先祖CLUのお話(原本)

clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)洋史 東平
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
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
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPyKenta Oono
 
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))Susisu
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
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
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波洋史 東平
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法Yosuke Onoue
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化についてAimingStudy
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜Hiromi Ishii
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKazuki Fujikawa
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
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
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 

Semelhante a Rubyの御先祖CLUのお話(原本) (20)

clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPy
 
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
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の嬌声が聞こえてきそうだ
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular Properties
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 

Mais 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を動かしてみた洋史 東平
 

Mais 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のお話(原本)

  • 3. プログラミング言語CLUの特徴(1) • MITのBarbara Liskov考案(1974) • 強い型付 • コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能 • 抽象型(クラスタ)を定義可能 • 具体表現は外から隠蔽 • 継承はできない • 複数の戻り値が可能 a:int, b: real := type$procedure(c, d) • 変数の値は全てヒープ上のオブジェクト • Garbage Collection
  • 4. プログラミング言語CLUの特徴(2) • イテレータ • 例外処理 • 伸縮自在な配列 • 書き換え可能なオブジェクト • 書き換え不能なオブジェクト • パラメータ機能
  • 5. イテレータ • 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
  • 6. 例外処理 • signal文で例外発生 • まつもとゆきひろ著「 Rubyist のための他言語 signal 例外名[(値, …)] 探訪 【第 2 回】 CLU」よ り • except文で例外捕捉 – Ruby が例外処理を持つ のは CLU の影響だと思 例外を発生する文 います。 except when 例外1: 文… when 例外2:文… … others: 文… end
  • 7. Syntax Sugar(構文糖) 任意の型(クラスタでも)で次の表現を使用可能 ↓構文糖の一部 •type$add(a, b) ⇔ a:type + b:type •type$sub(a, b) ⇔ a:type - b:type •type$mul(a, b) ⇔ a:type * b:type •type$div(a, b) ⇔ a:type / b:type •type$get_name(a) ⇔ a.name •type$set_name(a, 式) ⇔ a.name := 式
  • 8. 伸縮自在な配列array型 B C D E ← F 後ろに追加 ↓ A → B C D E F 先頭に追加 ↓ A B C D E F → F 後ろから削除 ↓ A ← A B C D E 先頭から削除 ↓ B C D E
  • 9. 書き換え可能な型と書き換え不能な型 • 例:配列 – array • 要素の書き換え、参照が可能。 • 要素の追加と削除も可能。 • 動的に値が変わる変数に使用 – sequence • 要素の書き換えは不能。参照のみ可能。 • 要素の追加と要素の削除を行なう場合はオブジェクトを 作りなおす。 • 値が変わらない静的な変数に使用
  • 10. クラスタの例(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
  • 11. パラメータ機能の例 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
  • 12. CLUのプログラム例 start_up = proc() stdout:stream:= stream$primary_output() stream$putl(stdout, “Hello World!”) end start_up
  • 13. 東京工業大学木村泉研究室と プログラミング言語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のプログラムに変換
  • 14. CLUマシン • CLUで実装 – 一部、アセンブラを使用 • CLUの特徴(特にデータ抽象型)を活かした実装 • 単一言語系 – 走らせるプログラムはCLUで記述したもののみ • ダイナミックリンカ使用 • 文字は16ビットに統一 – 英字も日本語文字なども使用可能
  • 15. CLUマシンプロジェクト参加者 • 久野靖(指導者) • 関啓一 • 暦本純一(オブザーバ) • 吉屋英二 • 鈴木友峰 • 藤崎智宏 • 荒井俊史 • 伊藤義行 • 中村秀男 • 木原誠司 • 佐藤直樹 • 江原善 • 二瓶勝敏 • 地引昌弘 • 明石修 • 富沢信行 • 根岸康 • 牛嶋哲 など
  • 16. nclu 処理系CLUの拡張(new CLU? 日本語CLU?) •MIT製処理系cluを改造 •!記法 •2バイト文字使用可能 – 暦本純一氏考案の構文 – 木村泉先生の要望 糖 a!proc(b) ⇔ type$proc(a, b) – 識別子に多バイト文字使 用 – .はすでに使われていた a.name := b ⇔ – 演算子にも多バイト文字 type$set_name(a, b) 使用 a.name ⇔ type$get_name(a) – 久野靖氏「CLUは立派な オブジェクト指向言語に 昇格」←少し言い過ぎ (^^;
  • 17. ncluを使ったプログラムの例 赤字は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
  • 18. CLU処理系clu2c • CLUをCに変換する処理 • 以下のプログラムで構成 系 – clu2c • CLUとCで実装 • CLUをCに変換するプログ ラム • GCは Boehm GC を使用 • MIT製処理系cluを改造 – 主にコード生成部を作成 – plink • パラメータ機能の分析 • ユーザは直接呼び出さな い。clulinkが呼びだす。 – clulink • 基本ライブラリ、GCライブラ リとリンクし、実行形式を生 成
  • 19. clu2cプロジェクト参加者 • 江原善(初代リーダー) • 森村健司 • 木原誠司(コンパイラ実装) – Human68k、MS-DOSへの移植 • 地引昌弘(デバッガなど) • 森玲人(デバッガ担当) • 孫音(ライブラリ実装) • 東平洋史(最適化など) • 牛嶋哲(二代目リーダー) など – 日本語文字使用部分実装 プロジェクト終了後 • 富沢伸行(ライブラリ実装) • 前田修吾さん • 浦野幹夫(ライブラリ実装) – Linuxへの移植およびPorts化 • 野澤義雄(ライブラリ実装) • 東平洋史 – 前田さんの改造をCLU使用部 • 林智子(ライブラリ実装) 分に反映 – Cygwin、Ubuntu 9.04への移植
  • 20. clu2c現在の状態 開発自体は終了 • 木村泉先生退官により木村泉研究室消滅 • 東工大 理学部 情報科学科での公開は終了 • 現在は「動態保存」 – 実用されなくなった機械類を、操作や運用が可能な 状態で保存しておくこと。「デジタル大辞泉」より • こちらでソースを公開中 – http://touhei.sakura.ne.jp/clu2c/ – http://sourceforge.jp/projects/clu2c/
  • 21. clu2cに残る課題 いずれもプロジェクト終了後に発生したもの • UTF対応 – ISO-2022-JP、Shift_JIS、EUC-JPには対応済み • 64ビットOSへの対応 – 32ビットアプリケーションとしてなら動作する – 64ビットアプリケーションとして動作するかは未検証 • Boehm GCは64ビットアプリケーションに対応済み • ポインタ関連の改修が必要か?
  • 22. まとめ • プログラミング言語CLU • 東京工業大学木村泉研 の特徴 究室とCLU – 強い型付け – CLU処理系の移植 – 抽象型 – CLUマシン – 複数の戻り値 • CLU言語を命令セットとす るOS – イテレータ – nclu – 例外処理 • 2バイト文字使用 – パラメータ処理 • !記法 などなど – clu2c • CLU→C→実行形式 – CLUを授業に使用
  • 23. 参考文献 • 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