为什么Android应该转为Go语言开发?

openkk 13年前
   <p> 英文原文:<a title="Permalink to Why Android should switch to Go" href="/misc/goto?guid=4958340489657590568" rel="bookmark">Why Android should switch to Go</a></p>    <p> 我能肯定大家最近都了解到了关于 Oracle(甲骨文)正在向 Google 索要 Java 的专利费,因为他们认为 Google 开发的 Android 移动操作系统使用了他们的专利。这是非常荒谬的,Java 的流行就是因为 Java 的大部分东西都是开源的。(这也不是 Oracle 第一次向别的公司索要专利费)。</p>    <p> 在有很多更好的语言可以选择的情况下,为什么 Google 仍然还要使用 Java 来开发 Android 呢?Google 最终选择 Java 的原因是因为 Java 非常流行,而且 Java 可以通过一定程度的定制完成底层的硬件操作(比如C),然而一些更高层的语言(比如 JavaScript)并没有这种功能。一旦 Google 选择了这样一个非常流行的语言,对于开发者来讲,上手 Android 开发也变得简单的多。</p>    <p> 最近一段时间 Android 是最流行的移动平台,但是 IOS 的市场份额也非常接近。你知道 IOS 选择的编程语言么?对是 Objective-C,除了开发苹果的产品之外,几乎没有人使用 Objective-C。所以说苹果选择了一种不流行的,但是基本上是自己控制的语言平台。</p>    <p> Google 确实需要为 Android 选择另外的编程语言,一个自己有更多的控制权限的语言,是否流行并不重要(比如 IOS)。Google 应该选择 Go,在 golang.org 上我们可以看到:</p>    <blockquote>    Go is an open source project developed by a team at Google and many contributors from the open source community. Go is distributed under a BSD-style license.   </blockquote>    <p> Go 是一个新的并没有多少用户的语言,但是 Obective-C同样。Google 是 Go 语言的奠基人,可以完全控制 Go 语言的发展。Go 是在 BSD 协议下发布的开源语言,这意味着所有的开发者可以在任何地方使用它。另外,Go 是一个操作系统级的语言。这里有一些关于 Go 的信息。</p>    <blockquote>    Go 语言在现有的系统编程语言环境遇到困难时诞生了。程序设计变得如此的困难,而选择语言就是其中很大的一个原因。开发者不得不选择一个高效编译、高效执行且开发简单的语言,而这三种特性在现代的语言中并不会同时存在。程序开发者如果想选择简单胜过安全的语言,可能转向动态类型的语言,例如 Python、JavaScript 而不是C++、Java。Go 语言是一个试图结合动态类型和静态类型,编译效率和安全性以及语言的易用性等众多特性与一体的一种尝试。他的另一个目标是支持现代的基于网络的、基于多核的计算。最后,Go 还是非常快的,他可以在单个计算机上仅仅花费几秒时间构建一个庞大的应用程序。为了达到这些目标需要解决这些语言问题:灵活的类型系统、并发的垃圾回收、强制的依赖规范等等。这些东西不是旧的语言一些库或者工具可以处理的,这也就是他被称为新的编程语言的原因。   </blockquote>    <p> 这里有我提到的三种语言的语法比较:</p>    <p> Go 版本的 HelloWorld:</p>    <div class="cnblogs_code">    <pre>package main  import <span style="color:#800000;">"</span><span style="color:#800000;">fmt</span><span style="color:#800000;">"</span> func main () {      fmt.Println (<span style="color:#800000;">"</span><span style="color:#800000;">Hello, World!</span><span style="color:#800000;">"</span>)  }</pre>   </div>    <p> Java 版本的 HelloWorld:</p>    <div class="cnblogs_code">    <pre><span style="color:#0000ff;">class</span> ArbitraryClassName {      <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> main (String[] args) {          System.out.println ("Hello World!");      }  }</pre>   </div>    <p> Objective-C版本的 HelloWorld</p>    <div class="cnblogs_code">    <pre>#import <stdio.h><span style="color:#0000ff;">int</span> main ( <span style="color:#0000ff;">int</span> argc, <span style="color:#0000ff;">const</span> <span style="color:#0000ff;">char</span> *argv[] ) {      printf (<span style="color:#800000;">"</span><span style="color:#800000;">Hello World!</span><span style="color:#800000;">"</span>);      <span style="color:#0000ff;">return</span> <span style="color:#800080;"></span>;  }</pre>   </div>