Kha vs HTML5: compilando JavaScript em C ++

Trago a sua atenção uma tradução do relatório de Robert Conrad das últimas Sessões HaxeUp 2019 Linz, em outubro passado . Essa palestra é sobre portar o jogo CrossCode , originalmente escrito em HTML5, para o console . Se você gosta da tradução, eu recomendo que você também assista no original em inglês - Robert é uma pessoa muito alegre, ele está constantemente brincando e é interessante ouvi-la.


imagem


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


(), , .
.


imagem


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.


imagem


, Kha — Armory3D ArmorPaint:



imagem


RPG Playground — , Kha. RPG Maker’ .


imagem


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


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


imagem


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


  • JavaScript
  • Canvas 2d API WebAudio API

imagem


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


imagem


Java? Java — - .


imagem


, - ?
, , - — Simula Smalltalk.


imagem


Simula — , , , , .


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


imagem


Smalltalk . , Simula , :


  • Smalltalk ,
  • Smalltalk JIT-
  • Smalltalk —

.


imagem


Smalltalk Self — -, Smalltalk , :


  • « »,
  • .

Self , , .


imagem


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


imagem


, , JavaScript:


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

imagem


— CrossCode , :


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

imagem


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


imagem


:



imagem


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


imagem


Impact Kha, . CrossCode — 3 ( ):


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

imagem


:


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

PlayStation 4 .


imagem


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


imagem


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


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


imagem


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


imagem


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


imagem


, , iOS. , JIT- iOS?
:


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

, , .


- “ ” JIT- JavaScript. , .. .


imagem


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


imagem


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


— . “ ”.


imagem


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


imagem


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


, , .


imagem


— , AOT- , , . 30 , .


imagem


, , . , , . .


imagem


AOT- JavaScript ?


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


, , . , . .


imagem


, — , “” a, ( ).


imagem


JavaScript, ., , .


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


imagem


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


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


JavaScript - :


  • ,
  • , , . . .

, C- ( , C-).


imagem


— CrossCode , JavaScript-:


  • CrossCode.
  • CrossCode. .

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


imagem


JavaScript AOT-:
Flow Facebook ( , , ).


TypeScript — , JavaScript.


imagem


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


  • , . .

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


imagem


, AOT- PHP — , .


imagem


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


imagem


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


imagem


Haxe.
:


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

— JavaScript- Haxe. , , , :


  • Haxe ,
  • Haxe , JavaScript .

imagem


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


imagem


, , Impact:


  • script-, src
  • DOM, .

, (.. — , , , ).


imagem


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


imagem


Haxe JavaScript , .


, Haxe JavaScript, , ( ). .


imagem


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


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


imagem


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


imagem


, , Haxe . , Haxe , , , , .


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


imagem


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


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


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


imagem


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


, ( hxcpp), Kha .


imagem


-, hxcpp, .


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


imagem


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


imagem


, :
Unknown.


:


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

imagem


:


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

imagem


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


imagem


— (type clash), :


  • ,
  • .

a , , b. b , a “”.


imagem


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


imagem


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


imagem


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


imagem


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


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

imagem


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

, ( ) ( ). , , ( ).


imagem


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


imagem


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


imagem


, CrossCode — , V8 ( , V8).


imagem


, , :


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

imagem


, Haxe:


  • ,
  • , JavaScript Haxe.

, , , Haxe - , ( — ).


imagem


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


imagem


JavaScript, , :


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

imagem


, JavaScript CrossCode ( ), JavaScript — , .


imagem


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


imagem


E um pouco sobre o Deck13 Spotlight - o editor do CrossCode:
se você não quiser escrever seu compilador JavaScript (ou fazer coisas semelhantes), Robert, como funcionário da empresa, poderá fazer isso :)


O Deck13 Spotlight está envolvido na publicação de pequenos jogos independentes, e um argumento significativo a favor de trabalhar com eles é a oportunidade de atrair desenvolvedores experientes do estúdio Deck13. Portanto, a editora poderá ajudar as empresas independentes em todos os assuntos relacionados ao desenvolvimento e portabilidade de jogos.


Obrigado pela atenção!


All Articles