在日益壮大的多语言世界中使用Groovy、Scala和Clojure

在与 Martin Fowler 共同参加的一次主题演讲中,他提供了一个敏锐的观察报告:

Java 的遗产是 平台,不是 语言。

最初的 Java 技术工程师曾做过一个了不起的决定,将语言从运行时中分离出来,最终使 200 多种语言可在 Java 平台上运行。该基础架构对平台保持长久活力非常关键,因为计算机编程语言的寿命通常很短。自 2008 年以来,每年由 Oracle 主办的 JVM 语言峰会都会为 JVM 上替代语言的实现者提供与平台工程师公开合作的机会。

欢迎来到 Java 下一代专栏系列。在这里,我将简要介绍三种现代 JVM 语言:Groovy、Scala 和 Clojure,它们将范式、设计选择和舒适因素进行了有趣的组合。我不打算在这里详细介绍每种语言;它们各自的网站上都有这方面的介绍(参阅 参考资料)。但语言社区网站(主要目的是福音传道)上没有提供语言不适应的客观信息或任务示例。在本系列文章中,我将进行实质性对比,帮助填补这项空白。本文准备概述 Java 下一代语言以及学习这些语言的好处。

超越 Java

Java 语言因 Bruce Tate 在其著作 超越 Java中将其称为 完美风暴而出名,导致 Java 出名的综合因素包括:Web 的兴起、现有 Web 技术因各种原因产生的不适应性,以及企业多层应用开发的兴起。Tate 也认为完美风暴是一系列独立事件,而其他语言不会以同样方式达到同样的高度。

Java 语言已证明其功能相当灵活,但人所共知,其语法和固有范式具有一定的局限性。尽管 Java 语言正在进行一些看似美好的改变,但其语法根本不支持一些重要的未来目标,如函数式编程元素。但是,如果您试图找到一种新语言取代 Java,那您就错了。

多语言编程

多语言编程是我在 2006 年的一片博客文章中重新提出并推广的一个术语,多语言编程以单一语言并不适合解决所有问题的认知为基础的。一些语言具有更适合某些特定问题的内在特性。例如,虽然 Swing 与 Java 一样成熟,但开发人员发现在 Java 中编写 Swing UI 非常麻烦,因为它要求进行类型声明,要求行为具有匿名内部类,并且具有其他冲突因素。使用更适合构建 UI 的语言,比如带有 SwingBuilder的 Groovy,就会使构建 Swing 应用程序变得更容易。

JVM 上运行的语言的扩展使多语言编程的构思更具吸引力,因为您可以在维护相同的底层字节码和库时将其混搭。例如,SwingBuilder不能取代 Swing;它在现有 Swing API 上进行分层。当然,长期以来,开发人员一直混合使用 JVM 以外的语言(例如,混搭使用 SQL 和 JavaScript 来实现特定目的),这在 JVM 范围内更加普遍。许多 ThoughtWorks 项目包含多种语言,ThoughtWorks Studios 开发的所有工具均使用混合语言。

即使 Java 依旧是您的主要开发语言,也可以了解如何运行其他语言,以便在策略上使用它们。Java 依然是 JVM 生态系统的重要部分,但最终人们更倾向于将它用作平台汇编语言 —一个您可以完全了解性能或满足特定需求的地方。

发展

20 世纪 80 年代初,在我上大学期时,我们使用称为 Pecan Pascal 的开发环境。它的独特之处是可以同时在 Apple II 或 IBM PC 上运行相同的 Pascal 代码。Pecan 工程师使用某种称为 “字节码” 的神秘东西实现了这一壮举。开发人员将他们的 Pascal 代码编译成这种 “字节码”,并在为每个平台本地编写的 “虚拟机” 上运行。多么可怕的经历啊!甚至对于简单的任务而言,生成代码也极其缓慢。当时的硬件根本无法应对这种挑战。

