作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Kevin Bloch
Verified Expert in Engineering
8 Years of Experience

Kevin拥有超过20年的全栈、桌面和独立游戏开发经验. 他最近专门研究PostgreSQL、JavaScript、Perl和Haxe.

Share

现代编程语言Haxe在某些圈子里很有名, 然而,许多阅读本文的人可能从未听说过它. 不过,不要让它的小众地位欺骗了你. 自2005年首次出现以来,它已经受到了忠实追随者的考验. 它具有务实和成熟的商业开发功能组合, gaming, 甚至是学术背景.

迪士尼、孩之宝和BBC都在使用Haxe那么,为什么没有更多的开发者听说过它呢? 也许它的多功能性意味着没有一个, Haxe编程语言的一个“杀手级应用”.

或者是因为它最早的一个杀手级应用——从垂死的Flash平台迁移过来——在某些方面有点小众. 过去几年,在Adobe不确定性的阴影下,休闲游戏市场一直处于混乱状态, 现在终于很清楚,任何基于flash的东西 会在2020年正式搬迁吗.

商业软件工程师和 web developers事实上,许多游戏开发者也可能听到“Flash”一词,就立刻不听了. 因此,Haxe基金会采用FlashDevelop IDE并将其重新命名为Haxe IDE, HaxeDevelop.

但要摆脱一种联想是很难的,尤其是当它仍然非常相关的时候. 例如,FlowPlay的社交游戏 75 million users在最近两年的过渡中,我们选择了Haxe而不是Unity和HTML5.400万行Flash代码. (详情见 the case study.)

也许Haxe基金会很难突出这样的用例, 同时也吸引了非游戏软件的开发者. 但不要让这些阻碍你的探索.

哈克斯有什么大不了的?

The Debian project describes Haxe 作为一种“通用编程语言”.“这有几个方面.

In general, Haxe语言意味着重用(好的)代码. 我的意思是:您可以在许多平台上重用Haxe代码, 您可以将它与现有的Haxe和非Haxe代码集成, and as for good, Haxe语言提供了许多可靠的范例,例如类型安全.

继续多功能性主题, 这可以转化为几个主要的用例类别——flash迁移除外, of course.

从头开始开发跨平台应用或游戏. Haxe可以从单一语言的源库中瞄准桌面、移动和web平台. 跨平台编程语言并不是什么新鲜事物, 跨平台也有专门的解决方案 desktop and mobile apps and games. 但Haxe做了一些更特别的事情,因为它不仅可以针对多个平台, but multiple paradigms, e.g. HTML5和原生二进制文件.

一种语言“统治一切”.” 请原谅托尔金的引用,就像Node一样.Js迎来了一个在网站前端和后端使用同一种语言的时代, 任何类似于客户机-服务器架构的项目都可以将Haxe用于这两个部分.

例如,web应用程序 FontStruct 在前端使用Haxe在HTML5画布上绘图,后端使用Java2D绘图. (But as mentioned, 这种方法是可选的——haxe也可以很好地与现有的非haxe代码配合使用, because 它的设计不是为了束缚你.) Keeping app, game, business, 甚至在所有上下文中呈现一致的逻辑, platforms, 这样输出语言就容易多了.

从JavaScript转向类型安全. 等等,这不是TypeScript的用途吗? 是的,如果你想被限制在 JavaScript output. 相比之下,Haxe语言也可以翻译成Java、c++、c#、Python和Lua, among others.

Meanwhile, Haxe编程语言很容易从javascript中学习——它的语法并不意味着要像javascript那样进行巨大的范式转换, say, that of Rebol, 尽管如此,这种转变还是有好处的. Haxe core developer Dr. Andy Li 对TypeScript和Haxe进行了更深入的比较 尽管两种语言都在不断发展,但这句话在今天仍然适用.

对于编译器来说,相当快的工作流程. 这是最近添加的部分(尽管在此之前Neko是一个选项):HashLink是一种跨平台虚拟机(VM),它似乎在编译速度极快之间取得了平衡, 但在运行时也足够性能,如3D游戏. 但即使在网络方面, Haxe在编译时和运行时都能胜过TypeScript.

An exciting frontier. Haxe本身是开源的,并且有一个活跃的社区, 新的语言特性一直在增加. 它自己保存得最好的子秘密可能只是它的编译时宏系统,它本身就有 许多有趣的用例让你随心所欲地进行超程序. (我在下面举几个例子.)

Who Else Is Using Haxe?

