0

由于 Clojure 被设计为在 Java 虚拟机 (JVM) 中运行,我不明白这句话

虽然 Clojure 最初主要是作为一种服务器端语言,但 ClojureScript 的出现表明核心开发人员并不认为这是它的唯一目的。

虽然我对 Lisp 语言和 Clojure 很感兴趣,但我对 Java 并不熟悉,所以这让我感到奇怪。我工作过的大多数 Web 服务器都是传统的 Apache 变体,带有标准的服务器端语言,如 Ruby、PHP、Perl,但我从未在我的托管环境中将 Java 视为默认安装的服务器语言,所以这是什么意思陈述?

其次,JVM 通常运行在 Mac 或 Windows 等客户端操作系统上,不是吗?Sun 表示世界上有数十亿个 JVM,显然这不是指服务器。

4

5 回答 5

3

一个要点是,Clojure 有几个重要的理念和实践,当应用于特定的运行时环境(如 JVM、JavaScript/ECMAScript 等)时,它们会产生一种强大的语言。这些理念包括:

  • 简单性:分离不同部分的能力。所有 clojure 变体都提供了代码和数据的分离。这包括独立于生成数据的代码处理数据的能力。直接地,这是在语言中内置了读写复合和简单(非复合)数据结构的能力。

  • 不可变的数据结构:所有 Clojure 变体都有数据结构,即使是非常大的数据结构的新版本也很有效,并且旧数据保持不变。如果您将大型数据结构传递给多个线程,则无需锁定,因为它们在数据的不同“分支”上工作。这一切都无需复制(使用结构共享)即可完成,而且效率很高。

  • 身份、状态和时间的显式处理:所有 Clojure 变体都提供对语言中内置事件序列的显式处理。这在变体之间有所不同,具体取决于平台。例如,在输出时生成 JavaScript 的 ClojureScript 没有协调同步更新的位置,因为 JavaScript 只有一个线程,尽管它具有所有其他类型。

还有更多内容,可以在Clojure 哲学页面上找到。还值得一提的是,如果不是大多数,那么世界上很大一部分 Web 应用程序几乎完全是用 Java 编写的。许多人发现 Clojure 为他们提供了一种与这个世界交互的方式,即使 Java 不是他们的首选语言。

于 2013-10-15T04:34:27.857 回答
2

Java 与 Ruby 或 Perl 一样是一种服务器端语言(尽管不是真正的 PHP):它是一种通用语言,经常用于编写服务器应用程序,包括 Web 应用程序和 SOA 服务。无论 Java 是否“默认安装”,在作为 Java 服务器常用主机的 Unix 机器上安装通常都很简单。

JVM理论上可以在任何平台上运行;有些 JVM 在裸 x86 硬件上运行,蓝光播放器有嵌入式 JVM。Sun 最初认为 Java 是富客户端应用程序的未来,但相反,Java 在支持 Web 站点和客户端通过各种 API 访问的其他服务方面得到了更广泛的用途。

于 2013-10-15T03:17:50.960 回答
1

作者所说server-side的语言不仅仅指网络服务器。它可能包括在服务器上运行的一整套服务,从简单的文件上传到大数据处理,通过网络提供给客户端。

Second, JVMs are typically run on client operating systems like Mac or Windows, are they not?

JVM是一个开发和部署平台。在 JVM 上部署了许多 Web 规模的应用程序。如果您的堆栈包含基于 Java 的服务,那么在您的服务器上安装 JVM 是很常见的。

于 2013-10-15T03:18:47.660 回答
1

该声明的作者意味着 Clojure 被设想为一种服务器端语言,但在需要能够在客户端上使用 Clojure 的情况下,它具有足够的功能。

不过,一个重要的区别是它不像 Clojure 实际上是在浏览器中运行的。ClojureScript 是一个将客户端(即浏览器)Clojure 代码编译成 JavaScript 的工具。它类似于 CoffeeScript,将 Ruby 风格的代码编译成 JavaScript。

所以 ClojureScript 只不过是语法糖,它让那些喜欢服务器端 Clojure 的强大和简洁的人仍然可以在浏览器的客户端编写 Clojure。但最终,客户端 Clojure 根本不是真正的 Clojure,而是 JavaScript。

所以当谈到 ClojureScript 时,JVM 是无关紧要的。

于 2013-10-15T03:26:32.007 回答
0

我对 Clojure 的历史知之甚少,但似乎很明显,它作为一种通用语言已经有一段时间了——无论最初推动 Hickey 等人的是什么。想要开发它。因为 Clojure 支持对现有 Java 库的轻松访问,并且能够创建标准 Java 风格的 jar 文件——这在服务器和其他地方都具有重要的优势——所以很明显,Clojure 在服务器之外也很有用。因此,对于“ClojureScript 的出现表明核心开发人员不将 [服务器端应用程序] 视为其唯一目的”,我的回答是不需要这样的演示。

于 2013-10-15T14:53:09.850 回答