Haxe

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 8. lokakuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 29 muokkausta .
Haxe
Kieliluokka Moniparadigma
Esiintyi 2005
Kehittäjä Haxin säätiö
Vapauta 4.2.5 ( 6. maaliskuuta 2022 )
Tyyppijärjestelmä staattinen , dynaaminen merkintöjen kautta
Vaikutettu Java , OCaml , ActionScript ja MTASC [1]
Lisenssi GPL v2, kirjasto: MIT
Verkkosivusto haxe.org
Alusta ARM , IA-32 , x64
OS Android , iOS _ Linux , macOS , Windows

Haxe on avoimen lähdekoodin , korkean tason, monialustainen ohjelmointikieli ja kääntäjä , jota voidaan käyttää sovellusten rakentamiseen ja lähdekoodin luomiseen eri alustoille säilyttäen samalla yhtä koodikantaa [2] [3] [4] [5] .

Haxe sisältää kaikilla alustoilla tuettuja toimintoja , kuten numeerisia tietotyyppejä, merkkijonoja , taulukoita , sekä tukea joillekin tiedostomuodoille ( xml , zip ) [3] [6] . Haxe sisältää myös tuen erityisille API-liittymille jokaiselle kohdekääntäjäalustalle.

Haxe-kielellä kirjoitettu koodi voidaan kääntää JavaScript , C++ , Java , JVM , PHP , C# , Python , Lua ja Node.js [7] koodiksi . Haxe-koodi käännetään myös SWF:ksi, HashLinkiksi ja Nekoksi , tavukoodiksi , ja se voidaan suorittaa myös tulkintatilassa [7] .

Haxen pääkäyttäjät ovat TiVo , Prezi , Nickelodeon , Disney , Mattel , Hasbro , Coca Cola , Toyota ja BBC [8] [9] . OpenFL ja Flambe  ovat suosittuja Haxe-kehyksiä usean alustan sisällön ja ohjelmien luomiseen yhdestä koodikannasta [9] . Lisäksi Snõwkit [10] kehittyy parhaillaan aktiivisesti . Koska Adobe Flash -teknologia on viime vuosina siirtynyt yhä enemmän HTML5 :n hyväksi , Haxe, Unity ja muut monialustaiset työkalut käyttävät yhä enemmän aikaa jälkimmäiseen säilyttäen samalla Adobe Flash Playerin taaksepäin tuen [9] [11] .

Arkkitehtuuri

Yksi kieli

Merkittävin näkökohta Haxe-arkkitehtuurin kehityksessä oli päätös tukea Adobe Flash-, JavaScript- ja palvelinsovelluksia yhdessä koodikannassa [12] [13] . Tyypillisissä verkkoprojekteissa kehittäjien on käytettävä monia eri kieliä rakentaakseen täydellisen verkkosovelluksen [12] [13] :

Haxe luotiin ajatuksella yhdistää kaikki nämä komponentit yhdeksi koodipohjaksi sekä yksinkertaistaa sovelluskomponenttien välistä vuorovaikutusta [12] [13] [14] .

Nicholas Kennessyn (Haxe-projektin perustaja) kirjoittama kirja kertoo Haxen luomisen alkuperäiset tavoitteet [12] :

Kääntäjä

Haxe-kääntäjä on jaettu yhteen käyttöliittymään ja useisiin taustaohjelmiin. Käyttöliittymä vastaa jäsentämisestä ja tyypin tarkistuksesta, makrojen soveltamisesta, yleisestä optimoinnista, erilaisista koodimuunnoksista ja koodin väliesityksen luomisesta abstraktin syntaksipuun ( ASD) muodossa. Jokainen taustaohjelma on vastuussa tämän AST:n kääntämisestä kohdealustan lähdekoodiksi tai tavukoodiksi .

Kääntäjä on kirjoitettu OCamlilla . Sitä voidaan käyttää palvelintilassa koodin viimeistelyn tukemiseksi IDE:ssä, ja tässä tilassa tuetaan myös välimuistia käännösajan lyhentämiseksi [15] .

Suorituskyky

