SlideShare a Scribd company logo
1 of 17
Download to read offline
Rubyの御先祖
CLU(くるう)のお話

 CLU動態保存整備士
    東平洋史
内容
•プログラミング言語CLUの特徴
•CLUの処理系 clu2c の特徴と実演
CLUのプログラム例
start_up = proc()
  stdout:stream:= stream$primary_output()
  stream$putl(stdout, “Hello World!”)
end start_up

•変数は使いたい時に宣言
•プロシージャ―の呼び出し方
  type$procedure
プログラミング言語CLUの特徴(1)

• MITのBarbara Liskov考案(1974)
• 強い型付
  • コンパイル時に全てのオブジェクトの型が決まる
  • でも、任意の場所で変数宣言可能
• プロシージャを定義可能
  複数の戻り値が可能
  a:int, b: real := type$procedure(c, d)
• 変数の値は全てヒープ上のオブジェクト
  • Garbage Collection
プログラミング言語CLUの特徴(2)
• イテレータを定義可能
 • 繰り返しを抽象化
 • for文で使用
 • 複数の値を引き渡し可能
• 抽象型(クラスタ)を定義可能
 • 属性、プロシージャ、イテレータを持つ
 • 具体表現は外から隠蔽
 • 継承はできない
• 例外処理
• 伸縮自在な配列
• パラメータ機能
イテレータ
• for文から呼び出す  呼び出し元
• ユーザ定義可能     for i:int in int$from_to(1,100) do          1
                ...
• 呼び出しの流れ     end
1. 初期呼び出し                                 イテレータ
2. イテレータの初期設定                             from_to=iter(first:int, last:int) yields(int)
                                     3     n:int := first
3. 値を引き渡す。            5
                                           while n <= last
4. ループ本体を実行する。                               yield(n)
                                             n := n + 1
5. 次の値を貰いに行く。                              end
                                                     end from_to
• まつもとゆきひろ氏が
  Rubyでブロックへ拡張
CLUの基本型
• int     整数            型の種類 書き換え 書き換え
• real    実数                    可能     不能
• bool 論理               配列   array  sequence
• char 文字               構造体  record struct
• string 文字列            共用体  oneof  variant
• proctype プロシージャ
• Itertype イテレータ    •   書き換え可能
                        • オブジェクトの状態が変化するもの
• any               •   書き換え不能
• null                  • オブジェクトの状態が変化しないもの
クラスタの例

stack=cluster[t: type] is    pop=proc(r: cvt) returns(t) signals (empty)
            new, push, pop      return(rep$remh(r))
   rep=array[t]                    except when
   new=proc() returns(cvt)            bounds:
     return(rep$new())                 signal empty
   end new                         end
   push=proc(r: cvt, x: t)   end pop
     rep$addh(r, x)        end stack
   end push
東京工業大学木村泉研究室と
           プログラミング言語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を改造
                                                   • 主にコード生成部を作成
                                            • clulink
 CLUの   clu2c     Cの                           • 実行形式を生成
プログラム           プログラム
                                               • Cコンパイラとリンカ
                           clulink   実行形式   • plink
                ライブラリ
                                               • パラメータ機能の分析
                                               • ユーザは直接呼び出さない。
                Boehm GC                         clulinkが呼びだす。
動作確認OS(一部)
• Cygwin                        • Boehm GCが動作する環境であ
• Ubuntu 12.04.1(i386、amd64)      れば動作可能
• OpenSUSE 12.2 (32bit、64bit)
• CentOS 6.3(i386)
• Fedora 17(i386)
• Solaris 11/11 (32bit、64bit)
• OpenIndiana 151a5
• FreeBSD 9.0(i386)
• NetBSD 5.1.2(i386)
clu2cプロジェクト参加者
• 江原善(初代リーダー)     • 野澤義雄(ライブラリ実装)           プロジェクト終了後
• 木原誠司(コンパイラ実装)   • 林智子(ライブラリ実装)            • 前田修吾さん
• 地引昌弘(デバッガなど)    • 森村健司                      • Linuxへの移植およびPorts化

• 孫音(ライブラリ実装)       • Human68k、MS-DOSへの移植   • 東平洋史
                  • 森玲人(デバッガ担当)               • 前田さんの改造をCLU使用部
