swift playground如何评价 Swift 语言

swift playground  时间:2022-02-23  阅读:()

如何评价 Swift 语言

翻完iBooks书店上的The Swift Programming Language, 也下载了Xcode 6的beta版本来试验了一下。现在可以评价一下。如发现不对的地方,请在评论中指出,我斟酌后进行修正。 主要从技术的角度。而商业的角度,吸引开发者,共同维护苹果生态圈的繁荣等之类就不说了。 我不敢说swift学了有没有用,可不可以挣更多钱,但这门语言还是比较有意思的。swift骨子里面还是objc,但打扮过,比原来的模样漂亮。个人感觉,苹果还真的想用它取代objc呢。 ------------------ swift 跟 objc 共用同一套的运行时环境 swift 的类型,可以桥接到 objc 的类型,反之亦然。如 string 对应原来objc的NSString, closures对应objc的block,等等。objc 积累下来的大量库,实现不用改写,swift 就直接可以使用。(最多加个声明文件)。看两个API的声明,对比一下 objc void dispatch_apply(size_t iterations, dispatch_queue_t queue, void (^block)(size_t)); - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; swift func dispatch_apply(iterations: UInt, queue: dispatch_queue_t!, block: ((UInt) -> Void)!) func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) 我怀疑,swift中的接口文件,是利用原来objc,c中的接口文件自动程序生成的。 同一个工程,可以同时使用swift, objc, c, c++ 四种编译语言(额外嵌入的脚本语言另算) 原来的 iOS/Mac 工程,已经可以同时使用objc, c, C++三种语言。现在支持第四种。objc, c, c++三种语言的结合很容易, objc跟c本身就兼容,objc跟c++结合只要将文件名改成.mm。而swift跟其它语言的结合,需要另外的文件进行桥接,其实也挺方便的。 这里的桥接很容易,Apple自家的各种 C 库移植过来了。比如Core Image/Audio,直接包含 import CoreAudio import CoreImage 就可以使用了。 现在swift完全可以跟objc并存,原来的工程不建议重写,也不用重写。顺其自然,慢慢让它进化就是了。 swift 写法看起来像脚本语言,但它是真正的编译语言 初学者,看它使用了 let a = 4 var b = "hello" 没有类型定义,就想当然的觉得它是脚本语言,解释执行,这是错误的。上面两行语句是用了类型推导,类似 C++ 里面的auto。swift跟objc的运行时环境一样,写的程序跑起来不会比objc慢。swift区分了struct和class, 分别使用传值跟传引用。适当地使用struct,应该会比objc要快一点。 swift 吸收了很多其它语言的语法,写起来比objc简洁得多,不过它骨子里面的概念,跟原来objc差不多 编程语言的语法重要,但是语法背后的概念更重要。比如面向对象,常用概念无非是,继承,多态,封装,信息隐藏等。继承又可能分成多重继承,接口继承,实现继承。或者还会有些嵌套类,嵌套函数等等。 当明白语法背后的概念,知道为什么需要有这些东西。之后从一门语言切换到另一门有着相同概念的语言,其实很容易。 而语法会影响表达,理论上每门语言都可以表达任何概念。不过当某种概念在某门语言中,很难表达出来,就会倾向于不这样使用它,这种概念在那门语言的社区就难以被人熟知。 感觉上,swift有着 obj-c, C++, Ruby的影子。 暂时,我自己最喜欢的3个特性有 tuple,终于可以返回多个数值了。一行交换两个值。C++里面的tie+tuple也可以实现类似功能,不过使用库,显得噪音太多。 closure,喜欢它的简写,还有在函数最后一参数,可以写在()外面。这些特性,用来写函数式风格的程序,会很好看。而原来objc的block, 还有c++的function, 就太啰嗦了。 switch,case里面的条件匹配。 这些语法,编译最后还是会映射成原来objc的运行模型。原来objc的概念,引用记数,ARC, 属性,协议,接口,初始化,扩展类,匿名函数等等,继续有效。 我将swift看成是objc的一块大大的语法糖。 有个大块头的东西,是原来objc没有的,就是泛型。swift中 将那种操作写一次,就可以作用多个类型的语法叫做generics(泛型),而C++中称为template(模板),叫法不同,本质是同样的东西。 总的说来,swfit 涵盖了现在流行的编程方式,结构化,面向对象,泛型,函数式。 swift的新语法,可以很好地支持内部DSL 有一种编程风格,不太好归类。就是将程序拆分成,描述+解释。解释部分写一次,其它地方使用描述式的语句,而不是命令式的语句。 内部DSL,通常利用主语言的语法特性,创出一套写法,来写一些描述性的语句。这些语句组合起来,就像一门新语言似得。这个比较难理解。举个例子(从ruby那里借过来的),假如计算,几小时之后的秒数。C语言中,大概会写成 getHourSeconds(3) 而现在 swift中,只要定义了扩展 extension Int { var hours:Int { return self * 3600 } var ago:Int { return -self } } 就可以写成 3.hours 3.hours.ago 分别是3小时后的秒数,3小时前的秒数。 同理,也可以写成 10.days 10.days.ago 这种写法,看起来跟原来的命令式写法完全不同。这些程序是描述性的。原来的objc, 做不到这点。 我估计swift以后会冒出大量这样风格的库。 这种风格,到底好不好,要看情况。比较方便定义内部DSL的语言, 我自己知道的有C++, Ruby, Lisp。现在多了Swift。 认为所有人都是0基础的,是错误的 有些人学得特别快,因为之前的基础好。语言的语法只是表面,表面的东西总是变动得比较快的。底下的东西重要得多,而看不见。水面一块冰,有些人是冰山露出一角,有些人是无根的浮冰。看起来差不多,其实差别十分之大。 我相信有些人,在两个小时之内就可以使用这门新语言。 提提那个Playground 之前苹果的员工,Bret Victor 演讲过个视频。提到这个这种可视化编程。当我们每一步操作,都得到实时地反馈,我们的做法会有很多不同,做出的东西也会不同。这个Playground,用来学习swift的特性很好用,不过我还不知道怎么才能跟工程结合起来使用,不作评论。 现阶段,我自己的做法 我自己写的新项目,将会有一部分使用swift来编写。但还是会以objc为主。发觉现在Xcode 6 beta版本,对swift的语法提示支持不好,不能打几个字母就自动完成。再观察一阵子。 我不敢展望太多,或者预测什么,通常提前预测都是错的,会让人抓住把柄。但感觉Apple发布swift, 绝不是玩玩而已。

