Go 語言和 Scala 語言對比

來源:互聯網
上載者:User

標籤:func   tle   and   pkg   問題   不同   對比   val   題解   

 

我在Google寫過Go(自己的業餘時間),也在LinkedIn寫過Scala。兩者都是具有一流的並發特性的現代語言。

下面的回答是基於我編寫大規模的軟體的經驗得出。

Go是一種開發模式嚴格固定,並且以最小代碼量編譯成機器代碼的語言。

Scala是一種擁有多種特性並運行在JVM上的,複雜的、學術性的、功能性的、物件導向的沙箱語言。

對於絕大多數開發人員的任何一個項目,我每次更願意選擇Go而不是Scala的一個原因是:簡單。

第 1 段(可獲 1.15 積分)0matthew3個月前

在我開始回答問題之前,我要進行一些基本的觀察: 

  • 一般來說,代碼越少越容易理解;然而,有一點是代碼非常密集,以至於很難讀懂。
  • 代碼讀起來要比寫得多。
  • 代碼的壽命比我們想要的要長。
  • 測試或維護一段代碼的人常常不是原作者。
  • 在規模上,讀取/寫入/維護/測試代碼的開發人員的技能水平將會是“非專家”意義上的正常分布。

編寫代碼是一種通訊行為,不僅是作者和編譯器(或運行時)之間的通訊,而且也是作者與未知技能水平的未來讀者之間的交流。


語言的複雜性

Java 8語言規範是780頁的PDF。
http://docs.oracle.com/javase/sp...

Scala語言規範是一個191頁的PDF。
http://www.scala-lang.org/docu/f...

Go語言規範是一個網頁,列印為51頁的PDF。
http://golang.org/ref/spec

定義一門語言與學習如何使用一門語言是不一樣的,但它代表了學習的內容(或者在閱讀別人的代碼時,有多少東西會讓你感到困惑)。


精簡指令集電腦vs 複雜指令集運算機


Go提供了一組小的正交原語,它們以清晰的預期方式相互作用。學習少量的原語,並與Scala相比,用更多的程式碼構建所需的內容。
Scala提供了大量類型和文法的工具箱。學習大量的原語,知道什麼時候使用每一個,並且與Go相比,您將能夠編寫更少的程式碼。
 

檔案


我找到了更容易學習的方法,都是因為它是一種更簡單的語言,而且是主觀的因為我覺得文檔更好。
展示:
http://docs.scala-lang.org/tutor...

vs
http://tour.golang.org/#1
http://golang.org/doc/effective_...

常見問題集:
http://docs.scala-lang.org/tutor...
vs
http://golang.org/doc/faq

Standard library:
http://www.scala-lang.org/api/cu...
vs
http://golang.org/pkg/

表現能力

考慮到語言規範,Scala有比Go更多的特性也就不足為奇了。

Go的一個特點是它沒有多餘的功能,老實說,我認為它的功能被低估了。
http://golang.org/doc/faq#Why_do...

這是否意味著Go比Scala更缺乏表現力?
不。
表達性是指“有效傳達思想或感覺”;這並不意味著“哪種語言最具特色”。在實踐中,代碼的表現力更多地取決於作者而不是使用的語言。
代碼密度可能會對錶達性產生反作用。
 

類比城市效果

別用Google搜尋,我只是編出來的。你知道類比城市,對吧?
SimCity Official Website

如果兩個人在同一張地圖上建立一個新城市,再經營幾個小時,他們就會生產出截然不同的城市。

這是為什麼呢?
因為類比城市像是一個沙箱,有太多的選擇,所以任何兩個人都會做出同樣的決定,這是非常不可能的事情。
Scala也是一個沙箱。
除了Scala附帶的大量特性(函數式編程特性、OO編程特性等)之外,Scala還公開了允許開發人員添加新特性的功能。
這一切都很好,除非你和別人分享你的沙箱,否則他們不知道你腦子裡在想什麼。
 

代碼的一致性

Go是我所知道的唯一一種通過提供一種工具以標準格式對代碼進行格式化的方法,從而規避了整個代碼風格的爭論。
http://golang.org/cmd/gofmt/

代碼密度

在學習的早期階段,Scala代碼可能會非常的密集和困難。我想說的是,在Scala中儘可能地密集是很有經驗的,或者至少是經驗豐富的Scala開發人員有一種簡潔的傾向。

第 2 段(可獲 8.68 積分)0北極星Polaris1周前

例如

考慮從cookie擷取使用者ID。 你需要多少語言知識來回答如何?下列問題? 

  • 如果cookie不存在會發生什嗎?
  • 如果cookie值不是格式化好的數字會發生什嗎?
  • 如果cookie值是負數會發生什嗎?

Scala

import play.api.mvc.RequestHeader def getUserId()(implicit request: RequestHeader) = {  request.cookies.get("uid").map(_.value.toLong).filter(_ > 0)}

Go

import (  "fmt"  "http"  "strconv") func getUserId(r *http.Request) (int64, error) {  c, err := r.Cookie("uid")  if err != nil {    return 0, err  }  i, err := strconv.ParseInt(c.Value, 10, 64)  if err != nil {    return 0, err  }  if i <= 0 {    return 0, fmt.Errorf("invalid user id")  }  return i, nil}
第 3 段(可獲 0.7 積分)0墨鏡大頭1年前

在這種特殊情況下, Scala代碼很短也許更有說服力, 但有一點我想說明一般來說 Go的代碼是顯式的而Scala的代碼需要上下文來理解。

顯示的$#%!ing

根據我的經驗,顯式代碼有很多好處。

  • 顯式代碼更易於讓新手和非作者精神交流。
  • 顯式代碼更易於編輯小的變更。
  • 顯式代碼使錯誤情況更清晰。
  • 顯式代碼使測試案例清晰。
  • 顯式代碼更容易調試 (嘗試在之前Scala代碼中設定斷點 ).
第 4 段(可獲 1.28 積分)0墨鏡大頭1年前

我發現Go的代碼比Scala清晰的多。

效能

作為一名開發人員,效能是我在開發週期中唯一所關心的, 因為我不想遇到一個在我想做到什麼的時候而不夠快的運行時。無論如何開發人員的時間比電腦的時間更有價值。

根據我的經驗, Go編譯非常塊, Scala則相對慢些。因人而異。

說句公道話

我在學Scala之前先學習的Go,所以我承認我更傾向GO。我對Go第一反應是它的文法很難看 (像C++) 但是學習Go的感覺像這樣:

我是出於必要學習的Scala並且已經習慣了它;我現在甚至喜歡上它的一部分, 但學習Scala是這種感覺:

Go 語言和 Scala 語言對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.