gpt4 book ai didi

hacklang - hacklang 中的线性类型 : Statically forcing an order of function calls

转载 作者:行者123 更新时间:2023-12-02 21:44:45 29 4
gpt4 key购买 nike

因此,Hacklang 推出了一种新的、奇特的类型系统,在使用可为空变量之前必须对其进行检查。我想知道的是,您能否实现类似线性类型的功能,静态强制函数调用的顺序,常见的示例是在读取文件之前打开文件?在伪代码中:

$file_handler = get_file_handler("myfile");
$file_handler->open();
$string = $file_handler->read();

现在,没有 open()$file_handler->read() 不会抛出运行时异常,只是不编译:

$file_handler = get_file_handler("myfile");
$string = $file_handler->read(); /* Won't compile, must run open() first */

可行吗?

(好吧,对于 PHP/Hacklang 来说可能是个坏例子,因为它不是这么低级,但你明白了。)

最佳答案

Hack 目前没有对线性类型的任何 native 支持。对于您所询问的特定情况,opaque type alias在包装类中可能有用:(危险,直接输入浏览器的代码,可能有小错误,但应该说明想法)

<?hh

newtype closedfile = resource;
newtype openfile = resource;

function get_file_handler(string $filename): closedfile {
return some_wrapped_function($filename);
}

function open_file_handler(closedfile $file): openfile {
$file->open();
return $file;
}

function read(openfile $file): string {
return $file->read();
}

根据您的应用程序,这样做可能不太可能,甚至不是一个好主意,但它是最接近我们目前所拥有的。

也就是说,如果您正在设计 API 而不是使用现有的东西,那么最好将其设计为不存在尚未打开的文件之类的东西,从而消除这种情况从一开始就出现错误,不需要任何类型系统杂技。 (基本上,至少在我看来,这是一个 API 设计问题,而不是类型系统问题!即使您可以使用类型系统静态地使无效代码成为错误,但 API 的使用者甚至可以这样写:代码并认为它​​具有潜在意义是 API 中的缺陷。)

关于hacklang - hacklang 中的线性类型 : Statically forcing an order of function calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584618/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com