织梦DEDECMS即将授权收费和维权模式 站长应对的几个方法

这两天在站长群里看到不少有使用DEDECMS织梦程序的朋友比较着急,因为前两天有看到来自DEDECMS,我们熟悉的织梦程序官方发布的公告,将会在10月25日开始全面商业用途的使用DEDECMS内容管理程序的会采用授权收费模式,如果我们有在个人或者企业商业用途的,需要联系且得到授权才可以使用,否则后面会通过维权的方式。对于这个事情,我们可能有些站长经历过,比如字体、图片的版权。以及有一些国内的CMS...

[6.18]DogYun:充100送10元,态云7折,经典云8折,独立服务器月省100元,幸运大转盘最高5折

DogYun是一家2019年成立的国人主机商,提供VPS和独立服务器租用等,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等,其中VPS包括常规VPS(经典云)和按小时计费VPS(动态云),使用自行开发的面板和管理系统,支持自定义配置,动态云各个硬件独立按小时计费,带宽按照用户使用量计费(不使用不计费)或者购买流量包,线路也可以自行切换。目前商家发布了6.18促销方案,新购动态云7折,经...

Hosteons:新上1Gbps带宽KVM主机$21/年起,AMD Ryzen CPU+NVMe高性能主机$24/年起_韩国便宜服务器

我们在去年12月分享过Hosteons新上AMD Ryzen9 3900X CPU及DDR4内存、NVMe硬盘的高性能VPS产品的消息,目前商家再次发布了产品更新信息,暂停新开100M带宽KVM套餐,新订单转而升级为新的Budget KVM VPS(SSD)系列,带宽为1Gbps端口,且配置大幅升级,目前100M带宽仅保留OpenVZ架构产品可新订购,所有原有主机不变,用户一直续费一直可用。Bud...

swift playground为你推荐
南宁虚拟空间南宁自由空间在哪里?旺旺群发软件求一个旺旺群发软件scriptmanagerajax ToolkitScriptManager与ScriptManager的区别listviewitem求解如何获取listview中的itemnetbios协议NETBEUI协议有什么用?sms是什么什么是SMS协议gas是什么意思GC什么意思特斯拉model3降价特斯拉股价为何暴跌?erp系统教程在一个公司里怎样去学ERP怎样删除聊天记录自己已发出的微信聊天记录怎样删除才不会让对方看见
域名查询系统 westhost 香港服务器99idc wavecom 搬瓦工官网 isatap 好看的桌面背景图 linux空间 赞助 135邮箱 phpmyadmin配置 smtp虚拟服务器 中国linux 免费个人主页 深圳域名 phpinfo 服务器机柜 美国服务器 nic 免费服务器 更多