有些人学得特别快,因为之前的基础好。语言的语法只是表面,表面的东西总是变动得比较快的。底下的东西重要得多,而看不见。水面一块冰,有些人是冰山露出一角,有些人是无根的浮冰。看起来差不多,其实差别十分之大。
我相信有些人,在两个小时之内就可以使用这门新语言。
提提那个Playground
之前苹果的员工,Bret Victor 演讲过个视频。提到这个这种可视化编程。当我们每一步操作,都得到实时地反馈,我们的做法会有很多不同,做出的东西也会不同。这个Playground,用来学习swift的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。
现阶段,我自己的做法
我自己写的新项目,将会有一部分使用swift来编写。但还是会以objc为主。发觉现在Xcode 6 beta版本,对swift的语法提示支持不好,不能打几个字母就自动完成。再观察一阵子。 我不敢展望太多,或者预测什么,通常提前预测都是错的,会让人抓住把柄。但感觉Apple发布swift, 绝不是玩玩而已。 2014-06-06 35 条评论
赵冬毓,真的勇士敢于用自己的摘要算法生成自己毕…
朱睿捷、ding jiang、刘中阳 等人赞同
读完了官方Guide(The Swift Programming Language: About Swift)之后回来反馈一下,就是
这是一个阉割掉了很多精髓,添加了一些语法糖的C#和Scala的结合体,有一些Golang的方便特性,附带Golang和JS诸多坑人陷阱的,语法与JavaFX接近的,对非UI部分不够严肃的,除了ARC之外没有GC的一种表达能力较强但是设计能力较弱的语言……换句话说,对于大型项目而言是个坑……更适合PM和小作坊快速推出创意原型,适合UI密集型项目(如简单游戏)开发,不适合追求高质量的应用开发。 以及
全公有变量作为一门要写业务逻辑的严肃的语言真的大丈夫?
有太多的类库被做成了关键字,看个人喜好吧,毕竟看上去还比较方便
看到说Closure是Reference类型的时候还觉得苹果就是比Java开窍来着,结果是个半吊子工程,是个Reference没错,但是作为一个Reference该有的尊严在哪里?表达能力一下子弱了一大截……
有Delegate是个好事情,但是你这个delegate……真的不是面向接口编程么……这样欺骗人民群众感情有意思么……
ARC里面讲居然需要Weak Reference以及ARC与Weak Reference不兼容的时候,差点儿吓哭了……对于Guide中说到要用Weak Reference的场景,这几乎是运行必Segment Fault啊……
咦,异步呢异步呢异步呢异步呢……
另外谁能告诉我这货怎么处理异常……不能异常处理的语言不是写起来会跟屎一样么……
=====================================================================
看了评论和一些其他答案,我只想说,我只是从纯语言层面做评价,而不是从开发iOS的语言层面做评价。另外有说半天之内绝对看不完的,我只想说,自己学的语言少、写的程序少不要也这么揣测别人,这门语言说好听点儿叫博采众长,说不好听点儿的就是一个各家抄抄放在一起的语言,还有个妹子给这门语言起了个乡土的名字叫“东北乱炖”。
看到的积极评价大多是从相对O-C而言的。如果仅仅相对O-C而言,这确确实实是一次很大的进步,但是对于其他的成熟语言而言,这明显不是,因为有太多的半吊子工程,导致好好的语法在实现复杂的需求的时候必须要写出比Java的某些特性还恶心的代码来。硬要来理论如何如何,我只能说,见识少的人看什么都觉得高端。
另外的一点想说的就是,部分开发者对于代码质量的要求和觉悟真的是低到令人发指的程度。Swift目前版本的语言特征根本无法满足工业化编码的需求。对于任何规模在5人以上,项目计划至少维护3年以上,追求自己的App不会被喷出翔,还要保证高效率开发的团队来说,都不是好选择。
2014-06-04 60 条评论
尤雨溪,Designer, Hacker, Googler
胡力、Hungry Hunter、刘力 等人赞同
目测苹果这次会成功吸引一大批因为嫌 Obj-C 烦所以不碰 iOS 的动态语言开发者试水 iOS 开发,尤其是 web 开发者这一块。平台之间的竞争,得开发者得天下。在争夺开发者的战场上,无论是 Native vs. Web 还是 iOS vs. Android,这都是苹果的一着好棋。 2014-06-03 8 条评论
陈默扬,好奇的羊羊
Suvigo Lee、阡陌、任思远 等人赞同
所有的人都是零基础?此言差矣。编程语言发展到现在,很大一部分工作都是库作为支撑的,你做的只是搭积木的工作,再加上逻辑判断、循环、递推、迭代等一部分逻辑。最多再加上并发、多线程等等等等,但后者也已经是充分“库\话。即便是FP也差不多是回调函数的另类表达版本。 会Objective-C的肯定可以更好地掌握Swift.
但是,会编译器、知道LLVM架构或者离散数学、JS编程、库编程掌握得特别好信手拈来的人,
肯定能更快拾起SWIFT。所有的这些语言的new features,早在多年前就有人提出的了,只是需要包装、整合和广告一下。
新语言基本上只会对想要入门的人有区别。
深入了解之后,区别远远没有那么大,因为不管语言怎么变化,你想要达到的运行效果、想象力、可维护性才是核心。只要你是编程大牛,那么你就是编程大牛,跟语言无关。 2014-06-03 1 条评论
龙丕,站在科技和人文的土堆上
聂路明、余晓珥、刘靖煌 等人赞同
Object-C就是IOS的编程语言宗教。所有的东西都要用它开发——教主这样说。现在教主已去,而IOS的APP也达到了空前的繁荣,是时候换一种积极的支撑方式了,能够让民间的开发者可以快速介入,即便是今天不出swift,明天也会有其他语言来替代Object-C,观察系统语言的发展,细心的你会发现,这是一种趋势,类似的情况在其他系统上也发生过,而object-c将会退居幕后,做底层和中间件的开发。造成这种现象的原因也很容易理解,就是当一个领域空前繁荣之后,细分化,模块化,流水线化, 是必然的趋势,拿APP来说应用层开发的高效性便捷性,将成为最基本的要求,而底层开发则要求稳定性和易用性。总的来说 Swift的出现是一种成熟的表现,目的就是适应这一领域高速的发展。如果你但从狭隘的语言层面来看这个问题,去写你的object-c代码吧,孩子。
2014-06-03 2 条评论
Damngood,always hard time for me when it comes …
尹清漪、alina zhou、李宇 等人赞同
其实你们不觉得现在评价有点太早了吗? 至少我在上面没看到完全正确的答案
引用下推上Golang 开发者之一Russ Cox的一句话:
Reviews of a new language after just a day are rarely worth anything. It takes longer than that to learn and understand a language well. 2014-06-04 5 条评论
Haoyuan Xing
wei cheng、毛承添、Leedy 等人赞同
翻译一篇Rust开发者Graydon Hoare关于Swift的评论好了。翻译的不好,大家见谅。
graydon2 | Swift
今天Apple介绍了Swift和一个相当火辣的livecoding环境。虽然playground很漂亮,但我在这方面并非专家,所以不做评论。我肯定有其他的livecoding nerds会在别的地方讨论它的。
我刚刚阅读完Swift语言的手册,所以建议你们对我的评论别太较真。但是我可以指出一些着急
的读者可能很感兴趣的部分。因为近期没接触过这个领域的人未必能像内行人一样一语中的。一些其他的Rust nerds(Swift: a new programming language by Apple designed for safety : rust) 也在积极测试和评论。 逻辑 ?
像许多最近的语言一样,Swift基于LLVM,编译到原生代码。它很可能相当快,并且可以产生许多不同目标平台的原生代码。这也包括内存使用和延迟仍然重要的客户端代码。 ?
在设计Swift时,『与Objective-C对象模型互操作的能力』似乎被作为一条硬约束。这可能会限制一些Swift所能安全完成的工作。 ? ?
看上去是专有的语言。我真希望不是。
似乎相当广泛的借鉴了C#和...(我不知道怎么谦虚和礼貌的表达) ... Rust。如果是真的我感到受宠若惊。当然,我是有偏见的。我这里不是要声明我是原创者,因为我自己也是一个语言多元论者,Rust本身也拼凑了很多其他语言当中我们喜欢的特性(ML, C++, C#, Lisp, Ruby等等)。见到我们所喜爱和推广的概念在其他的地方流行是好事。希望开发团队能够写些关于他们开发过程的文章,评论其他语言中他们所喜欢和讨厌的部分, 以及他们所借鉴,改进或是自己重新发明的部分。趋同进化在很多语言中发生(经常发生有趣的效果)。 特性 ?
没有显式指针(但是参看下文inout的部分),它依赖C#式的值/引用二分类型。这是在重获因为Java式全Heap式系统而损失的性能同时不引入学习和设计负担路上的半步。(备注:Java现在也在实验值类型)。 看上去是Swift和Rust最大的区别。这也意味着你不能轻易的取另一个结构体或数组内部的地址。这很令人遗憾,但是是合理的妥协。 ?
既然没有指针,自然没有真正的机制来推断所有权。当你使用引用类型的时候,它不过是一个指向共享堆的ARC指针或弱指针。Region,Unique性(Uniqueness)以及所有相关的性能增强与认知负担都不存在。 ?
单继承,显式覆盖(override)和属性(properties),以及多接口(\继承。这是今天的标准,非常C#式的设计,看上去protocol不可以拥有默认方法。class是引用类型,structs是值类型。 ?
通过extensions提供对类型的事后扩展能力。我不确定对它有没有一致性的限制,我找不到。 ?
lambda表达式似乎使用了非常Ruby式的块结构(甚至包括后置参数的样子!)。Rust一两年前使用它,现在不用了(我有点喜欢它)。也有一个方便的使用编号参数的方式,像closure的#() reader macro. ?
很棒的带有tuple和sum type的函数语言式代数类型系统,后者使用和Rust一样的enum引入。你所期待的模式匹配和解构绑定(destructuring binding)。几乎和Rust一样,不过没有用来绑定显式指针的皱纹(wrinkle). 他们也避免了Rust的模式匹配当中所有的语法歧义, 让我很沮丧(他们在名字解析之后消除歧义)。
? ? ?
结合数字类型,更好的字面量(literals),没有隐式强制转换的本地类型推断。Yay! 脚本语言式(以及Go语言式)的词典(dictionary)字面量。小事,但是会很受欢迎。 一个基本的模块系统,没有通配符,成组import或重命名。没有可见性控制。但是通过attributes支持了重新导出。
? ?
没有macro系统
没有满地的null,谢天谢地。相反,引入了C#和Facebook最近的Hack语言中的option类型和nullable语法糖,包括相当多的可选链式调用,强制和绑定,这很棒。
?
let和var关键字,用以区分可变(mutable)和不可变(immutable)对象。
奇怪的(Peculiarites) ?
数组有奇怪的copy-on-extension语义,但是我觉得它们可能总在堆上?字符串看上去也是基于堆和Copy-on-Write的。不太清楚。 ? ?
不清楚你自己是否或如何能实现iterator protocol.
参数可以是inout的,这样的参数看上去不可避免的要求一元&运算符。有意思的是,像Objective-C一样,inout关键字拒绝死去。在Rust当中,在我们发展出first class region pointer(\系统之前,我们也干了类似的事(\。参数传递模式和真正指针之间的不对称最终让我们无法忍受,不过我猜Swift不觉得这是啥大问题。 ? ?
看上去不是一个表达式语言,我猜『没有macro系统』,所以...
除了代数类型没有讨论错误处理,option类型和奇怪的对\的偶然引用。不确定Swift使用什么孤立/回复系统,或者系统是否存在。关键字\在手册当中没有出现。 ? ?
总体来说我基本同意Bryan O'Sullivan的推特:
今年的学术界函数语言会议将会感觉像是一系列的胜利庆祝。伙计们,好时候啊! ——Bryan O'Sullivan(@ bos31337), 2014年6月2日twitter.com/bos31337/st
https://
atuses/473569531366211584
命名参数看上去可疑地像OCaml的\变种。我不确定这有多大的用。 带有检查的算术,以及16进制浮点字面量,Yay!
当我开始开发Rust的时候,很大的动力来自于在使用C++『为工资』工作的时候,会丧失我在业余hacking中非常喜欢的ML主义特性。我们试图将很多这样的元素(代数类型,模式匹配,Option,annotation-light类型)引入失败的ES4项目,但是它不胜负荷而崩塌了。
对我来说意义非凡的是,在这些年中,我们见证了被认为是『正常』新语言特性的变化。F#在多个平台上发布(不知道M#会不会仍然这样);Scala被认为是一个求职的有用的技能;如果说C++11没有类型匹配和代数类型的话,它也拥有Lambda表达式和本地类型推断。Rust现在存在了;现在我们可以看到Apple生态系统带来了类似的慰藉。多开心啊。 2014-06-04 6 条评论