Haxe(跨平台开发的最佳秘密)

本文概述

  • Haxe有什么大不了的?
  • 还有谁在使用Haxe?
  • Haxe生态系统是什么样的?
  • Haxe快速入门
  • Haxe 4
  • Haxe教程
现代编程语言Haxe在某些圈子中是众所周知的, 但是许多读过它的人永远不会听说过它。不过, 不要让它的利基地位蒙骗你。自2005年首次出现以来, 它的忠诚度(即使相当安静)也经过了实战测试。它具有务实且成熟的功能组合, 可用于商业, 游戏甚至学术环境中的开发。
迪士尼, 孩之宝和BBC都在使用Haxe, 那么为什么没有更多的开发商听说过呢?也许它的多功能性意味着Haxe编程语言没有一个单一的” 杀手级应用” 。
也许是因为它最早的杀手级应用之一(从垂死的Flash平台迁移的途径)在某些方面有些利基。在Adobe的不确定性阴影下, 古老的休闲游戏市场在过去几年一直处于混乱状态, 现在终于可以确定, 到2020年, 所有基于Flash的产品都将正式上市。
商业软件工程师和Web开发人员(实际上也有许多游戏开发人员)可能会听到” Flash” 并立即退出。因此, Haxe基金会采用了FlashDevelop IDE, 并将其更名为HaxeDevelop, 更名为Haxe IDE。
但是很难摆脱关联, 尤其是当它仍然非常重要时。例如, 其社交游戏拥有7500万用户的FlowPlay选择了Haxe取代Unity和HTML5, 因为它们最近两年从Flash迁移了140万行代码。 (更多详细信息可在案例研究中找到。)
Haxe基金会可能很难突出这样的用例, 同时仍然吸引非游戏软件的开发人员。但是, 不要让它阻止你进行一些探索。
Haxe有什么大不了的?通常, Haxe语言意味着重用(好的)代码。我的意思是:你可以在许多平台上重用Haxe代码, 可以将其与现有的Haxe和非Haaxe代码集成, 并且就其本身而言, Haxe语言提供了许多经过实践检验的范例, 例如类型安全。
延续多功能性主题, 这转化为用例的几个主要类别-当然, 不包括Flash迁移。
从头开始开发跨平台应用程序或游戏。 Haxe可以从单一语言源库中针对桌面, 移动和Web平台。跨平台编程语言并不是什么新鲜事物, 并且有针对跨平台台式机, 移动应用程序和游戏的专业解决方案。但是Haxe在某种意义上做得有些特殊, 它不仅可以针对多个平台, 而且可以针对多种范例, 例如HTML5和本机二进制文件。
一种语言” 统治所有人” 。 Pardon Tolkien参考, 但就像Node.js欢呼在网站的前端和后端使用相同语言的时代一样, 任何类似客户端-服务器体系结构的项目都可以将Haxe用于这两个方面。
例如, Web应用程序FontStruct使用Haxe既可以在前端的HTML5画布上绘制, 也可以通过后端的Java2D绘制。 (但是, 如上所述, 这种方法是可选的-Haxe也可以很好地与现有的非Haaxe代码一起使用, 因为它的设计宗旨是不束缚你。)保持应用程序, 游戏, 业务乃至呈现逻辑在所有上下文, 平台之间的一致性, 这样, 输出语言就容易多了。
从JavaScript逃逸到键入安全。等等, 这不是TypeScript的目的吗?是的, 如果你希望仅限于JavaScript输出。相比之下, Haxe语言还可以转换为Java, C ++, C#, Python和Lua等。
同时, Haxe编程语言很容易从JavaScript中学习, 它的语法并不意味着像Rebol这样的巨大范式转换, 尽管有了这种转换的好处。 Haxe的核心开发人员Andy Li博士在TypeScript和Haxe之间进行了更深入的比较, 尽管这两种语言都在不断发展, 但这种比较在今天仍然有用。
编译器的工作流程非常快。这是最近添加的部分(尽管在此之前可以选择使用Neko):HashLink是一种跨平台虚拟机(VM), 似乎在极快的编译速度和运行时的性能之间达到了平衡。例如3D游戏。但是即使在Web端, Haxe在编译时和运行时都可以胜过TypeScript。
令人兴奋的前沿。 Haxe本身是开源的, 并且拥有活跃的社区, 并且一直在增加新的语言功能。它自身保存最完好的子机密可能只是其编译时宏系统, 它本身具有许多有趣的用例, 可让你对自己内心的内容进行元编程。 (我在下面提到一些示例。)
还有谁在使用Haxe?对于初学者来说, 游戏开发人员当然是:Madden NFL Mobile, Evoland II, Double Kick Heroes……这些以及其他数百种已发布的游戏都是使用Haxe开发的。但是, Haxe也在游戏领域之外掀起了波澜:
  • 早在2014年, TiVo使用Haxe将其TiVo Premiere盒子的性能提高了30%以上。
  • Massive Interactive的客户包括DAZN和Telecine, 用于基于Haxe的” 智能电视” 系统(均具有庞大的用户群), 多年来一直在使用Haxe。他们的UI设计师Philippe Elsass向我指出, 在处理大型Web项目的经验中, Haxe倾向于比TypeScript更易于使用, 并且编译速度快一个数量级。
  • Synolia将Haxe语言用于其在线自定义工具Heidi, 法国主要的家乐福, La Fnac和Nickelodeon都在使用Heidi。据Synolia称, Haxe工具包使他们能够有效地管理从Flash到HTML5的过渡, 同时还能够在移动领域抓住新的业务发展机会。 Heidi是SaaS应用程序, Haxe工具包使他们可以在应用程序的不同层和服务之间共享通用源代码。
  • 跨国企业Docler Holding于2017年成为Haxe基金会的战略合作伙伴。
