【轉】如何評價 Apple 新推出的編程語言 Swift?

如何評價 Apple 新推出的編程語言 Swift?

原文地址:http://www.zhihu.com/question/24002984javascript

評價:若是你會Objective-C,你不須要去看它。

       若是問我這語言對普通開發者重要不重要,我說重要,能夠明確告訴你這一點--它是Apple 在WWDC 向全世界推出的重磅語言我怎麼能說它不重要?它下降了入門的門檻。使得大量的JS, Python, Ruby用戶會使用Apple 的技術爲其開發程序。它的做用,和Core Data, Interface Builder 同樣,能讓你快速寫出一個能用的程序來。但若是你想稍作些正經事,就心有餘力不足了。因此和Apple 本身的Mail 也不會去用Core Data,本身iPhoto 不會去用UICollectionView,稍複雜的App 都不會去用Interface Builder 同樣,Apple 本身不會用Swift。它只是給三五我的的小團隊能迅速作出能用的程序,讓大公司能快速作些Prototype 而已。有人說它至關於 C#,或是至關於 Scala 對 Java 的改進,我能夠告訴你們,Swift 不是這樣的語言。它更像一種讓人快速作原型的 toy language。php

要求 Apple 發佈下一代 Objective-C 語言的呼聲早就有了,每一年寫數萬字 OS X 評論的 Ars Technica 兩年前就寫了 Apple 應該去作一個語言,Objective-C without C 而且使用更現代的功能和更短的 API,以及對自動類型推導的支持,文章見 OS X 10.8 Mountain Lion: the Ars Technica review 。html

但 Apple 顯然沒有認真對待這門語言。很明顯的,他們根本不想把 ObjC 給替換掉。而且按 Apple 的風格,若是他們把 Swift 當 ObjC 的將來來對待,確定會有一到兩個 iOS/Mac 應用使用 Swift 改寫。(好比 Apple 當年要砍 Carbon,首先作的就是把 Finder 重寫了)。java

從語言角度,Swift 有太多的缺點:
- 它的標準庫太差,只有 Dictionary, Array 和 String 及數這幾種數據結構,連個 Set 都沒有。想用別的?你仍是要用 ObjC 的。
- 它沒有任何對異步/同步編程的支持。它無法綁定使用 GCD,所以任何正經的網絡應用根本沒法編寫。
- 它沒有任何的保護機制(private, protected),全部的 method 和 variable 都是全局可見的,這顯然不能知足正經工程項目的須要。
- 只能和 ObjC 互動。若是你想正經地使用 C 或者 C++,你得寫 ObjC 的 wrapper。
- 沒有辦法 catch Objective-C 的 exception,若是一旦出了 exception,你的 App 立馬就崩了。ios

Chris 在設計這門語言時,能夠明顯地看到他的短視。這也很正常,他是一個作編譯器的,不是作語言研究的。因此這門聲稱支持函數式編程的語言,根本不是函數式的:
- 僅有的支持在 lazy,閉包,及簡單的函數語言函數(如 map, filter)。這 ObjC 中都能作
- 沒有 pattern matching
- 類型推導差很少和 C++11 差很少,沒有使用 hindley milner。c++

從上面這些特色看, Apple 對其的定位僅是給對 ObjC 頭疼的開發者下降學習曲線所推出的玩具語言。前面五條中的每一條,基本都是致命的,所以 Apple 本身的項目也不會使用。作個早期 proof of concept 的 prototype 到是能夠的。程序員

我能夠想象,實現上 Swift 是很簡單的(LLVM 很成熟了,寫個新語言愈來愈簡單,好比只要幾步就能作個小語言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),固然有可能 Apple 未來會解決這些問題使得其真正實用。但如今來看,Apple 並不但願 Swift 來替代 Objective C。web

 

下面羅列一些知乎上其餘大神的評價,並給出別人給這個評價的支持票數:objective-c

【知乎用戶的回答(104票)】:express

馬勒戈壁的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

誰都別跟我比慘!!!!!

我剛回答完這題,就看到這個鬼東西了。。。。

26 歲的時候你正在作什麼?想要作什麼?

我作的畢業設計就是蘋果這玩意的簡化版

最令我感到蛋疼的是我這大半年一直在作的項目就是在iOS上用lua作這玩意的閹割版,還挺得意的。。。。

