Kha vs HTML5: Compiler JavaScript en C ++

J'attire votre attention sur une traduction du rapport de Robert Conrad des dernières sessions HaxeUp Sessions 2019 à Linz en octobre dernier . Cette présentation concerne le portage du jeu CrossCode , initialement écrit en HTML5, sur la console . Si vous aimez la traduction, je vous recommande de la regarder également dans l'original en anglais - Robert est une personne très joyeuse, il plaisante constamment et il est intéressant de l'écouter.


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 ObjectMultiple.


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


Et un peu sur Deck13 Spotlight, l'éditeur de CrossCode:
Si vous ne voulez pas écrire votre compilateur JavaScript (ou faire de telles choses), alors Robert, en tant qu'employé de l'entreprise, peut le faire :)


Deck13 Spotlight est engagé dans la publication de petits jeux indépendants et un argument important en faveur de travailler avec eux est la possibilité d'attirer des développeurs expérimentés du studio Deck13. Par conséquent, l'éditeur pourra aider les sociétés indépendantes dans toutes les questions liées au développement et au portage de jeux.


Merci pour l'attention!


All Articles