现代的Haxe编程语言在某些领域是众所周知的,但是许多阅读此材料的人可能从未听说过它。 但是,不要让它的利基地位蒙骗您。 自从他于2005年首次露面以来,他的忠诚(尽管很安静)追随者在战斗中经历了他。 它具有务实而周到的功能组合,适用于商业,游戏甚至是学术目的的开发。
迪士尼,孩之宝和BBC都使用Haxe ,那么为什么大多数开发者都没有听说过呢? 也许Haxe的多功能性意味着它不能被称为单一杀手级功能。
也许原因是Haxe的最早用途之一是将其用作从即将死去的Flash平台迁移的一种手段。 在过去的几年中,休闲游戏市场一直处于停滞状态,但是现在人们知道,到2020年,Flash将
不再受到Adobe的正式
支持,并且网络上所有Flash内容都将被淘汰。
商业软件工程师,Web开发人员和许多游戏开发人员,听到“ Flash”一词,可能立即对该主题失去兴趣。 例如,这种态度是
HaxeDevelop出现的原因
-Haxe的IDE本质上是
FlashDevelop ,但是专门用于Haxe的开发以及从其分发组件中用于ActionScript开发的Haxe都已删除。
摆脱掉Haxe是前Flash开发人员的避难所的这种联系仍然非常困难,尤其是当他们(这种联系)仍然相关时。 例如,其社交游戏拥有7500万用户的FlowPlay选择了Haxe而不是Unity或纯JavaScript将其项目(代码库为140万行)从Flash转换为HTML5(可获取更多详细信息)
在此材料中 )。
也许这就是为什么很难挑选出成功使用Haxe的案例,同时又引起非游戏开发商的兴趣的原因。 但是,让我们仍然做一些研究。
那么,Haxe是什么呢?
通常,
使用Haxe语言意味着您可以重用(好的)代码 。 我的意思是说Haxe代码可以在许多平台上重用,可以与现有的Haxe代码和其他语言集成在一起,而且,Haxe语言提供了许多经过验证的范例,例如类型安全。
继续讨论通用性这一主题,我们列出了Haxe使用场景的主要类别(当然,除了从Flash进行迁移之外)。
从头开始开发跨平台应用程序或游戏。 使用Haxe代码,您可以使用桌面,移动和Web平台。 跨平台编程语言没有什么新鲜事物,除了Haxe之外,还有其他针对跨平台
台式机和
移动应用程序以及游戏的特殊解决方案。 但是Haxe在这方面的不同之处在于,一个代码不仅可以在不同的平台上运行,而且可以在不同的范式中运行,例如以HTML5应用程序和本机可执行文件的形式。
一种语言“统治一切”。 我为提到Tolkien表示歉意,但是正如Node.js宣布为网站的客户端和服务器部分使用一种语言的时代一样,Haxe可以用于客户端-服务器应用程序的两个组件(而客户端和服务器可以运行)不同的平台)。
例如,
FontStruct Web应用程序使用Haxe在客户端(HTML5画布)和服务器端(使用Java2D)渲染图形。 但是,正如已经提到的,没有必要遵循这条路径
-Haxe不会限制您的功能,并允许您与使用任何其他语言编写的现有代码结合使用。 这种方法大大简化了维护逻辑一致性,甚至简化了在所有上下文,平台和目标语言中的图形渲染。
JavaScript放弃使用类型安全性。 等一下,那不是TypeScript吗? 是的,如果您想限制自己仅使用JavaScript输出。 反过来,也可以将Haxe编译为Java,C ++,C#,Python,Lua
和其他语言的代码 。
同时,Haxe语言本身很简单,对于已经熟悉JavaScript基础的人来说很容易学习;它的语法不需要程序员改变思维方式,例如Rebol。 Andy Lee(Haxe的主要开发者之一)写了
TypeScript和Haxe的
详细比较,直到今天,这两种语言仍在继续发展,尽管这两种语言仍在继续发展。
相当快速的编译和测试过程。 最近添加到Haxe生态系统中的HashLink跨平台虚拟机(VM)使您能够在编译时间(在HashLink下进行编译比在C ++下进行编译要快得多)与足以执行诸如创建3D游戏等领域的代码执行速度之间达到平衡(以前可以实现这些目的)使用Neko虚拟机,但是其速度明显不及HashLink。 但是,即使在Web开发领域,
Haxe在编译速度和生成代码的执行速度方面也可以胜过TypeScript 。
令人兴奋的前沿。 Haxe的源代码是开放的,不断有新的语言构造被添加到其中,并且它具有活跃的社区。 他最大的秘密是在编译时执行
宏系统,并允许按灵魂所希望的方式进行元编程(我将在下面提供一些使用宏的库示例)。
谁在使用Haxe?
当然,游戏开发商:
Madden NFL Mobile ,
Evoland II ,
Double Kick Heroes ...这些以及其他数百种游戏都是使用Haxe开发的。 但是Haxe还用于游戏领域之外:
- 早在2014年,Haxe的使用使TiVo 可以将TiVo Premiere机顶盒的性能提高30%以上 。
- Massive Interactive(其客户为DAZN和Telecine) 成功地使用了Haxe来开发用于智能电视系统的软件。 基于他在大型Web项目中的经验,Philip Elsass(大规模交互式UI架构师)在他的一份报告中指出,Haxe通常比TypeScript更易于使用,并且它可以更快地转换为JavaScript。
- Synolia将Haxe用作其在线工具Heidi ,法国主要的家乐福,La Fnac和Nickelodeon都在使用Heidi 。 Haxe工具包允许Synolia从Flash迁移到HTML5,并且还为移动业务提供了新的商机。 选择Haxe使我们能够在Heidi的各个层和服务之间重用通用代码。
- 2017年,Docler Holding 成为Haxe基金会的战略合作伙伴 。
什么是Haxe生态系统?
在游戏和Haxe方面,库和开放源代码框架的选择非常广泛。 Haxe用户,无论是独立的独立团队还是与国际客户合作的成功工作室,都在积极共享其代码:
当然,制作游戏是Haxe最杰出的应用。 但是Haxe生态系统还具有用于构建业务和企业应用程序的库和工具,例如:
- hexMachina是一个模块化的应用程序创建框架,它支持使用领域特定语言(DSL)和模型视图控制器(MVC)架构以及许多其他功能。 由Docler Holding创建和使用。
- HaxeUI是一个UI标记引擎,正在积极开发并具有公司支持。 其使用的示例是诸如3DVista和Kaizen for Pharma的产品 。 HaxeUI的有趣之处在于它由一个内核模块和各个模块组成,这些模块使用各种方式实现UI呈现:HTML组件,wxWidgets,Windows窗体,本机Android UI元素等。
- thx系列库为Haxe提供了通用的语言扩展; Lodash库可以从JavaScript领域称为它的对应库。
- 说到JavaScript和JavaScript编译的Haxe项目,应提及Haxe Modular工具,该工具帮助Telecine和FlowPlay扩展其庞大的项目并提供快速的客户端加载。
- Haxe生态系统还旨在促进与现代技术的协同作用。 作为朝这个方向运动的示例,我们可以调用GraphQL库 。
- 最后,使用宏系统的Tinkerbell库集合提供了用于各种任务的工具:Web路由,单元测试和SQL嵌入的框架,以及几乎所有库:从CSS模板和解析到异步/等待和响应处理状态具有更平滑的学习曲线。
仅列出Haxe用户创建的最有趣的项目。 可以在官方网站上找到按受欢迎程度排序
的图书馆的完整列表 (也可以按标签对图书馆进行排序)。 但也值得一提的是Haxe基金会本身支持的几个项目:
听起来不错,但是开始在Haxe上进行开发又需要什么呢?
Haxe快速入门
无论您在Windows,MacOS还是Linux上运行,都要做的第一件事就是
下载Haxe安装程序 ,其中包括:
- Haxe编译器,可以从终端或命令行使用
haxe
命令启动。 - Haxe标准库 ,它提供了低级功能和通用数据结构。 例如,用于处理XML和ZIP存档的类可访问MySQL。
- Haxelib软件包管理器,使您可以安装新库(从官方存储库以及Git或Mercurial中安装)。 由
haxelib
命令启动(您可能对lix感兴趣, 它是比Haxelib更高级的软件包管理器)。 - Neko是一种虚拟机,它具有快速编译功能,可用于调试项目。
此外,还有其他方法可以在系统上安装Haxe,例如
使用npm ,Homebrew或Chocolatey。
安装后,可以直接从命令行使用Haxe,但是最好使用IDE进行此操作。 FlashDevelop / HaxeDevelop仍仅在Windows下仍受大多数支持。 可用的其他大多数选项都是跨平台的(Win / Mac / Linux):
在这个简短的教程中,我们将使用VSCode。 最简单的方法是使用VSCode快速访问面板中的
ext install haxe-extension-pack
命令(由
Ctrl+P
调用)立即安装整个插件包以支持Haxe,但是如果您是极简主义者,则可以将自己限制在最基本的插件上
ext install vshaxe
(其他组件)您以后可以随时重新安装)。
创建一个Haxe项目
借助构建系统文件,可以更轻松地管理针对不同平台的Haxe代码的编译过程。 但是,对于初学者来说,我们只需要一个带有Haxe代码且扩展名为
.hx
。
至于代码,让我们以
try.haxe.org (一个在线沙箱,可以在其中快速检查特定代码的工作方式)中的“ Generate Arrays”示例为例,并将其保存在一个名为
Test.hx
的文件中:
class Test { static function main() { var a = [for (i in 0...10) i]; trace(a);
现在,我们可以在解释模式下运行Haxe编译器(即,不为任何平台生成代码),并查看对
trace()
函数的调用结果:
$ 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]
太好了!
JavaScript中的Haxe转译
假设您想与全世界共享示例中讨论的代码,从中生成JavaScript代码,并在网页上使用生成的代码。 在Haxe中,这是通过以下命令完成的:
$ haxe -main Test -js haxe-test.js
如果已安装Node.js,则可以从命令行检查生成的JavaScript代码的操作:
$ node my-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
或者,您可以将完成的
my-test.js
连接到网页,然后在下载它时,我们将看到相同的结果,但是已经在浏览器中内置的开发人员控制台中。
编译并编译成可执行文件
假设您还需要运行系统的二进制可执行文件。 为此,我们需要在C ++中转置Haxe代码,然后将生成的
.cpp
文件编译为可执行文件(前提是您已安装编译器,在Windows上,为此最容易安装Microsoft Visual Studio)。 为了执行这些任务,我们需要使用以下命令安装的
hxcpp
库:
$ haxelib install 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
稍有不同)。
创建Haxe构建文件(.hxml)
尽管Haxe项目构建文件的扩展名为
.hxml
,但它们不是XML文件(不同于HaxeDevelop和FlashDevelop使用的
.hxproj
文件,但我们不再赘述)。 这是
build-all.hxml
文件执行转译的样子:
-main Test # Haxe, Test (, )
--each # , ,
-js haxe-test.js # JS
--next # ,
-cpp bin # , ( ) - C++
请注意前缀的区别:
-js
,
-js
和
-cpp
每个参数都直接传递给haxe,而
--each
和
--next
(带有两个连字符)是元级参数,它们告诉编译器该怎么做。其他参数。
现在,要在JavaScript和可执行文件中构建程序,只需执行
haxe build-all.hxml
就足够了。
如果要翻译JavaScript代码并立即使用Node运行结果,则可以运行
haxe run-js.hxml
,
run-js.hxml
文件的内容如下所示:
-main Test -js haxe-test.js -cmd node haxe-test.js
同样,可执行文件的“生成并运行”文件将如下所示(对于Windows,将需要进行一些小的更改,我们已经提到过):
-main Test -cpp bin -cmd bin/Test
VSCode呢? 这里的一切都很简单:我们为VSCode安装的扩展名将自动获取hxml文件并生成用于构建项目的相应任务(无需使用
tasks.json
)。
Haxe 4
在配置Haxe的过程中,您可能已经注意到下载页面具有指向3.x和4.x版本的链接。
Haxe编译器的最新(第四)版本带来了许多新功能。 这些功能之一是宏系统的广泛可能性的证明,可以用新的设计来补充该语言:Haxe以前不支持短lambda函数,因此
出现了slambda库 ,该
库使用宏系统实现了对它们的支持。 从第四个版本开始,它们的支持已内置在编译器中,并且不再需要使用此库。
Haxe 4还有什么新功能?实际上,变化不大。 相反,Haxe 4带来了许多小的改进。 毕竟,Haxe是由一个小型且有目标的团队开发的相当成熟的技术,因此很难找到类似于Haxe的项目。
Haxe的许多最有趣的功能并不是新功能。 例如,我之前提到过,使用Neko和HashLink虚拟机可以加快开发过程。 但是自2016年以来,编译器已出现在编译器中,这使得项目重新编译(不适用于虚拟机)现在变得更快(使用RAM中的缓存),此外,IDE可以使用编译服务器自动完成代码(例如,插件可以正常工作)在VSCode下)。
但是,尤其是,在Haxe 4中将出现以下更改:
Haxe学习资料
除了
标准库API的文档和Haxe网站上的
语言语法之外 ,
材料还为初学者设计 ,此外,我不禁提及
专门用于Web上Haxe开发的网站 。
如果您想从视频材料中学习,那么可以在西雅图举行的2018年美国Haxe峰会上
观看视频 ,以及其他会议的录像。
但是有时候,针对特定主题的指南可能会派上用场。 例如,
关于在HaxeFlixel中以地牢搜寻器风格创建游戏 。 HaxeFlixel还提供了一系列材料,解释了使用发动机的基本原理。 如果您对3D感兴趣,则可以在此处提供
有关Armory入门的
指南 。
也许您只需要
快速处理XML的
指南 -这是已有数年历史的文章之一,但它们仍然很相关。 尽管Haxe一直在不断发展,但其中的许多开发基础仍未改变,因此旧的培训材料并不总是意味着它已经过时(特定库的材料,而不是Haxe核心的材料通常已过时)。
如您所见,Haxe可以在不同的区域使用(也许Haxe会带您进入新的领域)。 我希望您喜欢Haxe的介绍,并期待听到您如何使用Haxe!