Haxe-kääntäjä on optimoiva kääntäjä , joka käyttää myös funktioiden korvaamista , jatkuvaa taittoa , kuolleen koodin poistoa (DCE) optimoidakseen koottujen ohjelmien suorituskyvyn.

Haxessa kirjoitettujen ohjelmien suorituskyky riippuu kohdealustasta.

Kehitys

Haxen kehitys aloitettiin lokakuussa 2005 [20] ja ensimmäinen beta-versio julkaistiin helmikuussa 2006. Haxe 1.0 julkaistiin huhtikuussa 2006 ja se tuki hahmontamista Adobe Flashiin , Javascriptiin ja Nekoon .

Haxen ovat kehittäneet Nicolas Cannasse ja muut, ja sen nimi oli alun perin haXe , koska se on lyhyt, yksinkertainen nimi ja "sen nimessä on X" -ominaisuus, joka on välttämätön uuden tekniikan menestymiselle. kieli [21] .

Haxe on avoimen lähdekoodin ActionScript 2 :n seuraaja MTASC- kääntäjälle, jonka myös teki Nicholas Hennessy [12] [22] ja joka on julkaistu GNU General Public License -lisenssin versiolla 2 tai uudemmalla [23] .

Haxella on paljon yhteistä ActionScript 3 :n kanssa . Haxe-kääntäjä on kehitetty OCaml -kielellä , mutta Haxella kirjoittaminen ei edellytä OCamlin tuntemusta.

Haxen käytön etuja ovat:

Lähdekoodi

Suositeltu IDE Haxe-kehitykseen on FlashDevelop [12] , joka tukee ActionScript 2, 3 ja Haxea pääkielinä syntaksin korostuksella , koodin viimeistelyllä ja muilla ominaisuuksilla [12] [25] . Tämä IDE tukee myös koodin taittoa , uudelleenmuodostusta ja interaktiivista virheenkorjausta . [26]

Voidakseen käyttää olemassa olevaa koodia avoimen lähdekoodin yhteisö on luonut lähdekoodin muuntajia seuraaville:

Alustan tuki

Haxe-kieli voidaan kääntää erilaisten virtuaalikoneiden, kuten Adobe Flash Playerin ja Nekon , tavukoodiksi sekä ActionScript 3 :ksi , JavaScript - lähdekoodiksi , mukaan lukien kokeellisesti tuetut C++ ja C# . Tämä eri lähteisiin "kokoamisen" strategia kehitettiin "kirjoita kerran, juokse missä tahansa" -mallin inspiraation alaisena. Tämän strategian avulla ohjelmoija voi myös valita parhaan alustan ohjelmille.

Koodigeneraattori Tulos Alusta Käyttö Mistä Haxen versiosta
AVM1 [6] Tavukoodi Adobe Flash Player 6+ Työpöytä, selain 2005 (alfa)
AVM2 [6] Tavukoodi Adobe Flash Player 9+, Adobe AIR , Tamarin VM Työpöytä, selain, palvelin 2005 (alfa)
ActionScript 3 [6] Lähde Adobe Flash Player 9+ Palvelin, työpöytä 2007 (1.12)
C++ (hxcpp) [6] Lähde Windows, Linux, Mac OS X Palvelin, työpöytä, CLI 2009 (2.04)
C++ Lähde Android [29] , Apple iOS [30] , Palm webOS [31] mobiili 2009 (2.04)
C# [6] Lähde .NET Framework Palvelin, pöytäkone, mobiili 2012 (2.10)
Java [6] Lähde Java Palvelin, työpöytä 2012 (2.10)
JavaScript [6] Lähde HTML5 , Node.js , PhoneGap Palvelin, pöytäkone, selain, mobiili 2006 (beta)
Neko [6] Tavukoodi NekoVM Palvelin, työpöytä, CLI 2005 (alfa)
PHP [6] Lähde PHP palvelin 2008 (2,0)
Python [6] Lähde Python CLI, Web, työpöytä 2014 (3,2)
Lua [32] Lähde Lua Verkko, työpöytä, mobiili 2016 (3,3)

Kieli