For starters, game developers, 当然是《欧博体育app下载》, Evoland II, 《欧博体育app下载》和其他数百款已发行游戏都是使用Haxe开发的. 但Haxe也在游戏领域之外掀起波澜:

  • Back in 2014, TiVo used Haxe to increase 在他们的TiVo Premiere盒子上的性能提高了30%以上.
  • Massive Interactive的客户包括 DAZN and Telecine 基于hax的“智能电视”系统(两者都有庞大的用户基础) 已经使用Haxe很多年了吗. 他们的UI架构师Philippe Elsass向我指出,在他处理大型web项目的经验中, Haxe比TypeScript更容易使用,编译速度也快了一个数量级.
  • Synolia使用Haxe语言作为他们的在线定制工具 Heidi, which is used by 法国主要品牌家乐福和La Fnac,还有Nickelodeon. According to Synolia, Haxe工具包允许他们有效地管理从Flash到HTML5的过渡, 同时也能够在移动领域获得新的业务发展机会. Heidi是一个SaaS应用程序, Haxe工具包允许他们在应用程序的不同层和服务之间共享公共源代码.
  • 跨国企业 Docler Holding 于2017年成为Haxe基金会的战略合作伙伴.

Haxe生态系统是什么样的?

说到游戏和Haxe, it’s a wide, 开放源代码框架和库方面的广阔世界. 从独立团队到拥有国际客户的成功工作室, Haxe用户到处分享代码:

  • Flambe 是迪士尼、可口可乐和丰田等品牌在开发HTML5游戏时使用的工具吗.
  • Heaps 最近的3D策略游戏《欧博体育app下载》背后的高性能游戏框架是什么.
  • 数以百万计的移动游戏,快速开发库 awe6 也许是隐藏宝石中的隐藏宝石.
  • Kha, 谁能瞄准XBox One, Nintendo Switch, 除了台式机和手机,还有PlayStation 4, has 超过20个游戏引擎建立在它之上. 这包括军械库,它有完整的 Blender 集成和最近本身都是开源的.
  • 最初是模仿旧的Flixel Flash库, HaxeFlixel 像《欧博体育app下载》这类游戏背后的流行选择是什么 Defender’s Quest.
  • Gamua的Starling(游戏邦注:几年前用于《欧博体育app下载》Facebook移植的框架)现在已经具备了这种能力 开源Haxe端口.
  • OpenFL, based on the Flash API, 也将很快成为瞄准多台主机的一种方式——即PlayStation 4, the PlayStation Vita, XBox One和任天堂switch——无需额外授权费用. HaxeFlixel和Starling都是建立在OpenFL之上的, 但有些游戏是直接在OpenFL上开发的, like the award-winning Papers, Please.
  • 原生媒体引擎, NMEOpenFL多年前就是从它派生出来的,现在也仍在发布主要版本.
  • 也许你知道HaxePunk(源自FlashPunk)是什么时候出现的 发布在GitHub的发布雷达博客.
  • The highly optimized Nape Physics Engine 是否适合任何需要更复杂物理的2D游戏引擎或模拟器.

诚然,游戏开发场景是Haxe语言生态系统中更明显的一部分. (也许这要归功于《欧博体育app下载》等游戏jam的性质?)但商业甚至企业方面也在表现出来. For example:

  • Modular app framework hexMachina 支持特定于领域的语言(DSL)使用和模型-视图-控制器(MVC)架构, 在许多其他功能中.
  • UI layout engine HaxeUI 正在积极发展并得到公司的支持. Products like 3DVista and Kaizen for Pharma 是否已经发布了带有它的产品应用.
  • 它不是唯一的,但是 thx.core 库及其相关类为Haxe提供了通用扩展, 就像Lodash为JavaScript所做的那样.
  • 说到JavaScript,以它为目标的Haxe项目可能会从利用中受益 Haxe Modular, 是什么帮助Telecine和FlowPlay扩展他们庞大的项目,同时保持客户端快速加载.
  • Haxe’s ecosystem also continues to evolve to interface with current technologies; e.g. there’s now a GraphQL library.
  • Lastly, the exemplary Tinkerbell 利用Haxe的宏系统来完成各种有用的任务. 它有web路由框架, unit testing, and embedding SQL, 以及用于从模板和CSS选择器解析到async/await和低学习曲线响应状态处理的所有库.

这些只是Haxe语言用户迄今为止所采取的一些方向的亮点. Haxe.org maintains a 按受欢迎程度排序的完整库列表 你也可以通过标签浏览. 但同样值得强调的是Haxe基金会自己维护的几个项目:

这听起来很不错,但是在您的系统上运行开发环境是什么样的呢?

