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

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

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

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

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