I bring to your attention a translation of the report of Robert Conrad from the last HaxeUp Sessions 2019 Linz last October . This talk is about porting the CrossCode game , originally written in HTML5, to the console . If you like the translation, I recommend that you also watch it in the original in English - Robert is a very cheerful person, he is constantly joking and it is interesting to listen to him.

: Deck13, , ( ). (, Surge 2).
(), , .
.

Kha, Kinc Krom β . . SDL, - - ( , ).
Kinc C/C++. Kha β Haxe Kinc (Windows, Linux, Mac OS, Android, iOS, Nintendo Switch ..), , Kha (WebGL Canvas).
Krom β JavaScript, Web-API. API, Kinc, JS , .. . Krom Chakra Microsoft Kha.

, Kha β Armory3D ArmorPaint:

RPG Playground β , Kha. RPG Makerβ .

, Kha / Kinc / Krom 2D-, 3D-.
β CrossCode:
CrossCode β Action RPG, . , β 30 , 20 .

CrossCode Windows, MacOS Linux PlayStation 4, Xbox One Nintendo Switch. CrossCode HTML5-, .
βHTML5-β CrossCode?
- JavaScript
- Canvas 2d API WebAudio API

β β β JavaScript?β: , , , - Java :)
, ( , )...

Java? Java β - .

, - ?
, , - β Simula Smalltalk.

Simula β , , , , .
Simula, ( C++). , , β . , , , .

Smalltalk . , Simula , :
- Smalltalk ,
- Smalltalk JIT-
- Smalltalk β
.

Smalltalk Self β -, Smalltalk , :
Self , , .

, Java (.. , ):
Java Simula β . C Java Smalltalk: JIT- (garbage collection). Java, .

, , JavaScript:
- JavaScript β ( Smalltalk) , ,
- JavaScript β . , β (, , SIMD)
- JavaScript . ,
var
let
, ==
===
. JavaScript β , : [] + ""
. , ( ) . CrossCode , . - JavaScript Self ( ). Smalltalk JavaScript . β .

β CrossCode , :

- CrossCode 2018 , Deck13 Spotlight , . . , β β . , . , .

:

Impact β 2D- HTML5. 2010 , . Impact , 2018 MIT.

Impact Kha, . CrossCode β 3 ( ):
- JavaScript, . Canvas WebAudio API. ,
- JIT- JavaScript (, V8), JavaScript
- , JavaScript

:
- Kinc ( Kinc β Xbox 360 Playstation 3)
- Duktape β JavaScript
- Canvas WebAudio API β ( ), .
PlayStation 4 .

, PlayStation. , JavaScript, C++, . , .. JavaScript, JavaScript . .

β JIT- JavaScript:
V8 β , Krom, , .. . V8 CrossCode.
JavaScriptCore β , , EA Webkit β , Electronic Arts. EA Webkit , - , GPL, Electronic Arts , , .

β Chakra β JIT- Microsoft. , . Chakra , .. Microsoft Edge Chromium, , . CrossCode , Chakra .

Chakra ( β ).
JIT- β , .
. β , NDA.

, , iOS. , JIT- iOS?
:
- iOS . iOS (writable memory). iOS- Firefox Chrome Webkit , .
, , .
- β β JIT- JavaScript. , .. .

β .
, CrossCode β . : , , , .
, , Minecraft, Minecraft . .

. Ahead-of-Time (AOT) JavaScript. , .
β . β β.

:
CrossCode β ~1 GB json- . , . ββ β , β . .

β . ββ ~10 ( 3.4 ). , JavaScript (, , WebWorker API, CrossCode API ). , , 60 , , , : JIT-, , JavaScript- , V8 ( V8 , ).
, , .

β , AOT- , , . 30 , .

, , . , , . .

AOT- JavaScript ?
, JavaScript.
, . , , 60 . ββ 16,6 , β , , . (, ), .
, , . , . .

, β , ββ a
, ( ).

JavaScript, .
, , .
, , JavaScript ( Self) : , , , ..

. :
xx = b.x;
, x
β .
1 2 , 1 β-β (cache miss).
JavaScript - :
, C- ( , C-).

β CrossCode , JavaScript-:
β Nintendo Switch ( CrossCode β , - ., βSwitch when?β)!

JavaScript AOT-:
Flow Facebook ( , , ).
TypeScript β , JavaScript.

βAOT JavaScriptβ, , AOT-. , ( ) β :
, 2 JS- ( , .. , , ..).

, AOT- PHP β , .

β :
, CrossCode . - , JavaScript C++. , , CrossCode :)

NectarJS β AOT- JavaScript ( ). . . , .. , JavaScript-, . , .

