Ich mache Sie auf eine Übersetzung des Berichts von Robert Conrad von den letzten HaxeUp Sessions 2019 Linz im vergangenen Oktober aufmerksam . In diesem Vortrag geht es darum , das ursprünglich in HTML5 geschriebene CrossCode- Spiel auf die Konsole zu portieren . Wenn Ihnen die Übersetzung gefällt, empfehle ich Ihnen, sie auch im Original auf Englisch anzusehen - Robert ist eine sehr fröhliche Person, er scherzt ständig und es ist interessant, ihm zuzuhören.
![Bild](https://habrastorage.org/webt/tr/xt/qx/trxtqx3khpzmab1xbw4bddafyc8.png)
: Deck13, , ( ). (, Surge 2).
(), , .
.
![Bild](https://habrastorage.org/webt/p1/w8/r_/p1w8r_rwdqrzxxhs2undkaz7yg8.png)
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.
![Bild](https://habrastorage.org/webt/ng/9w/us/ng9wusl1dhasgfqb5e0v_lmrop4.png)
, Kha — Armory3D ArmorPaint:
![Bild](https://habrastorage.org/webt/1h/kz/jf/1hkzjfm-r5yoxhxg1h7und0ubco.png)
RPG Playground — , Kha. RPG Maker’ .
![Bild](https://habrastorage.org/webt/ef/qi/6g/efqi6gp1g4opmwbnyd_rqbejufa.png)
, Kha / Kinc / Krom 2D-, 3D-.
— CrossCode:
CrossCode — Action RPG, . , — 30 , 20 .
![Bild](https://habrastorage.org/webt/xf/4z/uq/xf4zuq7n31ewrnz3zm7ajlgjeek.png)
CrossCode Windows, MacOS Linux PlayStation 4, Xbox One Nintendo Switch. CrossCode HTML5-, .
“HTML5-” CrossCode?
- JavaScript
- Canvas 2d API WebAudio API
![Bild](https://habrastorage.org/webt/co/zy/u3/cozyu3goshyi4fdiit6js1ieaa8.png)
“ ” “ JavaScript?”: , , , - Java :)
, ( , )...
![Bild](https://habrastorage.org/webt/uh/oe/c0/uhoec0qa_c2c-bdiipdy0ocl7ry.png)
Java? Java — - .
![Bild](https://habrastorage.org/webt/bp/h-/ja/bph-jaqctykk-r1uorqpo5znygw.png)
, - ?
, , - — Simula Smalltalk.
![Bild](https://habrastorage.org/webt/gc/0v/gp/gc0vgpmv0hsvhaksnfzzlds7qaq.png)
Simula — , , , , .
Simula, ( C++). , , — . , , , .
![Bild](https://habrastorage.org/webt/h7/pz/hr/h7pzhr7kvlo0tqngkxb1xbtnp74.png)
Smalltalk . , Simula , :
- Smalltalk ,
- Smalltalk JIT-
- Smalltalk —
.
![Bild](https://habrastorage.org/webt/9c/lb/kb/9clbkbpdsse3go4kbaypo8x2fiw.png)
Smalltalk Self — -, Smalltalk , :
Self , , .
![Bild](https://habrastorage.org/webt/xj/kv/-a/xjkv-auicicknxe-wnbkd92xmu0.png)
, Java (.. , ):
Java Simula — . C Java Smalltalk: JIT- (garbage collection). Java, .
![Bild](https://habrastorage.org/webt/to/v_/mc/tov_mch-s4lcvhvlu2-eiowfrfc.png)
, , JavaScript:
- JavaScript — ( Smalltalk) , ,
- JavaScript — . , — (, , SIMD)
- JavaScript . ,
var
let
, ==
===
. JavaScript — , : [] + ""
. , ( ) . CrossCode , . - JavaScript Self ( ). Smalltalk JavaScript . — .
![Bild](https://habrastorage.org/webt/re/7s/aq/re7saq9sy3gt8yzwhkit5d2a-_a.png)
— CrossCode , :
![Bild](https://habrastorage.org/webt/fg/vn/vt/fgvnvtayfbc5nluk5ewyieo2ksg.png)
- CrossCode 2018 , Deck13 Spotlight , . . , — — . , . , .
![Bild](https://habrastorage.org/webt/lj/f4/uj/ljf4ujarxyyolowcccfofkwj00g.png)
:
![Bild](https://habrastorage.org/webt/7j/ct/es/7jctesgr016j61awujtou8qtpui.png)
Impact — 2D- HTML5. 2010 , . Impact , 2018 MIT.
![Bild](https://habrastorage.org/webt/my/yn/ik/myynik38g662unnhnaoqgycflfi.png)
Impact Kha, . CrossCode — 3 ( ):
- JavaScript, . Canvas WebAudio API. ,
- JIT- JavaScript (, V8), JavaScript
- , JavaScript
![Bild](https://habrastorage.org/webt/mm/za/3h/mmza3hc04zryihytacxqxbdg8cc.png)
:
- Kinc ( Kinc — Xbox 360 Playstation 3)
- Duktape — JavaScript
- Canvas WebAudio API — ( ), .
PlayStation 4 .
![Bild](https://habrastorage.org/webt/ii/ci/s3/iicis3h1imsxo2fe-weagolki6c.png)
, PlayStation. , JavaScript, C++, . , .. JavaScript, JavaScript . .
![Bild](https://habrastorage.org/webt/jw/sx/d5/jwsxd57ncegbxqci24tby59i4ne.png)
— JIT- JavaScript:
V8 — , Krom, , .. . V8 CrossCode.
JavaScriptCore — , , EA Webkit — , Electronic Arts. EA Webkit , - , GPL, Electronic Arts , , .
![Bild](https://habrastorage.org/webt/rf/x6/sp/rfx6spfp7-e_gwtjoy-9a6izv1o.png)
— Chakra — JIT- Microsoft. , . Chakra , .. Microsoft Edge Chromium, , . CrossCode , Chakra .
![Bild](https://habrastorage.org/webt/2j/ry/v_/2jryv_rzhv4roxw4hhksk_ron7w.png)
Chakra ( — ).
JIT- — , .
. — , NDA.
![Bild](https://habrastorage.org/webt/c-/0b/lp/c-0blpn9dzu_fxeh7traeocxmeu.png)
, , iOS. , JIT- iOS?
:
- iOS . iOS (writable memory). iOS- Firefox Chrome Webkit , .
, , .
- “ ” JIT- JavaScript. , .. .
![Bild](https://habrastorage.org/webt/v6/8w/ac/v68wacf_t_ncd9csxmleiadsd1y.png)
— .
, CrossCode — . : , , , .
, , Minecraft, Minecraft . .
![Bild](https://habrastorage.org/webt/67/ek/s5/67eks5nzao8m4je_ixwzyyvvisi.png)
. Ahead-of-Time (AOT) JavaScript. , .
— . “ ”.
![Bild](https://habrastorage.org/webt/to/0r/d7/to0rd74wcpqtxmbovkxyrhee4h0.png)
:
CrossCode — ~1 GB json- . , . “” — , — . .
![Bild](https://habrastorage.org/webt/2u/zb/jl/2uzbjl3bo3-n_5z0tipyh2lqyoa.png)
— . “” ~10 ( 3.4 ). , JavaScript (, , WebWorker API, CrossCode API ). , , 60 , , , : JIT-, , JavaScript- , V8 ( V8 , ).
, , .
![Bild](https://habrastorage.org/webt/cf/5c/rs/cf5crsfgvr3sl7r_05xzfmron-s.png)
— , AOT- , , . 30 , .
![Bild](https://habrastorage.org/webt/5p/ow/pc/5powpcriqksiozs25hlj7dez-dm.png)
, , . , , . .
![Bild](https://habrastorage.org/webt/rk/tr/ti/rktrtic4xaxu4hq6hisctjnl6sk.png)
AOT- JavaScript ?
, JavaScript.
, . , , 60 . “” 16,6 , — , , . (, ), .
, , . , . .
![Bild](https://habrastorage.org/webt/ro/6e/dd/ro6eddrhrcs-z0nkqprtpprvr2o.png)
, — , “” a
, ( ).
![Bild](https://habrastorage.org/webt/pm/xj/ux/pmxjuxaxnxmnemmrinoe0g7iuau.png)
JavaScript, .
, , .
, , JavaScript ( Self) : , , , ..
![Bild](https://habrastorage.org/webt/le/xw/ot/lexwotlvzgkqmni49ncx5das6lg.png)
. :
xx = b.x;
, x
— .
1 2 , 1 “-” (cache miss).
JavaScript - :
, C- ( , C-).
![Bild](https://habrastorage.org/webt/1c/9q/o-/1c9qo-z_ndhwiopm9d8iw3afmaa.png)
— CrossCode , JavaScript-:
— Nintendo Switch ( CrossCode — , - ., “Switch when?”)!
![Bild](https://habrastorage.org/webt/qk/aw/lf/qkawlfwg3walmid6gyog1wzq_20.png)
JavaScript AOT-:
Flow Facebook ( , , ).
TypeScript — , JavaScript.
![Bild](https://habrastorage.org/webt/jt/se/61/jtse61atn4rtgwiau0l-2llx7ko.png)
“AOT JavaScript”, , AOT-. , ( ) — :
, 2 JS- ( , .. , , ..).
![Bild](https://habrastorage.org/webt/vz/cl/tr/vzcltr2kishc73lsoyc96axr-te.png)
, AOT- PHP — , .
![Bild](https://habrastorage.org/webt/fn/un/ww/fnunwwzrqfncis_gtfammzcz2su.png)
— :
, CrossCode . - , JavaScript C++. , , CrossCode :)
![Bild](https://habrastorage.org/webt/do/vd/au/dovdauwshwgujr4uajkfo8ybnta.png)
NectarJS — AOT- JavaScript ( ). . . , .. , JavaScript-, . , .
![Bild](https://habrastorage.org/webt/k1/oi/pm/k1oipmga_kvaqovu5lzn54vrpi4.png)
Haxe.
:
- Haxe JavaScript. , , : Haxe ActionScript 3; ActionScript 3 — , ECMAScript 4; ECMAScript 4 — JavaScript
- Haxe ( JavaScript, , ). . ,
- Haxe C++ ( , ), “” ( , )
- Haxe
— JavaScript- Haxe. , , , :
- Haxe ,
- Haxe , JavaScript .
![Bild](https://habrastorage.org/webt/zf/xu/aa/zfxuaafxltb9y9uwvzf2-t8eh9y.png)
Impact , : Impact ig.Class
, ( Java :) ) — JavaScript ( JavaScript , , ).
, , , .. , ig.Class
Haxe. CrossCode ! , JavaScript- Java.
![Bild](https://habrastorage.org/webt/mz/ci/du/mzcidufowjhvnnlvx-ohbus8gku.png)
, , Impact:
, (.. — , , , ).
![Bild](https://habrastorage.org/webt/eh/-l/it/eh-litz7gmswjobudesdjo8qrcw.png)
Haxe , JavaScript — JavaScript this
, bind
.
Haxe- ( JavaScript-) .
![Bild](https://habrastorage.org/webt/q2/uk/oj/q2ukojusnx-p-vpinftwr1hbmwo.png)
Haxe JavaScript , .
, Haxe JavaScript, , ( ). .
![Bild](https://habrastorage.org/webt/mp/a8/x_/mpa8x_ijrntzsddn_j5ilzd1ks8.png)
, Haxe JavaScript — . , JavaScript — 64- . Haxe JavaScript , Math.round/ceil/floor
. Haxe ( ), Haxe — 32-. , , . , . , .. , , - ( , 32 ) . -.
, .. Haxe Math.fround/fceil/ffloor
, .
![Bild](https://habrastorage.org/webt/lr/hg/mb/lrhgmbpaf9cz6dlbwavxsnb4n0y.png)
: Haxe JavaScript , , JavaScript ( ECMAScript 2015) , , . Haxe . Haxe.
![Bild](https://habrastorage.org/webt/sg/-t/s-/sg-ts-ziytknjyjunhalhu_8oc4.png)
, , Haxe . , Haxe , , , , .
, . CrossCode hxcpp. Haxe- JavaScript, , , - . , , .
![Bild](https://habrastorage.org/webt/th/0w/kl/th0wklgh77xiebq3bog1v3vbvki.png)
hxcpp (hxcpp — C++ Haxe) HL/C, - HashLink C-. , HL/C, , hxcpp- . hxcpp — CrossCode .
Deck13 IncrediBuild — , “” (, C++ ) , .
“” — point-and-click :) , , : , , .
![Bild](https://habrastorage.org/webt/wp/xm/xg/wpxmxgao5tcyopkcq83buczfgei.png)
Kha hxcpp, CrossCode:
-, Kha. Kha (audio mixer), Haxe. . , : hxcpp , , , . — “”.
, ( hxcpp), Kha .
![Bild](https://habrastorage.org/webt/ab/rx/lm/abrxlm6_u6y6468rgc-z7fuxnia.png)
-, hxcpp, .
Haxe 4, hxcpp -. hxcpp Kha — hxcpp, Kha.
![Bild](https://habrastorage.org/webt/ow/dt/ri/owdtri2yftdqhtvz9g8bhinvhpo.png)
-, , (generational garbage collector). - hxcpp , . hxcpp , “” , , 30 “”.
: - , , .
, Kha, generational garbage collector - . , — , :)
![Bild](https://habrastorage.org/webt/bs/kv/3x/bskv3xfnumx2otgpokqoycpxtqe.png)
, :
— Unknown
.
:
1
, “”, Double
( , JavaScript , )Boolean
Array
( Array
, , []
, )- . , Impact, . , , . , , “” (map-like) . , “” , , ,
![Bild](https://habrastorage.org/webt/xb/ie/t9/xbiet9lv0c0szlb4dkubxsptx7g.png)
:
String
—- ,
Multiple
. , , , , . Multiple
, , , , ( Multiple
, , ).Nothing
Function
“” (.. JavaScript )Undecidable
— “ ” (boss enemy) — . , — JSON ( , , ). Undecidable
- Multiple
-, , .
![Bild](https://habrastorage.org/webt/th/ba/r_/thbar_qsgptrrrkcurfcycdv5ao.png)
:
, “” , .
— “ ”. — . a.x
, a
( a
), x
. x
. , “” , . x
“” . , Boolean
Double
Object
, .. JavaScript . Double
Object
— Multiple
.
![Bild](https://habrastorage.org/webt/py/m3/5r/pym35r5mqa3aopzobji5uvqor3i.png)
— (type clash), :
a
, , b
. b
, a
“”.
![Bild](https://habrastorage.org/webt/yw/ky/ky/ywkykyx07cst9ipr9vyl1siw70m.png)
“” (soft type clash), — JavaScript , , null
undefined
. Multiple
.
![Bild](https://habrastorage.org/webt/_c/o-/zx/_co-zxe7jsmdhvr58dmftvzl81i.png)
, , — , .
— Undecidable
, .. .
Undecidable
-.
Undecidable
-, , Unknown
- ( , ). Undecidable
.
, , Undecidable
-, . , , Undecidable
-, JSON.
![Bild](https://habrastorage.org/webt/p1/ix/op/p1ixophhw0f9j-g-uboc_zlktr0.png)
“ ”. ?
JavaScript- , , , (.. , ).
( , ). : , . , .
, .
![Bild](https://habrastorage.org/webt/oo/ba/in/oobainzpbp9cqedygv2laynajcw.png)
, , Mutliple
-: , , “” , Mutliple
-.
, “”:
- ,
x
var a = {};
- “” ,
Multiple
-
x
a
(a[‘x’] = x;
), “” . , Mutliple
- (var xx = a[‘x’]; // xx Multiple
)
![Bild](https://habrastorage.org/webt/3x/lw/es/3xlwesqwe-nxmynir5hdxf0f5dk.png)
- ,
Mutliple
-, () (xx.something(really_weird_object);
) - (, , )
- , , , . , , , .
, ( ) ( ). , , ( ).
![Bild](https://habrastorage.org/webt/jc/vq/bm/jcvqbmw7ufbpuxqysrtsekvzs1u.png)
, CrossCode eval
— , JavaScript , . JavaScript, JavaScript-. JavaScript, eval
.
![Bild](https://habrastorage.org/webt/jm/lo/gb/jmlogbptpvudyrpap3qyw7nnz5a.png)
, , , . , Multiple
- . Multiple
, “” “ ” (type hints), JavaScript- , . CrossCode — , Multiple
, , , , .
![Bild](https://habrastorage.org/webt/ve/id/5h/veid5h1-kequ5np_k2cundknpn4.png)
, CrossCode — , V8 ( , V8).
![Bild](https://habrastorage.org/webt/as/gw/om/asgwomh5oqflvxk3rn4mlaaksw4.png)
, , :
![Bild](https://habrastorage.org/webt/ag/er/ag/agerag7m0byozq2f8eizailxr2w.png)
, Haxe:
, , , Haxe - , ( — ).
![Bild](https://habrastorage.org/webt/6u/xo/ak/6uxoak2el_hjoihfdhdme6nnu48.png)
CrossCode, “” JavaScript, Haxe ( , , , ).
![Bild](https://habrastorage.org/webt/te/vm/9d/tevm9dnnpbwnwyo2mvaei25jutm.png)
JavaScript, , :
![Bild](https://habrastorage.org/webt/fl/-d/fz/fl-dfzbcguobqweoxpnau4j-bvu.png)
, JavaScript CrossCode ( ), JavaScript — , .
![Bild](https://habrastorage.org/webt/ie/nw/hl/ienwhlfohne81-h5yu7uy-srjjq.png)
, JavaScript- “” Java- ( JavaScript Java, ), JavaScript- . AOT-.
![Bild](https://habrastorage.org/webt/sa/jh/ns/sajhnsxhmlsplmnqpomoas0dwje.png)
Und ein wenig zu Deck13 Spotlight - dem Herausgeber von CrossCode:
Wenn Sie Ihren JavaScript-Compiler nicht schreiben möchten (oder ähnliche Dinge tun möchten), kann Robert dies als Mitarbeiter des Unternehmens tun :)
Deck13 Spotlight veröffentlicht kleine Indie-Spiele und ein wichtiges Argument für die Zusammenarbeit ist die Möglichkeit, erfahrene Entwickler aus dem Deck13-Studio zu gewinnen. Daher kann der Publisher Indie-Unternehmen in allen Fragen im Zusammenhang mit der Entwicklung und Portierung von Spielen unterstützen.
Vielen Dank für Ihre Aufmerksamkeit!