选择正确的开源编程语言

Luckrockwm 3年前
   <p>选择编程语言通常是一项艰巨的任务,因为有大量的选择。 在这篇文章中,给试图学习编码的新手可以鸟瞰顶尖的编程语言,允许他们检查编码的简洁性或复杂性,然后权衡每种语言的利弊。</p>    <p>精通各种编程语言的</p>    <p>程序员、Web开发人员和应用程序开发人员。多种开源和商业编程语言今天都是可用的,每种都有不同的特征和功能。</p>    <p>软件开发的支柱是源代码,它是由成千上万的程序员编写由计算机解释的指令集。源代码指示应用程序做什么以及如何做。源代码是程序的蓝图。</p>    <p>为了编码,程序员决定采用哪种编程语言是非常重要的,因为有很多可用的。一些编程语言是开源的,一些是商业的。现在的趋势是每个IT企业都在转向开源。根据最新的调查,超过80%的企业使用开源技术构建各种应用程序。</p>    <p>下面给出了一些顶级的开源编程语言,以及一个简短的描述,让读者熟悉它们。</p>    <h2><strong>1. Google 的 Go</strong></h2>    <p>Google 的编程语言 Go,也就是常说的 golang,由 Robert Griesemer、Rob Pike 和 Ken Thompson 创造。Go 及基配套工具的主要目的是高效而富有表现的编译和执行,以及高效的编写健壮可靠的程序。Go 是一种静态类型语言,语法和 C 相似。它提供了垃圾收集,类型安全,具有动态类型能力以及许多高级的内建类型,比如可变长度的数组、键值映射表等。</p>    <p>Go 是一种易于表达、简洁、干净和高效的语言。利用它的并发机制可以很容易的编写程序来利用多核和网络中的设备,而其独特的类型系统可以构造灵活和模块化的程序。Go 可以很快的编译出机器代码,拥有垃圾回收的能力的在运行时强大的反射处理能力。它是快速的,静态类型的,编译型的语言,然后使用起来却有动态类型、解释型的语言的感觉。</p>    <p>Go 最新的版本是 1.6.3。</p>    <p>用 Go 编写的 ‘Hello World’ 在这里:</p>    <pre>  package main  import "fmt"  func main() {            fmt.Println("Hello World”)  }</pre>    <h3><strong>Go 的优点</strong></h3>    <ul>     <li> <p>与其它语言相比,Go 语言编译和执行都很快。即使与那些编译速度很快的语言相比也是如此。它是非常时尚的高性能语言。</p> </li>     <li> <p>Go 被认为是一种非常强大的语言,本身就具有并发性和高度抽象的特点。它具备一系列程序来启动并发工作,并使用通道的概念来处理通信和同步。</p> </li>     <li> <p>Go 是一种高级语言,具有标准文档特性和一个强大而丰富的标准库,包含了完全成功可用的 Web 服务。</p> </li>     <li> <p>Go 有一个活跃和社区,可以为各处问题提供支持。</p> </li>    </ul>    <h3><strong>Go 的缺点</strong></h3>    <ul>     <li> <p>Go 是一种较新主,还未拥有足够的库,所以需要辛苦开发者开发自己的库。</p> </li>     <li> <p>Go 缺乏书箱资源、研究类文章和其它在线资源,难以提供给用户系统学习的环境。</p> </li>     <li> <p>Go 学习难度大,其错误处理也让人郁闷。</p> </li>    </ul>    <h2><strong>2. Swift</strong></h2>    <p>Swift是一种新通用,多范式,编译型的编程语言,适用于iOS和OS X,watchOS,tvOS和Linux等系统。 它是由苹果公司建立的,基于最好的C语言和Objective-C,对C语言的兼容性没有任何约束。 Swift的开发由Chris Lattner与Apple的其他程序员开始进行的,通盘考虑了来自许多编程语言如Objective-C,Rust,Haskell,Ruby,Python,C#和CLU的想法。 Swift基本上用来开发与苹果的Cocoa和Cocoa Touch框架相关的工作,并且Xcode 6中有一个内置的LLVM编译器框架,使用的是Objective-C运行库。</p>    <p>最新版本的Swift是3.0 Preview 2。</p>    <p>Swift中运行“Hello World”程序的语法是:</p>    <pre>  import Cocoa  /* My first program in Swift */  var myString = "Hello, World!"  println(myString)</pre>    <h3><strong>Swift 的优点</strong></h3>    <ul>     <li> <p>Swift 因为减少了开销和语法要求,相对容易阅读和编写,对于新手来说它非常友好。</p> </li>     <li> <p>Swift 有着将函数作为变量传递的独特优势,可以让总体代码较短。Swift 让开发者能写高度通用的代码,执行不同的东西,减少重复。</p> </li>     <li> <p>Swift 能直接编译成符合 Objective 2.0 和苹果 ARC 内存管理技术的本地代码和工具。</p> </li>     <li> <p>Swift 的语法和语言结构使其不容易出错,只会出现几种类型的错误,从而使其从崩溃和一些意想不到的行为中解脱出来。</p> </li>    </ul>    <h3><strong>Swift 的缺点</strong></h3>    <ul>     <li> <p>多数内部的示例都使用  Objectvie C 编写,所以为了使用  Swift 编程,还得学 Objective C。</p> </li>     <li> <p>Swift 还在经历着重大的变化,新版本会带来大量的变化,对于其中一些变化,不论专家还是新手都可能难以理解。</p> </li>     <li> <p>Swift 只能用于开发 iOS 和 OS X 应用,它受限于开发平台。</p> </li>     <li> <p>Swift 比 Objective-C 更慢,也就是说这些现代的语法、简洁的代码结构以及在运行仿真和测试时,Swift 程序都需要花更多时间。</p> </li>    </ul>    <h2><strong>3. Hack</strong></h2>    <p>Hack 是开源的通用性编程语言,是一种脚本语言,用于 HipHop 虚拟机 (HHVM)。它是一个由 非死book 开发的 PHP方言。Hack 专门为开发 Web 而设计,非常容易与 HTML 集成。Hack 允许程序员使用静态类型和动态类型,也称为渐进类型,因此它支持对 PHP 进行快速的开发。</p>    <p>Hack 提供了各种重要的特性,下面列举了其中一些。</p>    <p>类型注解:</p>    <p>此特性允许在代码中显式申明参数、类成员和返回值和类型。</p>    <p>泛型:</p>    <p>这允许类和方法可以像 C# 或者 Java 一样参数化。</p>    <p>要空类型:</p>    <p>这个特性让 Hack 以一种安全的方式,利用 ‘?’ 运算符处理 null。</p>    <p>集合:</p>    <p>这个特性提供了一流的、内置的、参数化的类型,比如 Vector、Map、Set 和 Pair。</p>    <p>Lambdas:</p>    <p>允许定义一等类型的函数</p>    <p>这里是 Hack 的 ‘Hello World’。</p>    <p>在安装 HHVM 之后,输入下面的命令启动:</p>    <pre>  Hhvm –m server –p 8080  <?hh  Echo “Hello World!”;</pre>    <h2><strong>Hack的优势</strong></h2>    <ul>     <li> <p>Hack 代码混合了PHP代码. 在PHP中使用的 <em><?php</em> ,  在Hack中用 <em><?hh</em> 代替,这使得在Hack和PHP之间可以顺利交替。</p> </li>     <li> <p>Hack 使用HHVM运行,HHVM具有阶段性的类型检查用来验证代码的一致性。</p> </li>     <li> <p>Hack 用于通过确保正确的组织和无错误的代码并以极快的速度构建复杂的网站,而且为程序员提供了一个独特的安全优势来编写无bug的代码。</p> </li>    </ul>    <h2><strong>Hack的缺陷</strong></h2>    <ul>     <li> <p>它包含一些过时的功能,这些就是使PHP成为一种简单的语言的原因。</p> </li>     <li> <p>HTML代码不能直接嵌入到Hack代码中,并且代码不能写在函数或类之外。</p> </li>     <li> <p>作为一种新语言,Hack有很多bug和错误,就目前来说,这些问题导致它成为一种不稳定的语言。</p> </li>    </ul>    <h2><strong>4. Rust</strong></h2>    <p>Rust被当做一门通用的,多种形态的系统编程语言。它被设计出来用于满足三个主要目标:安全,速度快,支持并发性。来自Mozilla Research的 Graydon Hoare设计了 Rust, 他使用了LLVM作为Rust的后台。归功于开发小组编写过叫 Servo的web浏览器布局引擎和Rust编译器的经验,Rust的设计得到了完善。 Rust是一门智能化的开源语言。相比其他编程语言,它有许多编译期安全验证,这样就可以不用生成运行期支出以及清除掉所有数据痕迹,这是Rust的一个优点。对于多核系统的并发执行,Rust的内置功能最有用,它可以使在不使用垃圾收集的同时保证并发编程内存安全。值得一提的是,Rust是唯一支持这一功能的语言。</p>    <p>Rust最新稳定版是1.10。</p>    <p>‘Hello World’</p>    <p>编码如下:</p>    <pre>  fn main() {      println!("Hello, world!");  }</pre>    <h3><strong>Rust的优势</strong></h3>    <ul>     <li> <p>除了低级别的优化和性能外,安全和稳定的运行使得Rust适用于开发人员和项目实践。 Rust增加了许多高级的函数式编程技术,使它看上去即像低级语言又像高级语言。</p> </li>     <li> <p>Rust具有一个扩大的标准库,且正在不停地扩展。这个标准库聚焦于文件系统的访问,计算机网络设计、时间和集合 API。</p> </li>     <li> <p>Rust支持多平台开发,从Windows,Android 到甚至ARM设备,还包括其他的平台。</p> </li>    </ul>    <h3><strong>Rust的缺点</strong></h3>    <ul>     <li> <p>Rust学习难度大,编码更加复杂。异常处理非常难,尤其对于新手来说。</p> </li>     <li> <p>Rust由于缺乏有用的文档,是相当不成熟的语言。</p> </li>     <li> <p>在整个行业里, Rust到目前为止还没有得到太多使用。</p> </li>    </ul>    <h2><strong>5. Scala</strong></h2>    <p>Scala (意思是可伸缩的语言)是一种通用的语言,被设计来以简洁、优雅和类型安装的方式编写程序。Scala 在2001 年,由 Martin Odersky 基于 Funnel 编程语言开发。Scala 基本上集成了面向对象语言和函数式编程语言的特性,编写代码的时候更为高效。Scala 拥有许多函数式编程语言的特性,就像 Scheme、Standard ML和 Haskell,拥有 柯里化、推断类型、 不变性、延迟计算和模式匹配等特性 。与 Java 相比,Scala 更为高级,因为他集成了其它功能,如操作符重载、可选参数、命名参数、原始字符串和避免检查异常。Scala 和 Java 相互它们过生日 编译为字节码并使用 JVM。Scala 完善兼容 Java。</p>    <p>Scala 的最新稳定版为 2.11.8。</p>    <p>Scala 的 ‘Hello World’ 程序:</p>    <pre>  object HelloWorld extends App {     println("Hello, World!")   }</pre>    <h3><strong>Scala 的优点</strong></h3>    <ul>     <li> <p>Scala 允许开发者编写简单明了的文本,与 Java 相比,它要少写三分之二的代码,而且这些代码更易读和更易于理解。</p> </li>     <li> <p>Scala 有着快速实现和高性能,因为它把减少各种线程安全问题和处理函数作为首要任务。</p> </li>     <li> <p>Scala 预装的 Actor 库解决了各种各样的并发问题。</p> </li>     <li> <p>与其它语言相比,Scala 有着快速成长的生态系统。这体现在 IDE 工具、测试工作、文档,以及库和改进工作。这些都使得 Scala 的功能得到增强。</p> </li>    </ul>    <h3><strong>Scala 的缺点</strong></h3>    <ul>     <li> <p>Scala 与纯粹的 Java 相比,学习起来非常难,而且开发环境也并不相同,它需要更加专业的开发者来理解、整理逻辑以开发没有 BUG 的代码。</p> </li>     <li> <p>直到现在,完全使用 Scala 开发的项目仍然很少。简而言之, 我们多数使用 Java 和 Scala 混合开发项目,然而混合开发会更耗时,更缓存,测试起来也很痛苦。</p> </li>     <li> <p>由于 Scala 向后兼容性有限,不能兼容以前的版本,这在开发时间催促的情况下会造成问题。因此在时间的项目不并不推荐使用 Scala。</p> </li>    </ul>    <h2>6<strong>. Dart</strong></h2>    <p>Dart 是一种基于类,单继承的面向对象的和通用的编程语言,最初由 Google 开发,之后得到了 ECMA 的认可成为标准(ECMA-408)。在 Dart 成为一个开源的编程语言后,它可以创建更复杂、更高性能和高伸缩性的 Web 应用。Dart 捆绑在 Web Component Library 中发布,这个库包含了由 HTML 和 JavaScript组件的 Web 代码,可用于各种不同的页面或项目。</p>    <p>Dart 拥有如下一些工具:</p>    <ul>     <li> <p>Dartboard: 让开发者可以在 Web 浏览中编写和运行 Dart 代码。</p> </li>     <li> <p>Dart Editor: 提供给开发者创建、修改和运行 Dart 应用。</p> </li>     <li> <p>SDK: 包含命令行工具,如将 Dart 编译成 JavaScript 的编译器,Dart 虚拟机等。</p> </li>     <li> <p>Dartium: 包含一个内建的 Dart VM(虚拟机)。</p> </li>    </ul>    <p>Dart 的最新稳定版是 1.18.</p>    <p>用 Dart 写的 ‘Hello World’ 程序:</p>    <pre>  void main() {    print('Hello, World!');  }</pre>    <h3><strong>Dart 的优点</strong></h3>    <ul>     <li> <p>Dart 常被认为不仅是一种编程语言,它还向 Web 开发者提供了优秀的开发平台,以及一些新的特性,包括可选类型和类型识别。</p> </li>     <li> <p>Dart 核心库提供的功能包括集合、日期、数学、HTML 绑定、服务端 I/O,比如套接字和 JSON。</p> </li>     <li> <p>Dart 的 VM 是从零开始创建的,它可以以命令行的方式作为服务器运行,也可以嵌入到 Web 浏览器中以客户端应用的方式运行。</p> </li>     <li> <p>Dart 还有其它一些有用的特性,比如 mixins(混入)、隐式接口、语法上的闭包和 this、命名构造函数、字符串处理、在线函数以及 noSuchMethod。</p> </li>    </ul>    <h3><strong>Dart 的缺点</strong></h3>    <ul>     <li> <p>Dart 的 SDK 没有访问基于 SQL 的数据库服务的能力,不过可以用第三方库弥补。</p> </li>     <li> <p>Dart 在生成 JavaScript 这一点上还不完善。现在要想应用完整,用 Dart 创建的应用还得用 JavaScript 创建一次。</p> </li>     <li> <p>Dart 目前还不能完全与 JavaScript 协作,因为 Dart JavaScript 库尚不稳定,它目前仍在开发阶段。</p> </li>    </ul>    <h2><strong>7. Clojure</strong></h2>    <p>Clojure是一个动态通用编程语言。它结合了易接近,交互式脚本编程语言的优点,并提供了高效健壮的构件来满足多线程编程。Clojure是一个与Rich Hickey创造的Lisp语言紧密相关的语言。它运行在Java虚拟机上并且与Java相结合。Clojure完全支持调用Java代码,反之亦然。Clojure 提供函数作为第一类对象,一个交互式解释器(REPL)和一个宏系统。它鼓励使用第一类、高层次的、有价值的函数,并且结合它提供的一套高效不可变的数据结构。Clojure(核心数据结构是不可变的)提供了革新方式的解决方式,来应对并发和并行计算带来的调整。</p>    <p>目前最终稳定版本为1.8.</p>    <p>下面是以Clojure语言实现的'Hello World':</p>    <pre>  On repl  Start repl. When you use Leiningen, type lein repl on Terminal (Command Prompt):     bash-3.2$ lein repl  nREPL server started on port 59553 on host 127.0.0.1  REPL-y 0.2.1  Clojure 1.5.1      Docs: (doc function-name-here)            (find-doc "part-of-name-here")    Source: (source function-name-here)   Javadoc: (javadoc java-object-or-class-here)      Exit: Control+D or (exit) or (quit)   Results: Stored in vars *1, *2, *3, an exception in *e  user=>  Type below on repl:  user=> (prn "Hello World")  "Hello World"  nil  user=> (println "Hello World")Hello World  nil  user=> (pr-str "Hello World")  "\"Hello World\""</pre>    <h3><strong>Clojure 的优点</strong></h3>    <ul>     <li> <p>Clojure 代码可用于生成 Java 库。相应的,Clojure 库也可以用于 Java 和 Clojure 应用。它可以像 Java 应用程序一样打包并发布到任何地方。</p> </li>     <li> <p>Clojure 是 Lisp 环境的一部分,它保留了 Lisp 的最佳特性。Clojure 包含宏,这是在元编程和语法扩展中一个非常重要的方法。</p> </li>     <li> <p>Clojure 作为函数式编程语言,使开发者能够使用一流的高阶函数值。同时,它还拥有一套不可变数据的结构。</p> </li>     <li> <p>作为一个动态编程语言,它支持在运行时动态更新和加载代码,本地或远程都是如此。</p> </li>    </ul>    <h3><strong>Clojure 的缺点</strong></h3>    <ul>     <li> <p>在 Clojure 中调试处理和去除错误让人觉得枯燥无味。</p> </li>     <li> <p>Clojure 只能在 Java 虚拟机中运行。</p> </li>     <li> <p>新手很难掌握 Clojure,开发者在用它开发核心和专业程序时有时甚至会花大量的时间。</p> </li>    </ul>    <h2><strong>8. Haskell</strong></h2>    <p>Haskell 是一种现代的、标准的、非严格的纯函数式编程语言。它同时拥有多态类型、延迟计算和高阶函数等特性。Haskell 的类型系统包括类型推断、延迟计算和类型类。它是纯粹基于语义而非语法的 Miranda 语言,这是最初 Haskell 工作组专注的努力方向。</p>    <p>Haskell 拥有基于 Hindley-Milner 类型接口的强大的静态类型系统。Haskell 的主要创新点包括加入了类型类。最初只是想通过一个特有的方法为语言添加重载能力,但后来发现这个功能更多用途。</p>    <p>Haskell 是种开放的语言,规范公开并存在很多实现。它最主要的实现是 Glasgow Haskell Compiler (GHC),它既是一个解释器也是一个编译器,可以运行在大多数平台上。GHC 是并发和并行的高性能实现,有着结合了最新概念的丰富的类型系统,这些新概念包括广义的代数数据类型和类型分类。Haskell 还有一个有趣的特性是函数可以被当作值来使用,就像整数和字符串那样。</p>    <p>Haskell 的最新版本是 2014。</p>    <p>‘Hello World’ 程序:</p>    <pre>  module Main where  main :: IO ()  main = putStrLn "Hello, World!"</pre>    <h3><strong>Haskell 的优点</strong></h3>    <ul>     <li> <p>作为一个纯粹的函数式编程语言,Haskell 可以给计算机一系列的任务,让计算机去执行并完成这些任务。在执行的时候,任务会改变状态。</p> </li>     <li> <p>Haskell 是一种具有延迟性的编程语言,它会在最终需要结果的时候才去执行函数和进行计算。它有较好的透明度,让开发者专注于需要对数据进行一些什么样的转换。</p> </li>     <li> <p>Haskell 优雅简洁。与其它编程语言相比,它的程序更短也更易于调试。</p> </li>    </ul>    <h3><strong>Haskell 的缺点</strong></h3>    <ul>     <li> <p>Haskell 并不适用于对时序要求严格的应用。</p> </li>     <li> <p>作为一种新的编程语言,它比其它一些语言,比如 C 或者  C++ 更难以理解。它的社区支持和文档也十分有限。</p> </li>     <li> <p>Haskell 代码只能运行在极少数平台上。</p> </li>    </ul>    <h2><strong>9. Apache Groovy</strong></h2>    <p>Grovvy 官网申称 “Apache Groovy 是一个针对 Java 平台,强大的、可选类型的动态语言,同时拥有静态类型和静态编译能力,致力于提高开发效率和简洁、熟悉和易于掌握的语法。它能与任何 Java 程序顺利集成,并迅速交付应用程序的强大能力,包括脚本能力、特定域的语言编写、运行时和编译期的元编程和函数式编程。”</p>    <p>Apache Groovy 是一门动态语言,它的功能和 Python、Ruby、Perl 和 Smalltalk 相似。Grovvy 还支持模块化、类型检查、静态编译、Project Coin 语法增强、多 Catch 块等,并使用 JDK7 的动态调用指令特性持续改进性能。Grovvy 通过内联 DOM 语法提供了对各种标记语言的原生支持,比如 XML 和 HTML。这个特性允许 Groovy 使用统一而简洁的语法和编程方法来定义和操作许多类型的各种数据。</p>    <p>Apache Groovy 最新发行版是 2.4.7。</p>    <p>下面是 ‘Hello World’ 的语法:</p>    <pre>  class Hello {      String name;          void say Hello() {          Systematisation("Hello "+get Name()+"!");      }          void set Name(String name) {          pathnames = name;      }          String get Name() {          return name;      }          static void main(String[] rags) {          Hello hello = new Hello(); Hellenisation("world");          Hellenisations();      }  }</pre>    <h3><strong>Apache Groovy 的优点</strong></h3>    <ul>     <li> <p>Apache Groovy 易于学习和编写代码,这对 Java 程开发者来说尤为明显。它包含闭包、创建者(模式)、运行时和编译期的元程序、函数式编程、类型推断和静态编译等功能。</p> </li>     <li> <p>Groovy 在 Web 开发、灵活性、并发性、并行库、测试框架、构建工具、代码分析和 GUI构建等方面拥有丰富而充满活力的生态系统。</p> </li>     <li> <p>Groovy 能与 Java 平滑集成,并能与 Java 和其它第三方库交互。</p> </li>    </ul>    <h3><strong>Apache Groovy 的缺点</strong></h3>    <ul>     <li> <p>Grovvy 具有 Duck-Typing、动态代码、元编程等大量动态特性,所以在运行时需要进行更多处理,最终造成性能不佳的现象。</p> </li>     <li> <p>Groovy 缺少文档和在线资源,难以帮助新手了解它。此外,它并未用于高端应用和关键应用。</p> </li>    </ul>    <p> </p>    <p>来自:https://www.oschina.net/translate/open-source-programming-language</p>    <p> </p>