Haxe Quick Start

无论是Win, Mac还是Linux,第一步都是 download Haxe. 那里的安装程序将提供一些不同的东西:

  1. Haxe编译器本身,这样你就可以跑了 haxe 从您的终端或命令提示符.
  2. Haxe标准库,允许低级基础,但也允许高级通用支持. 例如,XML、ZIP处理和MySQL访问在这里都很方便.
  3. Haxelib包管理器,它允许您通过 haxelib command. (注:这本书也值得一看 lix 以获得比Haxelib提供的更高级的包管理, 特别是当你考虑在专业环境中使用Haxe时.)
  4. Neko一种虚拟机目标,允许快速有效地重新编译和调试.

(也就是说,设置的方法不止一种. If you already have npm installed, for example, OpenFL的安装说明提供了通过Yeoman命令安装Haxe的选项. Homebrew和Chocolatey也提供了类似的途径.)

Anyway, once you have Haxe, 您可以在命令行中单独使用它, 但是开发人员通常选择使用IDE. FlashDevelop/HaxeDevelop仍然主要只在Windows下支持. 大多数其他选项是跨平台的(Win/Mac/Linux):

为了这个快速入门指南的目的,我们将使用VSCode. 这可能是最简单的方法 Haxe Extension Pack via Ctrl+P and 接下来安装haxe-extension-pack,但如果你是一个极简主义者,你可能只是想要 ext install vshaxe 基本Haxe插件本身, 然后选择你想要的其他部分.

创建Haxe项目

由于Haxe语言可以翻译到许多目标, 使用构建文件可以更容易地管理如何为每个组件完成此操作. 然而,在开始之前,我们只需要一个Haxe类文件 .hx extension.

至于我们要放入的代码,让我们以数组理解的例子为例 try.haxe.org 然后把它放在一个叫做 Test.hx:

class Test {
    静态函数main() {
        var a = [for (i in 0...10) i];
        trace(a); // [0,1,2,3,4,5,6,7,8,9]

        var i = 0;
        var b = [while(i < 10) i++];
        trace(b); // [0,1,2,3,4,5,6,7,8,9]
    }
}

Now, from Test.hx您可以在解释模式下运行Haxe.e. 完全不用编译,就能看到这两个的输出 trace() calls:

$ haxe -main Test——interp
Test.hx:4: [0,1,2,3,4,5,6,7,8,9]
Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

Great, it works!

编译Haxe代码到JavaScript

假设您想在您的网页上通过JavaScript与世界分享这些内容. 这是Haxe内置的,就像:

$ haxe -main Test -js haxe- Test.js

If you have Node.安装Js后,你可以从命令行检查输出,如下所示:

$ node my-cool-test.js 
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

Otherwise, the code in haxe-test.js 准备好了吗-如果你要把它包含在一个网页中, 加载后,您将在web浏览器的开发人员控制台中看到输出.

翻译和编译为本机二进制文件

假设您还希望为正在开发的桌面提供本机二进制文件. To do this, 我们将编译到c++目标, 所以我们可以使用c++(假设你已经安装了它)来编译 .cpp 输出为本机二进制文件. For that, we’ll need hxcpp,所以我们需要安装它:

安装HXCPP

之后,我们可以用这个命令同时进行编译和编译:

$ haxe -main Test -cpp bin

然后我们的二进制文件就可以运行了:

$ bin/Test
Test.hx:4: [0,1,2,3,4,5,6,7,8,9]
Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

(在Windows上,这将是 bin\Test.exe instead.)

创建Haxe构建文件(.hxml)

尽管有暗示性的延伸, .hxml 文件不是xml -不像 .hxproj HaxeDevelop和FlashDevelop使用的文件,但我不会在本文中介绍. Here’s what a build-all.hxml 看起来像完成我们上面所做的编译:

告诉Haxe我们的主类是Test(区分大小写)

——each #以上所有命令将应用于每个目标

-js haxe-test.Js #是我们的第一个编译目标

-next #没有其他选择,是时候移动到下一个目标

-cpp bin #我们的第二个编译目标

注意前缀的不同: -main, -js, and -cpp 每个参数都要传递给吗 haxe directly, while --each and --next (两个连字符)在元级别,告诉编译器如何处理其他参数.

现在,只需运行即可同时命中JavaScript和本机目标 haxe build-all.hxml.

如果您想将其转换为JavaScript,然后立即使用Node运行结果, you could run haxe run-js.hxml, where run-js.hxml looks like this:

-main Test
-js haxe-test.js
-cmd node haxe-test.js