Haxe on yleiskäyttöinen oliokieli , joka tukee poikkeusten käsittelyä ja luokkaparametrien tyyppipäätelmiä . Kieli ja kirjastot tukevat myös yleistä ohjelmointia , reflektiota , iteraattoria ja toiminnallista ohjelmointia [33] . Haxe myös, toisin kuin monet muut kielet, tukee sekä staattista että dynaamista kirjoitusta samanaikaisesti. Kääntäjä voi tarkistaa tyyppipäätelmän ja heittää käännösaikavirheitä, mutta kehittäjät voivat myös kytkeä tyyppitarkistuksen pois päältä ja luottaa kohdealustan dynaamiseen tyyppitarkistukseen.

Haxe-kieli on samanlainen kuin ECMAScript , vaikka käytännössä mitään ECMAScript-koodia ei voida kääntää Haxessa ilman muutoksia. Toisin kuin ECMAScript, Haxe on käännetty kieli . Haxeen vaikuttivat ActionScript , Java ja OCaml [13] .

Koska Haxe perustui ActionScript 3 :een , se tukee kaikkia Flash API:n ominaisuuksia, vaikka se vaatiikin parempaa koodausta ja korkeampia kehitysstandardeja kuin Adoben kääntäjät.

hei maailma

Tämä ohjelma kirjoittaa "Hello World" kääntämisen ja suorittamisen jälkeen:

class Main { staattinen toiminto main () { trace ( "Hei maailma" ); } }

Voit testata tätä koodia tallentamalla sen tiedostoon, jolla on nimi Main.hxja suorittamalla Haxe-kääntäjän seuraavilla vaihtoehdoilla: haxe -main Main --interp. Tämä komento käynnistää Haxe Compilerin koodin tulkintatilassa ja näyttää Main.hx:3: Hello world.

Tyyppijärjestelmä

Haxe on staattisesti kirjoitettu kieli. Siinä on monimuotoinen järjestelmä, joka sisältää luokat, rajapinnat, toiminnalliset tyypit, anonyymit tyypit, algebralliset tietotyypit ( ADT:t, joita kutsutaan nimellä " enums " Haxessa) sekä abstrakteja tietotyyppejä. Luokat, algebralliset tietotyypit ja funktiotyypit tukevat tyypin poistamiseen perustuvaa parametrista polymorfismia , jota kutsutaan usein "yleisiksi" muissa oliokielissä.

Haxe sisältää tuen rajoitetulle polymorfismille ja alatyyppipolymorfismille .

Lisäksi Haxe tukee rakenteellista tyypitystä ja nimellistä tyypitystä . Ohjelmoijien asioiden helpottamiseksi ja tyyppiturvallisuudesta tinkimättä Haxe tukee tyyppipäätelmää, mikä monissa tapauksissa poistaa tarpeen kirjoittaa tyyppejä manuaalisesti.

Luokat

Luokat (avainsana "luokka") Haxessa ovat samanlaisia ​​kuin Javassa tai AS3 :ssa . Niiden kentät voivat olla menetelmiä, staattisia luokkamuuttujia tai luokan ilmentymän ominaisuuksia. Haxe tukee "julkisia" ja "yksityisiä" pääsymääritteitä sekä edistyneempiä kulunvalvontamenetelmiä (ACL:t, linkit), jotka kuvataan huomautuksilla. Menetelmät ja staattiset muuttujat, joilla on vakioarvo, voidaan rivittää käyttämällä "inline"-avainsanaa.

Haxen käyttöliittymät ovat samanlaisia ​​kuin Java - rajapinnat .

käyttöliittymä ICreature { public var birth : Date ; julkinen var nimi : String ; julkisen tehtävän ikä (): Int ; } class Fly toteuttaa ICreaturen { julkinen var syntymä : Päivämäärä ; julkinen var nimi : String ; julkinen toiminta ikä () : Väliaikainen palautuspäivä . nyt (). getFullYear () - syntymä . getFullYear (); }

Luettelot

