HaXe

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania
haXe
Pojawienie się 2005
Paradygmat wieloparadygmatowy
Typowanie statyczne
Twórca Nicolas Cannasse
Platforma sprzętowa wieloplatformowy
Platforma systemowa wieloplatformowy
haxe.org

haXe - (wymawiane jako hex[1]) to wieloplatformowy język programowania open source, przeznaczony do tworzenia interaktywnych aplikacji webowych. Obecnie współpracuje z: Adobe Flash, JavaScript, PHP, C++ oraz Neko VM[2]. Twórcą haXe jest Nicolas Cannasse.

Historia[edytuj | edytuj kod]

Prace nad językiem haXe rozpoczęto 22 października 2005 roku. Pierwsza wersja alpha języka została wydana 14 listopada tego samego roku. Pierwsza wersja beta została wydana 4 lutego 2006 roku. Wersja haXe 1.0 została wydana 17 kwietnia tego samego roku. Obecna wersja języka haXe jest wersją 2.05 i została wydana 9 stycznia 2010 roku[3].

Kompilator do języka haXe został wydany na licencji GNU General Public License.

Nazewnictwo i wymowa[edytuj | edytuj kod]

Nazwa haXe (wymawiane jako hex, aczkolwiek autorzy jedynej opublikowanej jak dotąd książki o tym języku wymawiają nazwę jako "hacks"[4]) została wybrana, ponieważ jest krótka, prosta i "zawiera X w nazwie", co autor języka uważa za niezbędne, aby nowa technologia odniosła sukces[5].

Język[edytuj | edytuj kod]

Oficjalna strona haXe opisuje ten język jako "zorientowany webowo język uniwersalny". Szczególną cechą haXe, która tłumaczy powyższy opis, jest docelowa obsługa wielu maszyn wirtualnych: Adobe Flash AVM1 (Flash 6-8) oraz AVM2 (Flash 9+), Javascript, NekoVM, PHP, a także maszynę wirtualną ogólnego przeznaczenia stworzoną przez twórcę języka haXe. haXe oraz jego biblioteki zostały zaprojektowane tak, aby zapewnić maksymalną obsługę platform docelowych, a kompilator generuje docelowy kod źródłowy lub kod bajtowy w zależności od wybranych opcji i języka. Określenie "zorientowany webowo język uniwersalny" bierze się z jego umiejętności produkowania tego samego kodu docelowo dla różnych warstw aplikacji WWW.

haXe obecnie obsługuje:

Rozwijana obsługa języka:

Język haXe jest zbliżony do ECMAScript, aczkolwiek prawie żadna aplikacja napisana w ECMAScript nie będzie działała w haXe bez modyfikacji. W przeciwieństwie do ECMAScript, haXe jest językiem kompilowanym. HaXe to zorientowany obiektowo język ogólnego przeznaczenia, obsługujący wyjątki, inferencję typów oraz klasy parametryzowane. Na funkcjonalność haXe oraz jego bibliotek składają się m.in. typy generyczne, mechanizm refleksji, iteratory oraz programowanie funkcjonalne[7]. Język ten obsługuje silne i dynamiczne typowanie, co jest dość niespotykane wśród języków programowania. Kompilator automatycznie sprawdza typy i zwraca błędy w czasie kompilacji, ale także umożliwia programiście wyłączenie sprawdzania typów w haXe i poleganie na systemie typów platformy docelowej.

Parametry funkcji w języku haXe mogą być definiowane bardzo precyzyjnie:

   function multipleparams(threedimensionalarray : Array<Array<Array<Int>>>, stringval : String, boolval : Bool) {}
   function optionalargument( ?i : Int ) : Int {return 0;} // opcjonalny parametr typu int, zwraca int
   function functionasparameter( f : Void -> Void ) {f();} // wywołanie funkcji bez parametrów 
   function anotherfunctionparm( f : Int -> Int ) {var result = f(1);} // wywołanie funkcji zwracającej int, z parametrem typu int
   function icoulddoanything(d : Dynamic) : Dynamic {return d;} // funkcja pobierająca i zwracająca parametr dowolnego typu

Typy wyliczeniowe są kluczową cechą języka; mogą być rekursywne i zawierać parametry[8]. Są zbliżone do typów algebraicznych w językach jak ML lub Haskell. Typy wyliczeniowe w haXe nie są indeksowanymi wartościami o "magicznych numerach", jak ma to miejsce w większości języków, ale są bardziej abstrakcyjne: nie mają przypisanej żadnej wartości, ale mogą być przypisane do zmiennych, jak w poniższym przykładzie:

   enum Color {
       red;
       green;
       blue;
       rgb: ( r : Int, g : Int, b : Int );
   }

   class Colors {
       static function toInt( c : Color ) : Int {
           return switch( c ) {
               case red: 0xFF000;
               case green: 0x00FF00;
               case blue: 0x0000FF;
               case rgb(r,g,b): (r << 16) | (g << 8) | b;
           }
       }
       static function validCalls() {
            var redint = toInt(red);
            var rgbint = toInt(rgb(100,100,100));            
       }
   }

(Zmodyfikowany kod ze strony języka)

Demonstracja użycia języka haXe do celów graficznych – przykładowy kod dla Adobe Flash (pochodzący ze strony języka):

   class Test {
   static function main {
       var mc : flash.MovieClip = flash.Lib.current;
       mc.beginFill(0xFF0000);
       mc.moveTo(50,50);
       mc.lineTo(100,50);
       mc.lineTo(100,100);
       mc.lineTo(50,100);
       mc.endFill();
   }
  }

Ten kod narysuje kwadrat przy użyciu obiektu Flash MovieClip.

Implementacja i wydajność kompilatora[edytuj | edytuj kod]

Kompilator do języka haXe został zaimplementowany w języku Ocaml. Kod wygenerowany z języka haXe jest uruchamiany na wirtualnej maszynie, dlatego też do tworzenia w nim aplikacji nie jest wymagana znajomość OCamla. Oznacza to również, że pomiary wydajności dają różne wyniki w zależności od docelowej platformy.

Test wydajności wskazuje[9], że kod bajtowy Flash 9 (AVM2) skompilowany przy użyciu haXe jest bardziej wydajny niż równoważny kod AS3 na kompilatorze Adobe. Od publikacji tego testu wydajność kompilatora haXe została zwiększona poprzez dodanie funkcji inline.

Przypisy

Linki zewnętrzne[edytuj | edytuj kod]