関数型言語を作ろう!あるいはRubyistのための型推論入門 #rubykaigi 2015 #rubykaigiB

Let's make a functional language! @yhara http://rubykaigi.org/2015/presentations/yhara
1
マスタカ @masutaka

「今 0 を消したので、date が require されました」 #rubykaigi #rubykaigiB

2015-12-13 16:07:32
黒曜@Leaner Technologies @kokuyouwind

2こめはRubyGame。requireするときにゲームが始まって、クリアしないとrequireされない #rubykaigi #rubykaigiA

2015-12-13 16:07:39
よしこ @yoshiko_pg

型推論の話聞いてる 「型とは値の分類である」 #rubykaigi #rubykaigiB

2015-12-13 16:08:08
おがさわら @bonbon_0605

requireするためにはゲームをクリアする必要があるwww #rubykaigiB

2015-12-13 16:08:15
Sadayuki Furuhashi @frsyuki

アナウンス忘れてましたが、明後日 embulk meetup やります。まだ席あります: eventdots.jp/event/575046 #rubykaigi #embulk

2015-12-13 16:08:41
よしこ @yoshiko_pg

Rubyには型がないのではなく、「Rubyの変数には型がない」が正しい #rubykaigi #rubykaigiB

2015-12-13 16:08:43
Kazuho Oku @kazuho

Rackが成功した最大の理由は、依存関係の爆発を解消したところ #rubykaigi

2015-12-13 16:08:49
あおの @aono_ex_parrot

rubyには型がない←まちがい rubyの変数には型がない←せいかい #rubykaigi #rubykaigiB

2015-12-13 16:08:55
黒曜@Leaner Technologies @kokuyouwind

本題で型推論について。型とは「値の分類」。RubyにもStringなど型はある。正しくは「Rubyの変数には型がない」。実行前に型を決める言語を静的型付けという。 #rubykaigi #rubykaigiA

2015-12-13 16:09:17
yadaita @yadaita

ゲームをクリアしないと、実行されないなんて…! #rubykaigi #rubykaigiB

2015-12-13 16:09:30
ぷぽ @pupupopo88

まずtrickに応募したコードの紹介 gemをrequireすると強制的にゲームが始まる。ゲームをクリアしないとrequireできない #rubykaigi #rubykaigiB

2015-12-13 16:09:31
よしこ @yoshiko_pg

Rubyと違い、実行する前に型を決めるのが静的型付け言語 プログラムの最適化がしやすく、プログラムを実行する前に型エラーを検出できるメリットがある #rubykaigi #rubykaigiB

2015-12-13 16:09:47
Tomohiro Suwa @tsuwatch

外人のウェブ鯖ギャグの再発明ヤバイ #rubykaigi

2015-12-13 16:10:56
マスタカ @masutaka

細かいけど、さっきの C の例はコンパイルエラーじゃなくて Warning ですね #rubykaigi #rubykaigiB

2015-12-13 16:11:06
よしこ @yoshiko_pg

でも人間が全部型書くのはめんどい たとえばHaskellは処理系が勝手に型の種類を判断して型チェックしてくれる これを型推論(Type Inference)という #rubykaigi #rubykaigiB

2015-12-13 16:11:33
黒曜@Leaner Technologies @kokuyouwind

型の恩恵は欲しいが型注釈を付けるのはめんどくさい、という場合に手間を軽減するのが型推論。ただし型推論という語の指す意味は言語によって異なる。 #rubykaigi #rubykaigiB

2015-12-13 16:12:26
よしこ @yoshiko_pg

C#だとvarキーワードを使うと右辺から推論してくれるけど引数の型を省略はできない、HaskellやOCamlは引数の型を省略できる それはHindley-Milner type systemというものによる #rubykaigi #rubykaigiB

2015-12-13 16:12:45
よしこ @yoshiko_pg

type systemとは型の互換性(継したクラスを許可する)などのルールを決めているもの それぞれの言語がそれぞれの型システムを持っている #rubykaigi #rubykaigiB

2015-12-13 16:13:32
黒曜@Leaner Technologies @kokuyouwind

型システムは、型に関するルールの集合。なので言語によって型システムは異なる。HaskellはHM+type class+α、OCamlはHM+variant+α。Ore ScriptはほぼHMのみ。 #rubykaigi #rubykaigiB

2015-12-13 16:14:13
よしこ @yoshiko_pg

HM型システムはHaskellやOCamlの型システムのベースになっているもの プログラマが型を書かなくても型を推論できるという特徴がある #rubykaigi #rubykaigiB

2015-12-13 16:14:14
黒曜@Leaner Technologies @kokuyouwind

ore script、文法としてはjavascript寄りだけど再代入不可だったり関数は全てカリー化されていたりするので機能的にはOCaml/Haskell辺りのサブセットに近そう。 #rubykaigi #rubykaigiB

2015-12-13 16:16:22
よしこ @yoshiko_pg

まず存在する型の種類を明確にする そして、数値をとってBoolを返す、など関数ごとにinとoutの型を決める 関数呼び出しをしたときに引数の型が関数で決められた型と同じであるかをチェックする #rubykaigi #rubykaigiB

2015-12-13 16:17:47