関数型言語を作ろう!あるいはRubyistのための型推論入門 #rubykaigi 2015 #rubykaigiB
2こめはRubyGame。requireするときにゲームが始まって、クリアしないとrequireされない #rubykaigi #rubykaigiA
2015-12-13 16:07:39アナウンス忘れてましたが、明後日 embulk meetup やります。まだ席あります: eventdots.jp/event/575046 #rubykaigi #embulk
2015-12-13 16:08:41本題で型推論について。型とは「値の分類」。RubyにもStringなど型はある。正しくは「Rubyの変数には型がない」。実行前に型を決める言語を静的型付けという。 #rubykaigi #rubykaigiA
2015-12-13 16:09:17まずtrickに応募したコードの紹介 gemをrequireすると強制的にゲームが始まる。ゲームをクリアしないとrequireできない #rubykaigi #rubykaigiB
2015-12-13 16:09:31Rubyと違い、実行する前に型を決めるのが静的型付け言語 プログラムの最適化がしやすく、プログラムを実行する前に型エラーを検出できるメリットがある #rubykaigi #rubykaigiB
2015-12-13 16:09:47でも人間が全部型書くのはめんどい たとえばHaskellは処理系が勝手に型の種類を判断して型チェックしてくれる これを型推論(Type Inference)という #rubykaigi #rubykaigiB
2015-12-13 16:11:33型の恩恵は欲しいが型注釈を付けるのはめんどくさい、という場合に手間を軽減するのが型推論。ただし型推論という語の指す意味は言語によって異なる。 #rubykaigi #rubykaigiB
2015-12-13 16:12:26C#だとvarキーワードを使うと右辺から推論してくれるけど引数の型を省略はできない、HaskellやOCamlは引数の型を省略できる それはHindley-Milner type systemというものによる #rubykaigi #rubykaigiB
2015-12-13 16:12:45type systemとは型の互換性(継したクラスを許可する)などのルールを決めているもの それぞれの言語がそれぞれの型システムを持っている #rubykaigi #rubykaigiB
2015-12-13 16:13:32型システムは、型に関するルールの集合。なので言語によって型システムは異なる。HaskellはHM+type class+α、OCamlはHM+variant+α。Ore ScriptはほぼHMのみ。 #rubykaigi #rubykaigiB
2015-12-13 16:14:13HM型システムはHaskellやOCamlの型システムのベースになっているもの プログラマが型を書かなくても型を推論できるという特徴がある #rubykaigi #rubykaigiB
2015-12-13 16:14:14ore script、文法としてはjavascript寄りだけど再代入不可だったり関数は全てカリー化されていたりするので機能的にはOCaml/Haskell辺りのサブセットに近そう。 #rubykaigi #rubykaigiB
2015-12-13 16:16:22まず存在する型の種類を明確にする そして、数値をとってBoolを返す、など関数ごとにinとoutの型を決める 関数呼び出しをしたときに引数の型が関数で決められた型と同じであるかをチェックする #rubykaigi #rubykaigiB
2015-12-13 16:17:47