Kha与HTML5:在C ++中编译JavaScript

我提请您注意去年十月在林兹举行的2019年HaxeUp会议上罗伯特康拉德的报告的翻译该报告是关于将CrossCode游戏(最初用HTML5编写)移植到控制台的过程如果您喜欢翻译,我建议您也以英文原版观看-罗伯特是一个非常开朗的人,他一直在开玩笑,听他说话很有趣。


图片


: 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 ( ):


  1. JavaScript, . Canvas WebAudio API. ,
  2. JIT- JavaScript (, V8), JavaScript
  3. , 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-:


  • CrossCode.
  • CrossCode. .

— 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:


  • script-, src
  • DOM, .

, (.. — , , , ).


图片


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


图片


— (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:


  • ,
  • , JavaScript Haxe.

, , , Haxe - , ( — ).


图片


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


图片


JavaScript, , :


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

图片


, JavaScript CrossCode ( ), JavaScript — , .


图片


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


图片


还有一点有关Deck13 Spotlight(CrossCode的发行者)的信息:
如果您不想编写JavaScript编译器(或做类似的事情),那么作为公司员工的Robert可以这样做:)


Deck13 Spotlight从事发行小型独立游戏,而与之合作的一个重要理由是有机会吸引Deck13工作室的资深开发人员。因此,发行商将能够在与游戏开发和移植有关的所有事宜上帮助独立公司。


感谢您的关注!


All Articles