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
-
背景
基于 #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