Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたとCrystal、いますぐダウンロード
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takafumi Yoshida
December 05, 2015
Technology
1.8k
1
Share
あなたとCrystal、いますぐダウンロード
合同勉強会2015
Takafumi Yoshida
December 05, 2015
More Decks by Takafumi Yoshida
See All by Takafumi Yoshida
ECSとSQSでスケーラブルなバッチを作った
zephiransas
2
1.4k
DynamoDB Step Zero to One
zephiransas
0
740
ECSとALBで始めるblue/greenデプロイメント
zephiransas
2
340
DynamoDB関連のアップデート紹介 #reinvent2018
zephiransas
0
830
CloudGarageでGitBucketサーバをたててみた
zephiransas
0
540
プログラマが知っておくといいかもしれないCSSのハナシ
zephiransas
1
1.1k
ラクして学ぶ英語(LT版)
zephiransas
0
210
使ってみようLombok
zephiransas
0
280
Modern Web Development with ninjaframework
zephiransas
0
3.2k
Other Decks in Technology
See All in Technology
シンデレラなんかになりたくない!ガラスの靴が割れた時代にどう歩く?
nomizone
0
170
社内RAGの導入で気を付けたポイント
yakumo
2
150
freee-mcpを Local→Remote で出してわかった MCP認可実装のリアル
terara
2
550
JavaScript実装の自作プログラミング言語をTypeScript実装に移行した話
keisukeikeda
1
140
管理アカウント単一運用からAWS Organizationsに移行するの大変で滅
hiramax
0
110
Claude Code で使える DuckDB Skills を試してみた / DuckDB Skills and Claude Code
masahirokawahara
2
2.2k
AIAgentと取り組むKaggle
508shuto
2
530
"スキルファースト"で作る、AIの自走環境
subroh0508
1
700
LLM時代のリファクタリング戦略_AIエージェントによる段階的・安全なTS移行方法
play_inc
0
170
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
250
GitHub Copilot のこれまでとこれから: From Copilot to Collaborative Agents
yuriemori
1
130
大規模環境でどのように監視を実現する?
yuobayashi
1
130
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Making Projects Easy
brettharned
120
6.6k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
190
The browser strikes back
jonoalderson
0
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
190
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
810
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
170
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
510
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
290
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Transcript
あなたとCrystal, 今すぐダウンロー ド 岡山Javaユーザ会/吉田貴文(@zephiransas)
java.com
質問は #gbdaitokai
よろしく お願いします
Rubyを書いてて こんなことないですか? • もっと速く実行したい • 最近のRubyは早いけど・・・ • 部分的でいいので、型が欲しい • メソッド引数、etc…
そんなときには Crystal
Crystalの特徴
Crystalの特徴 • Rubyによく似た文法 • 完全互換ではない • Rubyと違い、型を指定することもできる • 静的型付言語として考えたほうが幸せになれる •
コンパイルして実行可能バイナリが生成される • 高速に実行できる
Crystal情報源 • 公式 - http://crystal-lang.org/ • 日本語訳 - http://ja.crystal-lang.org/ •
ドキュメントがほぼ全て翻訳されてる
Crystal日本語情報まとめ http://qiita.com/pine613/items/7407e56771b504bed82f
Rubyっぽいのに 型がある?
メソッド定義(1) def greet(name : String) "Hello, #{name}" end puts
greet(“Kotori”) puts greet(123) 引数の型を指定 コンパイルエラーになる
メソッド定義(2) def hoge : String "hoge" end def fuga
: String 123 end 戻り値の型を指定 コンパイルエラーになる
複合型の指定 array = Array(Int32).new array << 1 array <<
2 array << "hoge" エラーになる
複合型の指定 array = Array(Int32 | String).new # alias IntString
= Int32 | String # array = Array(IntString).new array << 1 array << 2 array << "hoge" OK 複合型を指定
Crystalは はやい?
RubyからGoの関数をつかう → はやい http://qiita.com/etmnk/items/2801cd09c6ec4439c8fd
Crystalで書く → はやい http://qiita.com/etmnk/items/2801cd09c6ec4439c8fd
竹内関数 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)
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秒
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倍
Crystalで書く → はやい
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)); } }
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と同じ
Crystalで書く → はやい Javaで書く → はやい
まとめ • RubyistならすぐCrystalも使える • 型チェックもあるよ • Crystal書く → はやい • Go vs
Crystal • セミコロン書いても死なない人はJavaもイケる
ありがとう ございました