Eldono de la Crystal programlingvo 1.5

La eldono de la programlingvo Crystal 1.5 estis publikigita, kies programistoj provas kombini la oportunon disvolvi en la Ruby-lingvo kun la alta aplikaĵa rendimento eneca en la C-lingvo. La sintakso de Crystal estas proksima, sed ne tute kongrua kun Ruby, malgraŭ la fakto, ke iuj rubenaj programoj funkcias sen reverkado. La kompilkodo estas skribita en Crystal kaj distribuita sub la licenco Apache 2.0.

La lingvo uzas statikan tipkontroladon, efektivigitan sen la bezono eksplicite specifi la specojn de variabloj kaj metodoargumentojn en la kodo. Kristalaj programoj estas kompilitaj en ruleblajn dosierojn, kun makro-taksado kaj kodgenerado ĉe kompiltempo. En Crystal-programoj, estas permesite konekti ligojn skribitajn en C-lingvo. Paraleligo de koda ekzekuto estas efektivigita per la ŝlosilvorto "spawn", kiu ebligas al vi plenumi fonan taskon en nesinkrona reĝimo, sen bloki la ĉefan fadenon, en formo de malpezaj fadenoj nomataj fibroj (Fibro).

La norma biblioteko disponigas grandan aron da senmarkaj funkcioj, inkluzive de iloj por pritrakti CSV, YAML, kaj JSON, komponantojn por konstrui HTTP-servilojn kaj WebSocket-subtenon. Dum la disvolva procezo, estas oportune uzi la komandon "kristalludado", kiu generas retan interfacon (localhost:8080 defaŭlte) por interaga koda ekzekuto en la Crystal-lingvo.

Ĉefaj ŝanĝoj:

  • La kompililo aldonis kontrolon de la korespondado inter la nomoj de la argumentoj en la efektivigo de la abstrakta metodo kaj en ĝia difino. Miskongruo de nomo nun generas averton: abstrakta klaso FooAbstract abstrakta def foo(numero : Int32) : Nil finklaso Foo < FooAbstract def foo(nomo : Int32) : Nil p nomo end end 6 | def foo(name : Int32) : Nil ^— Averto: pozicia parametro 'nomo' respondas al parametro 'nombro' de la anstataŭita metodo FooAbstract#foo(number : Int32), kiu havas malsaman nomon kaj povas influi la nomitan argumenton.
  • Kiam vi asignas la valoron de variablo al argumento de netajpita metodo, tiu argumento nun estas limigita de la tipo de tiu variablo. klaso Foo @x : Int64 def initialize(x) @x = x # parametro x estos de tipo @x end end
  • Aldono de komentarioj al la parametroj de metodoj aŭ makrooj estas permesita. def foo(@[EbleNeuzata] x); fino#OK
  • Aldonita subteno por uzi konstantojn kiel indeksojn kaj nomojn en opoj. KEY = "s" foo = {s: "String", n: 0} metas foo[KEY].size
  • Aldonitaj novaj metodoj File#delete? al la File API por forigi dosierojn kaj dosierujojn. kaj Dir#delete?, kiuj resendas false se la dosiero aŭ dosierujo ne ekzistas.
  • Plifortigis la protekton de la metodo File.tempfile, kiu nun ne permesas nulajn signojn en ĉenoj formantaj dosiernomon.
  • Aldonita NO_COLOR mediovariablo por malŝalti kolormarkigon en kompililo kaj interpretisto eligo.
  • Signife plibonigita laboro en interpretista reĝimo.

fonto: opennet.ru

Aldoni komenton