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

Ruby 風シンタックスな静的言語 Crystal の紹介

Ruby 風シンタックスな静的言語 Crystal の紹介

社内新卒技術勉強会の資料

Avatar for Pine Mizune

Pine Mizune

June 23, 2015
Tweet

More Decks by Pine Mizune

Other Decks in Programming

Transcript

  1. 目次 •  Crystal とは ? •  Crystal と Ruby の相違点

    •  Crystal の使い所とは ? •  Crystal の開発進捗
  2. Crystal 詳細 •  Ruby に酷似した syntax •  静的型付け / コンパイラ言語

    – LLVM ベース •  非常に高速 •  C 言語資源の再利用性を重視 4  
  3. Ruby  の復習   5   •  動的型付け •  インタプリタ /

    JIT コンパイラで動作 •  Ruby on Rails がとても有名 – ORM のチューニングが大変なことで有名 •  Pascal / Delphi 系 シンタックス
  4. Ruby  syntax   require ‘sinatra’ get ‘/’ do name =

    if params[:name] params[:name] else ‘anonymous’ end ” Hello world, #{name} ” end 6   # 制御構文に括弧はない # メソッド呼び出しのカッコを省略できる # end 地獄
  5. Crystal  syntax   app  =  App.new        

        app.route  “/”,  do  |req|          name  =  if  req.get.has_key?  “name”                  req.get[“name”]          else                  “anonymous”          end          ok("Hello  world,  #{name}")   end         app.run(ENV[“PORT”].to_i)   7   # 入らなかったので require 省略してます # end 地獄は健在 # Hash の key が無いと exception # (Ruby よりちょっと厳しい) # to_i 使える!
  6. Crystal  syntax  ≒ Ruby  syntax   8   •  ほとんど同じだって

    Matz も言ってる!! 出展: https://twitter.com/yukihiro_matz/status/610842781091672064
  7. Crystal と Ruby の相違点 9   Ruby 比較項目 Crystal 遅い

    実行速度 早い 可能 (FFI / Extension) C との連携 容易 (それを前提に設計) 中央管理 (rubygems.org) ライブラリ リポジトリ 分散 (git) Bundler 依存モジュール管理 コンパイラに内蔵 安定フェーズ (v2.2.x) 安定性 開発フェーズ (v0.7.x)
  8. Crystal  の使い所   10   •  速度が求められる場所 •  C /

    C++ からの段階的移植 •  Ruby エンジニアが多い環境での新規採用 •  クロスプラットフォームで高速な CLI ツール (現状の Golang の領域) もちろん、安定版という条件ですが
  9. •  最新版: v0.7.3 (2015/06/07) •  セルフホスティングコンパイラ –  ある仕様 FIX &

    安定動作するフェーズ •  安定した開発 12   [Crystal 進捗] 全般
  10. •  Linux – 公式サポート: Debian / Ubuntu / RHEL / CentOS

    •  Mac OS X – Homebrew tap を提供 •  Windows – 未サポート – GitHub に Issue はある ... 13   [Crystal 進捗] 対応環境
  11. •  コンパイラに内蔵 –  Golang と同じかんじ •  依存関係は Projectfile に記述 – 

    Cpanfile, Gemfile と同じかんじ •  分散型 リポジトリ –  GitHub を直接参照 / Golang と(ry 14   [Crystal 進捗] パッケージマネージャ Ruby ... gem, Bundler Perl ... cpanm, Carton