• 牛嶋哲(二代目リーダー)                                  分に反映
  • 日本語文字使用部分実装   • 東平洋史(最適化など)               • Cygwin、Ubuntu 9.04への移植
• 富沢伸行(ライブラリ実装)   など                          • 64bit環境対応

• 浦野幹夫(ライブラリ実装)   以上、東京工業大学理学部情
                  報科学科木村泉研究室在籍者
clu2c現在の状態
開発自体は終了
• 木村泉先生退官により木村泉研究室消滅
• 東工大 理学部 情報科学科での公開は終了
• 現在は「動態保存」
 • 実用されなくなった機械類を、操作や運用が可能な状
   態で保存しておくこと。「デジタル大辞泉」より
• こちらでソースを公開中
 • http://touhei.sakura.ne.jp/clu2c/
 • http://sourceforge.jp/projects/clu2c/
clu2cに残る課題
いずれもプロジェクト終了後に発生したもの
• UTF対応
 • ISO-2022-JP、Shift_JIS、EUC-JPには対応済み
 • 文字、文字列のリテラル
 • 識別子
• ユーザーインタフェースの多言語化
 • 現状は英語のみ
まとめ
• プログラミング言語CLUの特徴 • 東京工業大学木村泉研究室とCLU
 • 強い型付け          • CLU処理系の移植
 • 抽象型            • CLUマシン
 • 複数の戻り値            • CLU言語を命令セットとするOS
 • イテレータ          • nclu
 • 例外処理              • 2バイト文字使用
                     • !記法
 • パラメータ処理
 などなど             • clu2c
                     • CLU→C→実行形式
                  • CLUを授業に使用
参考文献(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
  • Amazonでも書籍購入可能
• CLUとその仲間たち
  • 久野靖 著
  • 共立出版 bit 1989年5月号~12月号 に連載された雑誌記事
  • http://www.oreilly.co.jp/books/9784873113630/#files
参考文献(clu2c関係)
• 開発効率と移植性を重視したCLU言語処理系の作成
 • 江原善 著
 • 東京工業大学理工学研究科情報科学専攻 修士論文
 • http://touhei.sakura.ne.jp/clu2c/clu2c-thesis.tar.gz
    • TeX → Postscript 形式で公開
• ポータブルな言語処理系の日本語化方式
 • 牛嶋 哲 著
 • 情報処理学会研究報告. PRO, [プログラミング] 96(58), 13-18, 1996-05-31
 • http://ci.nii.ac.jp/naid/110002929515

More Related Content

What's hot

lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしMasaki Matsushita
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))Susisu
 
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common LispによるディープラーニングLispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common LispによるディープラーニングSatoshi imai
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fundeflis
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlMasayuki Nii
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cythonAtsuo Ishimoto
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2Kuniaki Igarashi
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
Look at-the-lisper
Look at-the-lisperLook at-the-lisper
Look at-the-lisperhome
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Kazuki Ohta
 
SMCTC ライブラリの使用方法
SMCTC ライブラリの使用方法SMCTC ライブラリの使用方法
SMCTC ライブラリの使用方法Satoshi Minakuchi
 
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかOedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかMinero Aoki
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving processTakuya ASADA
 
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)seichi23
 

What's hot (20)

lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなしRubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))(call/cc (lambda (cont) (cont 知見)))
(call/cc (lambda (cont) (cont 知見)))
 
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common LispによるディープラーニングLispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fun
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Look at-the-lisper
Look at-the-lisperLook at-the-lisper
Look at-the-lisper
 
Clojure
ClojureClojure
Clojure
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
 
SMCTC ライブラリの使用方法
SMCTC ライブラリの使用方法SMCTC ライブラリの使用方法
SMCTC ライブラリの使用方法
 
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうかOedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving process
 
これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)これだけMakefile (Basics of makefile)
これだけMakefile (Basics of makefile)
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 

Viewers also liked

Bluefin mit tech-review
Bluefin mit tech-reviewBluefin mit tech-review
Bluefin mit tech-reviewweerawatplc
 
Média sociaux risques ou opportunités pour des entreprises 2.0
Média sociaux risques ou opportunités pour des entreprises 2.0Média sociaux risques ou opportunités pour des entreprises 2.0
Média sociaux risques ou opportunités pour des entreprises 2.0Prof. Jacques Folon (Ph.D)
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Kiwamu Okabe
 
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)洋史 東平
 
