What the Haxe?
?
Runs anywhere
JavaScript, C++, PHP, Python, Lua, C, C#, Java, HashLink, NekoVM, FlashPlayer
Does everything
OOP, FP, LOP, AOP. Nominal & structural subtyping, type inference, GADT, pattern matching, abstract data types,
static extension, compile time metaprogramming ...
Haxe is a language unicorn.
TFW explaining Haxe
Secret Services
?
Healthcare
TiVo
Game Developers
Game Developer Barbie
15
Years
Ago
Still a thing
- Netscape, iCab, IE for Mac
- PHP4, register_globals
- Java Applets, RealPlayer, ...
Yet to come
- Rails, Django, Symfony, Zend, ASP.NET MVC, ...
- jQuery, Ext.js, YUI, GWT, Silverlight, ...
- JSON
- Facebook, Youtube, Twitter
- Intel Macs, usable desktop Linux, Smartphones
- node.js, bower, npm, browserify, webpack, ...
- Safari, Chrome
A taste of early 2004
RIA
PITA
- browsers were a PITA
- backend development was a PITA
- programming with three different languages was a PITA
- exchanging data between three different runtimes was a horrible PITA
MotionTwin
- ActionScriptMetaLanguage
- MotionTypes and MTASC
- NekoVM
- byte code interpreter
- dynamic
- prototype based
- with JIT
2006: haXe
-
one single language to target everything
-
JavaScript typings that worked
-
transparent communication between platforms
Full stack development as it should be!!
Expected reaction
Real Reaction
Why though?
Things change!
- Haxe Foundation
- Haxe team
- manual, cook book
- vshaxe
- still crazy
- still Spartan
- no major backing
- one man show
- lack of documentation
- limited tooling
- too crazy
- overall too Spartan
It's 2019 now, why bother?
Language quality
- type system
- macro system
- compiler speed
- maturity
True native code
Compile to Java or C++ to target Android and iOS respectively
HaxeUI
Haxe at Docler
Prelude
- rewrite Flash part in AS3
- second system syndrome
- enormous complexity, compensated by Flash
- Apple announces FlashPlayer deadline
- Panic!!!
-
direct port to Haxe, assisted with as3hx to get started
Business critical product:
Things happen:
Result
After ~1 year:
- one ~5MB JavaScript file
- provided little more than core functionality
- pretty buggy and slooooooooow
Reaction
Mistakes were made
- started with huge legacy
- not leveraging Haxe's strength
- cumbersome, enterprisey patterns used for simple things
- not a real web app
Things we needed
- template system instead of innerHTML and querySelector
- declarative data binding instead of controller jungle
- simpler mechanisms for composing decoupled parts of the application
The Plan
- observable data layer with support for derived states
- unidirectional data flow
- descriptive UI markup
So ... we need React + MobX?
The Implementation
- type safe template system (HXX = JSX - JS = HX), capable of producing DOM and vDOM, rendered through virtual-dom
- lightweight implementation of observables (think of a mix of knockout.js cold and observables from RxJS)
- coconut: state management and ui component framework forming a cohesive stack
Expected reaction
Real Reaction
Slow and Steady
So, no React then?
- React based rendering implemented and passed QA
- to be shipped "soon"
- smooth transition, with small change in the end:
89 files changed, 376 insertions(+), 427 deletions(-)
LOP
teach your compiler
And much more ...
Time to spread the love!
WTH?
By Juraj Kirchheim
WTH?
- 1,064