Crystalを触ってみた
なぜ??
基本Rubyで開発している私ですが、なにかそろそろ新しいものに触ってみたいなと思い、
Speaker Deckでサーフィンしていたところ...
Crystalという言語を発見!!
キッカケとなったスライドはこちら
なんか流行りに乗れるんじゃないかと思い、
すぐに仮想サーバで環境構築をしました。
Crystalとは
Ruby風の文法を持ち、高速に動作する言語です。
RubyのいいところとCのいいところ混ぜつつ、
悪いところを改善した言語となっているそうです。
Rubyはスクリプト言語に対して、
Crystalはコンパイル言語です。
詳しくは下記のリンクへ
インストール
インストール方法
Installation | Crystal Programming Language
環境
vagrant 1.8.1
Cent OS 7
リポジトリの追加
$ curl http://dist.crystal-lang.org/rpm/setup.sh | sudo bash
Crystalをインストール
$ sudo yum install crystal
実践
# hello.cr puts "Hello world!"
$ crystal hello.cr Hello world! $ crystal build hello.cr $ ./hello Hello world!
誰もが通る道 Hello World!!! これができたらCrystalの環境は構築できています。
試しにFizz Buzz問題を書いてみます。
# fizzbuzz.cr class FizzBuzz def self.fizzbuzz(from, to) (from..to).reject do |num| if num % 15 == 0 puts "FizzBuzz" elsif num % 5 == 0 puts "Buzz" elsif num % 3 == 0 puts "Fizz" else puts num end end end end FizzBuzz.fizzbuzz(1, 100)
$ crystal fizzbuzz.cr 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzzl . . . Buzz Fizz 97 98 Fizz Buzz
まるっきりRubyですね!!!
ただRubyのコードがそのまま使えるわけではないですね。
属性の宣言などが変わっていて、そのままコピペすると痛い目に合います。
本当は型宣言があるんですけど、
まだ勉強不足で書けないです...
ベンチマーク
高速で動作をすることが売りのため、 測ってみます。 以下のコードを使います
def fib(n) if n < 2 n else fib(n-1) + fib(n -2) end end puts fib(20)
$ time ruby fib.rb 6765 real 0m0.049s user 0m0.036s sys 0m0.012s $ time crystal fib.cr 6765 real 0m1.195s user 0m0.446s sys 0m0.552s $ crystal build fib.cr $ ./fib 6765 real 0m0.003s user 0m0.000s sys 0m0.002s
こんな結果になりました。