成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Adobe架構師談Scala:功能強大但令人困惑

原創
開發 后端
Scala是一個強類型語言。它可以直接在JVM(還有.NET平臺)上運行,很方便的與Java代碼和庫集成,而且有并行編程的重要武器Actor模型。一位Adobe架構師抱著喜愛Scala的心情進行了一些深入的了解,然而這個過程中卻產生了一些困惑。

【51CTO精選譯文】本文是Adobe架構師Ricki在英文開發社區DZone上發布的一篇文章。Ricky專注SaaS,云計算以及使用Map/Reduce和Hadoop堆進行并行編程。最近Ricki參加了一次Scala線下課程,并對Scala語言留下了自己的一些印象。

51CTO編輯推薦:Scala編程語言

對Scala語言的第一印象

關于 Scala 這個編程語言,我聽到很多正面的評論。我個人過去更多使用 Java,在過去兩年,我已經轉用 Ruby(還會用一些 Erlang)。我聽到的那些 Scala 功能,對我很有吸引力,以下列出:

◆Scala 代碼可編譯為 Java 字節碼,直接在 JVM 上直接運行。使用Scala寫的代碼能夠直接享受 Java 虛擬機技術所具有的性能和健壯性(robustness)

◆可以很方便地與 Java 代碼和庫進行集成,能夠直接享受大量現有 Java 庫帶來的便利。

◆對于 Actor 模型,它提供了很好的支持,我認為這一點對于多核計算機架構是一種非常重要的編程范式。

深入了解,繼而困惑

所以我決定參加 Qcon 大會上 Dean Wampler 做的 Scala 課程。聽課之后,我對 Scala 的印象,總結如下:

首先,Scala 是一個強類型語言。不過,它具有類型推理機制,所以你不是非要進行類型聲明,它是可選的。

但在一些地方(如方法簽名),類型聲明是必須的。什么時候我必須聲明一個類型,對于我這點不是非常清楚。

具有變量中的“val”和“var”聲明是非常好的,因為它可以使得不變性(immutability)成為顯式的。在 Ruby 中,通過向對象發送 freeze() 方法,你可以使一個對象成為不變的(immutable),但Scala做得更為顯式。

不過,我發現使用兩種不同的方式定義一個方法這點令人困惑。

  1. class A() {  
  2.  def hello {  
  3.  ...  
  4.  }  
  5. }  
  6.  
  1. class A() {  
  2.  def hello = {  
  3.  ...  
  4.  }  
  5. }  
  6.  

這個 MyFunction[+A1, -A2] 對我來說真的不容易弄明白。我覺得無類型語言更為簡單。

另外,刪除開始和結束的括號也讓我很困惑。

  1. class Person(givenName: String) {  
  2.  var myName = givenName  
  3.  def name =(anotherName: String) = {  
  4.  myName = anotherName  
  5.  }  
  6. }  
  7.  
  1. class Person(givenName: String) {  
  2.  var myName = givenName  
  3.  def name =(anotherName: String) = myName = anotherName  
  4. }  
  5.  

 

這個特別的“隱式”轉化方法提供了一種機制,即使用 Scala 開發 DSL(領域專用語言:Domain Specific Language)。但對于我,它看起來很奇怪。從根本上說,你需要導入單個隱式轉化方法,后者需要處理所有可能的轉化。

#T#所有以“:”結尾的方法,調用順序都是顛倒的,這對我來說也是非常奇怪的東西。

Scala 中的 trait 為 Scala 提供了 mixin,但我覺得 Ruby 語言中的“模塊”機制做得更好。

Scala 具有“函數”的概念,并且能夠將“函數”作為參數傳遞。同樣,我覺得 Ruby 中的 block 做得更好。

也許由于 JVM 對于動態語言支持的局限性,Scala 在做元編程時并不是很強,Scala 不提供“開放類”屬性,通過它用戶可以在運行時修改現有的類(添加方法、更改方法實施,添加類等等。)

Scala 還模仿了一些 Erlang 語言的功能,但我不認為它這活做得干凈漂亮。比如,它使用 case 類和 unapply() 模仿 Erlang 編程的模式匹配風格,但對于我這有點奇怪。

