Replies: 1 comment 1 reply
-
实际处理起来困难较多, 特别是函数 variadic args 作为一种动态特性, 做在 runtime 当中了, 预编译过程无法有效准确探测. 另外考虑语法糖路径, 也受限于调整的复杂度... 暂时做了部分功能的实现, afec6f2 对于 namespace 顶层的函数, 可以做一定程度的探测, 根据静态语法提早发现传参的问题. 对于局部变量以及高阶函数, 没有做处理. |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
背景
基于 #73 的更改, 已经在使用当中感受到了效果.
静态检查提前发现错误, 阻止错误的代码被运行, 避免了运行时的一些代码.
所以, 增强了期望, 期待参数个数检查也能在编译过程提前发现, 更快发现一些问题.
值得注意, 这些功能是 ClojureScript 完全一直存在了很多年的, calcit-js 依然是模仿.
实现和难点
已知的一些实现的细节, 主要是在
Fn
和Proc
两个类型当中增加信息,信息用于记录参数的个数, 大致需要一个
Option
包裹的结构对应
fn (a ? b c)
和fn (a & xs)
的语法, 需要考虑范围.Preprocess 过程当中对
DynArity
进行检查, 给出 warning.另外生成 JavaScript 以及运行时的动态检查暂时不去掉.
就算未来发现有重复, 也先考虑弱化对应的检查, 而不会全部去掉.
需要注意
Fn
有源码可以分析参数个数的设定, 而Proc
没有,那么 Proc 的参数个数就需要大量进行手动标记, 这个有一定的工作量,
可能的麻烦是对已有代码造成某些小的更改, 存在未知.
预期问题
由于 calcit-js 大量使用 js interop, 也就意味着 js 部分的代码没有足够信息检查的.
因此对应部分的检查暂时先不管. 假如要做的话, 需要引入
arity-hint
之类的指令, 也比较麻烦.Beta Was this translation helpful? Give feedback.
All reactions