Haxe生态系统是什么样的?在游戏和Haxe方面, 就开源框架和库而言, 这是一个广阔的世界。从独立的独立团队到拥有国际客户的成功工作室, Haxe用户都在各地共享代码:
  • 迪士尼, 可口可乐和丰田等品牌使用Flambe开发HTML5游戏。
  • Heaps是最近受到3D策略打击的Northgard背后的高性能游戏框架。
  • 快速开发库awe6为数百万个移动游戏提供了强大动力, 它也许是隐藏的宝石中的一个隐藏的宝石。
  • 除了台式机和移动设备外, Kha还可以定位XBox One, Nintendo Switch和PlayStation 4, 它还具有20多种游戏引擎。其中包括Armory, 它具有完整的Blender集成, 并且最近本身已成为开源。
  • HaxeFlixel最初是根据旧的Flixel Flash库进行建模的, 是诸如《 Defender’ s Quest》之类的游戏背后受欢迎的选择。
  • Gamua的Starling(几年前用于Facebook愤怒的小鸟的Facebook端口的框架)现在拥有开源的Haxe端口。
  • 基于Flash API的OpenFL也将很快成为针对多个控制台(即PlayStation 4, PlayStation Vita, XBox One和Nintendo Switch)的一种方式, 而无需支付额外的许可费用。 HaxeFlixel和Starling都建立在OpenFL之上, 但是有些游戏是直接在OpenFL上开发的, 例如屡获殊荣的Papers, Please。
  • OpenFL是从多年前就派生出来的Native Media Engine NME仍在发布主要版本。
  • 也许你看到了HaxePunk(从FlashPunk降级)何时出现在GitHub的Release Radar博客中。
  • 高度优化的Nape物理引擎非常适合任何需要更复杂物理的2D游戏引擎或模拟器。
当然, 游戏开发场景是Haxe语言生态系统中更明显的部分。 (也许这要归功于Ludum Dare之类的游戏拥堵性质?)但是, 业务甚至企业方面也都在展示自己。例如:
  • 模块化应用程序框架hexMachina支持领域特定语言(DSL)的使用和模型视图控制器(MVC)架构, 以及许多其他功能。
  • UI布局引擎HaxeUI一直在积极发展并得到公司的支持。 3DVista和Kaizen for Pharma等产品已经附带了生产应用程序。
  • 它不仅是唯一的, 而且thx.core库及其亲戚提供了Haxe的通用扩展, 就像Lodash在JavaScript中一样。
  • 说到JavaScript, 以它为目标的Haxe项目可能会受益于利用Haxe Modular, 这有助于Telecine和FlowPlay扩展其庞大的项目, 同时又使它们在客户端快速加载。
  • Haxe的生态系统也在不断发展, 以与当前的技术对接。例如现在有一个GraphQL库。
  • 最后, 堪称典范的Tinkerbell利用Haxe的宏系统执行各种有用的任务。它具有用于Web路由, 单元测试和嵌入SQL的框架, 以及用于从模板和CSS选择器解析到异步/等待和下层学习曲线反应式状态处理的所有内容的库。
