gpt4 book ai didi

javascript - Coffeescript 静态分析/静态类型检查 - 障碍

转载 作者:行者123 更新时间:2023-12-02 23:16:36 28 4
gpt4 key购买 nike

我认为 Coffeescript 是一门很棒的语言!我正在寻找一些将静态分析添加到 Coffeescript 的项目/问题/功能。然而,经过一番搜索后,我发现 Coffeescript faqthis page表明静态分析可能不可行。

我想知道在 Coffeescript 中实现静态分析/静态类型检查是否存在根本问题,因为编译器中尚不存在此类内容?

此外,这对于重要的检查来说是不可能做到的,但可能只适用于简单的分析吗?当我说简单时,我的意思是检查一些琐碎的事情,例如用户是否用相同的名称(在类中)或在顶层(或者可能在相关 .coffee 文件集合的顶层)定义了一个函数两次.

如果有人能指出一些例子来说明为什么实现静态分析/类型检查并不简单/可能/值得花时间,我将不胜感激?

非常感谢!

最佳答案

这个答案有点令人费解,因为我也对此感兴趣。希望对您有所帮助。

我使用 Google Closure Compiler 静态分析 CoffeeScript 生成的代码。它有一个非常好的静态分析器,我不确定是否有充分的理由在这里重新发明轮子。最简单的方法是手动编写注释:

###*
* @param {number} x
* @param {number} y
* @return {number}
###
adder = (x, y) -> x + y

这有点冗长,但另一方面,您借用了闭包编译器的静态分析功能,它非常强大并且能够检查很多内容。实际上,我以稍微更简洁的方式编写类型注释,然后使用脚本来重写咖啡文件。我的代码最终看起来像这样:

#! {number} x {number} y @return {number}
adder = (x, y) -> x + y

我相信您可以看到重写器非常简单。

在继续之前先做一个简短的说明。 如果您通过闭包编译器运行代码,请务必使用 -b(裸) 编译您的代码。闭包编译器相当不错,但它不够智能,无法进行数据流分析。默认情况下,CoffeeScript 将您的代码包装在匿名函数中,这将使编译器出错。

沿着相同路径的另一个选项(这会破坏与 CoffeeScript 的兼容性,但会更酷)是让 Coffee 编译器编译如下内容:

adder = (number x, number y): number -> x + y

像这样进入JS:

/***
* @param {number} x
* @param {number} y
* @return {number
*/
var adder = function(x, y) {
return x + y;
};

然后可以在编译时将其输入到闭包编译器中 - 如果没有错误,编译器可以删除所有注释。

确实,this guy似乎正是这样做的。遗憾的是,他的作品似乎还处于不完整的状态。

在所有这些情况下,我们将艰苦的工作 - 静态类型检查 - 推迟到闭包编译器。如果您不想这样做,我会理解,但很难让我相信从头开始构建一个全新的静态分析工具是值得的。 :)

一年后编辑:这些天我只使用 typescript 。 :)

关于javascript - Coffeescript 静态分析/静态类型检查 - 障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874952/

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