Facebook Hack 语言 简介
1. Hack 是什么?
Hack 是一种基于HHVM(HipHop VM 是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT编译器,同时具有产生快速代码和即时编译的优点。)的新型编程语言,可以实现与PHP的无缝互操作。Hack通过静态编辑确保了PHP的快速开发周期,与此同时又添加其它主流语言的很多通用功能,使其相比于PHP更具优势。
Hack通过检索本地服务器的文件系统表提供即时的类型校验,校验耗时通常小于200毫秒,因此它很容易集成到你的开发流程中而不引入明显的延时。
下面是Hack语言一些非常重要的特性:
- Type Annotations (类型注释): 可以是PHP代码显式类型参数,类成员变量和返回值:
1 <?hh 2 class MyClass { 3 const int MyConst = 0; 4 private string $x = ''; 5 public function increment(int $x): int { 6 $y = $x + 1; 7 return $y; 8 } 9 }
- Generic(泛型):允许类和方法参数化(例如,当类实例化或方法调用时的一个类型关联),同静态类型语言如C和Java一样:
1 <?hh 2 class Box<T> { 3 protected T $data; 4 5 public function __construct(T $data) { 6 $this->data = $data; 7 } 8 9 public function getData(): T { 10 return $this->data; 11 } 12 }
- Nullable Types(可空类型): Hack 通过使用符号“?”实现对可空类型的支持,这就引入了一种更安全的方式来处理空值,尤其对值不能取null的原始类型非常有用,例如bool 和int(用法:?bool 和 ?int),可空操作符可以用于任何类型或类
- Collections: 通过提供一流的,内置的参数化类型,如Vecctor(一个有序的,基于索引的列表),Map(一个有序的字典),Set(一个无重值列表), 和Pari(基于索引的只有两个元素的集合)来增强使用PHP 数组的体验。
- Lambadas 提供和PHP closures相类似的功能,但它通过隐式的封闭的函数体捕获变量并且更加简洁
<?hh function foo(): (function(string): string) { $x = 'bar'; return $y ==> $x . $y; } function test(): void { $fn = foo(); echo $fn('baz'); // barbaz }
Other significant features of Hack include Shapes, Type Aliasing, Async support, and much more.
Hack其他一些重要特性包括Shapes, Type Aliasing, Async support等。
更多详细信息请查阅:http://hacklang.org/
HHWM简介:
HHWM(HipHop VM) 是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点。
HHWM能做什么?
几乎可以做任何事情,HHWM主要专注于服务器端脚本,这样你就可以收集表单数据,生成动态页面内容,或者发送和接收的cookies。除此,HHVM可以做更多的事情。
HHVM脚本主要应用于两大领域:
- 服务器端脚本。这是HHVM最传统,也是最主要的目标领域。你需要三样东西来完成这项工作。
- HHVM解析器
- 一个web服务器
- 一个web浏览器
你需要运行一个连接HHVM安装的web服务器,你可以通过一个web浏览器访问Hack程序的输出,通过服务器查看Hack页面。所有的这些都可以在你的家用电脑上运行。
- 命令行脚本。你可以编写一个HHVM命令行脚本,并且不依赖任何服务器或浏览器来运行,唯一需要的是HHVM解析器。这种方法是定期执行脚本或者测试新的库和功能的最佳选择。这些脚本也可以用于简单的文本处理任务。
HHVM完全支持各种Linux操作系统的变种,包括Ubuntu,CentOS的,Debian等等,HHVM也可以安装在Mac OS X, 只在解释模式下运行(无JIT, 正在开发). Windows的支持正在积极开发。对于当今绝大多数web 服务器, HHVM也都有很好的支持,这包括使用FastCGI协议的各种web服务器,如:Apache, lighttpd 和nginx.
使用HHVM,你可以自由的选在一个操作系统和一个web服务器。此外,你还可以使用过程编程或面向对象编程(OOP),或它们两者的混合物的选择。当然,你可以选择使用Hack或PHP作为编程语言。
使用HHVM,你可以不再受限于HTML的输出能力。HHVM的能力不仅局限于此,它还包括输出图片,PDF文件,甚至动态Flash(使用libswf和Ming),当然你也可以非常简便的输出任何文本,例如XHTML和任意XML文件. HHVM可自动生成这些文件,并将其保存到文件系统,而不是直接输出,形成一种动态内容的服务器端的缓存。
HHVM一个最强大,最显著特征就是广泛的数据库支持,可以使用一个特定的数据库扩展来,或使用一个像PDO样的抽象层,或者通过ODBC扩展链接到任何支持开放式数据库链接标准的数据库,编写一个启用数据库功能的网页会是难以置信的简单(例如, mysql)。其他数据库可以利用cURL 或者 sockets.
HHVM也可以通过使用如LDAP, IMAP, HTTP等的协议来提供对其他服务交互的支持。你也可以开放一个Raw Network Sockets ,使用任何其他协议进行交互。HHVM支持在几乎所有的Web编程语言见的WDDX复杂数据的交换。
HHVM具有卓有成效的文本处理功能,包括 perl 兼容的正规表达式(PCRE),以及解析和操作XML文档的多种扩展和工具。HHVM以libxml2为基础标准化了所有XML的扩展,于此同时也扩展了XML功能集,加入了SimpleXML, XMLReader 和XMLWriter的支持。
本文不足以列出HHVM所有的功能和优势。你可以通过阅读Hack 功能参考手册(后续补上)来进一步了解本页提到的扩展。