作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Kevin拥有超过20年的全栈、桌面和独立游戏开发经验. 他最近专门研究PostgreSQL、JavaScript、Perl和Haxe.
8
现代编程语言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做了一些更特别的事情,因为它不仅可以针对多个平台, 但是多重范式, 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本身是开源的,并且有一个活跃的社区, 新的语言特性一直在增加. 它自己保存得最好的子秘密可能只是它的编译时宏系统,它本身就有 许多有趣的用例让你随心所欲地进行超程序. (我在下面举几个例子.)
For starters, game developers, 当然是《欧博体育app下载》, Evoland II, 《欧博体育app下载》和其他数百款已发行游戏都是使用Haxe开发的. 但Haxe也在游戏领域之外掀起波澜:
说到游戏和Haxe, it’s a wide, 开放源代码框架和库方面的广阔世界. 从独立团队到拥有国际客户的成功工作室, Haxe用户到处分享代码:
诚然,游戏开发场景是Haxe语言生态系统中更明显的一部分. (也许这要归功于《欧博体育app下载》等游戏jam的性质?)但商业甚至企业方面也在表现出来. For example:
这些只是Haxe语言用户迄今为止所采取的一些方向的亮点. Haxe.org maintains a 按受欢迎程度排序的完整库列表 你也可以通过标签浏览. 但同样值得强调的是Haxe基金会自己维护的几个项目:
这听起来很不错,但是在您的系统上运行开发环境是什么样的呢?
无论是Win, Mac还是Linux,第一步都是 download Haxe. 那里的安装程序将提供一些不同的东西:
haxe
从您的终端或命令提示符.haxelib
command. (注:这本书也值得一看 lix 以获得比Haxelib提供的更高级的包管理, 特别是当你考虑在专业环境中使用Haxe时.)(也就是说,设置的方法不止一种. 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类文件 .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!
假设您想在您的网页上通过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.)
尽管有暗示性的延伸, .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构建的问题. (您仍然可以使用命令行,没有问题.)
如果您遵循上述设置, 您可能已经注意到,下载页面包含到这三个的链接.x and 4.Haxe安装程序的x分支.
Haxe编译器的最新版本4带来了许多新特性. In one case, 这也证明了其宏系统的强大:Haxe编译器过去缺乏对短lambda函数的支持, so slambda库通过宏实现了对它们的支持. 从版本4开始,编译器内建了支持,而该库已被弃用.
那么Haxe 4还带来了什么呢?
不一定有太多吸引注意力的东西. 相反,Haxe 4有许多较小的改进. 毕竟,Haxe本身 is 相当成熟的技术, 由一个更小更专注的团队开发, perhaps, 而不是类似的项目——把任何一个项目都称为一个项目可能有点牵强 similar to Haxe.
它的许多最有趣的功能已经出现一段时间了. 例如,我上面提到Haxe通过Neko或HashLink提供了一个快速的工作流. 但自2016年以来,它还配备了一个编译服务器. 这意味着对于非vm目标, 由于内存缓存,重新编译依赖于大型库的项目将会快得多——Haxe ide也可以利用内存缓存来完成代码.
但是Haxe 4将会看到:
而你可以直接进入 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编译器可以针对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.
No. Haxe充满活力的游戏开发生态系统包括像OpenFL这样的框架, HaxeFlixel, Heaps, Kha, Flambe, Armory, Kha, awe6, NME, and HaxePunk, 它在商业应用程序和网站的生产环境中也很有用.
Kevin拥有超过20年的全栈、桌面和独立游戏开发经验. 他最近专门研究PostgreSQL、JavaScript、Perl和Haxe.
8
世界级的文章,每周发一次.
世界级的文章,每周发一次.
Join the Toptal® community.