2024 年 Clojure 状态调查!分享你的想法。

欢迎!请查看关于页面了解有关其工作的更多信息。

0
ClojureScript

quot 和 rem 函数的实现过于复杂。目前它们是

(defn quot [n d] (fix (/ (- n (js-mod n d)) d))) (defn rem [n d] (- n (* d (quot n d))))

然而所有 JavaScript 中的数字都是双精度数,因此一切都是不必要的

(defn quot [n d] (fix (/ n d))) (defn rem [n d] (js-mod n d)))

请注意,“rem” 直接是 js-mod,我不明白为什么之前没有人注意到这一点。目前我仍然保留 js-mod,因为许多代码使用它,如果 cljs 以后增加了数字范围,这个区别可能很重要。

附加补丁,它还

  • 创建 quot 和 rem 的宏版本。
  • 更新了 quot、rem、js-mod 和 mod 的文档,以确保清晰。
  • 如果可用,使用 ES6 Math.trunc() 实现 fix(将数字四舍五入到零的私有函数)。

现有的 quot 和 rem 测试正常通过,尽管可能还有一些更好的测试边缘情况(负小数或除数、NaN 和 +/- Infinity 参数)。

9 个答案

0

评论者:favila

在更新的{{rem}}中找到更好的测试,它应该保持原样。最终并不是简单的 js-mod!(看起来它是先四舍五入参数?从规范中看不出来。)不过,quot 的变化是正确的,并且引入的错误比当前的更少。有机会时会更新补丁和测试。

0

评论者:favila

包含测试的工作补丁。测试已扩展以涵盖浮点数情况。{{rem}}现在与master完全相同(曾比js-mod更准确),但对于非有限参数或零除数返回与js-mod一致的结果。

0

评论者:mfikes

cljs-1164.patch不再适用于master

0

评论者:arichiardi

补丁现在生效。我只用Nashorn进行了测试

`

未设置V8_HOME,跳过V8测试
未设置SPIDERMONKEY_HOME,跳过SpiderMonkey测试
未设置JSC_HOME,跳过JavaScriptCore测试
正在使用Nashorn进行测试

...

运行了185个测试,包含17195个断言。
0次失败,0次错误。
测试了1个可能的4个js目标中的目标
`

0

评论者:arichiardi

补丁已清理

0

评论者:mfikes

成功在V8、SpiderMonkey、JavaScriptCore和Nashorn单元测试中运行Andrea更新至Francis补丁。

我还手动运行了使用补丁构建的bootstrapped ClojureScript的一些单元测试。

LGTM。

0

评论者:mfikes

由于这是低级数字更新,还通过ChackraCore(成功)运行了单元测试。

0

评论者:mfikes

CLJS-1164-1.patch不再适用于master

0
参考: https://clojure.atlassian.net/browse/CLJS-1164(由 favora 报告)
...