Crystal-ohjelmointikielen julkaisu 1.5

Crystal 1.5 -ohjelmointikielen julkaisu on julkaistu, jonka kehittäjät yrittävät yhdistää Ruby-kielen kehittämisen mukavuuden ja C-kielelle ominaisen korkean sovellussuorituskyvyn. Crystalin syntaksi on lähellä Rubya, mutta ei täysin yhteensopiva sen kanssa, vaikka jotkut Ruby-ohjelmat toimivat ilman muutoksia. Kääntäjäkoodi on kirjoitettu Crystalilla ja jaettu Apache 2.0 -lisenssillä.

Kielessä käytetään staattista tyyppitarkistusta, joka toteutetaan ilman, että koodissa tarvitsee erikseen määritellä muuttujien tyyppejä ja menetelmäargumentteja. Crystal-ohjelmat käännetään suoritettaviksi tiedostoiksi, joissa makrot arvioidaan ja koodi luodaan käännöshetkellä. Crystal-ohjelmissa on mahdollista yhdistää C-kielellä kirjoitettuja sidoksia. Koodin suorittamisen rinnakkaisuus suoritetaan "spawn"-avainsanalla, jonka avulla voit suorittaa taustatehtävän asynkronisesti, estämättä pääsäiettä, kevyiden säikeiden muodossa, joita kutsutaan kuiduiksi.

Vakiokirjasto tarjoaa suuren joukon yleisiä toimintoja, mukaan lukien työkalut CSV-, YAML- ja JSON-käsittelyyn, komponentit HTTP-palvelimien luomiseen ja WebSocket-tuki. Kehitysprosessin aikana on kätevää käyttää "crystal play" -komentoa, joka luo verkkokäyttöliittymän (oletusarvoisesti localhost:8080) koodin interaktiiviseen suorittamiseen Crystal-kielellä.

Suurimmat muutokset:

  • Kääntäjä on lisännyt tarkistuksen argumenttien nimien vastaavuudesta abstraktin menetelmän toteutuksessa ja sen määrittelyssä. Jos nimi ei täsmää, annetaan nyt varoitus: abstrakti luokka FooAbstract abstrakti def foo(numero : Int32) : Nolla loppuluokka Foo < FooAbstract def foo(nimi : Int32) : Nolla p nimen loppu 6 | def foo(nimi : Int32) : Nolla ^— Varoitus: sijaintiparametri 'name' vastaa ohitetun menetelmän FooAbstract#foo(number : Int32) parametria 'number', jolla on eri nimi ja joka voi vaikuttaa nimettyjen argumenttien välitykseen.
  • Kun määrität muuttujan arvoon argumenttia tyypittämättömälle menetelmälle, argumentti on nyt rajoitettu kyseisen muuttujan tyyppiin. class Foo @x : Int64 def initialize(x) @x = x # parametri x kirjoitetaan @x end end
  • Mahdollistaa merkintöjen lisäämisen menetelmien tai makrojen parametreihin. def foo(@[EhkäUnused] x); loppu # OK
  • Lisätty tuki vakioiden käyttämiselle indekseinä ja niminä monikoissa. KEY = "s" foo = {s: "String", n: 0} asettaa foo[KEY].size
  • Tiedostojen API:hen on lisätty uusia File#delete?-menetelmiä tiedostojen ja hakemistojen poistamiseksi. ja Dir#delete?, jotka palauttavat epätosi, jos tiedosto tai hakemisto puuttuu.
  • File.tempfile-menetelmän suojausta on vahvistettu, mikä nyt ei salli nollamerkkejä tiedostonimen muodostavilla riveillä.
  • Lisätty ympäristömuuttuja NO_COLOR, joka poistaa värien korostuksen kääntäjän ja tulkin lähdöstä.
  • Työtä tulkkitilassa on parannettu merkittävästi.

Lähde: opennet.ru

Lisää kommentti