请在 2024 年 Clojure 状况调查! 分享您的想法。

欢迎!请参阅 关于 页面了解更多关于如何使用本站的信息。

0
ClojureScript

当前失败的示例

`
(ns a-b.core)
(defn doit [])

(ns a-b.other
(:require [a-b.core :as core]))

(let [a_b 2]
(core/doit)) ;; 失败,a_b 没有正确屏蔽

;; 相关
(let [a_b 1, a-b 2] a_b) ;; 冲突,返回 2!
(let [a-b 1, a_b 2] a_b) ;; 冲突,返回 2!
(let [goog "2"] (js-obj goog 2) ;; 失败。覆盖了 goog!

`

由于编译器的屏蔽逻辑相当昂贵,并且进一步动态计算每个 "第一个命名空间段" 的新名称可能导致编译器速度降低 2 倍(或更多),我们应该可能重新引入这种方法

https://github.com/clojure/clojurescript/commit/1c71ab3bff27dc4a099b06e122ec3fdf5a2a8ba8

也就是说,维护一组首位命名空间段,并在 shadow-depth 中执行简单的集合查找。我们可能只需要存储新名称,并在屏蔽后进行查找以修复上述错误。我们还应该添加 "goog"。

1 个回答

0
参考资料:https://clojure.atlassian.net/browse/CLJS-2461(由 aralo 报告)
...