Slide 1

Slide 1 text

あなたとCrystal, 今すぐダウンロー ド 岡山Javaユーザ会/吉田貴文(@zephiransas)

Slide 2

Slide 2 text

java.com

Slide 3

Slide 3 text

質問は #gbdaitokai

Slide 4

Slide 4 text

よろしく お願いします

Slide 5

Slide 5 text

Rubyを書いてて こんなことないですか? • もっと速く実行したい • 最近のRubyは早いけど・・・ • 部分的でいいので、型が欲しい • メソッド引数、etc…

Slide 6

Slide 6 text

そんなときには Crystal

Slide 7

Slide 7 text

Crystalの特徴

Slide 8

Slide 8 text

Crystalの特徴 • Rubyによく似た文法 • 完全互換ではない • Rubyと違い、型を指定することもできる • 静的型付言語として考えたほうが幸せになれる • コンパイルして実行可能バイナリが生成される • 高速に実行できる

Slide 9

Slide 9 text

Crystal情報源 • 公式 - http://crystal-lang.org/ • 日本語訳 - http://ja.crystal-lang.org/ • ドキュメントがほぼ全て翻訳されてる

Slide 10

Slide 10 text

Crystal日本語情報まとめ http://qiita.com/pine613/items/7407e56771b504bed82f

Slide 11

Slide 11 text

Rubyっぽいのに 型がある?

Slide 12

Slide 12 text

メソッド定義(1) def greet(name : String) "Hello, #{name}" end puts greet(“Kotori”) puts greet(123) 引数の型を指定 コンパイルエラーになる

Slide 13

Slide 13 text

メソッド定義(2) def hoge : String "hoge" end def fuga : String 123 end 戻り値の型を指定 コンパイルエラーになる

Slide 14

Slide 14 text

複合型の指定 array = Array(Int32).new array << 1 array << 2 array << "hoge" エラーになる

Slide 15

Slide 15 text

複合型の指定 array = Array(Int32 | String).new # alias IntString = Int32 | String # array = Array(IntString).new array << 1 array << 2 array << "hoge" OK 複合型を指定

Slide 16

Slide 16 text

Crystalは はやい?

Slide 17

Slide 17 text

RubyからGoの関数をつかう → はやい http://qiita.com/etmnk/items/2801cd09c6ec4439c8fd

Slide 18

Slide 18 text

Crystalで書く → はやい http://qiita.com/etmnk/items/2801cd09c6ec4439c8fd

Slide 19

Slide 19 text

竹内関数 def tarai(x, y, z) return y if x <= y tarai( tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y) ) end puts tarai(13, 10, 0)

Slide 20

Slide 20 text

Rubyの場合 $ ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) $ time ruby tarai.rb 13 real 0m8.899s user 0m8.818s sys 0m0.052s 約9秒

Slide 21

Slide 21 text

Crystalの場合 $ crystal -v Crystal 0.9.0 [be93828] $ crystal build tarai.rb --release $ time ./tarai 13 real 0m0.352s user 0m0.348s sys 0m0.003s 0.3秒 最適化ビルド 約30倍

Slide 22

Slide 22 text

Crystalで書く → はやい

Slide 23

Slide 23 text

Javaの場合 public class Tarai { public static int tarai(int x, int y, int z) { if(x <= y) return y; return tarai(tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y)); } public static void main(String[] args) { System.out.println(tarai(13, 10, 0)); } }

Slide 24

Slide 24 text

Javaの場合 $ java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) $ time java Tarai 13 real 0m0.336s user 0m0.316s sys 0m0.026s 0.3秒 ほぼCrystalと同じ

Slide 25

Slide 25 text

Crystalで書く → はやい Javaで書く → はやい

Slide 26

Slide 26 text

まとめ • RubyistならすぐCrystalも使える • 型チェックもあるよ • Crystal書く → はやい • Go vs Crystal • セミコロン書いても死なない人はJavaもイケる

Slide 27

Slide 27 text

ありがとう ございました