发布 Pecan Pascal 之后的十年,Sun 发布了 Java,Java 使用了相同的架构,对于 20 世纪 90 年代中期的硬件环境,运行该代码显得有些紧张,但最终取得了成功。Java 还增加了其他开发人员友好的特性,如自动垃圾收集。使用过像 C++ 这样的语言之后,我再也不想在没有垃圾收集的语言中编写代码。我宁愿花将时间花在更高层次上的抽象上,思考解决复杂业务问题的方法,也不愿意在内存管理等复杂的管道问题上浪费时间。

计算机语言通常不会有很长的寿命,原因之一是语言和平台设计的创新速度。随着我们的平台逐渐强大,可以处理的繁重作业也就越多。例如,Groovy 的 备忘特性(2010 年增加的特性)缓冲了函数调用结果。不需要手写缓冲代码,这可能会引入 bug,只需调用 memoize()方法即可,如清单 1 所示:

清单 1. 在 Groovy 中备忘一个函数

def static sum = { number -> factorsOf(number).inject(0, {i, j -> i + j}) } def static sumOfFactors = sum.memoize()

清单 1 中,sumOfFactors方法的结果是自动缓存的。您也可以使用另一种方法自定义缓冲行为,比如 memoizeAtLeast()和 memoizeAtMost()。Clojure 还提供了备忘功能,这对 Scala 的实现是无足轻重的。下一代语言(以及一些 Java 框架)中的高级特性(比如备忘功能)将逐渐找到它们进入 Java 语言的方法。Java 的下一个版本将增加高阶函数,使备忘功能的实现变得更容易。通过学习下一代 Java 语言,提前了解未来 Java 特性。

时间: 2024-10-23 04:25:04

在日益壮大的多语言世界中使用Groovy、Scala和Clojure的相关文章

在平的世界中竞争

曾有人预言,全球化将消灭中间商,但作为香港最大的中间贸易商,创立于1906年的利丰集团,却在全球化的竞争中不断壮大,成为香港最具竞争力的跨国集团.即使在危机重重的2008年,依然实现营业额1107.22亿港币,盈利24.22亿港币.在平的世界中竞争, 利丰的诀窍是什么? □文/冯国经 冯国纶 耶尔曼·杰瑞·温德 三年规划:稳定与更新的平衡 平的世界首先是快速变化的世界,在地球上某一个角落的重要革新可能迅速扩散至全球,不同市场.客户的需求都在加速转变,这要求企业不断进行革新.然而,以维系长期客户关

《嵌入式系统数字视频处理权威指南》——第1章 现实世界中的视频

第1章 现实世界中的视频 视频最初作为纯粹的模拟技术出现.用相机将连续图像捕获在电影流中,通过闪光来播放电影,以显示运动电影中的每一帧,当帧率足够高时就显示连续的动作.然而,容易看见闪烁! 早期的广播电视中,改进的系统采用亮度(即光强度)信息表示模拟信号.为了传输图像,使用连续的水平扫描发送亮度信息.足够的水平扫描构成二维图像.电视和监视器采用阴极射线枪发射电子流,以激发用磷粉涂敷的屏幕.缓慢消褪的荧光粉有助于消除闪烁.阴极射线枪扫描连续的行,通过磁路控制,每一行刚好在前一行的下面.扫描速度如此

《Objective-C入门经典》——2.1节Objective-C世界中的面向对象程序设计

2.1 Objective-C世界中的面向对象程序设计Objective-C入门经典面向对象程序设计可能是现在最常用的程序设计范式了,但究竟什么是面向对象程序设计却并没有一个清晰的定义.最常见的非正式描述(不是定义)是说它是一种使用对象-方法和变量的组合体,表示程序中的概念或物理对象-作为基本的构建块的程序设计风格.在构建程序时,如果能够将程序组件直接对应到物理世界中的对象和概念,就会使开发软件变得更加容易,这是因为程序员可以在同一抽象层次考虑对象和软件所建模的概念. 除了需要理解基本的对象概念

《人工智能:计算Agent基础》——第一部分 世界中的Agent:什么是Agent及如何创建它们第1章人工智能与Agent1.1 什么是人工智能

