■
RubyKaigi 2日目: Comming soon...
Future
未来について話します
- Ruby conf 2001
- Virtual Machine -> 1.9 2007
Yet anotherとつけたものは生き残る。Rubyもご多分にもれず
- Ruby conf 2003
- Local variable scope
- Multiple assignment -> 1.9 2007
- Method visibility
- Keyword argument -> 2.0 2013
- Method combination -> 2.0 2013
- Selector namespace -> 2.0 2013
- as refinement
- Optional static type
- Ruby conf 2004
未来についての話はなし
笹田さんがYARVの話をした
- Ruby conf 2005
- Stabby lambda -> 1.9 2007
- Real multi-value
- Traits
- Ruby conf 2006
bikeshed argument encouraged
自転車置場の屋根の色をどうするかということはみんな乗ってくるけど、原子力班伝書どうするのみたいな大きな話だとみんな乗ってこないという話。
そんな感じで特になし
- Ruby conf 2009
- Complex literal -> 2.1 2013
- Rational -> 2.1 2013
- True division
- Bitmap making -> 2.0 2013
- Symbol GC -> 2.2 2014
- Ruby conf 2010
- Mix
- Module#prepend -> 2.0 2013
- Refinement -> 2.0 2013
- mruby -> 2012
7/22入った
わたしたちはサメのように泳ぎ続けなければならない
そろそろ燃料を投入しようじゃないか
Ruby 3.0
10年くらいのスパンになるかもしれないけど
ここ最近出てくる言語は静的型付けの言語ばかり
Scala, TypeScript,Go
Why not Ruby?
Type Annotation
Feture #9999 by Davide D'Agostino
def connect(r -> Stream, c -> Client) -> Fiber
...
end
Function Annotations
Python REP:3107
def connect(r: Stream, c: Client) : Fiber
...
end
ruby の場合キーワード引数になっちゃうから:はつかわないけどだいたいいっしょ。
ただし、ドキュメント的な意味、言語としてはチェックしない
why static?
- Performance
- Compile-time check
- Documentation
JIT
誰もRubyがはやくなることには文句はない
でも、それによるトレードオフとしてほんとにstatic typingが必要なのか?
LuaJITがあるのでdynamic typing はJITの妨げにならない。
スピードのためにstatic typingは必要ない。
Compile Time check
まあこれは確かにあるといいよね
- Static analysis
- Refactoring
Documentation
コメントのなかにぼんやり書いてあったり、変数名から推測したりするけど型があるほうがより明確。ソースとコメントの乖離もない。
why not static typing?
Static typingはRubyと相性がよくない?
- Duck typing
- Optional
- DRY
Duck typing
アヒルのように歩き、アヒルのようになくならそれはアヒルとみてよい
Dave Thomas
型情報がある世界から型のない世界にもっていくと型情報が失われてしまい、二度と戻ってこない
Optional
TypeScriptの場合、全体的には静的な型だけど動的な型も使える。
どこかの言語みたいにv5とv6とは違う言語とかそういうことはしたくない
Dry原則
Don't Repeat Yourself
(これもDave Thomas?)
Avoid duplication
プログラミングはコンピューターに何をさせたいかを書くこと、 型情報としてあれ書いてこれ書いてって指示することはもうさっき書いたじゃんってなる。型書きたくない。
soft typing
型を明示的に書かなくても推論でなんとかできるところはあるのではないか
best-effort
お行儀のいいプログラムを書いているとだいたいうまくいくくらいな感じでよい
型というものをメソッドの集合と捉えればいい
Subset
サブセットというと、機能縮小版みたいに思えるけど、対象となるクラスの範囲がせまいといういみ
IDEの補完ができたりしたらよい
日経Linux 2014年9月号/10月号に記事書きました
10月号/11月号だったかも…
サブセットの範囲内であれば、いいことがあるけど、それを外れたらSuper-setにフォールバックすればいい。
今でもRuby良い言語ですよねw
コミュニティとして死なないように次のわくわくする未来に
■
RubyKaigi1日目を終えて
数年ぶりのRubyKaigiでテンションあがってます。勢いでログ書き続けていますが、ちょっとつらくなってきました。
2007年と状況も違いますが、モチベーションも公式でやるほどは上がりませんね。
今どきは資料ばかりかビデオも公開されたりしますよね。ログなんて労力の割に実りが少ないです。(RubyKaigiは資料・ビデオ公開あるんですかね…?ビデオはさすがになさそうな気がしますが...)
よくみるとわかりますが、実は歯抜けになっています。英語の発表はなかなか理解できません。特に実装の細かい話などはお手上げでした。(前回はzundaさんに英語はおまかせしてました。)
というわけでモチベーション下がってますが、実りが少ないと言いつつも、自分自身にとってはログらなきゃーということで聞き方も真剣になるので、同じ参加するにしてもちょっとは身になっているような気がします。
せっかくなのでこのまま勢い余って最後まで続けてみようと思います。
あと、ログに書けなかったこと
実はセッションとしては、本日最後の「Ruby committers vs the World」が一番おもしろかったんじゃないかと思います。さすがに疲れたのと自分も楽しみたい雰囲気だったので(真剣に聞くというよりおもしろがるセッションだったので)ログはやめました。
これこそログ残すべきだったなーとちょっと後悔です。(ログるのすごく大変そうだったけど)
あとはパーティタイムもすごく楽しかったですねー
RailsGirls Taipeiからも参加している女の子たちがいて、とってもキュートでパワフルで元気づけられました。(よーし、おばちゃんもがんばっちゃうぞー!)
最後にMatzとも記念撮影できたし大満足ー!でした。
■
RubyKaigi: Inside RubyMotion for Android
FRENGLISH sorry
2001からRubist まだ20歳でした。
Perlが好きでした。
PerlでWebアプリを書いてました。
ある日デバッグをしてPerlへの愛がなくなりました。(すいません。Perlよく知らなくて何が起こったのかわかりませんでした。なんかminifyされたようなコードが…)
Pythonを試そうとしたけどIRCで誰かがRubyがいいよって教えてくれました。
Programming Ruby
Rubyが好きな言語になりました。
(パチパチ)
ありがとうMatz
RubyMotion iOS
Hello World in Ruby
not Bridge
Builtin Classes
- Objct <-> NSObject
- String <-> NSMuutableString
- ...
Not an interpreter
だんだん早口になってわからなくなった
RubyMotion で開発されたプロダクト
- Frontback
- A Dark Room
- iOS8 Support
- arm64 support comming soon
- iphone6 maybe
RubyMotion Android
- Smartphone Market Share
- Tablet Market Share
Public beta Available yesterday
simple command line interface
- Create a new project
% motion create ...
- Rake Tasks
% rake -T
- Run in Emulator
- Create a release build
% rake release
などなど
Keep using your favorite editor
Eclipse使わなくていい
Demo
How does it work?
Object model
Builtin classes based in core java
Grobal reference object
@x = Object.new
Compiler
- Static compilation to machine code for JNI
- Creates DEX Instruction
- Emits DWARF metadata
- dwarfdump
このへんの話は理解できなかった
■
RubyKaigi: Non-Linear Pattern Matching against Unfree Data Types in Ruby (Egison Pattern Matching in Ruby)
Satoshi Egi
Egisonというパターンマッチ言語を作っている。RubyからもつかえるようにGemつくった。
無限リストのパターンマッチもできる
-> 双子素数のリストもパターンマッチできる
Qiita でも炎上した
http://qiita.com/egisatoshi/items/38f7f8aef32ac67ccd4b
パターンマッチの例
match(self) do
with(User.(_name, _, _, _, true)) {"Hello Prof. #{name}"}
with(User.(_name, _, _, true, _)) {"Hello Dr. #{name}"}
end
みたいな感じで書ける。
ホントはもっと長いソースだったけど、途中で断念
コンビネーション関数の例
ループをネストして書かなければならない例も1行で書ける
Non-Linear Pattern Matching
_a, __("a + 1"), __("a + 2"), *_
みたいにかくと[1,2,3]みたいのを取り出せる
トランプのストレート・フラッシュのパターンも書ける
このへんであーなるほどって思った。確かにトランプゲームなどのルールや戦略を記述するにはよいと思った
お気に入りは双子素数
match_stream(Prime) {
wth(List.(...))
}prime_twins.take(10)
みたいな感じで...の中に双子素数のパターンを書いておくと、最初から10組の双子素数を返す
Egison Gemも作ったらか使ってみください。
** Egisonについて
人間の直感にあった言語が必要だ
パターンマッチ志向というパラダイムを提唱しています。
麻雀の上がり判定をEgisonで書きました。
Not the usual suspects: 10 plucky programming languages on the rise | InfoWorld
Mind Map on Programming Language
Programming Language
- Mathmatical Abstraction
- Function Modularity
- Lexical Scoping
- Higth Orderd Function
- Function Modularity
- Type System
- Type Check
- Type Interface
- Pattern Matching
- Non-linear Pattern
- Computer Abstraction
- Memory Operation
- Distributed Computing
- Human Understandablity
- Friendly Syntax
Pattern Matchingでやりたいのは
- パターンマッチのモジュール化とか
- レキシカルスコープをもつパターンマッチ言語
SQLに変わるクエリ言語
twitterのUserグラフのクエリをSQLよりも簡潔に書ける
PR
CodeIQでEgisonの記事書きます
問題も出題します。
質疑
A: はやさはどう?
Q: あんまり考えていない。たぶん早い
Q: 僕は大変だと思わないです。
ループで書くよりわかりやすい
A: 簡単?
Q:
■
RubyKaigi: Symbol GC
nariさん
NaCl
GC本はAmazonでは絶版。達人出版会で買ってね!
http://tatsu-zine.com/books/gcbook
SymbolはID。
:symbol
シンボルの落とし穴
シンボルがGCされるか?
他の言語をみても、されるのとされないのがある…
Rubyの場合
symbolはFrozen Stringを参照していて、global_symbolsというハッシュテーブルで管理されている。<- C言語の領域
C言語側ではIDで参照している。
GCの対象になっていない。
なぜシンボルがGCされないのか…
GCするとglobal_symbolsのエントリも削除する。
そうするとC extensionのなかでIDで参照しているものが迷子になり、不整合が発生する。
Rubyの世界で死んだSymbolがCの世界では生きている
どうするか?
Immortal SymbolとMotal symbolにわける
:sym -> Immortal
いままでとはあまり変わらないねー
"sym".to_sym -> Mortal
global_symbolsのなかで、IDではなく、symbolとして格納される
同名のImmortal symbolがある場合
Immortal symbolがあって、同名で"sym".to_symとかすると、ImmortalがMortalに化ける。
■
RubyKaigi: Building the Ruby interpreter -- What is easy and what is difficult?
Koichi Sasada
キーノートは笹田さんです。
なんと、意外なことに*日本語で*キーノートとしてスピーチするのは初めてとのこと
そして、なんとなんと、明日は結婚記念日(1周年)だそうです!おめでとうございます!!
そして、YARVから10周年(そういえば、未踏で同期だったんですよねー)
アンダースタンディング コンピュテーション―単純な機械から不可能なプログラムまで
- 作者: Tom Stuart,笹田耕一(監訳),笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る
Contributions
- YARV (1.9~)
- Native thread (1.9-)
- Fiber (1.9-)
- New method cache (2.0-)
- Flonum(on 64bit CPU) (2.0-)
- RGenGC (2.1-)
- Reserch projects
- Performance
- Parallel
- Profiler
- Community activities
何が簡単で何が難しいの?
mission: Qualityを高める
- Reliability / Availability
- High performance
- Low machine resourcees
- Good compatibility
- Extensibility
これらはそれぞれTrade-offがあるよね
トレードオフに打ち勝つ
Rubyのすごいところは、豊富な言語機能と書きやすさのトレードオフに打ち勝ったこと
さらいパフォーマンスなどのトレードオフに打ち勝っていきたい
Parallel execution
Easy
並列スレッドを提供するだけなら簡単
Hard
Provide good programming experience
- 並列プログラミングは難しいよね
interpeter should be robust
- 同期が難しい
typical bugs
- Data race
- Atomicity violation
- Order violation
- Non-deterministic nature
並列プログラミングで難しくなってRubyが楽しくなるといやだ
他の言語では…
- ちゃんと書けばsafe
- safeでないコードが書けない
実装によっていろいろ。トレードオフの関係
Idea
- MVM: Multiple virtual machines
- Smaller isolated ruby
- Introduce "owner thread" for each objects
Make program deterministic
バグがあったら簡単に検出できたほうがいい
GC Performance
GCを書くのは簡単だけど
バグなく実装するのが大変
アルゴリズムは簡単だけど、アルゴリズム以外の面でバグなく動くようにケアすることが大変
GC.verify_internal_consistency
Measurement
実行時間を図ることは簡単だけど
そもそも何を測るのか?
クラウドよりも物理マシンのほうがよい
いろんなOS、複数のアーキテクチャ
何を?
discourse benchmark
実行時間?メモリ使用量?(ピーク、平均、中間?)
Development community
コミッターになるのは簡単
ruby developerになるのは難しい
keep motivation and continuous development
Ruby Under a Microscope: An Illustrated Guide to Ruby Internals
- 作者: Pat Shaughnessy
- 出版社/メーカー: No Starch Pr
- 発売日: 2013/11/22
- メディア: ペーパーバック
- この商品を含むブログを見る
3日目…
質疑
Q: 手伝ってほしいこと
A: 家探してる
並列処理をどうするかが近々の課題だと思っている
Q: 笹田さんがいままでに直面した課題で一番難しくて、これ解決したわーって思えること
A: 世代別GC
泥臭い課題でprocが大変だった
Q:並立処理が得意な言語に任せればよいのではないか
A: 同意するが、 自分でつくったほうが楽しい。自分がつくるかは別としてやると良い仕事だとおもう。