ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Crystal 1.5, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Ruby Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ·ΡΠΊΡ Π‘ΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Crystal Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΡΠ·ΡΠΊΡ Ruby, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½ΠΈΠΌ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ruby-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Crystal ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.
Il linguaggio utilizza un controllo statico dei tipi, implementato senza la necessitΓ di specificare esplicitamente i tipi di variabili e argomenti dei metodi nel codice. I programmi in Crystal vengono compilati in file eseguibili, con il calcolo dei macro e la generazione di codice durante la compilazione. Γ possibile collegare binding scritti in C nei programmi Crystal. La parallelizzazione dell'esecuzione del codice avviene tramite la parola chiave Β«spawnΒ», che consente di avviare un'attivitΓ in background in modalitΓ asincrona, senza bloccare il thread principale, sotto forma di thread leggeri, noti come fiber.
La libreria standard offre un ampio set di funzioni comuni, inclusi strumenti per la gestione di CSV, YAML e JSON, componenti per la creazione di server HTTP e supporto WebSocket. Durante lo sviluppo, Γ¨ utile utilizzare il comando Β«crystal playΒ» che crea un'interfaccia web (per impostazione predefinita localhost:8080) per l'esecuzione interattiva del codice in Crystal.
Principali modifiche:
- Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΈΠΌΡΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π² Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΈΠΌΡΠ½ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^β Warning: positional parameter βnameβ corresponds to parameter βnumberβ of the overridden method FooAbstract#foo(number : Int32), which has a different name and may affect named argument passing
- ΠΡΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π½Π΅ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Π°Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. class Foo @x : Int64 def initialize(x) @x = x # ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ x ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΈΠΏ @x end end
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². def foo(@[MaybeUnused] x); end # OK
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈ ΠΈΠΌΡΠ½ Π² ΠΊΠΎΡΡΠ΅ΠΆΠ°Ρ . KEY = Β«sΒ» foo = {s: Β«StringΒ», n: 0} puts foo[KEY].size
- Π API File Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ File#delete? ΠΈ Dir#delete?, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ false Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
- Π£ΡΠΈΠ»Π΅Π½Π° Π·Π°ΡΠΈΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° File.tempfile, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π½ΡΠ»Π΅Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΠΎΠΊΠ°Ρ , ΡΠΎΡΠΌΠΈΡΡΡΡΠΈΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NO_COLOR, ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠΌ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
- ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
Fonte: opennet.ru
