ようちゃんのブログ

ようちゃんのブログはこちらです!

RubyKaigi 2日目: Comming soon...

Future
未来について話します

  • Ruby conf 2001
    • Virtual Machine -> 1.9 2007

Yet anotherとつけたものは生き残る。Rubyもご多分にもれず

  • Ruby conf 2002
    • M17N
    • Native thread
    • Generational GC
  • 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

未来についての話はなし
笹田さんがYARVの話をした

  • Ruby conf 2005
    • Stabby lambda -> 1.9 2007
    • Real multi-value
    • Traits

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年くらいのスパンになるかもしれないけど

  • Concurrency
  • JIT (LLVM?)
  • Static typing

ここ最近出てくる言語は静的型付けの言語ばかり

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

型情報がある世界から型のない世界にもっていくと型情報が失われてしまい、二度と戻ってこない

Duck typingのようなRubyにとって重要な特性を捨ててそれはRubyと呼んでいいのか?

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


コミュニティとして死なないように次のわくわくする未来に

質疑

A: (Soft typingについて? subsetについて?)流行らなかったことに関して

Q: そもそも難しいあとづけで設けるということがとてもむずかしい


A: サブセットが小さすぎると困る
おそらくif文で分岐すると推論できなくなる。でもif文がサブセットに入らないとこまる

Q: そのばあいはORでいいんじゃないか


A: メタプログラミングは初期化の処理の時点でモンキーパッチングしたりメタプログラミング的なことをしているので、そこを除外すればよいのでは

Q: それはその時点で実行してる

A: そういうアイデアがどこかにあった

Q: それは検討してみる