Urban Riders Ultimate Guide to Riding to Work!
Urban Riders Ultimate Guide to Riding to Work!Urban Riders Ultimate Guide to Riding to Work!
Urban Riders Ultimate Guide to Riding to Work!Susan Stokhof
 
Alpha script George Delaportas
Alpha script George DelaportasAlpha script George Delaportas
Alpha script George DelaportasIgnite_Athens
 
Office 365版Lync Onlineの技術概要
Office 365版Lync Onlineの技術概要Office 365版Lync Onlineの技術概要
Office 365版Lync Onlineの技術概要kumo2010
 
T mobile t959-vibrant_spanish_user_guide
T mobile t959-vibrant_spanish_user_guideT mobile t959-vibrant_spanish_user_guide
T mobile t959-vibrant_spanish_user_guidecmade123
 
Save The Planet By Jen Wong Nov 24
Save The Planet By Jen Wong Nov 24Save The Planet By Jen Wong Nov 24
Save The Planet By Jen Wong Nov 24wonkajenn
 
Looking Behind. And ahead.
Looking Behind. And ahead.Looking Behind. And ahead.
Looking Behind. And ahead.Sarup Banskota
 
データ圧縮
データ圧縮データ圧縮
データ圧縮Joe Suzuki
 
Video collaboration - handsets, laptops, telepresence and beyond
Video collaboration - handsets, laptops, telepresence and beyondVideo collaboration - handsets, laptops, telepresence and beyond
Video collaboration - handsets, laptops, telepresence and beyondClaude Florin
 
Feral Management An Innovative Alternative
Feral Management An Innovative AlternativeFeral Management An Innovative Alternative
Feral Management An Innovative Alternativetysonsuepat
 
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)洋史 東平
 

Viewers also liked (20)

Bluefin mit tech-review
Bluefin mit tech-reviewBluefin mit tech-review
Bluefin mit tech-review
 
Média sociaux risques ou opportunités pour des entreprises 2.0
Média sociaux risques ou opportunités pour des entreprises 2.0Média sociaux risques ou opportunités pour des entreprises 2.0
Média sociaux risques ou opportunités pour des entreprises 2.0
 
data inggris
data inggrisdata inggris
data inggris
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)
OSUNCが終わったら帰りはお風呂に入りましょう(Open Source UN-Conference 川越 発表資料)
 
Urban Riders Ultimate Guide to Riding to Work!
Urban Riders Ultimate Guide to Riding to Work!Urban Riders Ultimate Guide to Riding to Work!
Urban Riders Ultimate Guide to Riding to Work!
 
Alpha script George Delaportas
Alpha script George DelaportasAlpha script George Delaportas
Alpha script George Delaportas
 
Office 365版Lync Onlineの技術概要
Office 365版Lync Onlineの技術概要Office 365版Lync Onlineの技術概要
Office 365版Lync Onlineの技術概要
 
Medo dos outros desde criança
Medo dos outros desde criançaMedo dos outros desde criança
Medo dos outros desde criança
 
T mobile t959-vibrant_spanish_user_guide
T mobile t959-vibrant_spanish_user_guideT mobile t959-vibrant_spanish_user_guide
T mobile t959-vibrant_spanish_user_guide
 
Save The Planet By Jen Wong Nov 24
Save The Planet By Jen Wong Nov 24Save The Planet By Jen Wong Nov 24
Save The Planet By Jen Wong Nov 24
 
Looking Behind. And ahead.
Looking Behind. And ahead.Looking Behind. And ahead.
Looking Behind. And ahead.
 
データ圧縮
データ圧縮データ圧縮
データ圧縮
 
Just as I am
Just as I amJust as I am
Just as I am
 
Glossary
GlossaryGlossary
Glossary
 
Video collaboration - handsets, laptops, telepresence and beyond
Video collaboration - handsets, laptops, telepresence and beyondVideo collaboration - handsets, laptops, telepresence and beyond
Video collaboration - handsets, laptops, telepresence and beyond
 
Keynote by Jane Wells
Keynote by Jane WellsKeynote by Jane Wells
Keynote by Jane Wells
 