Haxe.
:
- Haxe JavaScript. , , : Haxe ActionScript 3; ActionScript 3 β , ECMAScript 4; ECMAScript 4 β JavaScript
- Haxe ( JavaScript, , ). . ,
- Haxe C++ ( , ), ββ ( , )
- Haxe
β JavaScript- Haxe. , , , :
- Haxe ,
- Haxe , JavaScript .

Impact , : Impact ig.Class
, ( Java :) ) β JavaScript ( JavaScript , , ).
, , , .. , ig.Class
Haxe. CrossCode ! , JavaScript- Java.

, , Impact:
, (.. β , , , ).

Haxe , JavaScript β JavaScript this
, bind
.
Haxe- ( JavaScript-) .

Haxe JavaScript , .
, Haxe JavaScript, , ( ). .

, Haxe JavaScript β . , JavaScript β 64- . Haxe JavaScript , Math.round/ceil/floor
. Haxe ( ), Haxe β 32-. , , . , . , .. , , - ( , 32 ) . -.
, .. Haxe Math.fround/fceil/ffloor
, .

: Haxe JavaScript , , JavaScript ( ECMAScript 2015) , , . Haxe . Haxe.

, , Haxe . , Haxe , , , , .
, . CrossCode hxcpp. Haxe- JavaScript, , , - . , , .

hxcpp (hxcpp β C++ Haxe) HL/C, - HashLink C-. , HL/C, , hxcpp- . hxcpp β CrossCode .
Deck13 IncrediBuild β , ββ (, C++ ) , .
ββ β point-and-click :) , , : , , .

Kha hxcpp, CrossCode:
-, Kha. Kha (audio mixer), Haxe. . , : hxcpp , , , . β ββ.
, ( hxcpp), Kha .

-, hxcpp, .
Haxe 4, hxcpp -. hxcpp Kha β hxcpp, Kha.

-, , (generational garbage collector). - hxcpp , . hxcpp , ββ , , 30 ββ.
: - , , .
, Kha, generational garbage collector - . , β , :)

, :
β Unknown
.
:
1
, ββ, Double
( , JavaScript , )Boolean
Array
( Array
, , []
, )- . , Impact, . , , . , , ββ (map-like) . , ββ , , ,

:
String
β- ,
Multiple
. , , , , . Multiple
, , , , ( Multiple
, , ).Nothing
Function
ββ (.. JavaScript )Undecidable
β β β (boss enemy) β . , β JSON ( , , ). Undecidable
- Multiple
-, , .

:
, ββ , .
β β β. β . a.x
, a
( a
), x
. x
. , ββ , . x
ββ . , Boolean
Double
Object
, .. JavaScript . Double
Object
β Multiple
.

β (type clash), :
a
, , b
. b
, a
ββ.

ββ (soft type clash), β JavaScript , , null
undefined
. Multiple
.

, , β , .
β Undecidable
, .. .
Undecidable
-.
Undecidable
-, , Unknown
- ( , ). Undecidable
.
, , Undecidable
-, . , , Undecidable
-, JSON.

β β. ?
JavaScript- , , , (.. , ).
( , ). : , . , .
, .

, , Mutliple
-: , , ββ , Mutliple
-.
, ββ:
- ,
x
var a = {};
- ββ ,
Multiple
-
x
a
(a[βxβ] = x;
), ββ . , Mutliple
- (var xx = a[βxβ]; // xx Multiple
)

- ,
Mutliple
-, () (xx.something(really_weird_object);
) - (, , )
- , , , . , , , .
, ( ) ( ). , , ( ).

, CrossCode eval
β , JavaScript , . JavaScript, JavaScript-. JavaScript, eval
.

, , , . , Multiple
- . Multiple
, ββ β β (type hints), JavaScript- , . CrossCode β , Multiple
, , , , .

, CrossCode β , V8 ( , V8).

, , :
- , ,
- ( CrossCode )
- ββ ( )

, Haxe:
, , , Haxe - , ( β ).

CrossCode, ββ JavaScript, Haxe ( , , , ).

JavaScript, , :

, JavaScript CrossCode ( ), JavaScript β , .

, JavaScript- ββ Java- ( JavaScript Java, ), JavaScript- . AOT-.

And a little about Deck13 Spotlight, the publisher of CrossCode:
If you donβt want to write your JavaScript compiler (or do such things), then Robert, as an employee of the company, can do this :)
Deck13 Spotlight is engaged in publishing small indie games and a significant argument in favor of working with them is the opportunity to attract experienced developers from the Deck13 studio. Therefore, the publisher will be able to help indie companies in all matters related to the development and porting of games.
Thank you for the attention!