Blender 新歡 Armory3D - Haxe Programming Language

Haxe 是一個(gè)現(xiàn)代的編程語言,同時(shí)它又是一套轉(zhuǎn)譯工具。
haXe 語言語法類似 Java,haXe 命令本身是編譯器又是轉(zhuǎn)譯工具,可以將源代碼構(gòu)建為跨平臺(tái) 應(yīng)用程序,并且允許訪問每個(gè)平臺(tái)的本地功能。自有虛擬機(jī) HashLink 和 NekoVM,但也可以在 解釋模式下運(yùn)行,例如 `haXe -cp src --main Main --interp`。
? 源文檔 https://github.com/Jeangowhy/opendocs/tree/main/haxe.md
haXe 項(xiàng)目于 2005/10/22 日由法國開發(fā)商 Nicolas Cannasse 啟動(dòng),是開源 ActionScript 2 編譯器 MTASC(Motion Twin Action Script compiler)和內(nèi)部 MTypes 語言的繼任者,后者 嘗試將類型推理應(yīng)用于面向?qū)ο笳Z言。Nicolas 對(duì)編程語言設(shè)計(jì)的長期熱情,以及作為他在 Motion Twin 的游戲開發(fā)工作的一部分,混合不同技術(shù)的新機(jī)會(huì)的出現(xiàn),導(dǎo)致了一種全新語言的誕生。
haXe 編譯器本身是 Ocaml 語言編寫的,編譯速度很快,haXe 的核心內(nèi)容是基于類型轉(zhuǎn)化的轉(zhuǎn)譯系統(tǒng)。
OCaml 非常的快,粗略地說,同樣的代碼規(guī)模下,使用 C++ 表達(dá)則可能需要加倍代碼量和 3 倍編譯時(shí)間。 ML(Meta Language)元語言是一個(gè)函數(shù)式、指令式的通用的編程語言,它著稱于使用了多態(tài)的 Hindley–Milner 類型推論。
OCaml 是相對(duì)較新的 ML 語言,1996 年出現(xiàn),與 Java 大約同時(shí)誕生。但是,第一個(gè)主要 ML 方言可以 追溯到 1973 年,SML 于 1978 年開發(fā)。ML 方言在定理證明和研究中占據(jù)一席之地,通常被用于學(xué)術(shù)研究。 OCaml 沒有繼承 Standard ML 庫,實(shí)際上它比 C/C++/Java/Python/Haskell 甚至 Ruby 更年輕。 PL (Programming Languages) 三角是:效率,生產(chǎn)力和安全,而 OCaml 同時(shí)兼顧了效率,生產(chǎn)力。
haXe 目前支持的目標(biāo)語言平臺(tái):
Compiler Targets
Haxe 可以用來做什么?一堆的可能性能,參考官方用例文檔:
0. Use Cases for Haxe https://haxe.org/use-cases/
1. Haxe for Game Development https://haxe.org/use-cases/games/
2. Haxe for Websites and Web Apps https://haxe.org/use-cases/web/
3. Haxe for Mobile App Development https://haxe.org/use-cases/mobile/
4. Haxe for Desktop Apps https://haxe.org/use-cases/desktop/
5. Haxe for Command Line Interface (CLI) Apps https://haxe.org/use-cases/cli/
6. Haxe for Cross Platform APIs https://haxe.org/use-cases/cross-platform-apis/
7. Who Uses Haxe https://haxe.org/use-cases/who-uses-haxe.html
7. Indepth look at 2D game engines for Haxe https://dewitters.com/indepth-look-at-2d-game-engines-for-haxe/
Haxe 作為游戲開發(fā)語言,現(xiàn)有一些游戲引擎都集成了 **Hardware Abstraction Layer (HAL)**? 以及一些工具,可以分為以下三類:
1. Lime (Light Media Engine)
2. Kha
3. Snow
Lime 族開發(fā)工具非常流行,這是因?yàn)樗子?,開發(fā)效率高。
OpenFL 和 NME (Native Media Engine) 是一套?Flash API,所有基于 Flash 的庫都可以移植到 Haxe 平臺(tái)上。
Flixel, FlashPunk 還有 Starling 就是案例,這些游戲架構(gòu)示意如下:
Kha 族構(gòu)架示意如下:
Snow 族構(gòu)架示意如下:
Flash 作為一種過氣技術(shù),因?yàn)殚_源的構(gòu)架得到了生命的延續(xù)。HaxeFlixel 集成了 OpenFL 等開源框架 以開發(fā) Flash 游戲。可以使用 Haxe neko 作為替代,或者使用基于 Node + HTML5 的方案。 Neko 是一種為 Haxe 設(shè)計(jì)的輕量虛擬機(jī)技術(shù),Haxe 支持 Neko bytecode。
Neko 起初本來就是計(jì)算支持多語言,但由于歷史原因,終于變成運(yùn)行 NekoML 和 Haxe 兩種語言為主。 Haxe 3.4 引入 HashLink 接替 Neko,設(shè)計(jì)新虛擬機(jī)目的是解決幾個(gè)主要的 Neko 歷史遺留問題:
1. Performance 性能問題
2. Boxing 數(shù)據(jù)裝箱問題
3. Polymorphism 類型多態(tài)問題
Neko 是日語“貓”的意思,其安裝包文件列表:
01. **neko** : the virtual machine boot binary
02. **libneko.so** (neko.dll + neko.lib on Windows) : the NekoVM library
03. **nekoc** : the command-line Neko compiler
04. **nekoml** : the command-line NekoML compiler
05. **nekoml.std** : the NekoML standard library
06. **nekotools** : neko utilities (including dev web server)
07. several **.ndll** files : the Neko standard libraries
08. **gc.dll** (on Windows only) : the garbage collector used by Neko
09. **include/** : the .H header files needed for embedding and extending the VM
10. LICENCE and CHANGES : some text documents
通過 haxelib?命令安裝的一些工具,如 flixel-tools 只含有 Neko 字節(jié)碼程序,可以直接使用 neko 命令運(yùn)行 run.n 字節(jié)碼程序,等價(jià)于 haxelib run 命令。使用 nekotools 工具生成為可執(zhí)行程序,這此工具本身使用 NekoML 語言開發(fā),源代碼擴(kuò)展名為 .nml 或者 .neko。
程序生成功能由 nekoboot.neko 源代碼實(shí)現(xiàn),它相當(dāng)于 NekoVM 擴(kuò)展程序,加載指定的字節(jié)碼文件。Neko 本身也作為 Web 服務(wù)器使用,nekotools 包含了一個(gè) server 命令,用它啟動(dòng) Web 服務(wù)器:
HashLink 程序編譯與運(yùn)行:
使用方式的選擇,如下,HL/JIT 表示 HashLink JIT 編譯方式,HL/C 表示轉(zhuǎn)譯 C 語言:
1. Use HL/JIT for daily development (fast compilation time)
2. Use HL/C for final release (best performance)
3. HL/C and HL/JIT share same runtime and semantics
HashLink 運(yùn)行時(shí)支持的特性如下:
1. Fully compatible with Haxe specification
2. Support file I/O, regular expressions, network, etc.
3. Unicode strings by default
4. Mark-and-not-sweep Garbage Collector
5. x86 and x86-64 HL/C compilation
6. x86 and x86-64 HL/JIT compilation
總結(jié)來說,Neko 本身是一種語言,其虛擬機(jī)稱為 NekoVM,HashLink VM 則是為了解決前者不足設(shè)計(jì)的。
Haxe 官方展示了一個(gè)基于 HashLinkVM 的模擬經(jīng)營 + 輕度 RTS 的游戲:《北加爾》。初始版本基于 Haxe + Adobe AIR,目前運(yùn)行于 HL + HLSDL library,性能不變。
Northgard by ShiroGames
https://northgard.net/game/
“IT IS BETTER TO FIGHT AND FALL THAN TO LIVE WITHOUT HOPE.”
與其行尸走肉,不如奮起戰(zhàn)斗!
haXe Library 安裝
haXe Foundation 提供了常用語言系統(tǒng)庫:
比如,Hxcpp 作為 haXe 編譯器的 C++ 語言的后端,包含頭文件、庫、支持代碼,用于編譯 haXe 代碼。
比如,通過命令行創(chuàng)建一個(gè) C# 項(xiàng)目,轉(zhuǎn)譯 Haxe 為 C# 工程,并調(diào)用 C# 編譯編譯:
由于庫路徑配置問題,直接使用 haxe 命令執(zhí)行編譯引用了第三方庫的程序時(shí),可能會(huì)導(dǎo)致類型未定義的問題。 比如,Kha 游戲框架庫,目前已經(jīng)不在 haxelib 倉庫中管理,使用 haxelib 安裝時(shí)只會(huì)得到描述文件。 應(yīng)該使用 Kha 構(gòu)建工具 khamake 來調(diào)用 haXe 編譯程序,Kha 構(gòu)建工具是一個(gè) Node 腳本程序。
? ? Type not found : kha.Framebuffer
? ? Type not found : kha.Blob
可安裝的倉庫管理的最后一個(gè)版本是 kha 16.1.3,需要修改庫配置:`"classPath": "Sources/",`。 指向庫代碼還不夠,Kha 有許多平臺(tái)相關(guān)的代碼,保存有 Backends 目錄下,需要根據(jù)不同的平臺(tái)引用。 使用 --class-path 指定路徑,否則就會(huì)導(dǎo)致 kha.Blob 這類平臺(tái)相關(guān)類型無定義。這些工作使用 Kha 構(gòu)建工具時(shí)都是自動(dòng)化處理的。
每個(gè)庫都有一個(gè) haxelib.json 信息文件,包含版本信息,代碼路徑等等。
例如,使用 Random 庫產(chǎn)生隨機(jī)數(shù),它調(diào)用內(nèi)置的 Math.random() 函數(shù):
假定 Haxe 安裝在 HaxeToolkit 目錄下,那么庫文件安裝位置及目錄結(jié)構(gòu)如下,.current 文件指示當(dāng)前激活的版本,使用 haxelib set 命令指定所使用的版本:
? ? C:\HaxeToolkit\haxe\lib\random\.current
? ? C:\HaxeToolkit\haxe\lib\random\1,2,0\src\Random.hx
? ? C:\HaxeToolkit\haxe\lib\random\1,4,1\src\Random.hx
Haxe 是一個(gè)現(xiàn)代的編程語言,同時(shí)它又是一套轉(zhuǎn)譯工具。可以通過官方文檔了解 haXe features:
01.? Cross-platform standard library
02.? Fast compiler / Interpreted mode
03.? Type inference
04.? Conditional Compilation
05.? Enums / Generalized Algebraic Data Types
06.? Pattern matching
07.? Type parameters, constraints, variance
08.? Classes, Interfaces, and Inheritance
09.? Abstract Types
10.? Inlined Calls
11.? Array Comprehension
12.? Metadata
13.? Static Extensions / Mixin functions
14.? String Interpolation
15.? Syntax-transformation / macros
16.? Null Safety (opt-in)
17.? Static Analysis / Dead code removal
18.? Access to native features
19.? Unicode
20.? Open Source
?haXe Programming 參考資源
1. haXe - The Cross-platform Toolkit https://haxe.org
2. haXe https://github.com/haXeFoundation/haXe
3. haXe Documentation Introduction https://haxe.org/documentation/introduction/
4. haXe for C# https://haxe.org/documentation/platforms/csharp.html
5. haXe Library Manager https://lib.haxe.org
6. haXe Manual https://haxe.org/manual/introduction.html
7. haXe Code Cookbook https://github.com/haXeFoundation/code-cookbook/
8. haXe programming cookbook https://code.haxe.org/
1. The haXe Manual https://github.com/haXeFoundation/haXeManual
2. The haXe Code Cookbook https://github.com/haXeFoundation/code-cookbook
3. haXe Manual https://haxe.org/manual/introduction.html
4. haXe programming cookbook https://code.haxe.org/
5. Editors and IDEs https://haxe.org/documentation/introduction/editors-and-ides.html
7. Meet HaxeDevelop https://haxe.org/blog/meet-haxedevelop/
7. HaxeDevelop https://github.com/HaxeFoundation/haxedevelop.org
7. HaxeFlixel 2D Game Engine https://haxeflixel.com
7. haXe Sublime Bundle Usage https://github.com/clemos/haXe-sublime-bundle/wiki/Usage
8. haXe workflow with Sublime Text 2, Php & nme examples http://www.aymericlamboley.fr/blog/haXe-workflow-with-sublime-text-2-php-and-nme-examples/
Language features https://haxe.org/manual/lf.html
Compiler features https://haxe.org/manual/cr-features.html
Neko VM & HashLink VM 參考
1. The Neko Programming Language https://nekovm.org
2. HashLink is a virtual machine for Haxe https://hashlink.haxe.org
3. HashLink VM https://github.com/HaxeFoundation/hashlink
3. Neko VM https://github.com/HaxeFoundation/neko
3. Neko Tools https://nekovm.org/doc/tools/
4. Flash is dead, long live OpenFL https://www.gamedeveloper.com/programming/flash-is-dead-long-live-openfl-
OCaml 語言參考
1. https://haxe.org/manual/introduction-haXe-history.html
2. https://haxe.org/documentation/introduction/stdlib-introduction.html
3. Why ML/OCaml are good for writing compilers https://flint.cs.yale.edu/cs421/case-for-ml.html
4. 譯文:為什么 ML/OCaml 適用于編譯器開發(fā) https://zengjialong.com/ml-writing-compilers
1. Compiler Explorer https://ocaml.godbolt.org
2. The core OCaml system https://github.com/ocaml/ocaml
3. Get Up and Running With OCaml https://ocaml.org/docs/up-and-running
4. The first hour with OCaml https://ocaml.org/docs/first-hour
5. The Windows-friendly distribution of OCaml https://github.com/diskuv/dkml-installer-ocaml