haxe & nme
TRANSCRIPT
Haxe17.04.2013 Florian Hofmann
@_astrocreephttp://www.blackgoat.dehttp://www.playata.com
Haxe als Programmiersprache
● Klassisch OO, ähnlich Java oder ActionScript3● Strict Typed / Type inference
Type Inference / Strict Typedvar i;$type(i); // Unknown(0)
i = 1;$type(i); // Int
i = "test"; // Error: String should be Int
Haxe als Programmiersprache
● Klassisch OO, ähnlich Java oder ActionScript3● Strict Typed / Type inference● Packages● Generics
Genericsclass SomeClass<T> {
public arr:Array<T>;
public function new() {arr = new Array();
}}
var instance = new SomeClass<Sprite>();$type(instance.arr) // Array<flash.display.Sprite>
Haxe als Programmiersprache
● Klassisch OO, ähnlich Java oder ActionScript3● Strict Typed / Type inference● Packages● Generics● Inlining● Enums
Enumsenum Suit {
Clubs;Diamonds;Hearts;Spades;
}
class Card {public var suit:Suit;...
Haxe als Programmiersprache
● Klassisch OO, ähnlich Java oder ActionScript3● Strict Typed / Type inference● Packages● Generics● Inlining● Enums● Macros
Macrosclass Test {
macro public static function getBuildDate() {var date = Date.now().toString();return Context.makeExpr(date, Context.currentPos());
}
static function main() {trace(getBuildDate());
}}
Haxe als Programmiersprache
● Klassisch OO, ähnlich Java oder ActionScript3● Strict Typed / Type inference● Packages● Generics● Inlining● Enums● Macros● SPOD Macros● Unit Testing● Externs● usw.
Aufbau
● Sprache für alle Plattformen gleich● Großes Paket an Standardbibliotheken (XML, Math, Crypto,
Datastructures, usw.)● Plattformspezifische APIs (JS->DOM, AS->DisplayList usw.)
Zielplattformen
Plattformunabhängige Programmiersprache● Flash● Javascript● NekoVM● PHP● C++● (Java)● (C#)● (Objective-C)
Haxe Workflow - allgemein
● Code in .hx Files● Build-Config in .hxml Files● Haxe Compiler (2.10 stable, 3.0RC)● kommandozeilenlastig ;)
Haxe Workflow - Entwicklungsumgebung
● Flashdevelop (nur Windows)● SublimeText2 (als Package)● IntelliJ Idea Ultimate● FDT ab V4
Haxe Workflow - Grafik
Kein definierter "Workflow". Hängt von der Zielplattform ab, prinzipiell kann jedes Tool benutzt werden.
Haxe Workflow - Debugging
FlashFlash Debugger notwendig, dann geht das mit jedem Debugger/Profiler
JavascriptGenerierung von Sourcemaps
C++HXCPP Debugger (z.B. mit IntelliJ)
Ressourcen & Doku
● API auf haxe.org/api● Hauptfeatures sind gut dokumentiert auf: haxe.org/doc
Kosten
Compiler selber ist kostenlos und als OpenSource verfügbar!
Zukunftssicherheit
● OpenSource● Aktive Community● Haxe Foundation als Basis
Schwächen
● Keine eigene Zielplattform● Extrem schnelle Entwicklung● Mangelhafter MAC Support (IDE)● Aktuell keine plattformunabhängige 3D-Engine
Stärken
● Keine eigene Zielplattform● Extrem schnelle Entwicklung● Open-Source● AS3 wie es sein sollte● haxelib (Librarymanagement)
haxelib
● Kommandozeilentool zum Verwalten von Bibliotheken● haxelib install xy● haxelib remove xy● haxelib upgrade
NME
"Native" Crossplatform● Web (Flash oder HTML5)● iOS● Android● Windows● MAC● BlackBerry● Air
NME im Vergleich zu "purem" Haxe
NME stellt fast alle AS3 Pakete für sämtliche Zielplattformen zur Verfügung (z.B.: nme.display.*)Im Vergleich zu Haxe muss nicht für jede Zielplattform individueller Code zur grafischen Anzeige geschrieben werden.
NME Workflow
Eigenes Paket an Kommandozeilentools● nme setup xy● nme test● nme build
Eigenes Build-File-FormatDamit auch Zertifikate, ganze Ordner mit Assets etc. mit eingebunden werden können.
NME
Stärken● Auf jeder Plattform die gleiche API● Kommandozeilentools
Schwächen● Overhead● Kleiner Entwicklerstamm● Viele Features leider nur 90%
Beispiele
BeispieleEvoland
BeispielePrezi
Genome2D
● "Increased performance up to 400% in some cases but whats more at least 100% so basically everything I tried yet was atleast 2 times faster than the AS3 version"
● "There are 4 targets at the moment that I am working on 2 flash targets (bitmap/stage3D) and 2 JS targets (canvas/webgl). Thinking about C target as well but we'll see."
http://forum.genome2d.com/viewtopic.php?f=4&t=19
Links
Haxehttp://haxe.orghttp://haxe.org/apihttp://haxe.org/dochttps://groups.google.com/forum/#!forum/haxelang
NMEhttp://www.nme.io