关于Swift的发展的帖子

来源:互联网 发布:js new一个函数的过程 编辑:程序博客网 时间:2024/06/06 23:51

前些天在BBS上发了一个帖子,结果被推荐为精华并置顶,由此分享一下。http://bbs.csdn.net/topics/392070570/close
这里写图片描述

一楼:

你认为swift会是未来的终极语言吗?毕竟他年轻,又是苹果工程师耗费无数心血推出的!!!!

Swift是一种支持多编程范式和编译式的编程语言,是用来撰写macOS/OS X、iOS、watch OS和tvOS的语言之一[6]。 2014年,其在苹果开发者年会(WWDC)发布。设计Swift时,苹果公司有意让Swift与Objective-C共存在苹果公司的操作系统上。

苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言。Swift以LLVM编译,可以使用现有的Cocoa和Cocoa Touch框架。Xcode Playgrounds功能是Swift为苹果开发工具带来的最大创新,该功能提供强大的互动效果,能让Swift源代码在撰写过程中能即时显示出其运行结果。拉特纳本人强调,Playgrounds很大程度是受到布雷特·维克多(Bret Victor)理念的启发。[7]
2015年6月8日,苹果于WWDC2015上宣布,Swift将开放源代码,包括编译器和标准库。[8]
2015年12月3日,苹果宣布开源swift,并支持Linux,苹果在新网站swift.org和托管网站Github上开源了swift,但苹果的app store并不支持开源的swift,只支持苹果官方的swift版本,官方版本会在新网站swift.org上定期与开源版本同步。

众所周知,Google 的 Android 平台的首要开发语言是 Java,而且整个框架都是基于 Java 实现的。这次 Google 称,纳入 Swift 并非是能够替代 Java,这可能和他们备受和 Oracle 的官司之争有关吧。Google 希望 Swift 能够成为超过 Java 的应用开发语言。

一个名为“Port to Android”的合并请求最近被合并进了官方Swift代码仓库的主分支,这使得用Swift开发简单的Android程序变得有可能。该合并请求为Swift stdlib增加了安卓目标,其允许开发者使用Linux环境,跨平台地为基于ARMv7处理器的Android进行编译。

目前只有可能在Linux环境跨平台编译Android。另外还需要最新版本的Android NDK,以及为Android开发的libiconv和libicu。

Java目前是安卓開發最為重要的語言。不過,消息人士表示,至少在最初階段,Swift語言不會取代Java的重要地位。目前谷歌和甲骨文之間有關Java的訴訟仍在持續中,引發了外界隱憂,消息人士稱,谷歌認為Swift和Java相比有著廣泛的優勢。

二楼

Sun被Oracle收购之后,无论是Java还是MySQL都一塌糊涂~所以Google还是尽早弃暗投明更为明智。
如果说Swift比起Objective-C是否更优越,这个也很难说,两者各有优势也各有缺陷。比如说Swift写起来确实简洁,但这也仅限于程序员自己写代码时会感觉很轻松,而你要阅读一段Swift代码就未必了,呵呵~比如本人就很喜欢用trailing closure,这货在写代码时用起来确实舒爽,但你写完之后,完成了这个功能回头过来看看,那么就会感觉比较晦涩……当然,如果你在trailing closure当中用01这种来表示形参的话,那可读性就进一步降低了,但这也是Swift之所以简洁的特性!
Swift也不是在很多方面都如此简洁的。尤其在类型转换上,Swift没有隐式的类型转换,你即便要把一个Int32类型转为Int都需要用Int()构造方法去转……这一点Objective-C要轻松多了~

再谈谈Objective-C。Objective-C是一个非常灵活,非常强大的编程语言,它灵活在哪里?你们估计体会不到,但是我简单举一个例子就能说明一切了:

@interface MyObjectA : NSObject+ (void)method;@end@interface MyObjectB : NSObject+ (void)method;@end@implementation MyObjectA+ (void)method{    NSLog(@"This is A!");}@end@implementation MyObjectB+ (void)method{    NSLog(@"This is B!");}@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    Class cls = [MyObjectA class];    [cls method];    cls = [MyObjectB class];    [cls method];}@end

你们感兴趣的话可以用各种语言试试,来实现上述功能~注意,这里的MyObjectA与MyObjectB都直接继承NSObject,两者之间毫无任何关系!这就得益于Objective-C的动态类型特性以及消息机制!这是除SmallTalk之外,唯一一个支持消息机制的类C语言!Objective-C的另一个好处就是,它仅仅就是C语言的一层马甲,编译器可与C共用,使得编译器的开发难度大大降低,这样也会减少许多不必要的bug,编译速度也非常快!它仅仅需要一个小小的runtime即可。而Objective-C与Swift相比,所谓的缺陷无非就是很多人谈及的安全性~其实这些都不是问题,像Xcode这种IDE本身就具备非常强大的代码静态分析功能,它能帮你消除80%以上的代码隐患。当然,它所需的代码量可能比Swift更多一些。

但是Swift比起Objective-C的另一个好处是,它可以解释执行!比如iPad上的Swift Playground更类似于一个解释器。我们可以将Swift编译为一个中间代码(比如LLVM IR),然后解释LLVM IR进行执行;当然也可以直接对Swift进行解释执行,就如同解释JavaScript那样。很多程序员第一眼看到Swift的时候就已经联想到了JavaScript呵呵,确实两者有些像,当然在类型系统上Swift甚至比Java都严苛!后面Apple大力发展Swift的另一大原因其实很明了,就是要把Swift带入iPad,使得iPad也能成为一个仅次于Mac的开发利器!