Erlang 具有兩個很酷的功能,在 Scala 中我還沒有發現(也許是我期望太高了)。

◆能夠同時運行類的兩個版本

◆能夠創建并傳遞函數對象到遠程進程(有點類似遠程代碼加載)

總體印象

我不得不承認,我對 Scala 的印象并沒有參加那個課程之前那樣好。Scala 試圖在 JVM 中放入不同的非常有用的編程范式,但對于我,有種勉強的感覺。當然,與JVM的緊密關系仍是我們選擇Scala的一個原因。但從純正的編程角度,我更喜歡 Ruby 和 Erlang 的結合,而不是 Scala。

原文:Impression on Scala 作者:Ricky

編者后記:開發者對于語言的喜好在某種程度上和開發者的性格有很大關系,正如敏捷大師Dave Thomas所說的,就好像喜歡貓的往往不喜歡狗,喜歡狗的往往不喜歡貓一樣。而不知是否巧合,同樣是Ruby狂熱愛好者的Dave Thomas也曾在訪談中表示自己就是毫無理由的不喜歡Scala,對Scala的一些用法感到困惑。這樣看來就仿佛Ruby是只貓而Scala是只狗一樣。當然也有反例,比如這位從Ruby出家到Scala的程序員,以及曾經一直使用Ruby做后臺的Twitter后來投向了Scala,而其團隊并沒有像上面兩位那樣表示困惑。看來開發者對語言的喜好真是一個難以琢磨的話題呢。

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2023-12-08 11:05:00

GitLinux

2019-04-25 06:07:17

物聯網平臺物聯網IOT

2021-10-09 13:48:11

操作符Python運算符

2022-06-23 10:17:00

Git技術Linux

2024-01-15 18:02:09

docker系統文件格式

2019-11-14 06:13:51

欺騙網絡威脅網絡安全

2010-03-05 09:19:54

Android系統

2020-06-19 09:35:58

備份Linux系統工具

2020-12-07 16:56:35

Rails

2012-01-10 16:23:12

兄弟傳真機

2011-04-15 09:27:09

Windows PhoWindows phoMango

2009-07-07 08:46:11

微軟Windows 7新功能

2013-01-23 11:30:39

JSVirtualKeybjQuery

2010-08-05 13:51:13

軟件架構師

2010-02-24 17:58:28

Python 測試框架

2022-10-10 10:14:38

Python繪圖庫

2011-03-11 15:38:08

Java

2024-05-28 00:01:00

開發者Python模塊

2012-02-02 10:23:07

2011-10-31 09:22:07

系統架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线观看网站 | 欧美电影网 | 欧美在线视频一区二区 | 中文字幕色站 | 久久久久久久久久久久91 | 韩国成人在线视频 | 亚洲视频欧美视频 | 中文字幕亚洲无线 | 欧美中文字幕一区二区三区 | 欧美成人一区二区三区 | 伦理午夜电影免费观看 | 久久久久久电影 | 综合久久av | 一区二区三区久久 | 日韩av在线一区二区三区 | 国精产品一品二品国精在线观看 | 在线色网| 欧美精品网站 | 欧美乱做爰xxxⅹ久久久 | 国内自拍偷拍 | 福利视频一区二区三区 | 国产精品www | 91精品一区二区 | 一区免费观看 | 国产精品久久久久久久久久久久久 | 久久国产成人午夜av影院武则天 | 国产乱码精品一区二区三区忘忧草 | 精品一区二区三区在线观看国产 | 国产午夜精品一区二区三区四区 | 成人免费网站 | 黑人精品欧美一区二区蜜桃 | 国产不卡在线播放 | 91高清免费观看 | 国产欧美在线播放 | 亚洲精品粉嫩美女一区 | 国产91精品久久久久久久网曝门 | 久久国产日韩欧美 | 91亚洲国产成人久久精品网站 | 欧美黑人一级爽快片淫片高清 | 国产精品视频在线播放 | 国产激情偷乱视频一区二区三区 |