Crystal 1.0 νλ‘κ·Έλλ° μΈμ΄κ° μΆμλμμ΅λλ€. μ΄ λ¦΄λ¦¬μ€λ 8λ κ°μ μμ μ λ§λ¬΄λ¦¬νλ μ΅μ΄μ μ£Όμ 릴리μ€μ΄λ©°, μΈμ΄μ μμ νμ νλ‘λμ νλ‘μ νΈμμμ μ¬μ© μ€λΉ μλ£λ₯Ό μλ―Έν©λλ€. 1.x λ²μ μ μ΄μ λ²μ κ³Όμ νΈνμ±μ μ μ§νκ³ μΈμ΄λ νμ€ λΌμ΄λΈλ¬λ¦¬μ λν λ³κ²½ μ¬νμ΄ κΈ°μ‘΄ μ½λμ λΉλ λ° μλμ λΆμ μ μΈ μν₯μ λ―ΈμΉμ§ μλλ‘ λ³΄μ₯ν©λλ€.
1.0.y λ²μ μλ μ¬μν λ²κ·Έ μμ λ§ ν¬ν¨λλ©°, 1.x.0 λ²μ μμλ μ½λ νΈνμ±μ μ μ§νλ©΄μ μλ‘μ΄ κΈ°λ₯κ³Ό μ€μν λ³κ²½ μ¬νμ΄ λμ λ©λλ€. μλ‘μ΄ μμ΄λμ΄μ μ μ¬μ μΌλ‘ νΈνλμ§ μλ λ³κ²½ μ¬νμ λ³λμ λΈλμΉμμ κ°λ°λλ©°, μ΄λ λμ€μ Crystal 2.0 릴리μ€μ κΈ°λ°μ΄ λ©λλ€. Crystal 1.0μ μΌλΆ κΈ°λ₯μ μλΉ κΈ°λ₯μΌλ‘ κ°μ£Όλλ©°, 1.0 λΈλμΉμ ν¬ν¨λμ΄ μλλΌλ 곡μμ μΈ μ§μμ μ 곡λμ§ μμ΅λλ€. μ΄λ¬ν κΈ°λ₯μλ λ©ν°μ€λ λ©, νλ«νΌ μ§μ λ±μ΄ ν¬ν¨λ©λλ€. WindowsARM νλ‘μΈμκ° νμ¬λ μμ€ν μμ μ¬μ© κ°λ₯ν©λλ€.
Crystal κ°λ°μλ€μ Ruby μΈμ΄μ κ°λ° νΈμμ±κ³Ό C μΈμ΄ νΉμ μ λμ μ ν리μΌμ΄μ μ±λ₯μ κ²°ν©νλ €κ³ λ Έλ ₯νκ³ μλ€λ μ μ κΈ°μ΅νμΈμ. Crystalμ ꡬ문μ Rubyμ λΉμ·νμ§λ§ μλ²½νκ² νΈνλμ§λ μμ΅λλ€. λ€λ§ μΌλΆ Ruby νλ‘κ·Έλ¨μ 리ν©ν λ§ μμ΄λ μ€νλ©λλ€. μ»΄νμΌλ¬ μ½λλ Crystal μΈμ΄λ‘ μμ±λμμΌλ©° Apache 2.0 λΌμ΄μ μ€μ λ°λΌ λ°°ν¬λ©λλ€.
μ΄ μΈμ΄λ μ μ μ ν κ²μ¬λ₯Ό μ¬μ©νλλ°, μ΄λ μ½λμμ λ³μμ λ©μλ μΈμμ μ νμ λͺ μμ μΌλ‘ μ§μ ν νμ μμ΄ κ΅¬νλ©λλ€. Crystal νλ‘κ·Έλ¨μ μ€ν νμΌλ‘ μ»΄νμΌλκ³ , λ§€ν¬λ‘λ μ»΄νμΌ μμ μ νκ°λκ³ μ½λλ μμ±λ©λλ€. Crystal νλ‘κ·Έλ¨μμλ Cλ‘ μμ±λ λ°μΈλ©μ μ°κ²°ν μ μμ΅λλ€. "spawn" ν€μλλ₯Ό μ¬μ©νλ©΄ μ½λ μ€νμ λ³λ ¬νν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ νμ΄λ²λΌκ³ νλ κ²½λ μ€λ λ ννλ‘ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μκ³ λ°±κ·ΈλΌμ΄λ μμ μ λΉλκΈ°μ μΌλ‘ μμν μ μμ΅λλ€.
νμ€ λΌμ΄λΈλ¬λ¦¬λ CSV, YAML λ° JSON μ²λ¦¬μ© λꡬ, HTTP μλ² μμ±μ© κ΅¬μ± μμ, WebSocket μ§μμ ν¬ν¨ν κ΄λ²μν κ³΅ν΅ κΈ°λ₯ μΈνΈλ₯Ό μ 곡ν©λλ€. κ°λ° κ³Όμ μμ Crystal μΈμ΄λ‘ μ½λλ₯Ό λννμΌλ‘ μ€ννκΈ° μν μΉ μΈν°νμ΄μ€(κΈ°λ³Έμ μΌλ‘ localhost:8080)λ₯Ό μμ±νλ "crystal play" λͺ λ Ήμ μ¬μ©νλ κ²μ΄ νΈλ¦¬ν©λλ€.
μ£Όμ λ³κ²½ μ¬ν :
- ννμμλ μ»΄νμΌλ¬κ° κ° μμμ μ νμ λν μ 보λ₯Ό κ°μ§κ³ μμΌλ―λ‘, μλ‘ λ€λ₯Έ μ νμ μμμ λν μΈλ±μ€ μ‘μΈμ€κ° νμ©λ©λλ€. μλ₯Ό λ€μ΄: tuple = {1, "hello", 'x'} v = tuple[0..1] # {1, "hello"}λ₯Ό λ°νν©λλ€ typeof(v) # => Tuple(Int32, String)
- "\uD834"μ κ°μ μ λμ½λ μ΄μ€μΌμ΄ν μνμ€μ μλ‘κ²μ΄νΈ μ½μ΄λ λ¬Έμμ΄ λ° λ¬Έμ 리ν°λ΄μμ νμ©λμ§ μμ΅λλ€. μμμ κ°μ μΈμ½λ©νλ €λ©΄ "\x" νκΈ°λ²μ μ¬μ©ν©λλ€.
- μ΄μ μ λ μ΄μ μ¬μ©λμ§ μλ μ μ, λ§€ν¬λ‘, λ©μλ μ€ μλΉμκ° νμ€ λΌμ΄λΈλ¬λ¦¬μμ μ κ±°λμμ΅λλ€. Set, StaticArray#[], YAML.new, HTTP::Request, HTTP::WebSocket, Hash#delete_if, Process#kill λ±μ λ©μλκ° ν¬ν¨λ©λλ€.
- μ΄μ Getter λ° μμ± λ§€ν¬λ‘μ λ°ν μ νμ΄ νμν©λλ€.
- κΈ°λ³Έ λ°μ¬λ¦Ό λ°©λ²μ΄ TIES_EVEN('μν λ°μ¬λ¦Ό', κ°μ₯ κ°κΉμ΄ μ μλ‘, κ²½κ³ μν©μμλ κ°μ₯ κ°κΉμ΄ μ§μλ‘)μΌλ‘ λ³κ²½λμμ΅λλ€. Number#roundμ RoundingMode λ§€κ°λ³μλ₯Ό μΆκ°νμ¬ λ°μ¬λ¦Ό λ°©λ²μ μ ννμ΅λλ€. μ¬μ© κ°λ₯ν λ©μλλ λ€μκ³Ό κ°μ΅λλ€: TIES_EVEN, TIES_AWAY, TO_ZERO, TO_POSITIVE, TO_NEGATIVE.
- 컬λ μ μ νΌν© μ νμ μμλ₯Ό ν¬ν¨νλ Enumerable#flat_map λ° Iterator#flat_mapμ μ§μν©λλ€.
- Enum μνμ€μ μ§λ ¬νλ μ΄μ λ°μ€λ‘ ꡬλΆλ λ¬Έμμ΄ ννμ μ¬μ©ν©λλ€.
- XML λͺ¨λμ μ μλ μ νμ structμμ classλ‘ μ΄λλμμ΅λλ€.
- 보μμμ μ΄μ λ‘ μΏ ν€ μ΄λ¦ λμ½λ©κ³Ό μΏ ν€ κ° μΈμ½λ© λ° λμ½λ©μ μ€λ¨λμμ΅λλ€(μ΄μ μΈμ½λ©μ νλ μμν¬μ μ ν리μΌμ΄μ μ μ± μμ λλ€). HTTP::Cookies.from_headers λ©μλλ λ κ°μ§ λ²μ μΌλ‘ λΆλ¦¬λμμ΅λλ€. μλ² κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈ.
μΆμ² : opennet.ru