第一部分 世界中的Agent:什么是Agent及如何创建它们 第1章人工智能与Agent 人工智能的历史充满幻想.可能.验证和希望.自从荷马描绘机器"鼎"服侍在众神的餐桌旁,那想象中的机器佣人便成为我们文化的一部分.然而,我们人工智能的研究者,直到50年前,才首次制造出实验性机器来验证那些假想,即有关具备思维和智能行为机器人的假想,使得之前仅在理论上具备可能性的机器人得到验证.--Bruce Buchanan [2005] 历经几个世纪的思想构建,人工智能学科被公认为有超过50年的历史

我淘宝火热上线助力淘宝客大军日益壮大

淘宝客推广是一种按成交计费的推广模式,淘宝客只要从淘宝客推广专区获取商品代码,任何买家(包括您自己)经过您的推广(链接,个人网站,博客或者社区发的帖子)进入淘宝卖家店铺完成购买后,就可得到由卖家支付的佣金.2009年1月12日起,国内最大的网络营销平台"淘客推广平台"将正式更名为淘宝客,意味着大淘宝战略实施后,原淘客推广平台与淘宝交易平台的进一步整合的完成! 作为亚洲最大的网络零售商圈--淘宝网--推出的网络营销推广平台,目前已经逐渐融入到人们的生活中,任何网民都可以帮助淘宝掌柜销售商

云计算世界中的生活 有隐私可言吗?

近日,欧洲议会的一项研究报告表示:云计算已经对你的私生活造成了严重的威胁,而且是比你想象中还要严重. 据悉,该项研究报告由欧洲议会总局发布,讲述了内部潜在风险:云计算的隐私威胁被低估了.随着云计算的发展,日益增长的可靠性问题.网络欺诈和网络犯罪.个人身份和数据的丢失已然成为云计算必须要面对的问题. 本周一为欧洲年度数据保护日,欧洲议会提醒用户注意个人信息是如何被收集以及如何更好保护个人私生活的意识.于此同时,欧洲议会也正在积极考虑更新数据保护法规,从而引进最新的技术来保护个人信息以防止个人信息的

盘点火影与MC世界中打不死的小强

忍者世界 PK MC世界(九) 盘点火影与MC世界中打不死的小强      说到漫画的主角,大家首先想到的几个形容词就是:单纯.热血.冲动和潜力无限.这几个性格上的亮点让它们在战胜了一个又一个的敌人的过程中,给人留下了深刻的印象.就算是强大的敌人,这些漫画中的主角们也展现出他们永不放弃的性格,达到屡败屡战,最终获得胜利的境界.而这个过程也让他们获得了另一个称号:小强!          最知名的小强当然不用说,大家都知道.圣斗士星史无论被击倒多少次都会无畏地爬起来的神奇能力,让他当之无愧地获得这

如何和鸣人一样在MC世界中成为火影!

忍者世界 PK MC世界(八) 如何和鸣人一样在MC世界中成为火影!      MC喊麦的领域,有一个盛产火影忍者般坚韧的MC选手的地方.那就是我们的9158MC平台.它所培育出的那像火影忍者一般强大的MC选手们,每天晚上都用自己精彩的忍术和各种必杀技,来为进入9158mc平台的听众提供消遣,带来欢乐.      作为一个生生不息的团体,每天新人的加入都让我们的忍者村更加热闹,更加强大.不过在麦手的成长过程中,并没有捷径.而是靠自己一步步走出来了.这一点我们平台上的每个队员都深有感触.尤其是梦想

开源软件在商业世界中的10个最佳用途

在技术领域存在一定的必然性.举例来说,开源软件将以它自己的方式进入你的业务中.十年前,这一定很容易引发质疑.现在呢?没有办法避免--而且也是没有理由的.有了这么强大(同时也是必要的)技术,开源已经在各种情况下成为高科技的救星.但是开源最适合你的哪些业务领域?当然,这个问题的答案每家公司各有不同.但是一些应用可以在几乎所有情况下适用. 让我们来看一看开源软件的10个可能是最好的用途,有助于你企业增长,将你带入从未领略过的更高一级的灵活性和可靠性,或者只是为你省下相当可观的一笔预算. 1.服务器软件