学习 Haxe 值得吗?

158

对于使用Haxe的用户来说,它有哪些优点使其对您有用?从网站上阅读看起来很有前途。它是否提供了重要的可移植性?

一些真实世界中可能未被重视的优势是什么?

有哪些陷阱或需要注意的问题?


以前从未听说过这个,看起来很有趣。 - JoshBerke
我也不知道,Josh。这让我想到社区规模(和/或质量)可能存在严重问题,这会增加开发某些东西时的风险。 - Arnis Lapsa
9
为什么社区会出现严重的问题?社区规模并不是很大,但非常支持,只需看看邮件列表的活动就可以了解。 - Franco Ponticelli
4
简短回答是值得学习的。如果没有其他更好的答案,我稍后会写一个更详细的答案。 - tylermac
4
好的,我会尽力为您提供准确、通俗易懂的翻译。以下是需要翻译的内容:maybe also look at this question: https://dev59.com/K3RC5IYBdhLWcg3wXPwC也许可以看看这个问题:https://dev59.com/K3RC5IYBdhLWcg3wXPwC - TheHippo
2
我认为学习它没有任何坏处。它与JS和AS非常接近,学习它所花费的时间可以应用到其他项目中。 - Nosredna
11个回答

130

学习Haxe值得吗?

简短回答:当然值得!

对于使用Haxe的人来说,它有什么用处?

如果你是一个Web开发者,你知道不能长期坚持一种技术。迟早你将不得不应对环境或目标的变化(你为.NET开发,但重要客户需要PHP,或者那个小部件应该用Flash而不是Javascript),这是最好的情况。在最坏的情况下,你将不得不经常切换,甚至在同一工作日内多次切换。

这些切换可能会浪费很多时间,因为你需要多次改变编程范式,并且可能会在针对特定目标的编码库中有很多重叠。 Haxe通过只有一种源语言(Haxe语言)和许多输出(通过Haxe编译器)来试图缓解过渡的痛苦。该语言非常友好,而且相当容易学习,无论您的背景如何。

阅读网站,它看起来非常有前途。它提供了显著的可移植性吗?

无论您部署到哪个平台,该语言都是相同的。因此,您可以以相同的方式为JS、Flash、C++等定义类/接口/枚举/typedefs。如果您定义的这些类型不依赖于特定的平台API,则可以轻松地从一个平台重用到另一个平台。所有平台还共享常见的API,如XML访问、HTTP连接和反射。具有共同之处的平台(即Neko和PHP)共享诸如文件访问或Web服务器开发之类的相同API。

有哪些现实且可能被低估的优点?

  • 如果您熟悉Flash/Flex,您知道编译器会减慢您的工作速度(唯一的好处是可以在等待时喝杯咖啡)。Haxe编译器快得多,很多时候你甚至都不会注意到它在工作。
  • 生成的字节码比Adobe工具生成的等效字节码快得多。
  • 在Flash领域中,Haxe可以“内联”函数或访问Memory功能,而其他地方只能使用Alchemy。
  • 如果需要,您还可以决定针对哪个版本的Flash进行目标定位,从6到10;API已经发生了很大变化,但Haxe语言完全相同。

谈到服务器端,我们都知道PHP是多么普遍。您可以使用Haxe开发应用程序,并将其定位到Neko甚至C++,如果您的Web应用程序增长。

有哪些陷阱或需要注意的地方?

这里是常见误解的列表:

  • Haxe年轻且不成熟 实际上,Haxe已经有近4年的历史了,发布了25个正式版本(而不是构建版本)+ 13个alpha和beta版本,它在持续更新,并拥有一个非常专注的社区。许多人在多个开发领域专业使用它;看一下邮件列表档案以找到人们如何使用Haxe。

  • Haxe很复杂 因为Haxe的主要目标毫无疑问是AS3,人们希望它必须有向导或GUI。正如所述,Haxe是一种语言和编译器,这使得它适合程序员,但对于设计人员来说并不是很好。

  • 没有任何IDE 这确实是真的,IDE在很多方面都需要改进才能更好地与Haxe集成,但已经有很多有效的选项

  • 唯一出版的书已经过时 这里也有一些真实性,不幸的是,在一次重大发布之前的几个月出版了这本书(从V1到V2)。那次重大发布并没有改变太多,但确实增加了一些不兼容性。这本书仍然是一个有效的资源(我不是因为我写过它才这么说;))


