Kha vs HTML5: Compiling JavaScript in C ++

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.


image


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


(), , .
.


image


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.


image


, Kha β€” Armory3D ArmorPaint:



image


RPG Playground β€” , Kha. RPG Maker’ .


image


, Kha / Kinc / Krom 2D-, 3D-.


β€” CrossCode:
CrossCode β€” Action RPG, . , β€” 30 , 20 .


image


CrossCode Windows, MacOS Linux PlayStation 4, Xbox One Nintendo Switch. CrossCode HTML5-, .
β€œHTML5-” CrossCode?


  • JavaScript
  • Canvas 2d API WebAudio API

image


β€œ ” β€œ JavaScript?”: , , , - Java :)
, ( , )...


image


Java? Java β€” - .


image


, - ?
, , - β€” Simula Smalltalk.


image


Simula β€” , , , , .


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


image


Smalltalk . , Simula , :


  • Smalltalk ,
  • Smalltalk JIT-
  • Smalltalk β€”

.


image


Smalltalk Self β€” -, Smalltalk , :


  • Β« Β»,
  • .

Self , , .


image


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


image


, , JavaScript:


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

image


β€” CrossCode , :


  • . , ,
  • , , , . . , , . .

image


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


image


:



image


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


image


Impact Kha, . CrossCode β€” 3 ( ):


  1. JavaScript, . Canvas WebAudio API. ,
  2. JIT- JavaScript (, V8), JavaScript
  3. , JavaScript

image


:


  • Kinc ( Kinc β€” Xbox 360 Playstation 3)
  • Duktape β€” JavaScript
  • Canvas WebAudio API β€” ( ), .

PlayStation 4 .


image


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


image


β€” JIT- JavaScript:
V8 β€” , Krom, , .. . V8 CrossCode.


JavaScriptCore β€” , , EA Webkit β€” , Electronic Arts. EA Webkit , - , GPL, Electronic Arts , , .


image


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


image


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


image


, , iOS. , JIT- iOS?
:


  • iOS . iOS (writable memory). iOS- Firefox Chrome Webkit , .

, , .


- β€œ ” JIT- JavaScript. , .. .


image


β€” .
, CrossCode β€” . : , , , .
, , Minecraft, Minecraft . .


image


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


β€” . β€œ ”.


image


:
CrossCode β€” ~1 GB json- . , . β€œβ€ β€” , β€” . .


image


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


, , .


image


β€” , AOT- , , . 30 , .


image


, , . , , . .


image


AOT- JavaScript ?


, JavaScript.
, . , , 60 . β€œβ€ 16,6 , β€” , , . (, ), .


, , . , . .


image


, β€” , β€œβ€ a, ( ).


image


JavaScript, ., , .


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


image


. :
xx = b.x;, x β€” .


1 2 , 1 β€œ-” (cache miss).


JavaScript - :


  • ,
  • , , . . .

, C- ( , C-).


image


β€” CrossCode , JavaScript-:


  • CrossCode.
  • CrossCode. .

β€” Nintendo Switch ( CrossCode β€” , - ., β€œSwitch when?”)!


image


JavaScript AOT-:
Flow Facebook ( , , ).


TypeScript β€” , JavaScript.


image


β€œAOT JavaScript”, , AOT-. , ( ) β€” :


  • , . .

, 2 JS- ( , .. , , ..).


image


, AOT- PHP β€” , .


image


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


image


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


image


Haxe.
:


  • Haxe JavaScript. , , : Haxe ActionScript 3; ActionScript 3 β€” , ECMAScript 4; ECMAScript 4 β€” JavaScript
  • Haxe ( JavaScript, , ). . ,
  • Haxe C++ ( , ), β€œβ€ ( , )
  • Haxe

β€” JavaScript- Haxe. , , , :


  • Haxe ,
  • Haxe , JavaScript .

image


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


image


, , Impact:


  • script-, src
  • DOM, .

, (.. β€” , , , ).


image


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


image


Haxe JavaScript , .


, Haxe JavaScript, , ( ). .


image


, Haxe JavaScript β€” . , JavaScript β€” 64- . Haxe JavaScript , Math.round/ceil/floor. Haxe ( ), Haxe β€” 32-. , , . , . , .. , , - ( , 32 ) . -.


, .. Haxe Math.fround/fceil/ffloor, .


image


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


image


, , Haxe . , Haxe , , , , .


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


image


hxcpp (hxcpp β€” C++ Haxe) HL/C, - HashLink C-. , HL/C, , hxcpp- . hxcpp β€” CrossCode .


Deck13 IncrediBuild β€” , β€œβ€ (, C++ ) , .


β€œβ€ β€” point-and-click :) , , : , , .


image


Kha hxcpp, CrossCode:
-, Kha. Kha (audio mixer), Haxe. . , : hxcpp , , , . β€” β€œβ€.


, ( hxcpp), Kha .


image


-, hxcpp, .


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


image


-, , (generational garbage collector). - hxcpp , . hxcpp , β€œβ€ , , 30 β€œβ€.
: - , , .
, Kha, generational garbage collector - . , β€” , :)


image


, :
β€” Unknown.


:


  • 1, β€œβ€, Double ( , JavaScript , )
  • Boolean Array ( Array, , [], )
  • . , Impact, . , , . , , β€œβ€ (map-like) . , β€œβ€ , , ,

image


:


  • String β€”
  • ,
  • Multiple. , , , , . Multiple , , , , ( Multiple, , ).
  • Nothing
  • Function β€œβ€ (.. JavaScript )
  • Undecidable β€” β€œ ” (boss enemy) β€” . , β€” JSON ( , , ). Undecidable- Multiple-, , .

image


:
, β€œβ€ , .
β€” β€œ ”. β€” . a.x, a ( a), x . x . , β€œβ€ , . x β€œβ€ . , Boolean Double Object, .. JavaScript . Double Object β€” Multiple.


image


β€” (type clash), :


  • ,
  • .

a , , b. b , a β€œβ€.


image


β€œβ€ (soft type clash), β€” JavaScript , , null undefined. Multiple.


image


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


image


β€œ ”. ?
JavaScript- , , , (.. , ).
( , ). : , . , .
, .


image


, , Mutliple-: , , β€œβ€ , Mutliple-.
, β€œβ€:


  • , x
  • var a = {};
  • β€œβ€ , Multiple-
    x a (a[β€˜x’] = x;), β€œβ€ . , Mutliple- (var xx = a[β€˜x’]; // xx Multiple)

image


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

, ( ) ( ). , , ( ).


image


, CrossCode eval β€” , JavaScript , . JavaScript, JavaScript-. JavaScript, eval.


image


, , , . , Multiple- . Multiple, β€œβ€ β€œ ” (type hints), JavaScript- , . CrossCode β€” , Multiple, , , , .


image


, CrossCode β€” , V8 ( , V8).


image


, , :


  • , ,
  • ( CrossCode )
  • β€œβ€ ( )

image


, Haxe:


  • ,
  • , JavaScript Haxe.

, , , Haxe - , ( β€” ).


image


CrossCode, β€œβ€ JavaScript, Haxe ( , , , ).


image


JavaScript, , :


  • , ,
  • ECMAScript ( ). ,
  • , .

image


, JavaScript CrossCode ( ), JavaScript β€” , .


image


, JavaScript- β€œβ€ Java- ( JavaScript Java, ), JavaScript- . AOT-.


image


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!


All Articles