Clojure与Java有多独立?


13

我对Clojure世界很陌生。我很欣赏一个事实,即可以通过Clojure互操作功能轻松访问所有Java库,但是我想知道Clojure靠自己站了多少。

当然,有些平台(例如Android)始终需要与Java互操作,因为核心库是用Java编写或公开的。此外,由于Clojure字符串是Java字符串,因此我希望字符串操作库可以作为Java String方法的包装。

但是对于其他任务,我看不出为什么无法开发本地Clojure库的原因。考虑一下Http,日期处理,XML解析,模板,JSON序列化和反序列化,OAuth,数学库等。

所以我的问题是:

Clojure在多大程度上变得独立于Java生态系统?它是否具有自己的惯用库来执行大多数这些任务和其他任务?


ClojureCLR是.Net框架的Clojure端口。
SL Barth-恢复莫妮卡

1
以我的口味,太多的Clojure核心是用Java实现的,因此无法正常启动。
SK-logic

@Barth:我知道存在其他平台的端口,但这并不能说明很多问题。它可以在CLR上运行,但仍然没有自己的库。
安德里亚(Andrea)2012年

1
@JeremyHeiler,当然,任何有头脑的人都会尝试实现这一目标。问题是-为什么Clojure从一开始就没有采用这种方式?这比用Java编写编译器要容易得多。
SK-logic

1
@ SK-logic,据我所知,Rich Hickey想要正确引导Clojure的功能花了一些时间才能实现。也就是说,他不想急于对语言产生不利影响的设计决策,而如果花更多的时间思考某些功能的工作原理,这些决策可能会产生更好的结果。也许我已经完全离开了,但这就是我对这个问题的看法。
Jeremy Heiler

Answers:


2

随着Clojure代码库的增长和自然多样化,Clojure变得越来越独立于Java库。Clojure的主要优势在于它可以调用Java,因此将来不太可能看到不使用Java的Clojure代码。话虽这么说,我已经做了很多开发工作,并且没有调用Java库(命令行args,基本文本压缩等)。以下是纯clojure库的列表:http ://www.clojure-toolbox.com/


我选择了这个答案,这要归功于指向纯Clojure库的存储库的链接。
安德里亚(Andrea)2012年

7

我认为可以说Clojure被设计为一种托管语言,现在它具有三个实现:

  • JVM上的Clojure
  • NET上的ClojureCLR
  • JavaScript上的ClojureScript

因为它是作为托管语言设计的,所以习惯用法是在有意义的情况下利用基础平台的库,但还要提供一组可移植的“核心”库(从用法pov来看,不一定在代码级别)。我希望随着时间的流逝,我们会在这三个平台上看到更多的Clojure库运行,这很有意义。

我维护clojure.java.jdbc和clj-time(JodaTime的包装器),因此在* CLR或* Script版本上使用它们没有任何意义,但可能会在不同名称空间中使用与API兼容的库。

许多“纯” Clojure库应该已经可以直接在* CLR或* Script版本上使用。

对于OP的问题:“ Clojure-the-language”是可移植的,但是“ Clojure-the-implementation”被故意绑定到Java生态系统,ClojureCLR到.NET,ClojureScript到JavaScript也是如此。


2

随着Clojure的不断发展,它肯定会构建越来越多的自己的库,从而允许更轻松地移植到其他VM。就JVM上的Clojure而言,我相信长期目标将是用Clojure替代品替换大多数库(从而在默认情况下具有STM等不变性),从而将Java互操作层降低到基元和基础的最低级别。诸如String之类的对象。在Java 8(2013)中使用Jigsaw / OSGi对Java平台进行模块化后,这一点尤其正确。

但是,我相信Clojure仍然会尝试尝试利用invokedynamic(在Java 7中作为字节码指令引入),并且会采用相当实用的方法来决定何时替换哪些库(如果Java具有完美的lib,那么为什么?尽早更改)。

注意:我并没有深入参与Clojure社区,所以这部分是传闻/猜测。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.