`
irfen
  • 浏览: 204643 次
  • 性别: 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
分享到:
评论

相关推荐

    最流行的编程语言排行.txt

    根据提供的文件信息,我们可以梳理出一个关于“最流行的编程语言排行”的详细分析。虽然原始文本可能存在一些乱码问题,但仍然可以从中提炼出关键信息。 ### 标题:最流行的编程语言排行 #### 描述: 这份文档简短...

    安卓Android源码——FaceBook.zip

    本压缩包“安卓Android源码——FaceBook.zip”显然包含了Facebook应用的部分源代码,这为我们提供了一个深入了解Facebook如何利用Android技术来构建其移动应用的宝贵机会。下面,我们将深入探讨这个主题,涵盖...

    安卓Android源码——Facebook客户端.zip

    【安卓Android源码——Facebook客户端.zip】是一个包含Facebook客户端源代码的压缩文件,这对于学习和研究Android应用开发,特别是社交应用的实现具有重要的价值。在这个压缩包中,开发者可以深入理解Facebook应用...

    XMPP高级编程——使用JavaScript和jQuery.pdf

    ### XMPP高级编程——使用JavaScript和jQuery #### 一、XMPP协议概述 **XMPP**(eXtensible Messaging and Presence Protocol,可扩展消息处理现场协议)作为一种灵活且功能强大的协议,其核心在于提供一种机制,让...

    IOS应用源码——分享到facebook的API.zip

    Swift是苹果在2014年推出的现代化编程语言,而Objective-C则是更早的、经典的iOS开发语言。两种语言都支持Facebook SDK的使用。 通过对这个源码的学习,开发者可以掌握如何在iOS应用中集成Facebook分享功能,增强...

    facebook circle hack环境搭建

    NULL 博文链接:https://linleizi.iteye.com/blog/1587945

    FaceBook基于Iphone的多个应用源码

    Iphone开发系列源码——FaceBook基于Iphone的多个应用源码Iphone开发系列源码——FaceBook基于Iphone的多个应用源码Iphone开发系列源码——FaceBook基于Iphone的多个应用源码Iphone开发系列源码——FaceBook基于...

    Android源码——Facebook客户端.zip

    不过,由于Facebook的源码并不公开,这份"Android源码——Facebook客户端.zip"可能是社区的逆向工程或者模拟实现,实际内容可能与真实Facebook客户端有所差异。真正的学习和理解仍需结合官方文档和最佳实践。

    安卓Android源码——仿facebook布局效果.zip

    "安卓Android源码——仿facebook布局效果.zip"就是这样一个资源,它提供了实现类似Facebook应用程序布局的源代码。这个压缩包包含了必要的图片资源和一个源码说明文档,帮助开发者理解并复现这一特定的布局设计。 ...

    Apache Thrift——可伸缩的跨语言服务开发框架

    Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用框架。它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++,Java, Python,...

    facebook thrift

    然而,这样的设计选择带来了挑战——如何构建一个跨多种编程语言的透明、高性能桥梁。现有的解决方案要么过于受限、不提供足够的数据类型自由度,要么性能不佳。为了解决这些问题,Facebook实现了Thrift这一解决方案...

    相比其他编程语言,python有哪些优点?.pdf

    Python 编程语言在众多编程语言中脱颖而出,其特点和优势使其成为许多初学者和专业人士的首选。以下将详细介绍Python的优点以及它为何受到广大用户的喜爱。 首先,Python 的语法简洁明了,它遵循“易读性优先”的...

    相比其他编程语言,python有哪些优点?.docx

    Python 编程语言在当前的信息技术领域中备受推崇,尤其在教育和专业应用上具有显著的优势。以下将详细探讨Python相较于其他编程语言所具备的一些优点。 首先,Python 的语法简洁明了,使得它成为最接近自然语言的...

    Python-Pyre是Facebook推出Python的静态类型检查工具

    Python,作为一种动态类型的编程语言,一直以来都以其灵活性和简洁性受到开发者们的喜爱。然而,这种灵活性也带来了代码可读性和维护性的挑战,尤其是在大型项目中。为了解决这个问题,Facebook推出了一款名为Pyre的...

    Facebook 推出多模态通用模型 FLAVA,吊打 CLIP 平均十个点! .rar

    标题中的“Facebook 推出多模态通用模型 FLAVA,吊打 CLIP 平均十个点!”揭示了本次讨论的核心内容:Facebook 已经发布了一种名为 FLAVA 的新型多模态模型,它在与 CLIP(对比学习的图像-文本嵌入)的对比测试中...

    PyPI 官网下载 | facebook-scraper-0.2.17.tar.gz

    Python作为一门强大的编程语言,拥有众多用于数据抓取的库,其中就包括了我们今天要介绍的`facebook-scraper`。这个库专门用于从Facebook上抓取公开的数据,让我们一起深入了解一下它的功能、使用方法及其背后的原理...

    Android源码——仿facebook布局效果.zip

    这个"Android源码——仿facebook布局效果.zip"文件应该包含了一个示例项目,演示了如何在Android平台上复制Facebook的界面风格。 首先,我们要理解Facebook布局的核心特点。它通常包括以下几个方面: 1. **可滚动...

    IOS应用源码——facebook图片拾取器.zip

    本资源包含了一个实现此功能的源码示例,名为"IOS应用源码——facebook图片拾取器.zip"。这个压缩包包含了以下几个关键文件: 1. **full (1).png**:这可能是一个截图或者示例图,展示了应用在实际运行时如何展示...

    Android源码——仿facebook布局效果.rar

    这个压缩包文件"Android源码——仿facebook布局效果.rar"可能包含了一个示例项目,帮助开发者理解和学习如何在自己的应用中实现这些效果。下面将详细介绍涉及的知识点。 1. 滑动导航菜单(Sliding Drawer或...

Global site tag (gtag.js) - Google Analytics