这些只是Haxe语言用户到目前为止所采取的某些指导的重点。 Haxe.org维护了按受欢迎程度排序的完整库列表, 你也可以按标签浏览。但也值得重点介绍Haxe基金会本身维护的几个项目:
  • 对于DevOps角度, 有官方的Haxe Docker存储库。
  • 在稳定性方面, 即使使用主要版本更新, Haxe 4对于那些依赖Haxe 3的项目也将提供一些兼容性帮助。
听起来不错, 但是在你的系统上运行开发环境又是什么感觉呢?
Haxe快速入门无论是Win, Mac还是Linux, 第一步都是下载Haxe。那里的安装程序将提供一些不同的东西:
  1. Haxe编译器本身, 应该可以让你从终端或命令提示符下运行haxe。
  2. Haxe标准库, 它提供了低层次的基础知识, 还提供了更高层次的通用支持。例如, 在这里可以方便地进行XML, ZIP处理和MySQL访问。
  3. Haxelib软件包管理器, 它允许你通过haxelib命令安装新软件包。 (注意:与Haxelib提供的功能相比, 还有必要检查lix以获得更高级的软件包管理, 特别是如果你考虑在专业环境中使用Haxe。)
  4. Neko, 一个虚拟机目标, 可以快速有效地重新编译和调试。
(也就是说, 设置方法不只一种。例如, 如果你已经安装了npm, 则OpenFL的安装说明可以选择通过Yeoman命令安装Haxe。Homebrew和Chocolatey也提供类似的路径。)
无论如何, 一旦有了Haxe, 就可以单独在命令行中使用它, 但是开发人员通常会选择使用IDE。仅Windows仍主要支持FlashDevelop / HaxeDevelop。大多数其他选项是跨平台的(Win / Mac / Linux):
  • VSCode的Haxe插件得到了很好的支持。
  • IntelliJ IDEA也有一个Haxe插件。
  • 游戏框架Kha具有自己的IDE, 称为Kode Studio(Win / Mac / Linux)。
  • Sublime Text和Atom都具有Haxe插件, 其他许多编辑器也都具有Haxe插件, 其中一些是特定于平台的。
就本快速入门指南而言, 我们将使用VSCode。通过Ctrl + P和ext install haxe-extension-pack来获取Haxe扩展包可能是最简单的, 但是如果你是极简主义者, 你可能只想为基本的Haxe插件本身扩展安装vshaxe, 然后选择其中一个即可你可能需要包装的其他部分。
创建一个Haxe项目
由于Haxe语言可以转换为许多目标, 因此使用构建文件可以更轻松地管理每个目标的执行方式。但是, 要开始使用, 我们只需要一个扩展名为.hx的Haxe类文件即可。
至于要放入其中的代码, 让我们以try.haxe.org中的Array Comprehension示例为例, 并将其放入一个名为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] } }

现在, 从Test.hx的位置, 你可以在解释模式下运行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]

太好了!
将Haxe代码转换为JavaScript
假设你想通过自己网页上的JavaScript与世界分享这一点。它内置在Haxe中, 并且非常简单:
$ haxe -main Test -js haxe-test.js

如果已安装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 ]

否则, 就可以使用haxe-test.js中的代码了-如果要将其包含在网页中, 则在加载时会在网络浏览器的开发者控制台中看到输出。
编译并编译为本地二进制文件
假设你还需要用于开发桌面的本地二进制文件。为此, 我们将转换为C ++目标, 因此我们可以使用C ++(假设已安装)将.cpp输出编译为本地二进制文件。为此, 我们需要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)
尽管具有建议性的扩展名, 但.hxml文件不是XML, 与HaxeDevelop和FlashDevelop所使用的.hxproj文件不同, 但在本文中不会对此进行介绍。这是build-all.hxml看起来要完成我们上面所做的转译的样子:
-main Test # tells Haxe our main class is Test (case-sensitive)--each # all of the above commands will be applied to each target-js haxe-test.js # our first transpilation target--next # no other options, time to move to the next target-cpp bin # our second transpilation (and compilation) target

