Ruby風な言語Crystalを試してみた(Ruby風な文法編)
最近CRYSTALという言語の存在を知りました。
この言語は以下のような特徴があるようです。
- Ruby 風な文法
- 型推論による変数・メソッドの静的型付け
- 容易に記述可能な C 言語バインディング
- マクロとジェネリクスによるコンパイル時のコード生成
- 高速なネイティブコードを出力
自分はRubyが得意なので、どれくらいRubyっぽいのかサンプルを見てみた所、思っていた以上にRubyに似ていて驚きました。
検証環境
- macOS Sierra 10.12.1
- Crystal 0.20.1
MACにインストール
homebrewでインストール可能です。
brew install crystal-lang
バージョンは以下の通りです。
# crystal -v Crystal 0.20.1 (2016-12-05)
簡単なプログラム
自分が初めてプログラミングをした時に出された課題を書いてみたいと思います。
問題
1〜100まで足した結果を出力するプログラムをつくりなさい
num = 0 (1..100).each do |n| num = num + n end puts num
Rubyでは当然動きました。
# ruby addition.rb 5050
CrystalもRubyにシンタックスが似ているし動くだろうと思って適当に実行したら動きました。
# crystal addition.rb 5050
どうやらCrystalはRubyで書いたプログラムが動くぐらいにRubyに似ているようです。
injectを使ってみます。
puts (1..100).inject(&:+)
実行したらエラーになりました。
injectが駄目ということではなく、どうやら、暗黙のto_procが引っかかったようです。
# crystal addition.rb Error in addition.rb:1: expected a function type, not Symbol puts (1..100).inject(&:+)
ということで、適当に書き直してみました。
puts (1..100).inject { |p, n| p + n }
駄目でした。
# crystal addition.rb Error in addition.rb:1: undefined method 'inject' for Range(Int32, Int32) (did you mean 'reject'?) puts (1..100).inject { |p, n| p + n } ^~~~~~ Rerun with --error-trace to show a complete error trace.
いくらシンタックスが似ているといっても全く同じのはずはないので当然の結果だとは思います。
REPL
RubyのirbのようなREPLは提供されていないようですが、crystal-icrを使うと実現出来るようです。
https://github.com/greyblake/crystal-icr
Crystal言語のREPL(crystal-icr)をインストール
Githubから取得して、makeします。
git clone https://github.com/greyblake/crystal-icr.git cd crystal-icr make
実行できました。
# ./bin/icr icr(0.20.1) > puts "Hello World!!" Hello World!! => nil
TAG
エンジニア
金子 将範 rubyist
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境