Luetteloidut tyypit  ovat kielen keskeinen ominaisuus. Enumeissa voi olla omat parametrinsa, ja ne voivat olla myös rekursiivisia [34] . Ne ovat samanlaisia ​​kuin algebralliset tietotyypit , koska ne ovat kielillä, kuten ML tai Haskell . Tarkkaan ottaen nämä ovat oikeita summatyyppejä edellyttäen, että niihin sisältyvät tuotetyypit on määriteltävä näiden summatyyppien sisällä. Tämä tarkoittaa, että enumeita ei nimetä vain "maagisiksi numeroiksi", kuten useimmissa kielissä, ne voivat ratkaista tyylikkäästi monimutkaisia ​​arkkitehtonisia ongelmia:

enum Väri { punainen ; vihreä ; sininen ; rgb ( r : Int , g : Int , b : Int ); } luokka Värit { staattinen funktio toInt ( c : Väri ) : Int { paluukytkin ( c ) { tapaus punainen : 0xFF0000 ; _ kotelo vihreä : 0x00FF00 ; kotelo sininen : 0x0000FF_ _ tapaus rgb ( r , g , b ): ( r << 16 ) | ( g << 8 ) | b ; } } staattinen funktio validCalls () { var redint = toInt ( Väri . punainen ); var rgbint = toInt ( väri . rgb ( 100 , 100 , 100 )); } }

Haxe tukee myös parametrisia enum-tyyppejä. Esimerkki on tyyppien Option, Joko ja ConsList toteutus, ja ConsList on myös rekursiivinen:

enum Optio < T > { Jotkut ( v : T ); ei yhtään ; } enum Joko < T , U > { Vasen ( v : T ); Oikea ( v : U ); } enum ConsList < T > { Nolla ; Miinukset ( pää : T , häntä : ConsList < T >); }

Sivuston dokumentaatio osoittaa [35] , että Haxe tukee myös yleistettyjä algebrallisia tyyppejä (GADT), mutta ei anna esimerkkiä sellaisen luomisesta.

Nimettömät tyypit

Anonyymit tyypit määritellään niiden rakenteen selkeällä kuvauksella, niille voidaan myös määrittää alias tyyppimääritelmän avulla (avainsana "typedef"):

typedef Anon = { a : Int , b : String , c : Float -> Void };

Funktiotyypit

Funktiotyypit ovat ensimmäisen luokan objekteja Haxessa. Ne kuvataan nuolilla argumenttityyppien välillä sekä tyyppien ja palautusarvon välillä, kuten monissa muissa toiminnallisissa kielissä. Toisin kuin Haskell tai ML -perhe , kaikki Haxen funktiot eivät ole unaarisia (funktioita yhdellä argumentilla), niitä ei voi käyttää oletuksena osittain . Siten seuraavien esimerkkien tyyppiallekirjoituksilla on eri merkitys kuin yllä olevilla kielillä.

Tyyppi F on funktio, joka ottaa Int:n ja Stringin argumentteina ja palauttaa tuloksena Floatin.

Kielessä, jossa on vain unaarifunktioita, tämä tyyppi tarkoittaisi funktiota, joka ottaa argumenttina Int:n ja palauttaa funktion, jonka tyyppi on String->Float.

Tyypit F2 ja F3 kuvaavat samaa tyyppiä. Ne molemmat kuvaavat binäärifunktioita, jotka palauttavat tyypin F binäärifunktion. F2:lle kuvataan tapaus, jossa funktiotyyppiä käytetään toisen määritelmän sisällä.

typedef F = Int -> String -> Float ; typedef F2 = Int -> Merkkijono -> F ; typedef F3 = Int -> String ->( Int -> String -> Float );

Abstraktityypit

Konsepti, jota kutsutaan abstrakteiksi tyypeiksi , on viimeisin lisäys Haxe-tyyppijärjestelmään. Niiden avulla olemassa olevia tyyppejä voidaan käyttää uudelleen tiettyihin tarkoituksiin, kuten mittayksiköiden tyyppien toteuttamiseen, samalla kun se vähentää huomattavasti eri järjestelmien (kuten mailien ja kilometrien) sekoittamisen mahdollisuutta. Termillä "abstrakti tyyppi" on Haxen kielen kontekstissa eri merkitys kuin tavallisilla abstrakteilla tyypeillä .