Feral Management An Innovative Alternative
Feral Management An Innovative AlternativeFeral Management An Innovative Alternative
Feral Management An Innovative Alternative
 
Angel 101 - The Fundamentals of Angel Investing
Angel 101 - The Fundamentals of Angel InvestingAngel 101 - The Fundamentals of Angel Investing
Angel 101 - The Fundamentals of Angel Investing
 
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)
Software Freedom Day 2012をみんなで祝おう & 図形の問題 出題編(OSC2012 Shimane LT資料)
 

Similar to Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)

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用資料)洋史 東平
 
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)洋史 東平
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波洋史 東平
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
study on safety and security ccoding standards
study on safety and security ccoding standardsstudy on safety and security ccoding standards
study on safety and security ccoding standardsKiyoshi Ogawa
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
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
 
【関東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
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPyKenta Oono
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMatYasuhiro Yoshimura
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装bobuhiro11
 
Eclipse Modeling QVT
Eclipse Modeling QVTEclipse Modeling QVT
Eclipse Modeling QVTAkira Tanaka
 
Kubeflowで何ができて何ができないのか #DEvFest18
Kubeflowで何ができて何ができないのか #DEvFest18Kubeflowで何ができて何ができないのか #DEvFest18
Kubeflowで何ができて何ができないのか #DEvFest18Shunya Ueta
 

Similar to Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料) (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用資料)
 
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
clu2cの動態保存とはなんでしょう?(東海道らぐ 初オフ会 in オープンソースカンファレンス 2012 Kansai@Kyoto 資料)
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
study on safety and security ccoding standards
study on safety and security ccoding standardsstudy on safety and security ccoding standards
study on safety and security ccoding standards
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)Chainer/CuPy v5 and Future (Japanese)
Chainer/CuPy v5 and Future (Japanese)
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPy
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
PCL
PCLPCL
PCL
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装
 
Eclipse Modeling QVT
Eclipse Modeling QVTEclipse Modeling QVT
Eclipse Modeling QVT
 
Kubeflowで何ができて何ができないのか #DEvFest18
Kubeflowで何ができて何ができないのか #DEvFest18Kubeflowで何ができて何ができないのか #DEvFest18
Kubeflowで何ができて何ができないのか #DEvFest18
 

More from 洋史 東平

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

