
简介编辑本段回目录

JVM上的并发编程利器:Clojure语言编辑本段回目录
诞生于2007年的Clojure是JVM平台上的Lisp实现,Lisp 以强大的功能和表达性而著称,但应用范围存在着固定的局限,于是发起人Rich Hickey设计Clojure的初衷便是希望得到一门能够服务于高并发应用场景,较Lisp更为先进的函数式编程语言。
Clojure 保持了函数式语言的主要特点,同时避免了不稳定状态、递归和高阶函数。Clojure在语法上非常简单,其设计优势在于,让开发者绝大部分工作专注在真正 解决问题上,而非耗费在如何模块化设计和如何进行解耦层面上。与Lisp语言相似,Clojure也是基于S-表达式设计。S-表达式给出了表达半结构化数据的约定,以其在Lisp 语言中的广泛应用而为人熟知。S-表达式在Lisp 中既用作代码,也用作数据,其最通用的特性是使用S- 表达式作为括号化的前缀表示。
与JRuby 、Jython 、Scala等依托于JVM 运行的语言相同,Clojure 是运行在Java虚拟机平台上的Lisp 方言,能够直接调用Java 类库,借助JVM 平台广泛的适用性,为Clojure语言的应用拓展了空间。此外,Clojure 可以说是社区智慧的结晶,在Rich Hickey等核心开发者之外,Clojure 语言的补丁、文档、测试和不少新功能的开发思路都是来自于开源社区参与者的贡献。
Clojure 之所以受到广泛关注,最主要的原因来自于其并发特点,如支持软件事务存储(Software Transactional Memory,STM )等特性。在实际应用方面,站点FlightCaster为用户提供了航班延误的预告信息,同时也为iPhone和Blackberry提供了终端应用。FlightCaster的Web前台用Rails 实现并部署在Heroku上, 后台数据分析和处理程序则由Clojure实现,同时在后台使用了Hadoop、Cascading、Cloudera等工具。在 FlightCaster 站点中,数据预处理并转换成适当视图用以分析的操作,以及所有统计推断和机器学习代码都使用Clojure 实现。FlightCaster站点将Clojure数据结构用作通信和存储的中间表示,Clojure 代码分析得到的航班预告模型,以Json中间格式来表示,然后推送到Rails 前端,以Json格式读取数据并展示给用户。
对于Clojure 开发者来说,开发工具首选是使用NetBeans IDE的Enclojure插 件,Enclojure 提供了支撑Clojure 开发的一组类库,包含独立的REPL(Read/Evaluate/Print/Loop)支持,同时支持REPL 和远程JVM 建立连接。Enclojure 提供的编辑器支持具备语法高亮显示、函数声明定位,S-表达式导航,Lisp 风格缩排,代码结构化导航,内置项目模板,断点设置和单步调试,并能够对代码错误给出超链接提示。此外Eclipse 也提供了专门的Clojure 语言开发插件CounterClockwise,在源代码编辑,代码调试,REPL 支持方面也有独到之处,适合于习惯于Eclipse 的开发者使用。
下一波程序设计语言编辑本段回目录
亚历克斯佩恩展望第一届“新兴语言集会”
今年的开放源代码大会将在第一届新兴语言集会中展示很多新的程序设计语言。我联系上了这次集会的联合发起者和组织者,亚历克斯佩恩,班克斯穆,想知道为什么会有新的语言出现并且哪种语言已经引起了他的注意。
“在新兴语言集会的博客上面,你说新的程序语言通常试图解决新的问题。那么有哪些是我们当前面临的最大的计算问题呢?”
亚历克斯佩恩:现在每一个人谈论的焦点都是并发行。我们在这个集会的列表上有很多主要用来解决并发问题的语言。解决方案包括以相当透明的方式把计算分布到很多物理机器上去。或者提供不同的单机或者单个虚拟机的并发例子。这是一个很有趣的问题。有很多冲突表明它是多么重要。
别的一些问题包括代码的表达能力和可维护性。对于编程任务来说,这不是一个根本的新问题。但是因为有很多拥有不同经验和教育背景级别的专业程序员进入了这个领域,使得很多语言把为代码可读性提供方便当成很重要的一个事情。现在已经没有一个专家班级在学术计算机实验室写Lisp,也没有来自像IBM这样的巨头工业组织的人们,在开始写代码之前先参加几周的培训。有一些新兴的语言正在代码的可维护性上面进行探索。
在这些即将要被讨论的语言中,哪一个引起了你的注意?
GiladBracha将会展示一种被称作Newspeak的语言。这种语言是来自Smalltalk和Bracha的Java经验的想法的一个怪异的组合。在程序设计语言社区,NewSpeak虽然很小,但是很有煽动性。围绕它进行的讨论一直很有趣。
Rich Hickey将会讨论Clojure.我已经参加了几个他的演讲。他总是有很多有趣的来自数学,物理和文学的比喻。Clojure是一个高度实验性的稀有语言,它正在进入工业界。Clojure有很多下一层次的想法,人们实际上也正在使用它。
Matt MacLaurin的Kodu是一个可视化编程语言。它最初是为了在Xbox上开发部分儿童游戏而设计的。可视化编程语言存在已经有一段时间了。但是,Lodu是实用的而且合适的。而且Kodu很这次集会列表上的任何别的东西都有很大的不同。
Jonathan Edwards在MIT的人工智能工作。而且他致力于还没有问世的Subtex语言已经有很多年了。他后来被这个项目变成了Coherence。我对听到他的演讲很感兴趣,虽然我想他的演讲可能会非常抽象。大多数人当他们工作在一中语言上时,会想尽快地进入编码阶段,因为他们很渴望这样做。Edwards的演讲更多的是随其自然,博学的办法。他在这个语言上已经思考很多年了。
Alan Eliasen工作在一种被称作Frink的语言上。我从来没有听说过这个语言,但是他发现了这次会议并且给我写了一封很自信的Email.这封信的大体意思是说“我的语言很有趣。你应该给我一些时间因为我将会是你的会议上最炙手可热的人物。我竟会让你的人们感到愉快。”Frink自身本质上是一个计算语言。但是它有很多的内置类型这样你可以很方便的在各种单元之间的计算进行转换。它完全是为了科学计算设计的。但是,它有很多的灵巧的语法原料。你很难想象它是为了科学计算而设计的。在Frink的主页上,Eliansen有一个例子用来计算为一个X个人的聚会你可能需要多少啤酒和庆功酒。这很疯狂。
Slava Pestov 将会讨论一种称作Factor的语言。它是一种类似Forth的基于栈的语言。他和别的很多工作在Facotor的人在它的优化编译器和虚拟机上面做了不可思议的大量工作。大约一个月前,他们发布了一篇关于Factor进度博文。实际上每个人都感觉在程序语言实现上有一个重大突破。
这个新兴语言集会的想法是从哪里来的?
AP: 我去年参见Foo集会并且开了一个关于程序设计语言的未来发展和人们将会从中得到什么的会议。这次的新兴语言集会就是上次会议的产物。我不知道到上次Foo集会结束以来有多少的反馈,但是至少,有一满屋子里的人认为花上几天的时间来讨论这个问题是很有趣的办法。这就是这个想法一个很大的激发因素。
你希望这次集会有什么成果?
我觉得会有很多不是参与程序设计本身的参加者来到这里。因为,就像我,他们是欢使用新语言的而且一直希望得到更好工具的程序员。真正的目的是把实际的工具集合起来这样他们可以找到共同点。人们已经开始从集会的邮件列表中互相寻找。我也希望这样的对话能够在集会结束以后继续进行。
相关链接编辑本段回目录
参考文献编辑本段回目录
http://article.yeeyan.org/view/161711/116271