Ohjelmointikielen Haxe 4.0 julkaisu

Saatavilla työkalupakin julkaisu Haxe 4.0, joka sisältää samannimisen moniparadigman korkean tason ohjelmointikielen vahvalla kirjoituksella, ristikääntäjän ja vakiofunktiokirjaston. Projekti tukee kääntämistä C++-, HashLink/C-, JavaScript-, C#-, Java-, PHP-, Python- ja Lua-sovelluksiin sekä kääntämistä JVM-, HashLink/JIT-, Flash- ja Neko-tavukoodiin, joilla on pääsy kunkin kohdealustan alkuperäisiin ominaisuuksiin. Kääntäjän koodi jakelija GPLv2-lisenssillä sekä Haxelle kehitetty vakiokirjasto ja virtuaalikone Neko MIT-lisenssillä.

Kieli on ilmaisusuuntautunut vahvalla kirjoituksella. Oliolähtöisiä, yleisiä ja toiminnallisia ohjelmointikonsepteja tuetaan.
Haxe-syntaksi on lähellä ECMAScriptiä ja laajenee sen ominaisuudet, kuten staattinen kirjoittaminen, autotyyppien päättely, kuvioiden täsmääminen, yleiset ominaisuudet, iteraattoripohjaiset silmukoille, AST-makrot, GADT (Generalized Algebraic Data Types), abstraktit tyypit, anonyymit rakenteet, yksinkertaistetut taulukkomääritykset, ehdolliset käännöslausekkeet, metatietojen liittäminen kenttiin , luokat ja lausekkeet, merkkijonojen interpolointi ('Minun nimeni on $nimi'), tyyppiparametrit ("new Main‹String›('foo')") ja paljon enemmän.

luokkakoe {
staattinen funktio main() {
var people = [
"Elizabeth" => "Ohjelmointi",
"Joel" => "Design"
];

for (nimi in people.keys()) {
var työ = ihmiset[nimi];
trace('$name tekee $työtä elantonsa vuoksi!');
}
}
}

Pääasiallinen innovaatioita versio 4.0:

  • Uusi syntaksi funktiotyypin "(nimi:merkkijono, ikä:Int)->Bool" tai "(String, Int)->Bool" määrittämiseen "String->Int->Bool" sijaan.
  • Nuolifunktion syntaksi on "(a, b) -> a + b" eikä "funktio(a, b) return a + b".
  • Suojaus nolla-arvojen käyttöön liittyviltä ongelmilta (kokeellinen ominaisuus, valinnaisesti käytössä tietyissä kentissä, luokissa tai paketeissa).
  • "Viimeinen" avainsana on luokkakenttiä ja paikallisia muuttujia, jotka ovat muuttumattomia. "lopullista" voidaan myös käyttää funktioiden määrittämiseen, jotta ne estetään periytymisen ohittamisesta ja luokille/rajapinnoille, joita ei voida periä.
  • Tukea Unicode-standardi perustyypille "String" kaikissa käännöskohteissa paitsi Nekossa.
  • Sisäänrakennettu tyhjästä uudelleen kirjoitettu tulkki, joka tulee nyt nimellä eval. Uuden tulkin ansiosta komentosarjat ja makrot toimivat paljon nopeammin. Interaktiivinen virheenkorjaustila on tuettu.
  • Uusi kohdejärjestelmä kokoamista varten (target) Hashlink - Erityisesti Haxelle suunniteltu korkean suorituskyvyn ajonaika, joka tukee kääntämistä tavukoodiksi JIT:lle tai C:lle, on helppo integroida C:n kanssa sekä pääsy matalan tason numeerisiin tyyppeihin ja osoittimiin.
  • Uusi JVM-kohde - mahdollistaa jvm-tavukoodin luomisen ohittamalla Java-koodin käännösvaiheen lisäämällä "-D jvm" -lipun, kun kohdistat Javassa.
  • Mahdollisuus ottaa käyttöön inline-käyttöön funktioita tai rakentajia kutsuttaessa, vaikka niitä ei ole ilmoitettu sellaisiksi.
  • Mahdollisuus sisällyttää staattiset laajennukset kun määritetään tyyppi (kuten "enum") käyttämällä "@:using(path.ToExtension)".
  • Abstraktityypit tukevat nyt "@:op(a.b)"-operaattorin "set"-versiota "obj.foo = bar" -lausekkeiden lataamiseksi uudelleen.
  • "For"-silmukkasyntaksi tukee nyt avainarvon iteraatiota: "for (avain => arvo kokoelmassa) {}".
  • Tuki xml-tyyppisten merkintöjen käyttämiselle lausekkeissa: “var a = ‹hi/›;”. Toistaiseksi tämä ominaisuus on käytettävissä vain jäsentämiseen makrojen kanssa, ja se on suunnitteluvaiheessa.
  • Anonyymien rakennetyyppien "täydellisen" merkinnän valinnaisten kenttien syntaksi on: "{ var ?f:Int; }" (vaihtoehto lyhyelle "{ ?f:Int }").
  • Enum-arvot voivat nyt olla oletusarvoja funktion argumenteille: "function foo‹T›(optio:Option‹T› = Ei mitään)".
  • Syntaksi "enum abstract Name(BasicType) {}" ei enää vaadi @:-etuliitettä "enum"-kentässä.
  • Automaattinen numerointi abstrakteille luetteloille:

    enum abstract Foo(Int) {
    var A; // 0
    var B; // 1
    }
    enum abstract Bar(String) {
    var A; // "A"
    var B; // "B"
    }

  • Avainsana "extern" ei enää vaadi @:-etuliitettä.
  • Poistettu vaihtoehto "työkoneet Dynaaminen" päästäksesi luokkakenttiin merkkijonojen kautta. Saatavilla ulkoisille luokille tai toteutuksena abstraktilla tyypillä.
  • Lisätty "A & B" -syntaksi tyyppileikkaukselle, joka tällä hetkellä koskee vain anonyymejä rakenteita ja tyyppiparametrirajoituksia. Vanha rajoitussyntaksi on poistettu.
  • Tyhjien "Map"-instanssien luominen on mahdollista syntaksilla "var map:Map‹Int, String› = [];" samanlainen kuin taulukko.
  • Lisätty tietorakenne "haxe.ds.ReadOnlyArray".
  • Metatiedoissa voi nyt olla nimiavaruuksia ("@:prefix.name function() {…}"). Samoin määritelmien kanssa: "#jos (joku.lippu ... #loppu".
  • Uusi palveluprotokolla käytössä oleville IDE:ille VSCode-laajennus.
  • Päivitetty ulkoiset määritelmät (ulkoiset) Web API:ille ja lisätty puuttuvat määritelmät.

Lähde: opennet.ru

Lisää kommentti