如何评价 Apple 新推出的编程语言 Swift?

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

评价:如果你会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。

要求 Apple 发布下一代 Objective-C 语言的呼声早就有了,每年写数万字 OS X 评论的 Ars Technica 两年前就写了 Apple 应该去做一个语言,Objective-C without C 并且使用更现代的功能和更短的 API,以及对自动类型推导的支持,文章见 OS X 10.8 Mountain Lion: the Ars Technica review 。

但 Apple 显然没有认真对待这门语言。很明显的,他们根本不想把 ObjC 给替换掉。并且按 Apple 的风格,如果他们把 Swift 当 ObjC 的未来来对待,肯定会有一到两个 iOS/Mac 应用使用 Swift 改写。(比如 Apple 当年要砍 Carbon,首先做的就是把 Finder 重写了)。

从语言角度,Swift 有太多的缺点:
- 它的标准库太差,只有 Dictionary, Array 和 String 及数这几种数据结构,连个 Set 都没有。想用别的?你还是要用 ObjC 的。
- 它没有任何对异步/同步编程的支持。它没法绑定使用 GCD,因此任何正经的网络应用根本无法编写。
- 它没有任何的保护机制(private, protected),所有的 method 和 variable 都是全局可见的,这显然不能满足正经工程项目的需要。
- 只能和 ObjC 互动。如果你想正经地使用 C 或者 C++,你得写 ObjC 的 wrapper。
- 没有办法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立马就崩了。

Chris 在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本不是函数式的:
- 仅有的支持在 lazy,闭包,及简单的函数语言函数(如 map, filter)。这 ObjC 中都能做
- 没有 pattern matching
- 类型推导差不多和 C++11 差不多,没有使用 hindley milner。

从上面这些特点看, Apple 对其的定位仅是给对 ObjC 头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple 自己的项目也不会使用。做个早期 proof of concept 的 prototype 到是可以的。

我可以想象,实现上 Swift 是很简单的(LLVM 很成熟了,写个新语言越来越简单,比如只要几步就能做个小语言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),当然有可能 Apple 将来会解决这些问题使得其真正实用。但现在来看,Apple 并不希望 Swift 来替代 Objective C。

 

下面罗列一些知乎上其他大神的评价,并给出别人给这个评价的支持票数:

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

马勒戈壁的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

谁都别跟我比惨!!!!!

我刚回答完这题,就看到这个鬼东西了。。。。

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 用家来说:

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: height: scene: Scene { content: Text

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

    }

}

}

import javafx.ext.swing.*;

var myFrame:SwingFrame = new SwingFrame();

var myLabel:Label = new Label();

myLabel.text = "Hello World!";

myFrame.width = ;

myFrame.height = ;

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#。

钻研中,等我看完了回来补充答案。

【李珠刚的回答(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语言课程

 

原文地址:知乎

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

苹果关于Swift的官方文档:https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11

【转】如何评价 Apple 新推出的编程语言 Swift?的更多相关文章

  1. 转 苹果的新编程语言 Swift 简介

    苹果官方文档地址 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Pro ...

  2. Google 新推出Background sync API

    Background sync是Google新推出的Web API,可延迟用户行为,直到用户网络连接稳定.这样有助于保证用户想要发送的数据就是实际发送的数据. 目前存在的问题 网络是消磨用户时间最多的 ...

  3. Android零基础入门第32节:新推出的GridLayout网格布局

    原文:Android零基础入门第32节:新推出的GridLayout网格布局 本期主要学习的是网格布局是Android 4.0新增的布局,和前面所学的TableLayout表格布局 有点类似,不过他有 ...

  4. 苹果新的编程语言 Swift 语言进阶(一)--综述

    Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便 ...

  5. 来自苹果的编程语言——Swift简单介绍【整理】

    2014年06月03日凌晨,Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS& ...

  6. Lyft押重注于苹果编程语言Swift

    Lyft押重注于苹果编程语言Swift 1年后获得丰厚回报BI中文站 8月22日报道 一年多以前,打车应用Lyft做出重大决定,决心押重注于苹果开发的编程语言Swift,用这种编程语言重写其所有iPh ...

  7. 来自苹果的编程语言——Swift简介转载】

    关于 这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift. 原文作者: Lucida Blog 新浪微博 豆瓣 转载前请保留出处链接,谢谢. 前言 在这里我认为有必要提一下Brec ...

  8. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  9. 来自苹果的编程语言——Swift简单介绍

    关于 这篇文章简要介绍了苹果于WWDC 2014公布的编程语言--Swift. 原文作者: Lucida Blog 新浪微博 豆瓣 转载前请保留出处链接.谢谢. 前言 在这里我觉得有必要提一下Brec ...

随机推荐

  1. lambda表达式,map函数

    lambda只是一个表达式,不需要定义函数,故也是匿名函数,用法为:lambda 参数:表达式. x=5 list1=[2,3,4] list2=[10,20,30] s=lambda x:x**3 ...

  2. think in UML(二)

    基础篇——在学习中思考! 在大概了解了UML之后就该系统的学习UML的主要建模元素了,一个个实例帮助我们更好的理解这些元素的重要性并运用相关知识解决实际问题. 在UML里有一个概念叫版型,有些书里也称 ...

  3. Beta版本冲刺(三)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  4. 第一章:帝国的余晖 AT&T公司

    启示:自己的想法,有好的技术比什么都重要,一定要注意的是技术,不要贪小便宜,明白自己最先关心的的哪个事情. 书中内容:没有人能活两百岁,也没有公司能辉煌两百年,这就是规律,很难超越.

  5. Beta冲刺——day3

    Beta冲刺--day3 作业链接 Beta冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602134 王龙 ...

  6. createobjbyreplace(str,arr) js替换方法保存

    <script> function createobjbyreplace(str,arr){ var len = arr.length; for(var i=0; i<len; i+ ...

  7. Linux命令(十四) 查看工作目录文件 ls

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 ls 命令是 Linux 下最常用的命令. ls 就是 list 的缩写.默认情况下 ls 命令用来打印出当前目录的清单, 如果 ...

  8. 数据库中增加操作insert into的用法和查询select的用法

    insert into的用法 1.一条insert into 可以插入多条记录 2.insert into 能判断主键是否冲突,和做出冲突处理 如果主键冲突的话会报错,还能写成如果冲突就更新的形式格式 ...

  9. 【设计模式】—— 代理模式Proxy

    前言:[模式总览]——————————by xingoo 模式意图 代理模式为其他的对象增加一个代理对象,进行访问控制.从而避免直接访问一个对象,造成效率或者安全性上的降低. 应用场景 1 远程代理, ...

  10. BZOJ3434 WC2014时空穿梭(莫比乌斯反演)

    考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...