`
irfen
  • 浏览: 202889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Facebook推出编程语言——Hack

阅读更多

据国外媒体报道,Facebook 于3月20日发布一款名为“Hack”的全新编程语言,并声称该语言将能使代码的编写和测试更加高效快速。

Facebook 已在公司内部使用该语言超过一年时间,现在将以开源的形式将其正式发布。

Hack 是由 Facebook 开发的,同时结合了动态类型语言(如 PHP 语言)和静态类型语言(如 C 语言)两种特点的一种编程语言。通常在使用静态类型语言编程时,开发者会在程序被运行前就知道错误发生的位置。而在更为当前的编程环境里,动态类型语言会一直运行到直至程序出错崩溃。
alpha();
}

Facebook 是一个热衷使用 PHP 的大家庭,但 Hack 团队负责人布莱恩·奥沙利文(Bryan O’Sullivan)却也指出,鉴于许多开发者在开发着很多不同的项目,能够程序运行前捕获到其中的错误也将会是很有意义的。这可以让开发者的编程过程更加高效,这与让程序运行得更加高效是具有同样意义的。

因此,一些个 Facebook 的高级工程师聚集到了一起,开发出了 Hack 语言。Facebook 在内部同时使用 PHP 和 Hack 已有一年时间,而现在已着手计划尽可能将代码移植到 Hack 上。奥沙利文表示,Hack 对代码本身的运行速度并没有实质影响。

至于 Facebook 将 Hack 开源的做法和关于谁会真正使用这一语言的问题,奥沙利文则表示:“也许很多人会认为这只是对大公司来说比较重要的东西,但实际上,小的团队和个人开发者也可以使用 Hack,并从中受益。我们相信最终受益的人会是大多数的。”

想急切尝试Hack?传送门:http://hacklang.org/

今天我们发行了Hack,一门能够在HHVM上与PHP无缝交互的编程语言。Hack的静态类型兼顾及协调了PHP的快速开发周期。同时增加了在其他现代编程语言中常见的许多功能。

我们已经在Facebook上部署了Hack,并且取得了巨大的成功。在过去的几年里,借助自家开发的一些重构工具,我们几乎将有的PHP代码迁移到了Hack上。

我们也很自豪地向外发布一个开源版本的Hack,作为我们的 HHVM runtime 平台的一部分,它现在同时支持Hack和PHP。

Hack语言

Hack和PHP有着很深的根源。实际上,许多PHP文件已经是合法的Hack文件。我们有意识地选择放弃那些与静态语言不兼容的少数便捷但将被被弃用的功能和特性。(例如:可变变量和extract()函数)。我们已经增加了许多新的特性,且这些特性能够使开发者们更具生产力。

我们新增的最主要的特性是支持静态类型。我们已经开发了一个系统来标注函数签名和类成员的类型信息,我们的类型检查算法(“类型检查器”)能够推断出来。类型检查是增量的,这样,即使在同一个文件中的一些代码可以转换为Hack,而其他部分保持动态类型。从技术上讲,Hack是一个“渐增类型”语言:动态类型代码和静态类型代码无缝地交互。

在Hack的类型系统中,我们引入了几个特性,例如泛型、可空类型、类型别名,和类型参数约束。这些新的语言特性是不显眼的,所以你写的Hack代码将仍然看起来像是使用动态语言的PHP程序员所编写的。

然而,Hack增加了额外的特性,超越静态类型检查,包括集合,lambda表达式和运行时强制约束返回类型和参数类型。
集合提供了一个替代PHP数组的简洁的,类型安全的数据结构。我们设计它专门与静态类型和泛型一起工作。集合API提供了许多经典的高阶功能,如map()和filter()用于适应函数式编程风格。

Lambda表达式给出一个简洁的语法来创建闭包。虽然PHP也有闭包,但它要求程序员显示地声明它们所要使用到的外部变量。使用Hack的lambda表达式,它会自动推断出这些用途,节省您不必要的工作。Lambda表达式使你能够更方便地充分利用集合的API。

运行时强制约束返回类型和参数类型(包括标量类型,如int和string)提供更高的安全性,胜过静态的代码审查,同时类型标注也会逐渐加入到代码库中。运行时强制约束帮助程序员发现和诊断某些类型的问题更加容易,并且为了优化,它可以帮助HHVM的JIT生产更高效的代码更加安全,通过对类型标注的信任。

即时类型检查

在开发过程中,一个PHP程序员通常会来来回回快速地在源代码和浏览器之间切换。工程师们可以进行尽可能地快速迭代,测试和调优实验,直到代码运行完美。

传统上,一种类型的检测器会破坏这种反馈环,因为它需要时间去分析源代码。我们不想减缓PHP的工作流程,所以我们想出了一个新的方法来协调类型安全的即时反馈。

我们的解决方案是将类型检查器构建为监视文件系统的本地服务器。服务器在内存中保存有关源代码的所有信息,并且当磁盘上的文件改变时会进行自动更新。这种做法已见成效:类型检查器通常运行在不到200毫秒,很少需要超过一秒钟,因此很容易集成到开发流程,而不会引入明显的延迟。

代码迁移

Hack的类型安全和重构随着在代码库的增加会带来更多的好处。需要明确可能对于一些代码很难完整地迁移到Hack上,对于我们更重要的是在增量引入Hack代码时,能够直接与现有的PHP代码共存。

迁移过程的其余事项,如添加类型注释,并使用新的语言特性,可以在代码库中适当的修改。例如一个类型标注能够在一个函数上添加,而另一个函数没有,即使在同一个文件中。如果一个函数的参数或者类的成员属性没有明确的类型标注,类型检查器会认为它的类型是动态的,并且它不检查该值的类型。

在Facebook,我们发现,我们的工程师们赞赏Hack,以至于他们开始自愿迁移大部分自己的代码。在我们的代码库有着数百万行的代码,我们也希望能够将一些工作自动化地执行,所以我们开发和使用了几个代码修改工具来帮助迁移过程(这些工具已经作为Hack的一部分发布)。

 

更多请看本人博客 http://irfen.me/irfen-facebook-hack/

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics