Slide 1

Slide 1 text

CRYSTAL 鿓㶩䗞 NF!EBWZUX 须盘♲"

Slide 2

Slide 2 text

鏤鎙椚䙂 • 3VCZ괐呔铃岁 • 荈⹛㘗ⴽ䲀㼬⟃⿻ꬆ䢀㘗ⴽ增叆 • 㺂僒之㻨 $ⴅ䒭䏨竁稟#JOEJOH • 管陼儘劍㾝Ꟛ꧌⚛欴欰剓⢕⻋玑䒭焺 • 欴欰넞佪⾲欰焺

Slide 3

Slide 3 text

“ ” 8): We love Ruby's efficiency for writing code. We love C's efficiency for running code. We want the best of both worlds. We want the compiler to understand what we mean without having to specify types everywhere. We want full OOP. Oh, and we don't want to write C code to make the code run faster.

Slide 4

Slide 4 text

# 矦僒 HTTP ⠿剪㐼 require "http/server" server = HTTP::Server.new(8080) do |request| HTTP::Response.ok "text/plain", "Hello world, got #{request.path}!" end puts "Listening on http://0.0.0.0:8080" server.listen 㥶姽鸏菛

Slide 5

Slide 5 text

# 矦僒 HTTP ⠿剪㐼 require "http/server" server = HTTP::Server.new(8080) do |request| HTTP::Response.ok "text/plain", "Hello world, got #{request.path}!" end puts "Listening on http://0.0.0.0:8080" server.listen 㥶姽鸏菛 # Ruby 괐呔鏽鍑 䒸Ⰵⴅ䒭䏨 䒊用 Server 暟⟝ 㼩倴䨾剤锞宠㔐⫄ HTTP 200 ⟃⿻Ⰹ㺂 곏爚鎝䜂 Ꟛ㉖ Server

Slide 6

Slide 6 text

Code/junk/crystal > $ > crystal http_server.cr Listening on http://0.0.0.0:8080 㥶姽鸏菛

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

鏤鎙椚䙂 • 3VCZ괐呔铃岁 • 荈⹛㘗ⴽ䲀㼬⟃⿻ꬆ䢀㘗ⴽ增叆 • 㺂僒之㻨 $ⴅ䒭䏨竁稟#JOEJOH • 管陼儘劍㾝Ꟛ꧌⚛欴欰剓⢕⻋玑䒭焺 • 欴欰넞佪⾲欰焺

Slide 9

Slide 9 text

# ꤏ⴪爚眕 array = [1, 2, 3, 4, 5] array << "string" 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 10

Slide 10 text

# ꤏ⴪爚眕 array = [1, 2, 3, 4, 5] array << "string" Error in ./array.cr:2: no overload matches 'Array(Int32)#<<' with types String Overloads are: - Array(Int32)#<<(value : Int32) array << "string” ^~ 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 11

Slide 11 text

# ꤏ⴪爚眕 array = Array.new(Int32 | String) array << 13 array << "string" 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 12

Slide 12 text

# ꤏ⴪爚眕 array = [] of Int32 | String array << 13 array << "string" 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 13

Slide 13 text

crystal > $ > crystal tool context \ --cursor array.cr:3:1 array.cr 1 possible context found | Expr | Type | --------------------------------- | array | Array(String | Int32) | 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 14

Slide 14 text

crystal > $ > crystal tool context \ --cursor array.cr:3:8 array.cr 1 possible context found | Expr | Type | --------------------------------------- | array | Array(String | Int32) | | array << 13 | Array(String | Int32) | 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 15

Slide 15 text

# ꤏ⴪爚眕 array = [1, "str"] 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 16

Slide 16 text

crystal > $ > crystal tool context \ --cursor array.cr:2:1 array.cr 1 possible context found | Expr | Type | --------------------------------------------------- | array | Array(String | Int32) | | ::Array(typeof(1, "str")).build(2) do |__temp_111| __temp_111[0] = 1 __temp_111[1] = "str" 2 end | Array(String | Int32) | 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 17

Slide 17 text

::Array(typeof(1, "str")).build(2) do |__temp_111| __temp_111[0] = 1 __temp_111[1] = "str" 2 end #=> Array(String | Int32) 㘗ⴽ䲀㼬⿻㘗ⴽ增叆

Slide 18

Slide 18 text

