自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一位Twitter工程師的Scala探秘之旅

原創(chuàng)
開發(fā) 后端
本文內(nèi)容來自一位Twitter工程師在介紹“為什么選擇Scala”的演講中使用的幻燈片。在這份幻燈中,演講者詳細(xì)的介紹了Twitter在做出使用Scala的選擇時(shí)都參考了哪些因素。

一位Twitter工程師的Scala探秘之旅 

【51CTO精選譯文】本文的這個(gè)故事講述一個(gè)對(duì)編程語言有種近乎于宗教狂熱的Twitter工程師是如何投入Scala的懷抱的。一開始大量使用Ruby做為開發(fā)語言的Twitter曾遭遇過嚴(yán)重的性能問題,于是Twitter在尋找可擴(kuò)展性強(qiáng)的替代語言的時(shí)候,找到了Scala。

一位Twitter工程師的Scala探秘之旅 

大家好,我是al3x,一位編程語言的癮君子,哦不,是狂熱份子。我在工作中使用過Java,JavaScript,C,PHP,Perl,Ruby以及Python。出于興趣和愛,接觸過x86 Assembly,Erlang,Lua,Objective-C,Lisp家族,Haskell,以及C++。

一位Twitter工程師的Scala探秘之旅 

我為Twitter工作。Twitter一直以來都大量使用Ruby。Ruby很好,但不是都好。Ruby VM低下的性能,monkeypatching(51CTO編者注:猴子補(bǔ)丁,也稱鴨子擊,指對(duì)動(dòng)態(tài)語言運(yùn)行時(shí)進(jìn)行擴(kuò)展或修改,而無須更改源代碼的一個(gè)方法),以及文化上的問題,在大型項(xiàng)目中的使用還是充滿疑問。我們要建造新的服務(wù),感覺不想繼續(xù)用Ruby開發(fā)了。

對(duì)于Ruby的不滿,基本可以總結(jié)如下:

1)Ruby不太合適開發(fā)長(zhǎng)時(shí)間運(yùn)行(Long-Live)的服務(wù)器端程序,但JVM很合適,因?yàn)镴ava有10年的經(jīng)驗(yàn)教訓(xùn)和優(yōu)化,Scala是運(yùn)行在JVM上的,所以天生就有了這個(gè)優(yōu)點(diǎn);

2)  Ruby沒有很好的線程(Thread)支持,Ruby多線程會(huì)限制在一個(gè)CPU上(新的Ruby應(yīng)該會(huì)改善這點(diǎn)吧)且Ruby VM的垃圾收集支持也沒有Java先進(jìn),就造成每個(gè)Ruby進(jìn)程長(zhǎng)時(shí)間運(yùn)行后使用的內(nèi)存月來越大;

3)  為什么不是JRuby? JRuby缺乏使用廣泛的Rem支持(很多優(yōu)秀的Ruby包都需要C擴(kuò)展,它們并沒有移植到Java),而且性能也不太理想,比MRI(C實(shí)現(xiàn)的Ruby VM)要慢

系統(tǒng)語言的白馬王子 

我心目中的系統(tǒng)語言白馬王子應(yīng)該是:
◆快速
◆函數(shù)式
◆表達(dá)能力
◆靜態(tài)類型
◆并發(fā)
◆優(yōu)美
◆輕量

我們最終想要一個(gè)JVM語言,而不是Java 

我們列出的名單:
C
C++
Python
Erlang
Java
JVM上的動(dòng)態(tài)語言

結(jié)果沒一個(gè)滿意的。它們都有自己的問題。我們最終想要一個(gè)不是Java的JVM語言。

后來,我們聽說了Scala 

后來,我們聽說了Scala。在JVM上幾乎沒有哪個(gè)語言的執(zhí)行速度趕得上它,而Scala lift-off看起來令人感到信心十足。

#p#

Scala的特性

類型推斷 

不再糟糕的類型推斷。靜態(tài)類型一直是天使和惡魔的共存。在Scala中,在你真正使用它之前,你可以忽略對(duì)象的類型。

不變性 

不變性:你可以在最開始用面向?qū)ο蟮姆椒ň幊?,然后?dāng)你需要它的好處時(shí),就可以遷移到用不變狀態(tài)(immutable state)。實(shí)現(xiàn)并發(fā)和異步就靠它了。這個(gè)功能需要在決策時(shí)更加深思熟慮,不過是值得的。