1
感谢您的回复,弗朗科。还有IDE列表。我对HaXe的Xcode插件很感兴趣。看起来非常不错!关于UI框架套件和Haxe,有什么情况?例如,是否有可能使用HaXe针对Cocoa并获得OS X本地小部件?基本上使用界面构建器,并与HaXe源代码链接在一起? - Gordon Potter
如果C++对你来说足够本地化,那么这是可能的。您应该包装Cocoa调用,以便它们可以从haXe生成的代码中“可达”。正如您可能已经知道的那样,当前版本的haXe使开发iPhone应用程序成为可能;当然,这仍然是非常实验性的。请注意,C++目标仅在最新版本中引入。 - Franco Ponticelli
35
为了更好地呈现 haXe,需要提供一些缺点而不仅仅是赞美。 - Alan Klement
我是一名AS3程序员,看到Flash的惨淡命运,Haxe对我们来说越来越好了。 - justnajm
同意可能存在的缺点,如果可能的话,我真的很想要这个答案的更新版本。 - Hashim Aziz

25
作为一名创意Flasher,我真的不再看AS3有什么意义了!所以从Flash用户的角度来看,以下是我的看法:
在我目前的项目中,我有一个19岁的人,在我的指导下从大部分时间轴AS2 / AS3转移到Haxe类,并正在移植AS2和AS3代码。因此,我认为Haxe的使用并不比AS3更难,或者在Flash中使用时显著不同。就稳定性而言,我目前主要的抱怨是当前Flash播放器的某些方面,Haxe在开发Flash时确实与AS3一样稳定甚至更加稳定。
Flash的演变一直是一个不断创建库的过程,这些库随着Flash的变化变得无用(难道他们每年都需要出售软件吗!?),组件始终是我需要的东西,但大小却很愚蠢,因此我不愿像羊一样跟随Flex甚至转向替代XAML。
Haxe的主要优点是,您可以开始真正考虑创建与平台无关且将在五年后大量可用的类,我怀疑您创建的任何AS3都不是如此,Haxe的联系较少,潜在地我可以将代码编译成JavaScript、Silverlight或Google接下来推出的任何东西。
我对Haxe的主要问题是,大部分开发都不在Mac上进行,因此编译C++和Haxe的新功能方面有时会落后于Windows用户,但我没有遇到过核心Haxe(如Flash编译)的问题。
在设计方面:我使用Flash IDE电影在运行时加载我的视觉资产,并在AS3开发时也是如此,因此我的工作流不依赖于AS3/Haxe,我喜欢简单的生活,所以我使用Textmate来处理AS3或Haxe。我热爱Flash IDE及其功能,但从不用它来编写代码,大部分我的Flash工作都是编码,所以我不是一些Linux极客,Haxe并不妨碍您使用Flash IDE,但如果您想使用swfmill或sam,那也可以。
问题是:为什么要浪费时间学习商业语言AS3,它很可能会改变以推销未来版本,并且仅限于Flash播放器?
我没有花费太长时间就能够在JavaScript中创建游戏或复杂的IDE,而不需要jQuery等外部库,只需使用Haxe即可实现跨浏览器等特性。 Haxe让我将我的Flash编程技能和界面开发理解应用到Flash之外(以前从未真正使用过JavaScript),如果我要学习纯JavaScript,我可能不会感到如此自信,更像是有人砍了我的手臂,我将编写非常特定于平台的代码,而现在我可以使用FEffects进行缓动,稍后添加一些编译器开关并编译到其他平台并使用一些neash/nme。
我实际上很喜欢编译器智能处理类型等方面,这使我的代码更加简洁。而且typedef非常出色。
我看了一下PHP并决定它是一个混乱、愚蠢、肮脏的语言,JavaScript也是一样,我很高兴我可以使用Haxe来针对它们,而不必花费太多时间在黑客魔法上。

如果您喜欢为快速开发视觉创意而编写代码,我认为Haxe是理想的语言,即使作为自由职业者,我也会商业使用它。


18

我对Haxe的看法:

注意,以下段落非常哲学化(实用性的部分在后面):

作为一个短时间内接触过许多编程语言并且发现某些语言不适合自己就会换用其他语言的人,在我的眼中,Haxe是一种我无法超越的,我无法更好地掌握它。

在过去,我发现我使用特定语言所花费的时间与两个关键因素有关:我需要使用该语言来获得结果的频率以及我发现该语言的容易程度。但是,我在Haxe上掌握的时间要短得多,我把这归功于我在各种语言上积累的一点知识。在遇到Haxe之前,我从未找到过真正适合我的语言,它们要么太难理解,要么毫无用处;至少从我的角度来看是这样的。