Seuraavassa esimerkissä oletetaan, että metrijärjestelmää käytetään oletuksena ja että vanhojen tietojen tukeminen edellyttää muuntamista maileiksi. Haxe pystyy automaattisesti muuttamaan mailit kilometreiksi, mutta ei päinvastoin.

abstrakti Kilometri ( Float ) { public function new ( v : Float ) this = v ; } abstrakti Maili ( Kellu ) { public function new ( v : Float ) this = v ; @: julkiseen rivifunktioon toKilometer (): Kilometer return ( new Kilometer ( this / 0.62137 ) ); } luokka Testi { staattinen vaihtelu km : Kilometri ; staattinen funktio main (){ var one100Miles = new Mailia ( 100 ); km = yksi100 mailia ; jäljittää ( km ); // 160.935 } }

km = one100Miles;Esimerkki osoittaa, että oikeiden yksiköiden käyttämiseksi ei tarvitse tehdä nimenomaista muuntamista .

Rakennekirjoitus

Rakenteellisella kirjoituksella on tärkeä rooli monissa toiminnallisissa ohjelmointikielissä ja samalla melko pieni yleisissä OOP-kielissä. Toisin kuin nimellinen tyyppijärjestelmä, kahden tyypin yhtäläisyys ei määräydy minkään tyyppinimen yhtäläisyyden perusteella, vaan pikemminkin tyypin rakenteen perusteella. Rakennetyyppejä voidaan pitää implisiittisinä rajapinnoina:

class FooBar { julkinen var foo : Int ; public var bar : String ; julkinen funktio new (){ foo = 1 ; palkki = "2" ;} function anyFooBar ( v :{ foo : Int , bar : String }) trace ( v . foo ); staattinen toimintotesti (){ var fb = new FooBar ( ); fb . anyFooBar ( fb ); fb . anyFooBar ({ foo : 123 , bar : "456" }); } }

Katso myös

Myös Haxe-alustalla:

  • Neko
  • OpenFL

Muut JavaScriptiin käännettävät kielet:

Muut monikäyttöiset kielet:

Muistiinpanot

  1. https://haxe.org/manual/introduction-haxe-history.html
  2. Nicolasin ilmoitus oikeinkirjoituksen muutoksesta Haxen virallisella postituslistalla .
  3. 1 2 Ponticelli, Franco. Professional haXe ja Neko  (neopr.) . - Wiley, 2008. - ISBN 0470122137 . Arkistoitu 28. marraskuuta 2015 Wayback Machineen
  4. Ivanov, Mikael. Away3D 3.6 Keittokirja  (määrittämätön) . — Packt Publishing Ltd, 2011. - ISBN 1849512817 . Arkistoitu 2. marraskuuta 2015 Wayback Machinessa
  5. Doucet, Lars Haxe/OpenFL kotipelikonsoleille . Gamasutra (3. kesäkuuta 2015). Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 8. syyskuuta 2015.
  6. 1 2 3 4 5 6 7 8 9 10 11 Johdatus Haxe Standard -kirjastoon Arkistoitu 14. elokuuta 2015 Wayback Machinessa , Haxe Docs
  7. 12 kääntäjän kohdetta . Haxe - monikäyttöinen työkalupakki . Haettu 23. helmikuuta 2021. Arkistoitu alkuperäisestä 2. maaliskuuta 2021.
  8. Haxea käyttävät yritykset arkistoitu 7. syyskuuta 2015 Wayback Machinessa , Haxe Docs
  9. 1 2 3 Doucet, Lars Hyvä Adobe: Tue Haxea, tallenna työkalusi . Gamasutra (24. kesäkuuta 2014). Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 24. syyskuuta 2015.
  10. snõwkitistä . snõwkit (20. syyskuuta 2014). Haettu 9. elokuuta 2016. Arkistoitu alkuperäisestä 9. elokuuta 2016.
  11. Doucet, Lars Flash on kuollut, eläköön OpenFL! . Gamasutra (18. maaliskuuta 2014). Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 30. elokuuta 2015.
  12. 1 2 3 4 5 6 7 Grden, John; Mineault, Patrick; Balkan, Aral; Hughes, Marc; Arnold, Wade. Tärkeä opas avoimen lähdekoodin Flash-kehitykseen  . - Apress , 2008. - P. Luku 9 (Haxen käyttäminen). — ISBN 1430209941 . Arkistoitu 8. helmikuuta 2016 Wayback Machineen
  13. 1 2 3 4 Haxe-haastattelu  (määrätön) . - Io Programo, 2009. - 1. huhtikuuta. - S. 1-6 . Arkistoitu alkuperäisestä 8. joulukuuta 2015.
  14. Fisher, Matt. HTML5 Flash-kehittäjille  (määrittämätön) . — Packt Publishing Ltd, 2013. - ISBN 1849693331 . Arkistoitu 24. marraskuuta 2015 Wayback Machineen
  15. Palvelintilan komentorivi:haxe --wait [host:]port
  16. AS3 vs haXe suorituskyky Arkistoitu 5. tammikuuta 2013 Wayback Machinen SplashDust-verkkosivustolle
  17. AS3 Performance Optimization arkistoitu 6. lokakuuta 2015 Wayback Machinessa , Starling Wiki
  18. 1 2 Vadim Djatšenko. Kohdassa "Et voi tehdä hyviä HTML5-pelejä Haxessa" (downlink) . Yellow After Life (5. joulukuuta 2013). Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 30. syyskuuta 2015. 
  19. Kaya, Talha OpenFL & Haxe, A Bumpy Start . Gamasutra (4. heinäkuuta 2014). Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 24. syyskuuta 2015.
  20. Haxe 3.2 -julkaisu . Github. Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 21. helmikuuta 2016.
  21. Haxe-postituslistapostitus nimeämisestä . Arkistoitu alkuperäisestä 28. maaliskuuta 2007.
  22. MTASC Compiler arkistoitu 20. lokakuuta 2020 Wayback Machinessa , MTASC:n verkkosivuilla
  23. Hax-lisenssisivu . Arkistoitu alkuperäisestä 12. toukokuuta 2012.
  24. Haxin esittelysivu . Arkistoitu alkuperäisestä 4. toukokuuta 2012.
  25. Pääsivu, FlashDevelop Wiki arkistoitu 10. lokakuuta 2015 Wayback Machinessa , "ensimmäisen luokan tuki Flash ActionScriptille (AS2 ja AS3) ja Haxe-kehitykseen"
  26. Haxe-tuki arkistoitu 6. heinäkuuta 2015 Wayback Machinessa , FlashDevelop Wikissä
  27. as3hx Arkistoitu 14. toukokuuta 2015 Wayback Machinessa , AS3 to Haxe -muuntimessa, Haxe-lähdekoodivarastossa
  28. CS2HX - C# to haXe -muunnin Arkistoitu 4. maaliskuuta 2010 Wayback Machinessa , CodePlex-projektin isännöinti
  29. Blogiviesti, jossa mainitaan Android-portin edistyminen . Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 28. joulukuuta 2015.
  30. Haxe, iPhone ja C++ viimein arkistoitu 15. huhtikuuta 2012 Wayback Machinessa , GameHaxen verkkosivuilla
  31. Kuinka pääset alkuun Haxe 2.06:n ja webOS PDK:n kanssa [arkistoitu WayBackMachinessa ] . Arkistoitu alkuperäisestä 22. lokakuuta 2014.
  32. Hei Lua! - Haxe - Cross-platform Toolkit . Haettu 9. elokuuta 2016. Arkistoitu alkuperäisestä 6. elokuuta 2016.
  33. Haxe-kieliviittaus . Arkistoitu alkuperäisestä 2. toukokuuta 2012.
  34. Haxe-viite, joka kertoo enumin käytöstä . Arkistoitu alkuperäisestä 11. toukokuuta 2012.
  35. Kieliominaisuudet . Haxe - monikäyttöinen työkalupakki . Haxin säätiö. Haettu 30. huhtikuuta 2015. Arkistoitu alkuperäisestä 16. toukokuuta 2015.
  36. Scala-JavaScript-kääntäjä . Haettu 9. lokakuuta 2015. Arkistoitu alkuperäisestä 10. elokuuta 2015.

Linkit