開發了大半年,全他媽泡湯了。。。

就當練手了吧。。。

回到問題,swift是對將來編程趨勢的一個嘗試,看得出來蘋果很謹慎當心但又野心勃勃。

蘋果很黑,抄別人東西曆來不給錢不說,也徹底不會提到別人的貢獻

AutoLayout如是,這個也必然如此。。

此概念奶是蘋果前員工,iPad交互設計師,CoreAnimation編程大師Bret Victor於2年前提出來的

上下文不通者,可圍觀此演講

Bret Victor - Inventing on Principle http://v.youku.com/v_show/id_XMzUyOTIyNzg0.html

【Belleve的回答(32票)】:

Native 版的、要本身管理內存的 Scala-C# 複合體。

(你看我用了多長的詞彙才描述清楚……)

不知道參數多態作的怎樣,別學 Java 玩類型擦除……

還有,call/cc 呢?<del>不兼容經典邏輯</del>沒 call/cc 或者等價物的語言都會陷入三角形代碼的。

我在《程序員》說過,大衆語言要從小衆學特性,這回也不例外。PL 發展這麼多年,該挖的語義特性都差很少了,剩下就是編譯器後端的那點破事,這塊找 @藍色@陳甫鵃

不過對於水深火熱的 ObjC 用家來講:

如何評價 Apple 新推出的編程語言 Swift?

Playground 卻是有點技術含量,不過也是抽象解釋能夠實現的。

【知乎用戶的回答(39票)】:

讀完了官方Guide(The Swift Programming Language: About Swift)以後回來反饋一下,就是

這是一個閹割掉了不少精髓,添加了一些語法糖的C#和Scala的結合體,有一些Golang的方便特性,附帶Golang和JS諸多坑人陷阱的,語法與JavaFX接近的,對非UI部分不夠嚴肅的,除了ARC以外沒有GC的一種表達能力較強可是設計能力較弱的語言……換句話說,對於大型項目而言是個坑……更適合PM和小做坊快速推出創意原型,不適合追求高質量應用開發。

以及

全公有變量做爲一門要寫業務邏輯的嚴肅的語言真的大丈夫?

有太多的類庫被作成了關鍵字,看我的喜愛吧,畢竟看上去還比較方便

看到說Closure是Reference類型的時候還以爲蘋果就是比Java開竅來着,結果是個半吊子工程,是個Reference沒錯,可是做爲一個Reference該有的尊嚴在哪裏?表達能力一會兒弱了一大截……

有Delegate是個好事情,可是你這個delegate……真的不是面向接口編程麼……這樣欺騙人民羣衆感情有意思麼……

ARC裏面講竟然須要Weak Reference以及ARC與Weak Reference不兼容的時候,差點兒嚇哭了……對於Guide中說到要用Weak Reference的場景,這幾乎是運行必Segment Fault啊……

咦,異步呢異步呢異步呢異步呢……

另外誰能告訴我這貨怎麼處理異常……不能異常處理的語言不是寫起來會跟屎同樣麼……

【vczh的回答(13票)】:

@yue wang 的答案寫的很好,應該看一看。

我只想說,swift作出的不少決定居然跟我www.gaclib.net 那個隨手發明來寫進xml的腳本同樣,譬如說$x用來表明lambda表達式啦,類型寫在名字後面啦,只有let和lambda才能作類型推導啦,用一個不完整的GC語言寫出來的library直接map成腳本的object model啦(基本上腳本長得那麼彆扭都是由於這個,我那個也同樣)……

apple藥丸