Haxe使我能够更加自由地表达我的写作方式,我不是指每个人都谈论的语言质量方面的“自由”,我指的是能够拥有一个想法并且按照自己的想法进行尝试的能力,不管它成功还是失败。

Haxe对我来说是一个非常容易上手的学习曲线,因为我有c风格语言和AS2/3方面的一般背景,所以我真的没有遇到什么困难。阻碍我学习新语言进展的一件事是理解特定语法/框架背后的概念,但即使我克服了这个障碍,我经常会发现该语言本身要么受限,要么限制着我。但是,在Haxe上,我既不受限制,也没有发现语言本身限制了我。在Haxe中,没有天花板,但有一个玻璃地板,你可以看到你如何到达那里。

学习Haxe不像是拿起一些木棍点火,但也不像是去买个氧乙炔装置点火。从这个意义上说,Haxe更接近于可以重复使用的火柴。它遵循你所熟悉的几乎所有转换,但添加了有用的新功能。但为了做到这一点,它并没有完全重新发明轮子,而是修复了一些糟糕的部分。
实际情况: 该语言既简单易学又标准化,在允许程序员自由发挥的同时。 您可以编写非常高级的代码,也可以去调整小细节(在某些平台上,可以严格控制)。 Haxe不会在任何一个平台上限制您可以或不能做的事情,它提供了(或计划提供)对所有内容的完全访问权限,但在可能的情况下,它增加了一种标准化的操作方式。
邮件列表非常有帮助和响应迅速,论坛现在甚至开始加速。 该语言正在不断地进行改变(以微小的方式),每个发布版本都会增加新的东西。 主要API中几乎没有真正的错误,并且编译器中的错误更少。 每个人都公开讨论语言及其方向,以及他们为Haxe建议的方向(当然还有为什么应该采取这个方向)。 最后,Haxe不是一个大型(甚至小型)公司的私人企业,旨在从您作为开发人员中获得利润,相反,它是供所有开发人员使用、构建和改进的。这就是我认为Haxe是我想去的地方的原因。

13
如果你想得到一个简短的回答:是的!
对于使用Haxe的人来说,它对你有什么用处?
大部分时间我使用Haxe来进行服务器端开发。(这意味着PHP或neko目标)。在我看来,PHP是我曾经使用过的最糟糕的语言,这就是我开始使用Haxe的原因:拥有一个可用的语言。
另一个对我来说很大的优势是,Haxe是开源的。
它提供了显著的可移植性吗?
在不同的目标上具有相同的代码!我无法想象有任何更具可移植性的方式。
将网站从PHP迁移到mod_tora,其速度比PHP快40-80倍,通常只需要5分钟的工作???
一些真实世界的、可能被低估的优势是什么?
  • 最大的优点是代码的可移植性和在不同平台间通信的良好选择,处理客户端和服务器之间的数据从未如此简单。 (请查看维基百科中的Remoting部分。)
  • 社区非常伟大。(如果你至少喜欢邮件列表。:-)
  • 另一件事是:如果您需要执行非常本地操作但 Haxe 不支持的操作(这种情况很少发生),Haxe 总是会为您提供针对它们的选项。这被称为Haxe magic。换句话说:您可以做平台本地语言中的所有操作,并获得 Haxe 提供的所有好处。

有哪些陷阱或坑?

  • 文档有时不是100%完美的,安装也有问题。对IDE的支持还有很大的提升空间。
  • 此外,JavaScript 的目标有时很难使用,因为 Haxe 提供了一种非常好的语言,但是缺少一些用于最常见 DOM 操作的框架,但我认为有些人正在解决这个问题;-)
  • 如果我必须为客户工作,他们有时不喜欢使用这种不知名的语言来实现他们的项目。

附言:我认为学习一门新语言总是值得的,因为它能提高您的编程技能和经验。


mode_tora听起来很有趣。但是如果您没有/不想要apache的httpd怎么办?Neko中有一个服务器,但文档说它只用于开发。 - stesch

8

您的问题已经得到回答,但我想补充几句话。

我在Haxe的第一个beta版本后学习并广泛使用它,并一直使用至今。这是我学习的第一种语言(当时我还在上大学),真正让我理解了语言和API之间的区别。

你看,在大学里我首先学习了AS2,然后是PHP,再学了一些Javascript。我们没有接受过正式的编程介绍(而且我也没有学习计算机科学)。这些语言都与平台紧密相关,所以作为新手程序员,我自动地认为像strlen()是PHP,MovieClip是AS2等等。

通过使用Haxe,我真正理解了面向对象设计的价值,因为平台不再限制我的类。如果我足够好地将它们与平台特定内容分离,我可以在常规Web代码中重用为Flash项目编写的代码。