Similarly, 本机二进制文件的“构建并运行”看起来像这样(在Linux上), 这是Windows需要的一个变体):

-main Test
-cpp bin
-cmd bin/Test

What about VSCode? 这部分很简单:您安装的扩展将自动拾取这些 .hxml 文件,为您提供自动生成的构建任务(没有 tasks.json),让您选择要使用的构建文件.

注意:如果有,请小心 打开多个VSCode窗口但是,在撰写本文时,这可能会导致通过Ctrl+B构建的问题. (您仍然可以使用命令行,没有问题.)

Haxe 4

如果您遵循上述设置, 您可能已经注意到,下载页面包含到这三个的链接.x and 4.Haxe安装程序的x分支.

Haxe编译器的最新版本4带来了许多新特性. In one case, 这也证明了其宏系统的强大:Haxe编译器过去缺乏对短lambda函数的支持, so slambda库通过宏实现了对它们的支持. 从版本4开始,编译器内建了支持,而该库已被弃用.

那么Haxe 4还带来了什么呢?

不一定有太多吸引注意力的东西. 相反,Haxe 4有许多较小的改进. After all, Haxe itself is 相当成熟的技术, 由一个更小更专注的团队开发, perhaps, 而不是类似的项目——把任何一个项目都称为一个项目可能有点牵强 similar to Haxe.

它的许多最有趣的功能已经出现一段时间了. 例如,我上面提到Haxe通过Neko或HashLink提供了一个快速的工作流. 但自2016年以来,它还配备了一个编译服务器. 这意味着对于非vm目标, 由于内存缓存,重新编译依赖于大型库的项目将会快得多——Haxe ide也可以利用内存缓存来完成代码.

但是Haxe 4将会看到:

  • 宏执行速度提高4倍.
  • PHP5支持被取消.
  • TypeScript用户可能会欢迎一些语法上的更新, 即使它们在两种语言之间略有不同. Namely, arrow functions and the new function type syntax.

Haxe Tutorials

而你可以直接进入 Haxe’s standard API or syntax documentation, there are some more 初学者友好Haxe材料 available as well.

如果你更喜欢看视频,可以去西雅图参加2018年Haxe美国峰会 has its workshops up 与其他年份的数据一起,获得更多内部人士的观点.

但有时候,更具体的教程可能会让你更容易上手. Like a 关于如何在HaxeFlixel中构建地牢爬行游戏的从头到尾教程. There’s also a HaxeFlixel系列教程 这就解释了他们在幕后发生的更多事情. 在3D端,有一个 Haxe教程开始与军械库.

或者你只是想要一个 关于XML快速处理的教程-这是许多教程中的一个,现在已经有几年的历史了,但仍然相当相关. As I mentioned earlier, 虽然有很多前沿, 到目前为止,在Haxe中开发的许多基础都是稳定的, 所以教程不一定很快就会过时. (如果他们这样做,通常来自对特定库的依赖,而不是Haxe核心本身.)


正如您所看到的,您可以使用Haxe语言——或者它可以将您带向许多不同的方向. 我希望你喜欢这篇介绍Haxe多样化和迷人世界的文章, 我很期待听到你们用Haxe的技术做了什么!

了解基本知识

  • Haxe比TypeScript更新吗?

    Haxe实际上比TypeScript还要老一些, 虽然它背后没有同样的企业影响力, 它的语言和翻译都相当成熟.

  • 可以编译和转译到哪些目标?

    Haxe编译器可以针对JavaScript, Java, C++, C#, PHP, Python, ActionScript 3, Flash, and Lua, 以及HashLink和Neko虚拟机. In turn, Haxe的输出可以在Windows上运行, Linux, macOS, iOS, Android, PlayStation 4, PlayStation Vita, Nintendo Switch, and XBox One.

  • Haxe只用于游戏开发吗?

    No. Haxe充满活力的游戏开发生态系统包括像OpenFL这样的框架, HaxeFlixel, Heaps, Kha, Flambe, Armory, Kha, awe6, NME, and HaxePunk, 它在商业应用程序和网站的生产环境中也很有用.

聘请Toptal这方面的专家.
Hire Now
Kevin Bloch

Kevin Bloch

Verified Expert in Engineering
8 Years of Experience

Bergerac, France

2017年1月31日成为会员

About the author

Kevin拥有超过20年的全栈、桌面和独立游戏开发经验. 他最近专门研究PostgreSQL、JavaScript、Perl和Haxe.

作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 privacy policy.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 privacy policy.

Toptal Developers

Join the Toptal® community.