更新时间:2016年04月22日13时32分 来源:传智播客 浏览次数:
深度解析Swift for Android伤害?
鉴于最近各大媒体都在疯传Android亲爹Google酝酿将swift作为未来安卓开发的第一语言!Android开发们炸了锅?这是语言入侵!活生生的Swift for Android伤害!
首先来水一水各自入侵?
C++Java C# 这种本来就叫 general purpose language。 意思就是什么都能干,什么都能写。从桌面,到移动,到server。
Swift的初衷也只是想加入这个阵营而已,而且本身他也有加入这个阵营的条件, server不说。苹果本身就已经有了桌面和移动着两大平台。
来说说Android倚赖的Java,Java 设计出来的目的是为了给电冰箱发邮件,却入侵了电脑,入侵了 Web,现在又入侵了 Android。同样,JavaScript 设计出来是给网页做动态效果,现在入侵了服务器端(该死的nodejs),还入侵了手机App(shit react!)。Java 刚出炉的时候有三个版本,ee主要做web,se做桌面,me做嵌入式。在Java的各种书籍里大致都有提到,Java什么都能做,那么Java语言的发明是否伤害了其他的编程语言呢?还是说为了不伤害其他编程语言,难道真的是为了语言保护而不要再发明新的编程语言了吗?
世界在发展技术在更新,抱着初衷不放、不能放开发展开发语言,那也太不炫酷了。另外,迄今为止这么多的语言被不断发明和替代,市场和程序员会做出选择的,so,不要替编程语言的命运操心了,不管是Android开发者还是IOS开发者~
除非专用语言比如Fortran/lua之类的,否则和其他语言有一定的交集和竞争很正常。有竞争不好吗?
说到底,既然某种开发语言现在用起来舒服了,就想方设法想要扩展它的局限性。
比如说 Go 语言做 Android 程序,熟悉 C/C++ 有财力的公司,会舍弃生态链异常完整的 Java ,舍弃 C/C++ 攫取硬件性能的能力,选择 Go 语言?为了什么?Go 语言的编辑的效率?得益于开发工具,Java的编写效率一点也不慢。而用 Go 语言折腾一个开发环境,又是一件费力不讨好的事。
再者说,Swift,听说它的主力开发是LLVM 的作者。而且相对封闭,不像 Rust 广泛听取社区的意见。所以有人说它的未来可能更好,因为现在盛行的语言,所有都是1,2个人做出来的。一个社区砸进去,不见的是件好事。但 Swift 真的能打败前任,挤进服务器市场吗?
Swift为了避免重复造轮子,对 C 和 Object-C 的兼容性很好,基本可以直接调用它们写的库。采用引用计数垃圾回收。但问题是,它本身的目的是为了更傻瓜化 iOS 软件的开发的。它无论现在还是未来,都会偏向这个目的。那为什么偏要用不是专业干这件事的工具,折腾来折腾去,来干这件事呢?
现在 Swift 离开了 iOS 平台,基本什么事都干不了。如果不调用 C 库的话。但能调用 C 库干这种事的语言太多了。它们的生态也比 Swift 完整多了。
语言只是工具,对公司而言,选择成熟的稳定的方案远比慢慢去踩坑更佳靠谱。比如对Golang而言,定位最初还是操作系统语言呢,现在看起来主要的方向还是高效分布式应用方向。Swift离开iOS不是不可以,对外部社区的态度目前还不清楚,不过会的基本是iOS程序员,你让他们去写服务端了,谁来写iOS程序呢?
现在语言的跨平台跨方向应用主要还是为了让人员发挥更大作用,尽可能的榨干它们的价值,比如前后端分离之类的。语言的应用场景越多,对初创或者个人作坊帮助比较大,但是伴随着体量和需求的增加,大部分还是回到老路上来(分工明确与协作)。
关于swift谈一下看法,只说Swift本身。虽然做Android不做iOS相关的开发,但看好swift。swift语法相对平易近人,开源加上苹果的持续投入,未来类库和性能也不会差。掌握它一门能iOS和后端都能玩,群众基础会非常好。只要群众基础好,语言持续发展搞出便于前后端开发的库和内置并发之类的根本就不是事。
前阵子看到一个评测,在一些case上的性能swift甚至都超过rust了。iOS领域自不必说,现在swift开源支持多个平台。用swift在linux写写服务也是很自然的。未来swift在前后端都用太正常不过了。
然而swift最大的潜在问题就是ChrisLattner千万不要把它语法B格升的太高,一定要持续走现在相对朴素的路线,过于高冷不适合广大群众。------------之所以这么说,是因为放假前看到Chris Lattner在考虑swift是否加上一些类似于rust那种风格的Lifetimes ,Ownership 的东东。这些东西一旦引入了,容易脱离广大群众。
说完了Swift本身,再回到主题,真能造成伤害吗???现在Android开发社区中除了Java以外,最常使用的开发语言是Scala, Groovy 以及才出来的 Kotlin,他们之间有什么相同点呢?他们都是JVM语言,因此他们可以被编译成class文件,打包成为dex文件,进而运行在Android 虚拟机上。
而现在,假定我们使用Swift作为开发语言,会遇到哪些问题:
第一个问题就是已有的Android版本是不支持Swift编译出的应用的,Swfit本身就不是作为一种JVM语言开发的,因此如果强行把他编译成class文件,工作量很大。所以如果真有Swift应用,也只能在新版本的Android系统中运行,但是Android不比iOS,系统升级率那是相当的低,我想没有任何一个开发者会愿意抛弃老版本的Android用户。
第二个问题就是Android的生态环境,Android从09开始发布,到现在已经7年了,各种开源社区和开源项目都是围绕着Java语言进行开发,就算是Scala,Groovy和Kotlin也是能够直接调用Java代码。如果选用了Swift,如果完全抛弃现有的开源项目框架,成本很高,但如果需要直接操作Java代码,势必多一层类似jni的东西,也会在一定程度上影响运行效率,得不偿失。
再者,放着Kotlin这个在Android开发方面差不多成熟的语言(包括IDE支持,和Java无缝对接)不用跑出搞Swift,看不出有这个必要性重写框架层?干脆重新开发一个手机操作系统好吗,还有AndroidN 刚刚改入openJDK和JACK编译器,还有搞了半天的Java虚拟机,最后全部扔掉再另起炉灶是吗,真的干脆重新写一套操作系统更方便。 Swift语法有多少优越性(和Kotlin比)而值得做出这么多的牺牲和改变呢?并没有吧?当然啊,最省事的可以出一个Swift on JVM啊,和旧代码互通两不误,其他东西也都不用重写有木有!那么问题又回来了,既然你要的是一个基于JVM的脚本语言(或语法类似脚本语言的语言),那么为啥要舍近求远?
唯一的理由大概就是所谓的跨平台开发能力了,但是实际能复用多少代码真的存疑吧,毕竟iOS和Android是两个几乎完全不一样的平台。不过Google真的不怕麻烦硬是要搞,那也算一件不错的事情,毕竟语言这种东西还是越统一越好。另外关于Kotlin现存的速度问题,Jetbrains已经在改进
而且,Swift 无法像 Kotlin 一样与原有的 Java 生态圈交融,而单纯从语法上来讲(Kotlin 和 Swift 的语法有很多相似点),Kotlin 已经足够地解放了开发者的生产力,没必要抛弃 Java/JVM 生态圈(各种 Android 类库)投奔 Swift。
再说,将 Swift 作为 Firstclass langue 的工作量应该挺大的,大概也要花上很长一段时间了。至于其他答主说的 Swift compile to Java Bytecode 是不大可能的。一方面是 Swift 语法上并没有针对JVM(/Dalvik/ART) 进行适配,可能会产生一些坑(例如泛型),再者就是如果真打算这样做的话,Google 应该是der才不直接选择 Kotlin。
基于以上,与其惊慌swiftfor Android,还是好好学习Android吧!就算Kotlin最可能发展起来,但别忘了,Kotlin包括IDE支持,和Java无缝对接。
传智黑马的讲师们,深藏不露,只有在他们的传授知识启迪思想的过程中才能深刻领会~ 原因在何?因为他们实则都是行业的技术精英级别的存在,他们曾是跨国公司和国内大中型企业架构师、系统分析师、企业培训师! 如果你来传智黑马学习了,有着强大的师资团队的支撑,你不需要考虑其他的,只需要好好把技术学到手,学扎实, 那么打败其他机构的学员,不在话下。而且传智黑马专注培养的是“既懂底层,又会开发”的Android开发者,最终可以让学生们成为“学完即可冲击20W年薪”。
来说说我们传智黑马Android最新课程改版的Android体系教程,从基础到项目实践,实用价值更高,内容更广泛,覆盖Android移动端开发种类,深度解析源码和Android新特性,真正成为Android开发高手!
其他精华推荐:
1.2016年传智/黑马课改后最新版珍稀Android视频精华<从基础到完整项目流程开发>
2.[持续更新]2016最新Android视频教程+源码+技巧/经验+软件+面试