如果我计划使用clojurescript编译器,我可以使用哪些Clojure库?

如果我计划使用clojurescript编译器,我可以使用哪些Clojure库?,clojure,clojurescript,Clojure,Clojurescript,我是Clojure新手,但我学习该语言的最终目标是使用Clojurescript编译器,因为我计划在浏览器VM上使用生成的代码 因为Clojure有很多教程,Clojurescript只是另一个编译器,所以我正在编写Clojure教程,但现在我想知道核心Clojure的库在哪里可以很好地编译成javascript,而核心Clojure的库不可以 例如,在我为Clojure编写的教程中,我读过这篇文章,但它似乎已经在使用深层Java对象,而不是核心Clojure commons: user=>

我是Clojure新手,但我学习该语言的最终目标是使用Clojurescript编译器,因为我计划在浏览器VM上使用生成的代码

因为Clojure有很多教程,Clojurescript只是另一个编译器,所以我正在编写Clojure教程,但现在我想知道核心Clojure的库在哪里可以很好地编译成javascript,而核心Clojure的库不可以

例如,在我为Clojure编写的教程中,我读过这篇文章,但它似乎已经在使用深层Java对象,而不是核心Clojure commons:

user=> (.length a-string)
7
user=> (.substring a-string 3)
"name"
user=> (.substring a-string 3 5)
"na"

// And for static methods

user=> (def rt (.getRuntime Runtime))
#'user/rt
user=> (.freeMemory rt)
30462304
本章的开头在Clojure中提到,字符串与Java字符串相同,但Clojure使用的不是来自Java的
String
,这是另一回事

那么,如果我的目标是开发针对浏览器的Clojure,我可以使用哪些API和类型?这有一个简单的区别吗?我设想,任何不需要显式要求的东西(核心libs)都将是核心Clojure,我也不会把自己束缚在javalibs之上


提前感谢您。

如果您想编写代码以同时针对JVM上的Clojure和ClojureScript,请参阅


如果不使用这些工具(嵌入为任何一个后端显式编写的代码片段),通常不希望大量的程序能够独立地针对这两个后端工作。

编写Clojure以利用底层平台的库是正常的、预期的和惯用的,无论您使用哪个目标。因此,几乎所有支持Clojure和ClojureScript的库都明确使用cljx等工具,允许分别为这两种实现提供代码……也就是说“核心Clojure”没有试图完整到只用于大型/实质性程序。感谢您的评论。Clojure实际上使用了
java.lang.String
(在JVM后端),就像ClojureScript使用本机JavaScript字符串一样。我不完全清楚你所画的区别——也许这暗示着它们可能是一个子类?——但是没有,没有子类,没有特殊的,普通的旧平台原生对象。如果你允许我再使用你的大脑两秒钟。考虑到clojure是一种语言,而Clojurescript只是一个编译器,如果我真的不关心JVM的目标(我不关心JVM),你有什么建议让我确切地知道clojure的哪些部分可以使用或不使用,这样我在编译代码时就不会被阻止;特别是,在单线程运行时(如JavaScript)中没有意义的并发结构(如REF)根本就不存在。ClojureScript文档中介绍了这一点。是的,我可以猜测线程不一定适合,我更关心的是基本的东西,如(.length),以及如何知道这是否将编译为JS。
(.length“foo”)
正如您所说,是一个互操作调用,而不是Clojure内置调用,因此,除非每个运行时的String类独立地有这样一个方法,否则它不会工作。