Haxe:跨平台开发的大秘密

现代的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 MobileEvoland IIDouble 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用户,无论是独立的独立团队还是与国际客户合作的成功工作室,都在积极共享其代码:

  • Flambe已被迪士尼,可口可乐和丰田等品牌用来开发HTML5游戏。
  • Heaps是3D / 2D游戏框架,可支撑成功的独立游戏,如NorthgardDead Cells
  • 即使对于Haxe社区, awe6快速开发也可能是隐藏的宝石。
  • Kha是一种超便携式多媒体框架,不仅可以在台式机,移动OS和HTML5上,而且还可以在XBox One,Nintendo Switch和Playstation 4上构建项目。在此基础上,创建了20多个游戏引擎 ,其中最有趣的是Armory -3D与Blender完全集成的引擎
  • HaxeFlixel以旧的Flash引擎Flixel建模,是创建小型游戏(例如Defender's Quest )的流行选择。
  • Starling最初是用于Facebook的Angry Birds端口的ActionScript框架,现在在Haxe上也具有端口
  • OpenFL实现了Flash API,还允许您为控制台(PlayStation 4,PlayStation Vita,XBox One和Nintendo Switch),台式机和移动OS,HTML5创建应用程序。 HaxeFlixel和Starling Port在OpenFL之上运行。 直接在OpenFL上开发的游戏的一个示例是屡获殊荣的Papers,Please
  • OpenFL于几年前从中分离出来的Native Media Engine (NME)继续受到支持,并且正在为其发布更新。
  • HaxePunk (从另一个Flash引擎FlashPunk降级)-也许您会在Github Release Radar的一个版本中看到它。
  • Nape是高度优化的物理2D引擎,非常适合具有复杂物理的游戏和仿真。

当然,制作游戏是Haxe最杰出的应用。 但是Haxe生态系统还具有用于构建业务和企业应用程序的库和工具,例如:

  • hexMachina是一个模块化的应用程序创建框架,它支持使用领域特定语言(DSL)和模型视图控制器(MVC)架构以及许多其他功能。 由Docler Holding创建和使用。
  • HaxeUI是一个UI标记引擎,正在积极开发并具有公司支持。 其使用的示例是诸如3DVistaKaizen 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基金会本身支持的几个项目:

  • 对于DevOps, Docker的官方Haxe映像可能看起来很有趣。
  • h3compat库在Haxe 4和Haxe 3之间提供了部分向后兼容性,旨在帮助用户在更新项目以使其与该语言的新版本一起使用时。

听起来不错,但是开始在Haxe上进行开发又需要什么呢?

Haxe快速入门


无论您在Windows,MacOS还是Linux上运行,都要做​​的第一件事就是下载Haxe安装程序 ,其中包括:

  1. Haxe编译器,可以从终端或命令行使用haxe命令启动。
  2. Haxe标准库 ,它提供了低级功能和通用数据结构。 例如,用于处理XML和ZIP存档的类可访问MySQL。
  3. Haxelib软件包管理器,使您可以安装新库(从官方存储库以及Git或Mercurial中安装)。 由haxelib命令启动(您可能对lix感兴趣, 是比Haxelib更高级的软件包管理器)。
  4. Neko是一种虚拟机,它具有快速编译功能,可用于调试项目。

此外,还有其他方法可以在系统上安装Haxe,例如使用npm ,Homebrew或Chocolatey。

安装后,可以直接从命令行使用Haxe,但是最好使用IDE进行此操作。 FlashDevelop / HaxeDevelop仍仅在Windows下仍受大多数支持。 可用的其他大多数选项都是跨平台的(Win / Mac / Linux):

  • 积极支持VSCodeHaxe插件
  • 还有一个用于IntelliJ IDEAHaxe插件
  • Kha(前面提到的用于创建游戏的框架)具有自己的开发环境-Kode Studio (Win / Mac / Linux),该IDE是VSCode的分支,具有调试项目的附加功能。
  • 对于Sublime Text和Atom以及许多其他编辑器 ,您还可以找到相应的Haxe插件,尽管其中某些插件仅在某些平台上有效。

在这个简短的教程中,我们将使用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); // [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] } } 

现在,我们可以在解释模式下运行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.hxmlrun-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!

Source: https://habr.com/ru/post/zh-CN437740/


All Articles