為什么Android應(yīng)該轉(zhuǎn)為Go語(yǔ)言開(kāi)發(fā)?
我能肯定大家最近都了解到了關(guān)于Oracle(甲骨文)正在向Google索要Java的專(zhuān)利費(fèi),因?yàn)樗麄冋J(rèn)為Google開(kāi)發(fā)的Android移動(dòng)操作系統(tǒng)使用了他們的專(zhuān)利。這是非常荒謬的,Java的流行就是因?yàn)镴ava的大部分東西都是開(kāi)源的。(這也不是Oracle第一次向別的公司索要專(zhuān)利費(fèi))。
在有很多更好的語(yǔ)言可以選擇的情況下,為什么Google仍然還要使用Java來(lái)開(kāi)發(fā)Android呢?Google最終選擇Java的原因是因?yàn)镴ava非常流行,而且Java可以通過(guò)一定程度的定制完成底層的硬件操作(比如C),然而一些更高層的語(yǔ)言(比如JavaScript)并沒(méi)有這種功能。一旦Google選擇了這樣一個(gè)非常流行的語(yǔ)言,對(duì)于開(kāi)發(fā)者來(lái)講,上手Android 開(kāi)發(fā)也變得簡(jiǎn)單的多。
最近一段時(shí)間Android是最流行的移動(dòng)平臺(tái),但是IOS的市場(chǎng)份額也非常接近。你知道IOS選擇的編程語(yǔ)言么?對(duì)是Objective-C,除了開(kāi)發(fā)蘋(píng)果的產(chǎn)品之外,幾乎沒(méi)有人使用Objective-C。所以說(shuō)蘋(píng)果選擇了一種不流行的,但是基本上是自己控制的語(yǔ)言平臺(tái)。
Google確實(shí)需要為Android選擇另外的編程語(yǔ)言,一個(gè)自己有更多的控制權(quán)限的語(yǔ)言,是否流行并不重要(比如IOS)。Google應(yīng)該選擇Go,在golang.org上我們可以看到:
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.
Go是一個(gè)新的并沒(méi)有多少用戶(hù)的語(yǔ)言,但是Obective-C同樣。Google是Go語(yǔ)言的奠基人,可以完全控制Go語(yǔ)言的發(fā)展。Go是在BSD協(xié)議下發(fā)布的開(kāi)源語(yǔ)言,這意味著所有的開(kāi)發(fā)者可以在任何地方使用它。另外,Go是一個(gè)操作系統(tǒng)級(jí)的語(yǔ)言。這里有一些關(guān)于Go的信息。
Go語(yǔ)言在現(xiàn)有的系統(tǒng)編程語(yǔ)言環(huán)境遇到困難時(shí)誕生了。程序設(shè)計(jì)變得如此的困難,而選擇語(yǔ)言就是其中很大的一個(gè)原因。開(kāi)發(fā)者不得不選擇一個(gè)高效編譯、高效執(zhí)行且開(kāi)發(fā)簡(jiǎn)單的語(yǔ)言,而這三種特性在現(xiàn)代的語(yǔ)言中并不會(huì)同時(shí)存在。程序開(kāi)發(fā)者如果想選擇簡(jiǎn)單勝過(guò)安全的語(yǔ)言,可能轉(zhuǎn)向動(dòng)態(tài)類(lèi)型的語(yǔ)言,例如Python、JavaScript而不是C++、Java。Go語(yǔ)言是一個(gè)試圖結(jié)合動(dòng)態(tài)類(lèi)型和靜態(tài)類(lèi)型,編譯效率和安全性以及語(yǔ)言的易用性等眾多特性與一體的一種嘗試。他的另一個(gè)目標(biāo)是支持現(xiàn)代的基于網(wǎng)絡(luò)的、基于多核的計(jì)算。最后,Go還是非??斓模梢栽趩蝹€(gè)計(jì)算機(jī)上僅僅花費(fèi)幾秒時(shí)間構(gòu)建一個(gè)龐大的應(yīng)用程序。為了達(dá)到這些目標(biāo)需要解決這些語(yǔ)言問(wèn)題:靈活的類(lèi)型系統(tǒng)、并發(fā)的垃圾回收、強(qiáng)制的依賴(lài)規(guī)范等等。這些東西不是舊的語(yǔ)言一些庫(kù)或者工具可以處理的,這也就是他被稱(chēng)為新的編程語(yǔ)言的原因。
這里有我提到的三種語(yǔ)言的語(yǔ)法比較:
Go版本的HelloWorld:
- package main
- import "fmt"
- func main() {
- fmt.Println("Hello, World!")
- }
Java版本的HelloWorld:
- class ArbitraryClassName {
- public static void main(String[] args) {
- System.out.println("Hello World!");
- }
- }
Objective-C版本的HelloWorld
- #import <stdio.h>
- int main( int argc, const char *argv[] ) {
- printf("Hello World!");
- return 0;
- }
【編輯推薦】