Lansarea limbajului de programare Haxe 4.0

Disponibil lansarea trusei de instrumente Haxe 4.0, care include limbajul de programare la nivel înalt cu mai multe paradigme cu același nume, cu tastare puternică, un compilator încrucișat și o bibliotecă standard de funcții. Proiectul acceptă traducerea în C++, HashLink/C, JavaScript, C#, Java, PHP, Python și Lua, precum și compilarea în JVM, HashLink/JIT, Flash și bytecode Neko, cu acces la capacitățile native ale fiecărei platforme țintă. Codul compilatorului distribuit de sub licența GPLv2 și o bibliotecă standard și o mașină virtuală dezvoltate pentru Haxe Neko sub licența MIT.

Limba este orientat spre expresie cu tastare puternică. Sunt acceptate concepte de programare orientate pe obiecte, generice și funcționale.
Sintaxa Haxe este apropiată de ECMAScript și se extinde caracteristicile sale, cum ar fi tastarea statică, inferența autotipului, potrivirea modelelor, generice, bucle for bazate pe iterator, macrocomenzi AST, GADT (Tipuri de date algebrice generalizate), tipuri abstracte, structuri anonime, definiții de matrice simplificate, expresii de compilare condiționată, atașarea metadatelor la câmpuri , clase și expresii, interpolare de șiruri („Numele meu este $nume”), parametri de tip („new Main‹String›(‘foo’)”) și mult mai mult.

test de clasa {
funcția statică main() {
var oameni = [
"Elizabeth" => "Programare",
„Joel” => „Design”
];

pentru (nume în people.keys()) {
var job = persoane[nume];
trace('$numele isi face $treaba ca sa traiasca!');
}
}
}

Principalul inovații versiunea 4.0:

  • Sintaxă nouă pentru specificarea tipului de funcție „(name:String, age:Int)->Bool” sau „(String, Int)->Bool” în loc de „String->Int->Bool”.
  • Sintaxa funcției săgeată este „(a, b) -> a + b” în loc de „funcție(a, b) return a + b”.
  • Protecție împotriva problemelor asociate cu utilizarea valorilor Null (funcție experimentală, activată opțional pentru anumite câmpuri, clase sau pachete).
  • Cuvântul cheie „final” este pentru câmpurile de clasă și variabilele locale care sunt imuabile. „final” poate fi, de asemenea, utilizat pentru a defini funcții pentru a preveni suprascrise lor de moștenire și pentru clase/interfețe care nu pot fi moștenite.
  • Sprijini Standard Unicode pentru tipul de bază „String” pe toate țintele de compilare, cu excepția Neko.
  • Interpret încorporat rescris de la zero, care acum vine sub numele A evalua. Datorită noului interpret, scripturile și macrocomenzile rulează mult mai rapid. Modul interactiv de depanare este acceptat.
  • Noul sistem țintă pentru compilare (țintă) Hashlink - un runtime de înaltă performanță conceput special pentru Haxe, care acceptă compilarea la bytecode pentru JIT sau C, are o integrare ușoară cu C, precum și acces la tipuri și pointeri numerici de nivel scăzut.
  • Noua țintă JVM - vă permite să generați bytecode jvm omitând pasul de compilare a codului Java, adăugând indicatorul „-D jvm” atunci când vizați în Java.
  • Abilitatea de a implementa inline la punctul de a apela funcții sau constructori, chiar dacă nu sunt declarați ca atare.
  • Posibilitate de includere extensii statice când declarați un tip (cum ar fi „enum”) folosind „@:using(path.ToExtension)”.
  • Tipurile abstracte acceptă acum o versiune „set” a operatorului „@:op(ab)” pentru a reîncărca expresiile „obj.foo = bar”.
  • Sintaxa buclei „for” acceptă acum iterația cheie-valoare: „for (cheie => valoare în colecție) {}”.
  • Suport pentru utilizarea markup-ului de tip xml în expresii: „var a = ‹hi/›;”. Deocamdată, această caracteristică este disponibilă doar pentru analizarea cu macrocomenzi și se află în stadiul de proiectare.
  • Sintaxa pentru câmpurile opționale din notația „completă” a tipurilor de structuri anonime este: „{ var ?f:Int; }" (o alternativă la scurtul "{ ?f:Int }").
  • Valorile enumerate pot fi acum valori implicite pentru argumentele funcției: „funcție foo‹T› (opțiune:Opțiune‹T› = Nici unul)”.
  • Sintaxa „enum abstract Name(BasicType) {}” nu mai necesită prefixul „@:” în „enum”.
  • Numerotare automată pentru enumerări abstracte:

    enumerare abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enumerare bară abstractă (șir) {
    var A; // "A"
    var B; // "B"
    }

  • Cuvântul cheie „extern” nu mai necesită utilizarea prefixului „@:”.
  • A fost eliminată opțiunea "ustensile Dynamic" pentru a accesa câmpurile de clasă prin șiruri. Disponibil pentru clase externe sau prin implementare de tip abstract.
  • S-a adăugat sintaxa „A și B” pentru intersecția tipului, care în prezent se aplică numai structurilor anonime și constrângerilor de parametri de tip. Vechea sintaxă de constrângere a fost eliminată.
  • Crearea instanțelor „Hartă” goale este disponibilă prin sintaxa „var map:Map‹Int, String› = [];” similar cu o matrice.
  • S-a adăugat structura de date „haxe.ds.ReadOnlyArray”.
  • Metadatele pot avea acum spații de nume (“@:prefix.name function() {…}”). La fel și cu definițiile: „#dacă (unele.steagul ... #sfârșit”.
  • Noul protocol de serviciu pentru IDE-urile utilizate în plugin pentru VSCode.
  • Definiții externe actualizate (externe) pentru API-urile web și adăugate cele lipsă.

Sursa: opennet.ru

Adauga un comentariu