不過反正swift作的這麼醜果粉們都不會有意見的,由於至少比更醜的oc好看(逃

【尤雨溪的回答(19票)】:

目測蘋果此次會成功吸引一大批由於嫌 Obj-C 煩因此不碰 iOS 的動態語言開發者試水 iOS 開發,尤爲是 web 開發者這一塊。平臺之間的競爭,得開發者得天下。在爭奪開發者的戰場上,不管是 Native vs. Web 仍是 iOS vs. Android,這都是蘋果的一着好棋。

【陳默揚的回答(8票)】:

全部的人都是零基礎?此言差矣。編程語言發展到如今,很大一部分工做都是庫做爲支撐的,你作的只是搭積木的工做,再加上邏輯判斷、循環、遞推、迭代等一部分邏輯。最多再加上併發、多線程等等等等,但後者也已是充分「庫"話。即使是FP也差很少是回調函數的另類表達版本。

會Objective-C的確定能夠更好地掌握Swift.

可是,會編譯器、知道LLVM架構或者離散數學、JS編程、庫編程掌握得特別好信手拈來的人,確定能更快拾起SWIFT。全部的這些語言的new features,早在多年前就有人提出的了,只是須要包裝、整合和廣告一下。

新語言基本上只會對想要入門的人有區別。

深刻了解以後,區別遠遠沒有那麼大,由於無論語言怎麼變化,你想要達到的運行效果、想象力、可維護性纔是核心。只要你是編程大牛,那麼你就是編程大牛,跟語言無關。

【王一卓的回答(11票)】:

It's an very expressive language。

給一些以爲「編程水平終於和你們處於同一塊兒跑線上了」的人教點冷水。Swift這種能更加發揮coder創造力的語言,只會讓初學者和高手的差距更大。A language is about expressing yourself。Swift去掉了不少的boilerplate,讓人更着重於表達本身而不是fight the language(<- Java)。關鍵看點是如何讓closure, type inference和generics一塊兒工做。鑑於Apple一貫不在意backward compatibility(<- Java),應該能夠達到C#的水平。

另外,這不就是(死掉的)JavaFX Script麼:JavaFX Script

一些JavaFX Script 的code example:

 

 

 

import javafx.stage.Stage;

import javafx.scene.Scene;

import javafx.scene.text.Text;

import javafx.scene.text.Font;

Stage

{ title: "Hello World" width: 250 height: 80 scene: Scene { content: Text

    { font : Font { size : 24 } x: 10, y: 30 content: "Hello World"

    }

}

}

import javafx.ext.swing.*;

var myFrame:SwingFrame = new SwingFrame();

var myLabel:Label = new Label();

myLabel.text = "Hello World!";

myFrame.width = 200;

myFrame.height = 50;

myFrame.visible = true;

myFrame.content = myLabel;

在NetBeans裏也是相似於PlayGround的所見即所得。

當時還用JavaFX Script重寫過一些Java的animation,確實比Java更簡練(沒有比Java還verbose的語言了)。但也是侷限在UI相關的代碼,邏輯多的話仍是用Java寫的。

【元彥的回答(3票)】:

就像這個標語中提到的 「Write the code. Change the world.」,本次最大的亮點非Swift莫屬。蘋果應該在兩三年前就已經開始不知足與Obj-c語言本事的開發效率與工程能力,發佈新的語言也是蘋果對開發者的一次回饋(以蘋果強勢的產品地位),翻閱了下 「The Swift Programming Language」 電子書 iTunes - Books,一些感想:

0. 沒有封號 ";", 點贊

1. 比其obj-c來講,總體語法風格看起來舒服了,有經驗的開發者花幾分鐘快速翻看了下,應該就能夠快速上手開發了

2. Swift中整出了一些新的關鍵字?subscript、protocol、extension...

3. 喜歡Optional Chaining,很實用的語法糖: foo.bar?.baz 若是bar不爲nil,就調用bar.baz方法

4. 仍是沒有找到package或namespace的介紹,這是什麼狀況?

5. 以往Obj-c只在客戶端運行,Swift是一次能讓其跑在Server端的機會嗎?

6. 下一個Swift又叫什麼呢?啥是把Swift開源出來呢~

【Saviio的回答(3票)】:

這之後MacRuby就是小三了嗎....永遠扶不了正了。

題圖上有閉包,有命名空間,多重返回,類型推導,模式匹配,操做符重載

稍期待一下swift,具體看了ref再說。Functional pattern+Object orientation 儼然一個scala lol....

另外,apple搞LLVM果真不是沒道理的。

就是拿靜態和動態比,還和Python比...Apple不厚道..

【題葉的回答(0票)】:

做爲一個 JS 開發者感想吧, 本人 Macbook Air 用戶, 一年 Backbone 應用開發經驗.

入門 Go, Haskell 等等語言, CoffeeScript 死黨, 對作 MVC 界面的關心遠超過底層實現.

嘗試看過一點 Objective-C, 可是門檻立刻就被嚇退了, 以及巨大的 IDE.

我長期寫 CoffeeScript, 並非不懂編程, 而是難以轉換編程的思路,

語法上看, Swift 都是其餘編程語言中早已出現的種種功能. 並無 Go 那樣革命性的意圖.

可是語言的友好程度, 已經調試環境放出的截圖讓我感到門檻下降了不少.

另外語法有好的語句一般遇到問題是性能, 蘋果給的數據也很不錯.

因此看好.

【知乎用戶的回答(5票)】:

做於語言來講Swift其實沒啥好說的,no silver bullet對於新語言永遠適用。

Playground在實際開發中我以爲沒有預期的那麼大,由於多數應用邏輯複雜且上下文相關性很強。

可是對於原型開發會很是有幫助。

【周全的回答(5票)】:

粗看了一兩章 先給個映像 往後修改

相比OC便利了不少

但基本屬於處處抄一點的語言

順便吐槽本屆WWDC

WWDC == We Will Definitely Copy

【知乎用戶的回答(5票)】:

剛看完直播,第一眼看到這個新語言的時候真的眼前一亮!(畢竟今年發佈會亮點好少。。。)

做爲一個正在入門的小白,對於即時預覽感受開發起來必定頗有成就感並且很更直觀知道哪一個更想像有入差。看得出蘋果想把APP開發推廣到非專業愛好者中間來,我以爲這個想法就很讓人激動了,不少人拿蘋果當逼格高的東西,可是蘋果再作的是怎麼讓它更加親民更受衆,不只是享受方便,更包括本身去開發。畢竟沒有人比本身更瞭解自身需求,這是特別有意思的想法。

SWIFT你們都尚未拿到,相信過段時間運用在實踐了,會給予更客觀的評價。但願它能給咱們驚喜,和大神們一塊兒接觸一門新語言,想一想還有點小激動呢。

【軒轅老布的回答(3票)】:

看Playground的時候有看到var和let,有閉包,有泛型,有類型推斷,Fast Iteration應該是跟Linq差很少的東西,實時編譯說明此語言可能能支持運行時編譯運行,因此我認爲在語法和運行時上都有可能超過C#。

鑽研中,等我看完了回來補充答案。

如何評價 Apple 新推出的編程語言 Swift?

【李珠剛的回答(5票)】:

誰剛買《ios開發入門》......

【知乎用戶的回答(1票)】:

可選類型讓人想到了Dart;local inference,多返回值,func關鍵字(以及函數返回值後置式的聲明語法),條件語句無括號,沒有分號,沒有break的switch等等讓人想到了Go。裏面加入了一些函數式語法特性,代數類型,模式匹配等等。

還有不少不少和c#,scala很類似的,你們很熟悉的東西,就不一一列舉了。

裏面沒有看到什麼併發,並行編程上有什麼亮點,要麼像erlang這樣的actor模型進程isolate(dart就吸取了這個),要麼就像Go那樣的chanel直觀簡單。還有一些其餘語言中存在的問題它也沒有改進過來而是保留了下來,也許是以爲這樣太過激進。

和oc可交互(但和c/c++不能),底層基於LLVM編譯爲native code。一樣,和Go的初衷同樣,是搞一個工具出來,提升碼農的生產效率,而不是搞語言研究創新。高大上的猿們尤爲是FP愛好者們依然能夠鄙視這門語言。

話說做者發明一門語言都是看另外一門本身常常用到的語言不爽:

Go的做者 —— 看c不爽;

Dart的做者 ——看javascript不爽;

hack的做者 ——看php不爽;

Swift的做者 ——看objective-c不爽。

下一個語言該在哪裏出現? Amazon OR 三木桑。。。

【姚尚朗IceskYsl的回答(2票)】:

極客學院最新課程發佈 WWDC2014 詳解OSX/iOS8/Swift語言,整體而言swift的出現讓好多人激動,激動完仔細一看以爲蠻坑(畢竟缺的東西還好多)~

可是和幾年前Golang法發佈同樣,Swift的出發點是很好的,只是須要一些時間來完善~

附錄:極客學院發佈的Swift語言課程

如何評價 Apple 新推出的編程語言 Swift?

 

原文地址:知乎

本文永久連接:http://www.cnblogs.com/ChenYilong/p/3765586.html

蘋果關於Swift的官方文檔:https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11

相關文章
相關標籤/搜索