Clojure(JVM):链接(引用)库

时间:2013-09-10 20:07:51

标签: clojure jvm

我是C ++程序员学习Clojure并且使用Java经验有限。现在,我有Clojure程序引用库中的一个函数:

(ns app.main
  (:gen-class)
  (:require [clojure.string :refer [join]))

...
;; Code using join
...

在C / C ++中,链接器将消除未使用的函数,因此从库中引用单个函数没有明显的开销。在JVM / Clojure世界中会发生什么?是Clojure编译器特定还是JVM一般?结果二进制包含clojure.string或刚使用的所有函数吗?

1 个答案:

答案 0 :(得分:1)

在JVM中没有链接器。 JVM处理加载和链接。 Java中的一切| Clojure是一个共享对象,因此无法消除死代码。你永远不知道加载你的代码将会使用什么。

在clojure中,每个函数都有自己的.class文件(JVM上最小的'二进制'文件)。这些被压缩到JAR文件中,这是标准的分发单元(这相当于.dll或.so)。因此,只有您使用的功能才会被加载。但是,如果您担心分发大小,那么您运气不好或者必须手动撕开JAR文件以找到正确的类文件。