第一類函數(shù) 

第一類函數(shù):我們是“類”的追隨者。這是個(gè)有了就無法失去的功能:你不僅可以定義函數(shù)和調(diào)用它們,還可以把函數(shù)寫成沒有名字的文本:literal并把它們像值:value那樣傳遞。一切都是表達(dá)式,一切都有值。

Scala的特征 

特征:是個(gè)奇特的東西,因?yàn)槔^承的未必是你想要的。一個(gè)類可以按照需要整合許多特征,這與接口相似,但它們還可包含行為,這又與類相似。同樣,與類和接口類似,特征可以引入新方法。

模式匹配與case類 

模式匹配與case類:其實(shí)每個(gè)程序員天天都在進(jìn)行模式匹配。Scala不過是令這個(gè)過程更簡(jiǎn)單了。

XML的處理大大的簡(jiǎn)化 

XML的處理大大的簡(jiǎn)化了。再怎么說XML技術(shù)還在廣泛的使用中,使用Scala來處理XML文件是相當(dāng)不錯(cuò)的選擇:有點(diǎn)那么些JavaScript+JSON的意思。

Actors:處理并發(fā) 

Actors:處理并發(fā)的一個(gè)好方法。Scala提供的這個(gè)叫做Actor的并行模型通過它的收件箱來發(fā)送和接收非同步信息,而不是共享數(shù)據(jù)。這種方式被稱為:shared nothing 模型。一旦你不再顧慮共享數(shù)據(jù)的問題,也就不必再為代碼同步和死鎖問題而頭痛。

一位Twitter工程師的Scala探秘之旅 

還有上面這些其他的特性,這里就不細(xì)說了。51CTO的編輯在此推薦大家去Scala編程語言專題中進(jìn)行進(jìn)一步的學(xué)習(xí)。

范例

最后,給大家看看我們?cè)赥witter中用Scala編寫的代碼。

一位Twitter工程師的Scala探秘之旅 

函數(shù)的使用:無論是array,類型系統(tǒng),值還是Singleton的語法,都和Ruby一樣簡(jiǎn)便。

一位Twitter工程師的Scala探秘之旅 

Package,import,traits,currying,更多的類型系統(tǒng)。

當(dāng)然了,Scala也有不好的地方,比如社區(qū)太小,而且也偏復(fù)雜。不過總的來說,Scala絕對(duì)是一門值得學(xué)習(xí)的語言。

原文:Why Scala?

【相關(guān)閱讀】

  1. Ruby高手點(diǎn)評(píng)Scala編程語言十大絕招
  2. Scala取代Java?可能嗎?熱議仍持續(xù)不斷
  3. Groovy創(chuàng)始人:Java面臨終結(jié) Scala將取而代之
  4. Scala如何改變了我的編程風(fēng)格:從命令式到函數(shù)式
  5. Java程序員,你為什么要關(guān)注Scala
責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2009-06-02 13:24:45

工程師忠告職場(chǎng)

2018-01-25 15:38:22

程序員軟件工程師經(jīng)驗(yàn)分享

2013-06-20 10:24:32

2009-05-13 14:47:26

軟件工程師職場(chǎng)經(jīng)驗(yàn)總結(jié)

2009-06-03 09:35:21

.Net平臺(tái)開源工程師職場(chǎng)

2009-06-01 09:09:21

微軟軟件測(cè)試開發(fā)工程師

2022-02-24 10:51:41

Google工程師總結(jié)

2015-11-18 19:03:27

開發(fā)者Linux容器

2020-02-04 09:28:04

網(wǎng)絡(luò)故障局域網(wǎng)交換機(jī)

2015-11-19 14:48:01

LinuxLinux容器虛擬機(jī)

2021-05-24 10:39:36

波士頓機(jī)器人人工智能

2019-11-13 17:36:32

工程師人生第一份工作算法

2019-11-25 10:34:16

代碼Google工作

2010-11-12 09:04:03

TwitterAPI

2019-09-17 14:27:37

數(shù)據(jù)平臺(tái)架構(gòu)

2010-04-25 15:29:58

Twitter可伸縮性

2022-06-27 11:09:23

Google開發(fā)

2010-04-19 11:49:01

Twitter

2009-08-21 16:17:25

ScalaTwitter API

2024-03-18 09:44:02

HashMap算法Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)