Ringo 101

第一件事第一下载 Ringo,将其安装在您的系统上,并使用 Ringo REPL 外壳进行游戏。如果你已经知道 JavaScript 或 Node.js,这会感觉非常相似。虽然,Ringo 运行在 Java 虚拟机( JVM )之上,因此可以很好地集成到 Java 生态系统中。这与其他基于 JVM 的语言(如 Scala 或 Clojure)类似,但现在使用 JavaScript。

Ringo 是一个 JavaScript 平台

ECMA JavaScript 规范将该语言描述为面向对象的编程语言,用于在主机环境中执行计算和处理计算对象。每个用 JavaScript 编写的应用程序都需要一个主机环境,它提供特定于环境的对象和 API 来执行 I / O。 Ringo 为 JavaScript 提供了这样一个环境,并附带一组模块以使应用程序开发更容易。由于其作为通用编程语言的特性,JavaScript 可以用来解决各种各样的问题,而 Ringo 可以帮助您这么做。利用 Ringo,编写命令行工具,复杂的 Web 应用程序甚至基于 Java UI 技术的 GUI 应用程序都很容易。

脚本语言如 JavaScript 需要一个引擎来解释和执行程序。 Ringo 没有自己的引擎。相反,它使用 Mozilla Rhino,一种 Java 中的 JavaScript 实现。犀牛的最初发展始于 Netscape 时代,并一直持续到现在。基本思想是将 JavaScript 程序编译为 Java 字节码,Java 字节码可以由 Java 虚拟机(JVM)执行。犀牛还提供了对 Java 标准类库和其他每个 Java 类的轻松访问。这使得将现有的 Java 库集成到新的 JavaScript 应用程序变得很容易。例如:Ringo 不是编写自己的 I / O 系统,而是使用现有的 Java I / O 类,并将它们封装起来以提供从 JavaScript 更容易的访问。

Ringo 在服务器或专用机器上执行 JavaScript,而不是在 Web 浏览器上下文中执行。如果您已经从基于 HTML 的应用程序中了解 JavaScript,则这是主要区别。没有什么像一个窗口对象,你没有一个 DOM 来操纵 HTML 对象。尽管如此,很多事情会像你从浏览器中知道的那样。您可以使用 console.log() 调试到控制台,但也有专用的日志记录模块可用于更复杂的日志记录。

Ringo 最大的优势之一就是模块系统。 Ringo 并没有自己构建代码,而是拥有一个易于使用的模块系统。它基于 CommonJS 模块,这是用于保持代码可互换的服务器端 JavaScript 环境的规范。如果您了解 Node.js 的模块,您还知道如何在 Ringo 中编写模块。一个模块封装了 JavaScript 方法和变量,并将它们与其他模块隔离。

多线程 JavaScript

典型的命令行应用程序和 Web 应用程序不需要 Ringo 的多线程模型的任何特殊知识。使用 Ringo 并不意味着明确的多线程,初学者不需要编写并行的 JavaScript 代码。但是,如果某个程序需要特殊的并行执行,或者在后台运行耗时的计算任务,开发人员可以选择使用多线程。

Ringo 不是在单线程事件循环中运行每个程序,而是使用 JVM 线程并行执行 JavaScript。为了彼此隔离线程,每个正在运行的程序或模块都被工作者包装。工作人员是程序的执行上下文,具有自己的一组模块和数据。这将工作人员彼此隔离,并防止典型的多线程问题,如并发修改共享数据。 Ringo 的工作人员受 W3C Web Worker API 的影响,并使用异步消息传递进行工作间通信。像 W3C Web Workers 一样,每个 Ringo 工作者都有自己的事件循环,保证在单个线程中运行,这意味着只有在没有其他代码运行时才会处理预定功能和外部事件。虽然 Ringo 工作人员都有自己的一套模块可供使用,但他们的确使用标准的构造函数和原型来共享全局对象。这是安全的,因为 Ringo 中的全局对象实际上扮演只读角色。

谁在支持 Ringo?

Ringo 由许多贡献者开发,由 HannesWallnöfer 于 2010 年左右创建。目前,它由团队页面上的人员维护。 Ringo 的主要用户之一是奥地利公共广播公司 ORF。