ClojureScript

理念

JavaScript 的影响力

在许多环境(例如浏览器)中,JavaScript 是唯一可编程技术。在其他环境(例如移动设备)中,JavaScript 是最便携的开发方法。JavaScript 也广泛用作扩展或脚本语言,例如在数据库中用作扩展或索引语言。

JavaScript 不够健壮

然而,即使是 JavaScript 的拥护者也会承认它的缺点。语言语义中存在许多暗角。它并不特别简洁,也不适合元编程或扩展。最令人担忧的是,编写健壮的 JavaScript 程序虽然可能,但需要结合大量的纪律和约定,而约定在不同的开发团队、社区和库之间有所不同。

客户端-服务应用程序正在兴起

最初的 JavaScript 使用面向为与 Web 的链接超文本设计紧密相关的文档/页面导向网站添加交互。越来越多的 JavaScript 被用来构建客户端-服务应用程序(例如 Google 的应用程序),其中 JavaScript 代表一个持续的逻辑、数据和 UI 部分,连接到一个或多个网络可访问服务。此类应用程序对它们托管的 JavaScript 部分提出了更高的要求。

JavaScript 引擎功能增强

随着 JavaScript 被要求做越来越多的事情,JavaScript 引擎已从简单的解释器发展到相当复杂和高性能的执行平台,涉及本机代码生成以及经典和新颖的动态语言优化。这些引擎在很大程度上专门针对 JavaScript 语义和执行,即它们不像 JVM 和 CLR 那样通用。

Google 带领潮流

作为客户端-服务应用程序的领先提供商,拥有大量资源并对 Web 托管应用程序有着浓厚的兴趣,Google 在此领域拥有尖端的技术。从 V8 JS 引擎到整个程序优化 Closure 库和 Closure 编译器,Google 已开源了此领域最先进的技术。值得了解和利用他们提供的成果。

库问题

随着应用程序被要求做更多的事情,开发人员将寻求使用更多更大的库。但是,许多目标平台的内存有限或网络连接,并且有很大的压力需要减小代码大小。缩小使每个库更小,但缩小本身仍然规定代码大小等于缩小库大小的总和。但是,应用程序很少使用它们使用的库中的所有代码。整个程序优化可用于构建代码大小占用仅包含实际使用代码的应用程序,而不管使用库的数量或大小。这是 Google Closure 库和编译器组合所采用的策略。

机遇

一个具有广泛影响力、可移植性、多供应商支持、优化竞赛、复杂工具、在所有新设备上实现以及对更丰富、更复杂应用程序的呼吁的开发平台 - 开发人员还能要求什么呢?一种不同的语言,就是这样。虽然正在努力改进 JavaScript,但您无法在短时间内显著改进影响力广泛的某件事 - 您的改进版本在很长一段时间内(如果有的话)不会具有相同的影響力。因此,当前存在的 JavaScript 成为一个既定的事实,并成为目标语言,而不是源语言。

ClojureScript

ClojureScript 试图通过用 Clojure(一种健壮、简洁、功能强大的编程语言)替换 JavaScript 来解决客户端/嵌入式应用程序开发故事中的薄弱环节。在实现中,ClojureScript 采用了 Google Closure 库和编译器的策略,能够有效地利用这两种工具,获得大型、生产级库和整个程序优化。ClojureScript 将 Clojure 的丰富数据结构集、函数式编程、宏、读取器、解构、多态性构造、状态纪律以及许多其他特性带到 JavaScript 影响力的每个地方。