2024 Clojure 状态调查中分享您的想法!

欢迎!请在关于页面上了解更多有关这是如何工作的信息。

0
ClojureScript
{{[cljs/bootstrap_graaljs.js|https://github.com/clojure/clojurescript/blob/bc6ecdd6e53ccff42315ed747e34ace465def986/src/main/cljs/cljs/bootstrap_graaljs.js]}} 文件提供了一些基本函数,如 {{setTimeout}},这些库在 JS 环境中作为既定事实使用。

对于 GraalJS repl 环境,这是提供的内容: https://github.com/clojure/clojurescript/blob/bc6ecdd6e53ccff42315ed747e34ace465def986/src/main/clojure/cljs/repl/graaljs.clj#L64

然而,对于优化构建,该文件不包括,函数缺失

{{src/foo.cljs}}

(ns foo
  (:require [clojure.core.async :as async]))
(async/timeout 1000)



$ clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.520"} org.clojure/core.async  {:mvn/version "0.4.474"}}}' -m cljs.main -O simple -t graaljs -c foo
警告:foo 是行1处的单个段落命名空间 /Users/kommen/work/cljs-issues/graal-build/src/foo.cljs
$ js out/main.js
引用错误: setTimeout 未定义
    at <js> queue_delay(out/main.js:2201:905961-905970)
    at <js> timeout(out/main.js:2298-2299:948503-948718)
    at <js> timeout(out/main.js:2311:954258-954305)
    at <js> :program(out/main.js:2569:1074102-1074139)

$ js --version
GraalVM JavaScript (GraalVM CE Native 19.0.0)

2 个答案

0

评论者:kommen

https://clojure.atlassian.net/secure/attachment/18669/CLJS-3113.patch 将是我的首选方案:它将 {{bootstrap_graaljs.js}} 文件添加到输入中。这对于 {{:optimiziations :simple}} 工作,但不能用于 {{:advanced}}。这可能可以通过 externs 修复,但首先想要讨论一下总体方法。

0
...