由于优秀的远程类,您可以使用它们在平台之间进行通信,我也意识到XML并不是特别重要,JSON也不是,除非有针对它的代码。

对于像我这样刚开始编程的人来说,这是一个相当重要的启示,在XML“很酷”且适用于所有方面的时代,这一点非常重要。


5
我的主要使用Haxe的范围仍然局限于Flash开发。我慢慢地开始接受它可以用于其他目标的想法,但我仍然没有看到那个方向的优势,并且直接在PHP和JS中进行我的PHP和JS操作。
即使我不为Neko后端开发,它也是很好的支持,因为这意味着我可以编写代码测试用例并将它们集成到构建脚本中,而不仅仅能在flash player中运行它们。这是一个非常好的优势。
代码和开发的开放性也是一个很好的优势。我真的需要一个预处理器,所以#line支持被添加到了Haxe中。我认为Adobe永远不会认真考虑我的请求。
我发现它作为一种类型化语言是新的现代语言中的巨大优势。
关于语言一致性和后端透明度,存在几个陷阱。我列出了影响我的这里。当然,没有一种语言在这方面是完美的,但我有点失望一个新的语言有这么多问题。

5
Haxe是一种非常有价值的语言,它的许多优点经常被忽视。例如,它拥有出色的内置库,使应用程序开发变得非常容易,例如简单但非常强大的ORM(Neko/PHP),完整的跨平台远程控制(Flash/JS/PHP/C++/Neko),其中任何支持的平台都可以与任何其他平台无缝通信,还有一个可靠的正则表达式库(除Flash<8外都支持)等等。
需要注意的是,我最近使用Haxe编写了一个PHP/JS/Flash应用程序,并发现开发速度呈指数增长。
当然,Haxe可能不是设计师中心化的,但也不是非常专业的。Haxe非常容易学习和重复使用,随着目标平台数量的增加,Haxe开发人员也可以针对这些平台进行开发,而无需学习任何新内容。

3

就我个人而言,我发现在Haxe中比其他任何语言都更具生产力。我主要使用Haxe来定位Neko和JavaScript。

编译器本身非常快,这使我可以像使用脚本语言一样使用Haxe。它倾向于面向对象,但具有许多功能工具:一等函数、函数匹配、lambda库。

我发现Neko的速度足够快,并且其小图像大小非常适用于受限环境。它的C FFI非常出色——非常简单地添加新功能。

我将Haxe用于我的JavaScript客户端控制器,向标准jQuery视图触发事件。这非常有效,因为您可以同时检查客户端和服务器代码的类型,同时保持未经过类型检查的原始JS最少,并保留通常JS库的好处。JSON库可用。顺便说一下,虽然Haxe确实带有mod_*用于Apache等,但我发现使用代理更加灵活,这样我就可以在Web服务器后面设置多个Neko实例。

总的来说,我认为它非常全面和周到——关键是它在所有平台上都能按照广告所述正常工作。


3
我已经在个人和职业用途中使用Haxe编码约两年了。它有一些优点,其他语言无法获得,最大的优点是从一开始就被设计为现代生产级编译器,可以灵活适应新平台并利用其独特功能。这使得它成为目前接近C高级版本的最接近的东西。如果你在Haxe中编写代码,你可以保证它会持续存在。
社区接受度比你想象的要强-我进行了一些压缩千字节的列表流量分析(来自http://lists.motion-twin.com/pipermail/haxe/的数据),结果显示自2006年以来每年的YTD(Jan-September)增长率为25-50%。在过去的六个月中,流量真正爆炸了,我正在认真考虑改为摘要模式,否则我的收件箱会因为留出超过一天而被淹没在数百条有关Haxe的消息中。它不像其他语言那样被炒作,但这反过来意味着将他们的马车搭到Haxe上的人往往是自信、知情的程序员。
在其他上下文中,人们曾尝试过语言到语言的编译器(Scheme anywhere、Python或Ruby in JS等),但那些语言是为不同的位置和目的而设计的,在翻译中失去了很多最好的方面,导致结果成为很酷的黑客,但在日常工作中不太舒适。Haxe并不感觉像那样;虽然它没有从语言/运行时集成获得便利,但它有很多其他很酷的东西可以提供现在

2

是的,完全正确。

但它需要一个更好的IDE和文档,对我来说缺乏像基于eclipse的伟大IDE一样的工具,使得我的生产力无法达到其他语言的水平。

语言=很棒 - 是最好的

开发环境=差(目前而言,个人观点)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接