最近,Facebook宣布了Flow,一种用于JavaScript的静态类型检查器,主要在OCaml中实现(https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-javascript/).
Hacklang(带静态类型检查器的PHP)也主要用OCaml编写.所以,我想知道OCaml制作静态类型检查器的独特优势是什么?
我们可以期望通过从HHVM上的PHP过渡到Hack来获得速度提升吗?
我正在考虑强类型参数/返回类型,特别是标量,它允许HHVM在将代码编译为本机代码方面做得更好,或者与使用经典PHP及其混合类型相比,速度增益无关紧要?
Facebook推出了一种新的编程语言,它看起来就像是PHP的扩展.他们称之为Hack,它在他们的HHVM引擎上运行.
在看到他们的网站并阅读了一下之后,我想知道从PHP到Hack的迁移有多么流畅.
让我们围绕已经部署到LEMP或LAMP堆栈的Web应用程序进行讨论.
我的一些初步想法和行动清单包括:
那么,你会怎么做呢?
有没有人设法找到HHVM用于黑客语言的IDE?是否有任何插件可用于知名的IDE像Eclipse,Netbeans的,等等?谢谢!
编辑:当SiebelsTim嵌入了typechecker并为Sublime做了一个基本的语法高亮时.你可以在这里找到插件
我今天开始学习hacklang,现在我有点卡在形状上:http: //docs.hhvm.com/manual/en/hack.shapes.php
我理解形状的概念,它似乎对我很有用,但我无法理解为什么例如这段代码不会抛出任何错误:
<?hh
type Point2D = shape('x' => int, 'y' => int);
function dotProduct(Point2D $a, Point2D $b): int {
return $a['x'] * $b['x'] + $a['y'] * $b['y'];
}
function main_sse(): void {
echo dotProduct(shape('x' => 3, 'y' => 'this should cause an fatal error?'), shape('x' => 4, 'y' => 4));
}
main_sse();
Run Code Online (Sandbox Code Playgroud)
'y'键定义为整数,但是当我传递一个字符串时,不会显示错误.谢谢你的帮助 :)
当我尝试使用hacklang/hhvm(今天编译)通过PDO访问MySql时,我得到了一个pdo异常"找不到驱动程序".我尝试安装php5-mysql,但我甚至不确定它是否有用,因为我不确定php和hacklang之间的关系,特别是在扩展方面.我该怎么做才能让PDO在hacklang上工作?
更新:
我找到了支持的扩展名列表:https: //github.com/facebook/hhvm/wiki/Extensions
PDO和MySql都在那里,但我应该寻找mysql_pdo吗?或者我需要做一些配置吗?
我决定开始一个新项目进入hacklang,并在修复了一些问题之后我最初遇到了从php习惯过渡的问题,我遇到了以下错误:
Unbound name: str_replace
Unbound name: empty
Run Code Online (Sandbox Code Playgroud)
做一些研究我发现这是因为使用了'遗留'的php,它不是类似于typecheck,并且会出错//strict.
这很好,所有,empty()很容易取代,但str_replace()有点困难.
是否有一个等效函数可以使用//strict?或至少类似的东西.
我知道我可以使用,//decl但我觉得在我的情况下失败了目的.
是否至少有任何方法可以告诉哪些函数在hack中实现,哪些不在文档中,因为我找不到?
作为参考(虽然它与问题本身不太相关),这里是代码:
<?hh //strict
class HackMarkdown {
public function parse(string $content) : string {
if($content===null){
throw new RuntimeException('Empty Content');
}
$prepared = $this->prepare($content);
}
private function prepare(string $contentpre) : Vector<string>{
$contentpre = str_replace(array("\r\n","\r"),"\n",$contentpre);
//probably need more in here
$prepared = Vector::fromArray(explode($contentpre,"\n"));
//and here
return $prepared;
}
}
Run Code Online (Sandbox Code Playgroud) 谁能解释一下这是如何工作的?
http://docs.hhvm.com/manual/en/hack.lambda.php
变量是自动和可传递的(包括$ this):
<?hh
$z = 11;
$foo = $x ==> $y ==> $x * $z + $y;
$bar = $foo(5);
var_dump($bar(4)); // outputs 59
Run Code Online (Sandbox Code Playgroud) 由于缺乏对64位VM的访问权限,我目前无法构建hhvm,因此我无法使用他们拥有的类型检查程序.他们的文档似乎没有详细描述类型检查器(hh_server和hh_client?)的操作.
我想知道,对于任何使用过它的人来说,如果在这种情况下可以使用类型检查器:
假设某人无法将他们的PHP代码库转换为Hack,所以他们用hacklang类型注释的形式编写带有注释的PHP,并在构建时使用工具剥离注释,制作一个hh文件,运行typechecker并报告错误.
例如原始PHP:
<?php
function lar(/* int */ $x)/* : int */
{
return $x;
}
Run Code Online (Sandbox Code Playgroud)
复制上面的内容,删除注释,更改?php到?hh:
<?hh
function lar(int $x): int
{
return $x;
}
Run Code Online (Sandbox Code Playgroud)
通过类型检查器运行它,看它是否会产生错误.
这样,您就可以使用普通PHP访问合法类型检查,而无需在HHVM上运行它.typechecker是否以适合此设置的方式运行?