英文原文:9 cutting-edge programming languages worth learning now
伟大的语言之所以流行是有理由的。它们提供了大量的开源代码,类库以及能使工作更加方便的框架。这些语言多年来被多个项目选作开发语言,并且在它们的擅长领域内变的越来越重要,并且硕果累累。或许你的下个项目正好能用到它。
以下的九门语言应该列在每一位程序眼的读书列表中。它们可能并不适合每个工程,因为大多数语言都是针对特定领域的。它们都值得研究和投入精力去学习,说不定哪一天就能派上用场。
Erlang:面向实时系统的函数式语言
Erlang 最初是由瑞典电信设备制造商爱立信为通信应用(电话交换机)设计的。爱立信的开发者鼓吹 Erlang 的 9 个 9 指标的性能,声称 Erlang 能够传输 99.9999999% 的数据。这时 Erlang 才开始引起人们的关注。
Erlang 的秘密是它的函数式设计范例。大部分代码都被强制运行于它的虚拟机中,这很好的避免了其他系统的干扰。函数都在虚拟机内部运行,运行在小的“类似沙箱模式的轻量级进程中”,并且只能通过消息传递相互通讯。你不可能仅仅抓取一个指针就够快速该变指针在栈中的状态。你必须保持在调用层次内部来保证函数状态的一致性。设计上或许有些不妥,但是这样很好的保证了错误向外扩散。
这种模式简化了运行逻辑,让运行时代码决定同时能够运行什么任务。并发处理也很容易管理,运行调度程序能够减少上下文切换。Erlang 迷们喜欢吹嘘“在 Web 服务器上同时运行 2000 万”处理器“(轻量级进程)。假如你正在构架一个类似移动电话交换机的实时收费系统,但是并没有足够的空间存储数据,那么 Erlang 正好符合你的需求。
Go:简单、动态
谷歌不是第一家调查集合语言的组织,最终发现语言杂乱,复杂并且效率不高。2009 年,谷歌发布了它自己的解决方案:一门静态类型的语言,类似于 C 语言但是包含了其所不具备的特征,它让程序员避免了类型声明和被 malloc 调用锁迷惑。通过 Go 语言,程序员能够受益于塔的简洁、已编译的c语言的结构以及动态脚本语言的的易用性。
同时,Sun 和 Apple 也以相同的方式创建了 Java 和 Swift 语言,相应的,Google 做出了一个重要的不同的决定:Go 语言的发明者希望它能足够简单以至于每个程序员都能轻松的掌握。Rob Pike,发明者之一,向 Ars Technica 豪言道:长远来说,通过将事件分开处理,你能够获得更多。因此,Go 语言还有一些灵活的特性,泛型,类型继承,断言,只通过干净的简单代码块操作字符串、数字以及哈希表。
据报道这门这门语言在巨大谷歌帝国内部被很好的接受,在其它方面也获得了认可,动态语言 Python 和 Ruby 的爱好者接受了编译已编译语言的严密性。假如你想要获得 Google 的青睐,并且需要建立服务器端的业务逻辑,那么 Go 会是一个好的选择。
Groovy:提供 Java 的脚本支持
Java 世界是异常的灵活。但是你需要仍忍受它”穿个背带裤又要系皮带”的方式,例如,声明,每个变量的类型,分行代表每行结束,类的访问只是返回一个值。但是 Go 语言瞄准了动态语言的吸引人之处并且将它自身紧紧的与 Java 相集成。
Groovy 弃置了 Java 乏味的引号和分号方式,提供一种简单的编程习惯,也能用于扩展现有的 Java 代码。运行在 jvm 上。不仅仅如此,Groovy 紧紧的月 JavaJAR 相结合,所以你能和好的利用一有的 Java 代码。Groovy 运行起来像一门动态类型语言,并且能够访问静态类型 Java 对象的数据。
Groovy 程序眼认为他们技术与 Java 程序员,同事也是 Groovy 程序员。基于 Java 代码,能够提供非常多的功能。充分使用 Java 拥有的闭包,caozuofu.html" target="_blank">操作符重载,多态性。不要忘了使用问号来做空指针的判断的简易性,这比使用 if-then 语句来判断要简单得多。因此,简洁的语法,使程序员敲击键盘次数减少了。谁会不喜欢呢?
最后,令所有 Java 程序员羡慕的动态语言的简单特点让他们能够减少工作量,有更多的娱乐时间,但是又不跳出 Java 圈。
OCaml:复杂数据层次把戏
一些程序员不喜欢声明变量,于是他们创建了动态语言。其他人喜欢声明一个变量的特定类型,integer,string 或者是 object。对于他们来说,大多胡编译型语言都对类型声明提供了支持。
这是一些喜欢详细声明变量层次类型的,甚至谈到要创建“algebras”(代数)类型。他们想象列表和多种类型的表能用来表示复杂、多层次的数据。他们提到了多态,模式匹配原型以及数据封装。这只会他们期望的复杂的,高结构化类型、原型以及原原型世界的基础。
对于他们,OCaml,一门有多个编程社区为了让前述想法被广泛接受而共同努力的语言。OCaml 提供类对象的支持,自动内存管理以及跨平台。甚至苹果 App 商店也提供了 OCaml 的 App 支持。OCaml 的理想的工程可能是建立一个符号数学网站来教授代数。
CoffeeScript:使 JavaScript 更简洁
技术角度来说,CoffeeScript 并不是一门语言。这是一个将你写的代码转换 Javascript 的预处理器。但是它看起来有所与众不同,因为它缺少大量的标点符号。你可以人为他是 Ruby 或者 Python,尽管内部表现像 Javascript。
当封号厌恶者被强制用浏览器支持的 Javascript 编程的时候,Coffeescript 开始流行了。改变浏览器工作的脚本语言是不切实际的,于是他们写了他们自己的预处理。结果是程序员们能够写干净的嗲吗并且让 CoffeeScript 将那些代码转译成各种符号的 Javascript 语言指令来操控浏览器。
少了分号紧紧支持开始。通过 CoffeeScript,你甚至不需要通过 var 来声明变量。声明函数也不需要 function 关键字或者大括号。事实上,大括号在 CoffeeScript 中也不太被使用。代码是如此的简洁,以至于相比于哥特式教堂,它看起来像现代主义建筑物。这就是为什么很多新的 Javascript 框架通常是用 CoffeeScript 写的然后编译成 Javascript。
Scala:JVM 上的函数式编程
假如你想要让你的代码有面向对象的清晰层次结构又喜欢函数型编程模式,那你有很多选择。假如你熟悉 Java,Scala 会是你的一个选择。
Scala 运行在 JVM 上,并将所有的清晰的函数式编程的约束转变成 Java 支持的语法以及联接到具体的 JAR 文件。假如那些额外的 JAR 中有副作用和其他不可避免的令人讨厌的头痛代码,那么使用 Scala 刚刚适合业务场景,你的代码会变得很清晰。
Scala 是静态类型的。编译器负责在编译时推断出具体类型,对象类型和原始类型没有区别,因为 Scala 想让每一个对象都继承自 Any。Scala 的语法比 Java 更加简洁。Scala 程序员称之为“低礼节”。你可以把驼峰式命名方式遗留在 Java 世界了。
Scala 提供了很多函数型语言的特征,例如懒初始化,尾递归,常量。但是为了能在 JVM 中运行,做了适当的修改。基本的原类型或者列表变量(像 lists 和哈希表),可以是可变或者不可变的。尾递归通过简单的例子运行,而不是必须通过详细声明的可变递归。以上是 Scala 的全部实现思想,但是因为需要运行在 JVM 上,具体实现会有所限制。Scala 能够所有 Java 平台上运行,能很好的与已存在的开源 Java 代码混用。这对于许多实践性问题是一种权衡。
假如你需要将数据放在一千个处理器的集群中处理,并且有一堆遗留的 Java 代码,那么 Scala 是一个很好的解决方案。
Dart:不像 JavaScript 的 JavaScript
流行并不是被吹捧出来的。可能有越来越多领域使用到了 JavaScript,“事君数,斯辱矣;朋友数,斯疏矣”,有时候太过于亲近反而会导致疏远,疏远了然后就开始寻找替代。Dart 是 Google 出品的一门适用于 Web 浏览器端的新语言。
Dart 并没有从 JavaScript 基本概念中脱离出来。它工作在浏览器中,操作所有的 DIV 和我们所见的 Web 对象。Dart 的作者仅仅只是为了清除 JavaScript 中所有恼人的部分,使之变得更简洁。底层结构并没有太大的变化。因为他们希望将 Dart 代码转成 Javascript 来提高运行速度。
高亮可能在许多 JavaScript 类库中提供的额外功能。你不需要通过 jQuery 或者其他通用类库来修改部分 HTML 页面。Dart 提供了默认的支持。也许一些熟悉的数据类型以及语法的速记技巧能够少敲几次键盘。Google 通过提供开源的支持大多数主流平台的开源工具来答题推广 Dart。
假如你正在建立一个动态的 Web 应用。并且已经对于 JavaScript 厌烦了,Dart 提供了清晰的语法结构来创建有多种 Web 资源数据的 Div 块。
Haskell:通用纯函数式编程语言
经过超过 20 年的时间,一直研究函数型编程的学术研究者开发了 Haskell 语言,一门用来表达他们对于副作用的坏处的想法的语言。这是一门更加存粹的表达式函数型语言,通过精细的机制来处理 I/O Channels 和其他不可避免的副作用。其余的代码应该是相当有用的。
Haskell 社区相当活跃,那里有很多 Haskell 的变体等着你去探究。有些是单机版的,其他的是通过与像 Java(Jaskell,Frege)或者 Python 那样的主流语言集成的。大多数的名字显示他们来自苏格兰,那里是 Haskell 研究,或者是哲学家/逻辑学家(他们是许多 Haskell 思想的启蒙者)的温床。假如你认为你的数据结构和类型太复杂了,你可以考虑用 Haskell。
Julia:给 Python 界带来了新的消息
科学计算领域有一群 Python 的爱好者,享受 Python 带来的简单语法以及能够避免陷入乱用指针和字节的细节中的自由自在。除了所有的优点,Python 通常在科学计算中处理大数据所表现的令人发狂的运行速度一值是一个诟病。为了提高运行速度,很多科学家转而使用c语言来编写核心的运行代码。但是这带来了新的问题,用两种语言写的程序很难修改或者扩展。
Julia 是这种复杂问题的一种解决方案。它的作者带来了零 Python 程序员欣赏的干净语法并且做了稍稍修改使之能够在后台编译代码。通过这种方式,你能够像 Python 那样打开个记事本或者命令行来编码,但是你写的任何代码都会被即时编译。
Julia 真是非常了不起的语言。它提供了非常强大的类型分析引擎能够帮助优化代码。假如你喜欢元编程,这门语言提供了足够的扩展接口。它最大的附加价值是通过集群发布并行算法的简单机制。其内置了大量的数学算法库用来做数据分析。
最好的消息应该是它的运行速度。它的许多基本标准的运行速度是 Python 的 30 倍,甚至比 C 语言还快一点,假如你需要处理大量数据并且喜欢 Python 的语法,那么你最好快去学学 Julia 吧。