欢迎光临散文网 会员登陆 & 注册

Blender 新欢 Armory3D - Haxe Programming Language

2023-04-14 13:40 作者:紧果呗  | 我要投稿

Haxe 是一个现代的编程语言,同时它又是一套转译工具。

haXe 语言语法类似 Java,haXe 命令本身是编译器又是转译工具,可以将源代码构建为跨平台 应用程序,并且允许访问每个平台的本地功能。自有虚拟机 HashLink 和 NekoVM,但也可以在 解释模式下运行,例如 `haXe -cp src --main Main --interp`。

✨ 源文档 https://github.com/Jeangowhy/opendocs/tree/main/haxe.md

haXe 项目于 2005/10/22 日由法国开发商 Nicolas Cannasse 启动,是开源 ActionScript 2 编译器 MTASC(Motion Twin Action Script compiler)和内部 MTypes 语言的继任者,后者 尝试将类型推理应用于面向对象语言。Nicolas 对编程语言设计的长期热情,以及作为他在 Motion Twin 的游戏开发工作的一部分,混合不同技术的新机会的出现,导致了一种全新语言的诞生。


haXe 编译器本身是 Ocaml 语言编写的,编译速度很快,haXe 的核心内容是基于类型转化的转译系统。


OCaml 非常的快,粗略地说,同样的代码规模下,使用 C++ 表达则可能需要加倍代码量和 3 倍编译时间。 ML(Meta Language)元语言是一个函数式、指令式的通用的编程语言,它著称于使用了多态的 Hindley–Milner 类型推论。


OCaml 是相对较新的 ML 语言,1996 年出现,与 Java 大约同时诞生。但是,第一个主要 ML 方言可以 追溯到 1973 年,SML 于 1978 年开发。ML 方言在定理证明和研究中占据一席之地,通常被用于学术研究。 OCaml 没有继承 Standard ML 库,实际上它比 C/C++/Java/Python/Haskell 甚至 Ruby 更年轻。 PL (Programming Languages) 三角是:效率,生产力和安全,而 OCaml 同时兼顾了效率,生产力。

haXe 目前支持的目标语言平台:

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 作为游戏开发语言,现有一些游戏引擎都集成了 **Hardware Abstraction Layer (HAL)**  以及一些工具,可以分为以下三类:

  • 1. Lime (Light Media Engine)

  • 2. Kha

  • 3. Snow

Lime 族开发工具非常流行,这是因为它易用,开发效率高。

OpenFL 和 NME (Native Media Engine) 是一套 Flash API,所有基于 Flash 的库都可以移植到 Haxe 平台上。

Flixel, FlashPunk 还有 Starling 就是案例,这些游戏架构示意如下:

Kha 族构架示意如下:

Snow 族构架示意如下:

Flash 作为一种过气技术,因为开源的构架得到了生命的延续。HaxeFlixel 集成了 OpenFL 等开源框架 以开发 Flash 游戏。可以使用 Haxe neko 作为替代,或者使用基于 Node + HTML5 的方案。 Neko 是一种为 Haxe 设计的轻量虚拟机技术,Haxe 支持 Neko bytecode

Neko 起初本来就是计算支持多语言,但由于历史原因,终于变成运行 NekoMLHaxe 两种语言为主。 Haxe 3.4 引入 HashLink 接替 Neko,设计新虚拟机目的是解决几个主要的 Neko 历史遗留问题:

  • 1. Performance 性能问题

  • 2. Boxing 数据装箱问题

  • 3. Polymorphism 类型多态问题

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 字节码程序,可以直接使用 neko 命令运行 run.n 字节码程序,等价于 haxelib run 命令。使用 nekotools 工具生成为可执行程序,这此工具本身使用 NekoML 语言开发,源代码扩展名为 .nml 或者 .neko

程序生成功能由 nekoboot.neko 源代码实现,它相当于 NekoVM 扩展程序,加载指定的字节码文件。Neko 本身也作为 Web 服务器使用,nekotools 包含了一个 server 命令,用它启动 Web 服务器:

HashLink 程序编译与运行:

使用方式的选择,如下,HL/JIT 表示 HashLink JIT 编译方式,HL/C 表示转译 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 运行时支持的特性如下:

  • 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

总结来说,Neko 本身是一种语言,其虚拟机称为 NekoVM,HashLink VM 则是为了解决前者不足设计的。


Haxe 官方展示了一个基于 HashLinkVM 的模拟经营 + 轻度 RTS 的游戏:《北加尔》。初始版本基于 Haxe + Adobe AIR,目前运行于 HL + HLSDL library,性能不变。

Northgard by ShiroGames

https://northgard.net/game/

“IT IS BETTER TO FIGHT AND FALL THAN TO LIVE WITHOUT HOPE.”

与其行尸走肉,不如奋起战斗!


haXe Library 安装

haXe Foundation 提供了常用语言系统库:

比如,Hxcpp 作为 haXe 编译器的 C++ 语言的后端,包含头文件、库、支持代码,用于编译 haXe 代码。

比如,通过命令行创建一个 C# 项目,转译 Haxe 为 C# 工程,并调用 C# 编译编译:

由于库路径配置问题,直接使用 haxe 命令执行编译引用了第三方库的程序时,可能会导致类型未定义的问题。 比如,Kha 游戏框架库,目前已经不在 haxelib 仓库中管理,使用 haxelib 安装时只会得到描述文件。 应该使用 Kha 构建工具 khamake 来调用 haXe 编译程序,Kha 构建工具是一个 Node 脚本程序。


    Type not found : kha.Framebuffer

    Type not found : kha.Blob

可安装的仓库管理的最后一个版本是 kha 16.1.3,需要修改库配置:`"classPath": "Sources/",`。 指向库代码还不够,Kha 有许多平台相关的代码,保存有 Backends 目录下,需要根据不同的平台引用。 使用 --class-path 指定路径,否则就会导致 kha.Blob 这类平台相关类型无定义。这些工作使用 Kha 构建工具时都是自动化处理的。

每个库都有一个 haxelib.json 信息文件,包含版本信息,代码路径等等。

例如,使用 Random 库产生随机数,它调用内置的 Math.random() 函数:

假定 Haxe 安装在 HaxeToolkit 目录下,那么库文件安装位置及目录结构如下,.current 文件指示当前激活的版本,使用 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 是一个现代的编程语言,同时它又是一套转译工具。可以通过官方文档了解 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 适用于编译器开发 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



Blender 新欢 Armory3D - Haxe Programming Language的评论 (共 条)

分享到微博请遵守国家法律