More from 洋史 東平 (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(くるう)のお話(OSC2013 Hamamatsu 発表資料)

  • 3. CLUのプログラム例 start_up = proc() stdout:stream:= stream$primary_output() stream$putl(stdout, “Hello World!”) end start_up •変数は使いたい時に宣言 •プロシージャ―の呼び出し方 type$procedure
  • 4. プログラミング言語CLUの特徴(1) • MITのBarbara Liskov考案(1974) • 強い型付 • コンパイル時に全てのオブジェクトの型が決まる • でも、任意の場所で変数宣言可能 • プロシージャを定義可能 複数の戻り値が可能 a:int, b: real := type$procedure(c, d) • 変数の値は全てヒープ上のオブジェクト • Garbage Collection
  • 5. プログラミング言語CLUの特徴(2) • イテレータを定義可能 • 繰り返しを抽象化 • for文で使用 • 複数の値を引き渡し可能 • 抽象型(クラスタ)を定義可能 • 属性、プロシージャ、イテレータを持つ • 具体表現は外から隠蔽 • 継承はできない • 例外処理 • 伸縮自在な配列 • パラメータ機能
  • 6. イテレータ • for文から呼び出す 呼び出し元 • ユーザ定義可能 for i:int in int$from_to(1,100) do 1 ... • 呼び出しの流れ end 1. 初期呼び出し イテレータ 2. イテレータの初期設定 from_to=iter(first:int, last:int) yields(int) 3 n:int := first 3. 値を引き渡す。 5 while n <= last 4. ループ本体を実行する。 yield(n) n := n + 1 5. 次の値を貰いに行く。 end end from_to • まつもとゆきひろ氏が Rubyでブロックへ拡張
  • 7. CLUの基本型 • int 整数 型の種類 書き換え 書き換え • real 実数 可能 不能 • bool 論理 配列 array sequence • char 文字 構造体 record struct • string 文字列 共用体 oneof variant • proctype プロシージャ • Itertype イテレータ • 書き換え可能 • オブジェクトの状態が変化するもの • any • 書き換え不能 • null • オブジェクトの状態が変化しないもの
  • 8. クラスタの例 stack=cluster[t: type] is pop=proc(r: cvt) returns(t) signals (empty) new, push, pop return(rep$remh(r)) rep=array[t] except when new=proc() returns(cvt) bounds: return(rep$new()) signal empty end new end push=proc(r: cvt, x: t) end pop rep$addh(r, x) end stack end push
  • 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を改造 • 主にコード生成部を作成 • clulink CLUの clu2c Cの • 実行形式を生成 プログラム プログラム • Cコンパイラとリンカ clulink 実行形式 • plink ライブラリ • パラメータ機能の分析 • ユーザは直接呼び出さない。 Boehm GC clulinkが呼びだす。
  • 11. 動作確認OS(一部) • Cygwin • Boehm GCが動作する環境であ • Ubuntu 12.04.1(i386、amd64) れば動作可能 • OpenSUSE 12.2 (32bit、64bit) • CentOS 6.3(i386) • Fedora 17(i386) • Solaris 11/11 (32bit、64bit) • OpenIndiana 151a5 • FreeBSD 9.0(i386) • NetBSD 5.1.2(i386)
  • 12. clu2cプロジェクト参加者 • 江原善(初代リーダー) • 野澤義雄(ライブラリ実装) プロジェクト終了後 • 木原誠司(コンパイラ実装) • 林智子(ライブラリ実装) • 前田修吾さん • 地引昌弘(デバッガなど) • 森村健司 • Linuxへの移植およびPorts化 • 孫音(ライブラリ実装) • Human68k、MS-DOSへの移植 • 東平洋史 • 森玲人(デバッガ担当) • 前田さんの改造をCLU使用部 • 牛嶋哲(二代目リーダー) 分に反映 • 日本語文字使用部分実装 • 東平洋史(最適化など) • Cygwin、Ubuntu 9.04への移植 • 富沢伸行(ライブラリ実装) など • 64bit環境対応 • 浦野幹夫(ライブラリ実装) 以上、東京工業大学理学部情 報科学科木村泉研究室在籍者
  • 13. clu2c現在の状態 開発自体は終了 • 木村泉先生退官により木村泉研究室消滅 • 東工大 理学部 情報科学科での公開は終了 • 現在は「動態保存」 • 実用されなくなった機械類を、操作や運用が可能な状 態で保存しておくこと。「デジタル大辞泉」より • こちらでソースを公開中 • http://touhei.sakura.ne.jp/clu2c/ • http://sourceforge.jp/projects/clu2c/
  • 14. clu2cに残る課題 いずれもプロジェクト終了後に発生したもの • UTF対応 • ISO-2022-JP、Shift_JIS、EUC-JPには対応済み • 文字、文字列のリテラル • 識別子 • ユーザーインタフェースの多言語化 • 現状は英語のみ
  • 15. まとめ • プログラミング言語CLUの特徴 • 東京工業大学木村泉研究室とCLU • 強い型付け • CLU処理系の移植 • 抽象型 • CLUマシン • 複数の戻り値 • CLU言語を命令セットとするOS • イテレータ • nclu • 例外処理 • 2バイト文字使用 • !記法 • パラメータ処理 などなど • clu2c • CLU→C→実行形式 • CLUを授業に使用
  • 16. 参考文献(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 • Amazonでも書籍購入可能 • CLUとその仲間たち • 久野靖 著 • 共立出版 bit 1989年5月号~12月号 に連載された雑誌記事 • http://www.oreilly.co.jp/books/9784873113630/#files
  • 17. 参考文献(clu2c関係) • 開発効率と移植性を重視したCLU言語処理系の作成 • 江原善 著 • 東京工業大学理工学研究科情報科学専攻 修士論文 • http://touhei.sakura.ne.jp/clu2c/clu2c-thesis.tar.gz • TeX → Postscript 形式で公開 • ポータブルな言語処理系の日本語化方式 • 牛嶋 哲 著 • 情報処理学会研究報告. PRO, [プログラミング] 96(58), 13-18, 1996-05-31 • http://ci.nii.ac.jp/naid/110002929515