Kha vs HTML5: Kompilasi JavaScript di C ++

Saya membawa kepada Anda terjemahan laporan Robert Conrad dari HaxeUp Sessions 2019 Linz terakhir Oktober lalu . Laporan ini adalah tentang proses porting ke konsol game CrossCode , yang aslinya ditulis dalam HTML5. Jika Anda menyukai terjemahannya, saya sarankan Anda juga menontonnya dalam versi aslinya dalam bahasa Inggris - Robert adalah orang yang sangat ceria, ia selalu bercanda dan menarik untuk mendengarkannya.


gambar


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


(), , .
.


gambar


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.


gambar


, Kha β€” Armory3D ArmorPaint:



gambar


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


gambar


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


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


gambar


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


  • JavaScript
  • Canvas 2d API WebAudio API

gambar


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


gambar


Java? Java β€” - .


gambar


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


gambar


Simula β€” , , , , .


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


gambar


Smalltalk . , Simula , :


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

.


gambar


Smalltalk Self β€” -, Smalltalk , :


  • Β« Β»,
  • .

Self , , .


gambar


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


gambar


, , JavaScript:


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

gambar


β€” CrossCode , :


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

gambar


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


gambar


:



gambar


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


gambar


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


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

gambar


:


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

PlayStation 4 .


gambar


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


gambar


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


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


gambar


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


gambar


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


gambar


, , iOS. , JIT- iOS?
:


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

, , .


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


gambar


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


gambar


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


β€” . β€œ ”.


gambar


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


gambar


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


, , .


gambar


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


gambar


, , . , , . .


gambar


AOT- JavaScript ?


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


, , . , . .


gambar


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


gambar


JavaScript, ., , .


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


gambar


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


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


JavaScript - :


  • ,
  • , , . . .

, C- ( , C-).


gambar


β€” CrossCode , JavaScript-:


  • CrossCode.
  • CrossCode. .

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


gambar


JavaScript AOT-:
Flow Facebook ( , , ).


TypeScript β€” , JavaScript.


gambar


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


  • , . .

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


gambar


, AOT- PHP β€” , .


gambar


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


gambar


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


gambar


Haxe.
:


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

β€” JavaScript- Haxe. , , , :


  • Haxe ,
  • Haxe , JavaScript .

gambar


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


gambar


, , Impact:


  • script-, src
  • DOM, .

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


gambar


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


gambar


Haxe JavaScript , .


, Haxe JavaScript, , ( ). .


gambar


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


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


gambar


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


gambar


, , Haxe . , Haxe , , , , .


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


gambar


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


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


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


gambar


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


, ( hxcpp), Kha .


gambar


-, hxcpp, .


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


gambar


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


gambar


, :
β€” Unknown.


:


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

gambar


:


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

gambar


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


gambar


β€” (type clash), :


  • ,
  • .

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


gambar


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


gambar


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


gambar


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


gambar


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


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

gambar


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

, ( ) ( ). , , ( ).


gambar


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


gambar


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


gambar


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


gambar


, , :


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

gambar


, Haxe:


  • ,
  • , JavaScript Haxe.

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


gambar


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


gambar


JavaScript, , :


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

gambar


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


gambar


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


gambar


Dan sedikit tentang Deck13 Spotlight - penerbit CrossCode:
Jika Anda tidak ingin menulis kompiler JavaScript Anda (atau melakukan hal serupa), maka Robert, sebagai karyawan perusahaan, dapat melakukan ini :)


Deck13 Spotlight terlibat dalam penerbitan game indie kecil dan argumen penting yang mendukung bekerja dengan mereka adalah kesempatan untuk menarik pengembang berpengalaman dari studio Deck13. Oleh karena itu, penerbit akan dapat membantu perusahaan indie dalam semua hal yang terkait dengan pengembangan dan porting game.


Terimakasih atas perhatiannya!


All Articles