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.

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

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.

, Kha β Armory3D ArmorPaint:

RPG Playground β , Kha. RPG Makerβ .

, Kha / Kinc / Krom 2D-, 3D-.
β CrossCode:
CrossCode β Action RPG, . , β 30 , 20 .

CrossCode Windows, MacOS Linux PlayStation 4, Xbox One Nintendo Switch. CrossCode HTML5-, .
βHTML5-β CrossCode?
- JavaScript
- Canvas 2d API WebAudio API

β β β JavaScript?β: , , , - Java :)
, ( , )...

Java? Java β - .

, - ?
, , - β Simula Smalltalk.

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

Smalltalk . , Simula , :
- Smalltalk ,
- Smalltalk JIT-
- Smalltalk β
.

Smalltalk Self β -, Smalltalk , :
Self , , .

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

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

β CrossCode , :

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

:

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

Impact Kha, . CrossCode β 3 ( ):
- JavaScript, . Canvas WebAudio API. ,
- JIT- JavaScript (, V8), JavaScript
- , JavaScript

:
- Kinc ( Kinc β Xbox 360 Playstation 3)
- Duktape β JavaScript
- Canvas WebAudio API β ( ), .
PlayStation 4 .

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

β JIT- JavaScript:
V8 β , Krom, , .. . V8 CrossCode.
JavaScriptCore β , , EA Webkit β , Electronic Arts. EA Webkit , - , GPL, Electronic Arts , , .

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

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

, , iOS. , JIT- iOS?
:
- iOS . iOS (writable memory). iOS- Firefox Chrome Webkit , .
, , .
- β β JIT- JavaScript. , .. .

β .
, CrossCode β . : , , , .
, , Minecraft, Minecraft . .

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

:
CrossCode β ~1 GB json- . , . ββ β , β . .

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

β , AOT- , , . 30 , .

, , . , , . .

AOT- JavaScript ?
, JavaScript.
, . , , 60 . ββ 16,6 , β , , . (, ), .
, , . , . .

, β , ββ a
, ( ).

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

. :
xx = b.x;
, x
β .
1 2 , 1 β-β (cache miss).
JavaScript - :
, C- ( , C-).

β CrossCode , JavaScript-:
β Nintendo Switch ( CrossCode β , - ., βSwitch when?β)!

JavaScript AOT-:
Flow Facebook ( , , ).
TypeScript β , JavaScript.

βAOT JavaScriptβ, , AOT-. , ( ) β :
, 2 JS- ( , .. , , ..).

, AOT- PHP β , .

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

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

Haxe.
:
- Haxe JavaScript. , , : Haxe ActionScript 3; ActionScript 3 β , ECMAScript 4; ECMAScript 4 β JavaScript
- Haxe ( JavaScript, , ). . ,
- Haxe C++ ( , ), ββ ( , )
- Haxe
β JavaScript- Haxe. , , , :
- Haxe ,
- Haxe , JavaScript .

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

, , Impact:
, (.. β , , , ).

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

Haxe JavaScript , .
, Haxe JavaScript, , ( ). .

, Haxe JavaScript β . , JavaScript β 64- . Haxe JavaScript , Math.round/ceil/floor
. Haxe ( ), Haxe β 32-. , , . , . , .. , , - ( , 32 ) . -.
, .. Haxe Math.fround/fceil/ffloor
, .

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

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

hxcpp (hxcpp β C++ Haxe) HL/C, - HashLink C-. , HL/C, , hxcpp- . hxcpp β CrossCode .
Deck13 IncrediBuild β , ββ (, C++ ) , .
ββ β point-and-click :) , , : , , .

Kha hxcpp, CrossCode:
-, Kha. Kha (audio mixer), Haxe. . , : hxcpp , , , . β ββ.
, ( hxcpp), Kha .

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

-, , (generational garbage collector). - hxcpp , . hxcpp , ββ , , 30 ββ.
: - , , .
, Kha, generational garbage collector - . , β , :)

, :
β Unknown
.
:
1
, ββ, Double
( , JavaScript , )Boolean
Array
( Array
, , []
, )- . , Impact, . , , . , , ββ (map-like) . , ββ , , ,

:
String
β- ,
Multiple
. , , , , . Multiple
, , , , ( Multiple
, , ).Nothing
Function
ββ (.. JavaScript )Undecidable
β β β (boss enemy) β . , β JSON ( , , ). Undecidable
- Multiple
-, , .

:
, ββ , .
β β β. β . a.x
, a
( a
), x
. x
. , ββ , . x
ββ . , Boolean
Double
Object
, .. JavaScript . Double
Object
β Multiple
.

β (type clash), :
a
, , b
. b
, a
ββ.

ββ (soft type clash), β JavaScript , , null
undefined
. Multiple
.

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

β β. ?
JavaScript- , , , (.. , ).
( , ). : , . , .
, .

, , Mutliple
-: , , ββ , Mutliple
-.
, ββ:
- ,
x
var a = {};
- ββ ,
Multiple
-
x
a
(a[βxβ] = x;
), ββ . , Mutliple
- (var xx = a[βxβ]; // xx Multiple
)

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

, CrossCode eval
β , JavaScript , . JavaScript, JavaScript-. JavaScript, eval
.

, , , . , Multiple
- . Multiple
, ββ β β (type hints), JavaScript- , . CrossCode β , Multiple
, , , , .

, CrossCode β , V8 ( , V8).

, , :
- , ,
- ( CrossCode )
- ββ ( )

, Haxe:
, , , Haxe - , ( β ).

CrossCode, ββ JavaScript, Haxe ( , , , ).

JavaScript, , :

, JavaScript CrossCode ( ), JavaScript β , .

, JavaScript- ββ Java- ( JavaScript Java, ), JavaScript- . AOT-.

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!