Upgrade to Pro — share decks privately, control downloads, hide ads and more …

あなたとCrystal、いますぐダウンロード

 あなたとCrystal、いますぐダウンロード

合同勉強会2015

Ab963de01b53e635d6e699d6d7d162b1?s=128

Takafumi Yoshida

December 05, 2015
Tweet

Transcript

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

  2. java.com 

  3. 質問は #gbdaitokai 

  4. よろしく お願いします 

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

    
  6. そんなときには Crystal

  7. Crystalの特徴 

  8. Crystalの特徴 • Rubyによく似た文法 • 完全互換ではない • Rubyと違い、型を指定することもできる • 静的型付言語として考えたほうが幸せになれる •

    コンパイルして実行可能バイナリが生成される • 高速に実行できる 
  9. Crystal情報源 • 公式 - http://crystal-lang.org/ • 日本語訳 - http://ja.crystal-lang.org/ •

    ドキュメントがほぼ全て翻訳されてる 
  10. Crystal日本語情報まとめ http://qiita.com/pine613/items/7407e56771b504bed82f 

  11. Rubyっぽいのに 型がある? 

  12. メソッド定義(1)  def greet(name : String) "Hello, #{name}" end puts

    greet(“Kotori”) puts greet(123) 引数の型を指定 コンパイルエラーになる
  13. メソッド定義(2)  def hoge : String "hoge" end def fuga

    : String 123 end 戻り値の型を指定 コンパイルエラーになる
  14. 複合型の指定  array = Array(Int32).new array << 1 array <<

    2 array << "hoge" エラーになる
  15. 複合型の指定  array = Array(Int32 | String).new # alias IntString

    = Int32 | String # array = Array(IntString).new array << 1 array << 2 array << "hoge" OK 複合型を指定
  16. Crystalは はやい? 

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

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

  19. 竹内関数  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)
  20. 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秒
  21. 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倍
  22. Crystalで書く → はやい 

  23. 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)); } }
  24. 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と同じ
  25. Crystalで書く → はやい Javaで書く → はやい 

  26. まとめ • RubyistならすぐCrystalも使える • 型チェックもあるよ • Crystal書く → はやい • Go vs

    Crystal • セミコロン書いても死なない人はJavaもイケる 
  27. ありがとう ございました