鏤鎙椚䙂 • 3VCZ괐呔铃岁 • 荈⹛㘗ⴽ䲀㼬⟃⿻ꬆ䢀㘗ⴽ增叆 • 㺂僒之㻨 $ⴅ䒭䏨竁稟#JOEJOH • 管陼儘劍㾝Ꟛ꧌⚛欴欰剓⢕⻋玑䒭焺 • 欴欰넞佪⾲欰焺

Slide 19

Slide 19 text

#include #include /* export function */ EXPORT double cos(double x) { /* return cos(x) */ } $#*/%*/(

Slide 20

Slide 20 text

# lib 爚眕 lib C # In C: double cos(double x) fun cos(value : Float64) : Float64 end C.cos(1.5) #=> 0.0707372 $#*/%*/(

Slide 21

Slide 21 text

# lib 爚眕 lib C # In C: double cos(double x) fun cos(value : Float64) : Float64 end C.cos(1.5) #=> 0.0707372 https://github.com/manastech/crystal_lib $#*/%*/(

Slide 22

Slide 22 text

鏤鎙椚䙂 • 3VCZ괐呔铃岁 • 荈⹛㘗ⴽ䲀㼬⟃⿻ꬆ䢀㘗ⴽ增叆 • 㺂僒之㻨 $ⴅ䒭䏨竁稟#JOEJOH • 管陼儘劍㾝Ꟛ꧌⚛欴欰剓⢕⻋玑䒭焺 • 欴欰넞佪⾲欰焺

Slide 23

Slide 23 text

# Macro 爚眕 macro define_method(name, content) def {{name}} {{content}} end end define_method foo, 1 foo ."$30

Slide 24

Slide 24 text

# Macro 爚眕 macro define_method(name, content) def {{name}} {{content}} end end define_method foo, 1 ."$30 # Macro 爚眕 def foo 1 end define_method foo, 1 foo #=> 1

Slide 25

Slide 25 text

鏤鎙椚䙂 • 3VCZ괐呔铃岁 • 荈⹛㘗ⴽ䲀㼬⟃⿻ꬆ䢀㘗ⴽ增叆 • 㺂僒之㻨 $ⴅ䒭䏨竁稟#JOEJOH • 管陼儘劍㾝Ꟛ꧌⚛欴欰剓⢕⻋玑䒭焺 • 欴欰넞佪⾲欰焺

Slide 26

Slide 26 text

crystal > $ > crystal http_server.cr Listening on http://0.0.0.0:8080 /"5*7&$0%&

Slide 27

Slide 27 text

crystal > $ > crystal http_server.cr Listening on http://0.0.0.0:8080 crystal > $ > crystal run http_server.cr Listening on http://0.0.0.0:8080 /"5*7&$0%&

Slide 28

Slide 28 text

crystal > $ > crystal build http_server.cr crystal > $ > ./http_server Listening on http://0.0.0.0:8080 /"5*7&$0%&

Slide 29

Slide 29 text

crystal > $ > crystal build http_server.cr --release crystal > $ > ./http_server Listening on http://0.0.0.0:8080 /"5*7&$0%&

Slide 30

Slide 30 text

Ꟛ涮鹎䏞 ü $SZTUBM湡⵹➠捀 "MQIBꥣ媯 ˋˋ 铃鎊垦彋⿻ TUEMJC 㼿㖈锅侮⚥ ü 䊺㸤䧭荈莊 ˋˋ 植㖈〳⟃欽 $SZTUBM管陼 $SZTUBM管陼㐼✫ ü湡⵹〫佅䴂-JOVY⿻.BD049禺窡 ˋˋ'SFF#4%䊺㸤䧭⡎劢ざ⢘荛♳康

Slide 31

Slide 31 text

⿮罌 ü $SZTUBM㸽倰笪畀 • IUUQDSZTUBMMBOHPSH ü (PPHMF(SPVQ • IUUQTHSPVQTHPPHMFDPNGPSVNGPSVN DSZTUBMMBOH ü *3$$IBOOFM • DSZTUBMMBOH !JSDGSFFOPEFOFU

Slide 32

Slide 32 text

$3:45"-58 ü 姻넓⚥俒荩抓缺陼鎙ⷔ • IUUQTHJUIVCDPNDSZTUBMUXDSZTUBM UXHJUIVCJP ü $SZTUBM58(JUUFS • IUUQTHJUUFSJNDSZTUBMUXDSZTUBM UXHJUIVCJP ü $SZTUBM⚥俒笪畀 • IUUQDSZTUBMUXHJUIVCJP