前几天我也获得消息,听说Tim Cook把macOS的研发团队组合进了iOS研发团队,这一举动很明显,Apple在明年会亮出更惊人的iPad产品,使得iPad Pro能进一步压缩MacBook的空间,这样也使得Mac系列将越来越偏向专业化!而普通消费者只需选择廉价又实惠的iPad产品即可~这就是Tim Cook的战略,将Apple带入普通民众的家里,而不仅让她成为商务人士、科学家、工程师、设计师等人群的目标用户。

三楼

2楼对于oc情有独钟,我也属oc的忠实爱好者,正如你所讲,swift对于类型的转变是很笨拙的,他是必须要严格意义的类型才能进行操作,?和 !有很多时候觉得添加起来很繁琐。这也是他的缺点,开始使用swift,我sb了。后来越用越熟悉,越来越喜欢。甚至超过了对oc的喜欢!

对于swift与oc的交互,是非常简单清凉的,这点我深有体会,可以再桥接文件中引入或是导入工程名.swift。这样就可以使用swift的情况下,依旧使用以前的oc的第三方库。

此外,swift省去了头文件导入,他的全局变量以及全局参数的便捷性是oc没有办法比拟的。一切变量用var,常量用let,省去了在oc中的冗余代码,看起来更加舒心。

再者,swift的语句与java语言类似,与java的脚本语言类似。现在,学习swift后我可以阅读安卓的代码,H5的脚本代码。这对与一个想要转型的程序猿,或者全栈攻城狮来讲,很重要的。

很多大公司为求稳,会仍然采用 Objective-C。而个人开发者和小团队,新项目应该直接采用 Swift 编写,旧项目的新模块也应该使用 Swift 编写。这样慢慢将整个语言重心从 Objective-C 切换到 Swift。Swift 的代码更简洁,开发效率更高。原有 Objective-C 项目,已经使用 Objective-C 编写的比较稳定的库,不需要也不建议要用 Swift 重新编写,直接混编,让它慢慢过渡就行了

四楼

新项目要看什么项目。比如一些需要使用高性能计算的项目,像AR,基于神经网络的图像、语音识别,分子动力学、天体力学模拟,流体模拟,Ray-tracing等基本都要动用汇编的项目,那么还是直接用Objective-C来的好。而且Objective-C与Metal API的交互也显得更为自然。其他一些小应用之类的无所谓,都可以用Swift。尤其像电商类的App,还有什么笔记类的,社交类的,这些都完全用Swift即可实现。

五楼

受教了,班门弄斧,见笑了。

本人一直有个困惑,应该学习多门语言,从前端到后台等等,还是应该吃透一门语言,从入门到精通?

这点我很困惑,不知大神怎么看?

前辈,您好,您对于在程序这条路上前行,是否有过迷茫期? 能不能指点一下? 万分感谢

六楼

哈哈,您客气了。首先,BBS就是用来相互探讨的地方,我也非常欢迎其他人能提出自己的一些观点和看法,这样很好。这个世界的美妙之处就在于每个人都有其自己的思想,而不是千篇一律,否则真心会无聊死,哈哈~
然后,您说到是否学一门语言,将其学得精通还是说学习多项技术,从前台到后台都能了解个遍。其实两者并不冲突。我从工作第一年起就建议学多计算机类专业的大学生能先把基础打好,比如对于编程语言来说,学好C是最最基础的,如果能懂一些汇编语言的话那就更好了,因为这些知识知道以后,你要去学数据结构、操作系统、计算机体系结构之类的就不会太过困惑。而这些知识对于编程语言反过来又能起到加深理解的作用,所谓相辅相承!然后,可以挑选一门OOPL来学习,一般大学里用的是Java,这编程语言本身还算可以就是啰嗦一些,但是它的开源社区做得非常好,所以现在有很多与Java以及JVM相关技术的开源项目。如果对于OOP设计思想想有更进一步认识的话,Objective-C无疑是更佳选择,在其他类C的OOPL中没有“消息机制”这个概念,所以很难去表达一个对象给另一个对象“发送消息”这个行为。而这在OOPL的元祖SmallTalk上以及Objective-C上很自然地就能表达!

你说学习C语言花费的时间长还是学习Python、JavaScript之类的花费时间长?就编程语言本身来讲,肯定是C语言吧,所以把这语言学通之后,学习其他编程语言就压根不在话下了,而且它也是Objective-C和C++的基础,C++目前不建议学深,只要会用用即可,因为我花费了6年时间C++才把它学通,对于一般人来说真心没有必要,它的语法体系太过庞杂,而且C++17中又会增加不少东西……C++在语法上的不断堆积我个人认为是与当前潮流有些格格不入的。
剩下的就是当前你对哪个领域感兴趣就去专攻它。

最后,您说到我是否有迷茫期,呵呵~其实迷茫期就是自己成长的阶段,只要你在成长肯定会有迷茫,如何度过这个迷茫期呢?首先就是放松一下心情,看看一些技术类的相关新闻,看看自己的兴趣点。然后可以自己参与一些开源项目或者自己动手做一些App或网站之类的消遣消遣,盈利不是目的。再者,可以翻出自己以前写过的代码,看看是否能看懂,是否可以再优化一番。好的代码就跟好的文章一样,是不断改出来的,调优出来的。自己做过的项目可以作为自己的一个积累,后面可以尝试自己搞一些私用的库,这就是你的知识财富了。

七楼

如果Swift既可以开发iOS,也可以开发Android,那必将极大的普及。。。

0 0
原创粉丝点击