Kha vs HTML5: compilando JavaScript en C ++

Les traigo a su atención una traducción del informe de Robert Conrad del último HaxeUp Sessions 2019 Linz en octubre pasado . Este informe trata sobre el proceso de transferir a la consola el juego CrossCode , originalmente escrito en HTML5. Si le gusta la traducción, le recomiendo que también la vea en el original en inglés: Robert es una persona muy alegre, bromea constantemente y es interesante escucharlo.


imagen


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


(), , .
.


imagen


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.


imagen


, Kha — Armory3D ArmorPaint:



imagen


RPG Playground — , Kha. RPG Maker’ .


imagen


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


— CrossCode:
CrossCode — Action RPG, . , — 30 , 20 .


imagen


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


  • JavaScript
  • Canvas 2d API WebAudio API

imagen


“ ” “ JavaScript?”: , , , - Java :)
, ( , )...


imagen


Java? Java — - .


imagen


, - ?
, , - — Simula Smalltalk.


imagen


Simula — , , , , .


Simula, ( C++). , , — . , , , .


imagen


Smalltalk . , Simula , :


  • Smalltalk ,
  • Smalltalk JIT-
  • Smalltalk —

.


imagen


Smalltalk Self — -, Smalltalk , :


  • « »,
  • .

Self , , .


imagen


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


imagen


, , JavaScript:


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

imagen


— CrossCode , :


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

imagen


- CrossCode 2018 , Deck13 Spotlight , . . , — — . , . , .


imagen


:



imagen


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


imagen


Impact Kha, . CrossCode — 3 ( ):


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

imagen


:


  • Kinc ( Kinc — Xbox 360 Playstation 3)
  • Duktape — JavaScript
  • Canvas WebAudio API — ( ), .

PlayStation 4 .


imagen


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


imagen


— JIT- JavaScript:
V8 — , Krom, , .. . V8 CrossCode.


JavaScriptCore — , , EA Webkit — , Electronic Arts. EA Webkit , - , GPL, Electronic Arts , , .


imagen


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


imagen


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


imagen


, , iOS. , JIT- iOS?
:


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

, , .


- “ ” JIT- JavaScript. , .. .


imagen


— .
, CrossCode — . : , , , .
, , Minecraft, Minecraft . .


imagen


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


— . “ ”.


imagen


:
CrossCode — ~1 GB json- . , . “” — , — . .


imagen


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


, , .


imagen


— , AOT- , , . 30 , .


imagen


, , . , , . .


imagen


AOT- JavaScript ?


, JavaScript.
, . , , 60 . “” 16,6 , — , , . (, ), .


, , . , . .


imagen


, — , “” a, ( ).


imagen


JavaScript, ., , .


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


imagen


. :
xx = b.x;, x — .


1 2 , 1 “-” (cache miss).


JavaScript - :


  • ,
  • , , . . .

, C- ( , C-).


imagen


— CrossCode , JavaScript-:


  • CrossCode.
  • CrossCode. .

— Nintendo Switch ( CrossCode — , - ., “Switch when?”)!


imagen


JavaScript AOT-:
Flow Facebook ( , , ).


TypeScript — , JavaScript.


imagen


“AOT JavaScript”, , AOT-. , ( ) — :


  • , . .

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


imagen


, AOT- PHP — , .


imagen


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


imagen


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


imagen


Haxe.
:


  • Haxe JavaScript. , , : Haxe ActionScript 3; ActionScript 3 — , ECMAScript 4; ECMAScript 4 — JavaScript
  • Haxe ( JavaScript, , ). . ,
  • Haxe C++ ( , ), “” ( , )
  • Haxe

— JavaScript- Haxe. , , , :


  • Haxe ,
  • Haxe , JavaScript .

imagen


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


imagen


, , Impact:


  • script-, src
  • DOM, .

, (.. — , , , ).


imagen


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


imagen


Haxe JavaScript , .


, Haxe JavaScript, , ( ). .


imagen


, Haxe JavaScript — . , JavaScript — 64- . Haxe JavaScript , Math.round/ceil/floor. Haxe ( ), Haxe — 32-. , , . , . , .. , , - ( , 32 ) . -.


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


imagen


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


imagen


, , Haxe . , Haxe , , , , .


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


imagen


hxcpp (hxcpp — C++ Haxe) HL/C, - HashLink C-. , HL/C, , hxcpp- . hxcpp — CrossCode .


Deck13 IncrediBuild — , “” (, C++ ) , .


“” — point-and-click :) , , : , , .


imagen


Kha hxcpp, CrossCode:
-, Kha. Kha (audio mixer), Haxe. . , : hxcpp , , , . — “”.


, ( hxcpp), Kha .


imagen


-, hxcpp, .


Haxe 4, hxcpp -. hxcpp Kha — hxcpp, Kha.


imagen


-, , (generational garbage collector). - hxcpp , . hxcpp , “” , , 30 “”.
: - , , .
, Kha, generational garbage collector - . , — , :)


imagen


, :
Unknown.


:


  • 1, “”, Double ( , JavaScript , )
  • Boolean Array ( Array, , [], )
  • . , Impact, . , , . , , “” (map-like) . , “” , , ,

imagen


:


  • String
  • ,
  • Multiple. , , , , . Multiple , , , , ( Multiple, , ).
  • Nothing
  • Function “” (.. JavaScript )
  • Undecidable — “ ” (boss enemy) — . , — JSON ( , , ). Undecidable- Multiple-, , .

imagen


:
, “” , .
— “ ”. — . a.x, a ( a), x . x . , “” , . x “” . , Boolean Double Object, .. JavaScript . Double ObjectMultiple.


imagen


— (type clash), :


  • ,
  • .

a , , b. b , a “”.


imagen


“” (soft type clash), — JavaScript , , null undefined. Multiple.


imagen


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


imagen


“ ”. ?
JavaScript- , , , (.. , ).
( , ). : , . , .
, .


imagen


, , Mutliple-: , , “” , Mutliple-.
, “”:


  • , x
  • var a = {};
  • “” , Multiple-
    x a (a[‘x’] = x;), “” . , Mutliple- (var xx = a[‘x’]; // xx Multiple)

imagen


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

, ( ) ( ). , , ( ).


imagen


, CrossCode eval — , JavaScript , . JavaScript, JavaScript-. JavaScript, eval.


imagen


, , , . , Multiple- . Multiple, “” “ ” (type hints), JavaScript- , . CrossCode — , Multiple, , , , .


imagen


, CrossCode — , V8 ( , V8).


imagen


, , :


  • , ,
  • ( CrossCode )
  • “” ( )

imagen


, Haxe:


  • ,
  • , JavaScript Haxe.

, , , Haxe - , ( — ).


imagen


CrossCode, “” JavaScript, Haxe ( , , , ).


imagen


JavaScript, , :


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

imagen


, JavaScript CrossCode ( ), JavaScript — , .


imagen


, JavaScript- “” Java- ( JavaScript Java, ), JavaScript- . AOT-.


imagen


Y un poco sobre Deck13 Spotlight, el editor de CrossCode:
si no desea escribir su compilador de JavaScript (o hacer cosas similares), Robert, como empleado de la empresa, puede hacer esto :)


Deck13 Spotlight se dedica a publicar pequeños juegos independientes y un argumento importante a favor de trabajar con ellos es la oportunidad de atraer desarrolladores experimentados del estudio Deck13. Por lo tanto, el editor podrá ayudar a las empresas independientes en todos los asuntos relacionados con el desarrollo y portabilidad de juegos.


¡Gracias por la atención!


All Articles