请注意前缀的区别:-main, -js和-cpp是要直接传递给haxe的每个参数, 而– each和– next(两个连字符)位于元级别, 告诉编译器该怎么做。与其他参数。
现在, 你只需运行haxe build-all.hxml, 就可以同时击中JavaScript目标和本机目标。
如果要转换为JavaScript, 然后立即使用Node运行结果, 则可以运行haxe run-js.hxml, 其中run-js.hxml如下所示:
-main Test -js haxe-test.js -cmd node haxe-test.js

同样, 对本机二进制文件的” 构建和运行” 如下所示(在Linux上, 即Windows会需要一个变体):
-main Test -cpp bin -cmd bin/Test

VSCode呢?那部分很简单:你安装的扩展名将自动选择这些.hxml文件, 并在下拉列表中为你自动生成生成的构建任务(没有task.json), 让你选择要使用的构建文件。
注意:但是, 如果打开了多个VSCode窗口, 请务必小心-在撰写本文时, 这可能会导致通过Ctrl + B进行构建的问题。 (你仍然可以使用命令行, 没问题。)
Haxe 4如果遵循上述设置, 你可能已经注意到下载页面包含指向Haxe安装程序的3.x和4.x分支的链接。
Haxe编译器的最新版本4带来了许多新功能。在一种情况下, 这也证明了其宏系统的强大功能:Haxe编译器曾经缺乏对短lambda函数的支持, 因此slambda库通过宏实现了对它们的支持。从版本4开始, 编译器内置了对它的支持, 并且不建议使用该库。
那么Haxe 4还可以带来什么呢?
不一定吸引太多注意力。相反, Haxe 4具有许多较小的改进。毕竟, Haxe本身是一种相当成熟的技术, 可能是由规模较小且专注的团队开发的, 而不是与类似项目相比, 并且称呼与Haxe类似的任何项目可能有点费劲。
它的许多最有趣的功能已经存在了一段时间。例如, 我上面提到过Haxe通过Neko或HashLink提供了一个快速的工作流程。但自2016年以来, 它还配备了编译服务器。这意味着对于非VM目标, 由于具有内存内缓存, 因此重新编译依赖大型库的项目将更快, 而Haxe IDE还可利用该缓存来完成代码。
但是特别是Haxe 4将会看到:
  • 宏执行速度提高了4倍。
  • PHP5支持被删除。
  • 进行了一些语法更新, TypeScript用户可能会欢迎, 即使这两种语言之间略有不同。即, 箭头函数和新函数类型的语法。
Haxe教程虽然你可以随时直接浏览Haxe的标准API或语法文档, 但也可以使用更多对初学者友好的Haxe材料。
如果你希望通过视频来定向, 那么2018年西雅图Haxe美国峰会的讲习班将与其他年份的讲习班相提并论, 以获取更多内部人士的见解。
但是有时候让你更轻松地入门的是更具体的教程。就像有关如何在HaxeFlixel中构建地下城爬行游戏的从入门到精通教程。还提供了一系列HaxeFlixel教程, 它们解释了幕后进行的更多操作。在3D端, 有一个有关Armory入门的Haxe教程。
或者, 也许你只想了解有关XML快速处理的Haxe教程-这是许多已经存在数年但仍然很相关的教程之一。正如我之前提到的, 尽管有很多前沿领域, 但是在Haxe上进行开发的许多基础知识在这一点上都是稳定的, 因此教程不一定很快就会过时。 (在这种情况下, 通常是由于对特定库的依赖, 而不是对Haxe核心本身的依赖。)
如你所见, 你可以在许多不同的方向上使用Haxe语言, 也可以使用它。希望你喜欢Haxe多元而有趣的世界, 并期待听到你对Haxe技术所做的一切!
【Haxe(跨平台开发的最佳秘密)】相关:Haxe评论:Haxe 4的功能和优点

    推荐阅读