什么是fn*以及Clojure如何引导?

and*_*oke 23 bootstrapping clojure

clojure.core来源似乎假设已存在fn*.这定义在哪里?bootstrap还需要什么(在现有的Java类型上)?它们是如何组合在一起的?

也许这已经被问到了?我很难获得良好的搜索结果fn*.

更新:在标题中将"bootstrap本身"更改为"bootstrap",因为我不想暗示Clojure是自托管的.

num*_*_cn 12

在src/jvm/clojure/lang/Compiler.java中46行:

static final Symbol FN = Symbol.intern("fn*");
Run Code Online (Sandbox Code Playgroud)

fn*由clojure编译器实现,就像其他特殊形式一样,我想.

更新: 在analyzeSeq方法中,6452-6353行:

    if(op.equals(FN))
        return FnExpr.parse(context, form, name);
Run Code Online (Sandbox Code Playgroud)

请查看FnExpr类实现代码.