编写一次、随处运行?别开玩笑了。
Dropbox摈弃了长期奉行的技术策略:在iOS版和Android版的应用程序之间共享C++代码,称代码编写两次的开销低于共享代码这种做法的成本。
这家在线存储公司在2013年制定了这前一个策略,让一支小型团队能够迅速发布代码。现在它“完全退出这个策略”,改而针对每个平台使用原生语言,“主要是Swift和Kotlin”。
软件工程师Eyal Guthmann给出了决定这么做的几个原因。他表示,C++开发社区中的开源文化还不成气候,移动方面尤为如此,于是他们只好构建框架,以解决跨语言类型声明、接口绑定(以便与Objective-C和Java对接)、JSON解析和序列化等问题。若使用原生库,就不需要这么做了。该团队还必须创建一个自定义构建系统。
其次,Guthmann称跨平台开发的工具不如原生语言的工具来得强大,这意味着就更难找到代码错误(bug)。涉及C ++和Java之间多线程代码的一个问题需要“数周才能弄清楚”。
第三,由于iOS和Android之间的差异,并非所有代码都可以跨平台。你必须为某些方面(比如与相机相册交互)编写针对特定平台的代码。
第四,很难找到从事C++移动端开发的资深开发人员。
如果选择C++而不是C#或JavaScript,Dropbox可能会使跨平台编程尤其困难重重。另一方面,Guthmann称:“C/C++是其编译器同时得到谷歌和苹果支持的唯一两种语言,因此使用一种不同的语言会带来另外一大堆问题需要处理。”
Dropbox面临的特殊问题并不适用于每个项目。Dropbox需要与操作系统深度集成,而性能至关重要。比如说,自定义业务应用对跨平台解决方案来说可能是更合适的使用场景,因为它没必要有同样程度的集成。跨平台C++对于大量使用非可视算法的应用而言同样大有意义。
话虽如此,Guthmann所发的帖子确实表明,编写一次、随处运行这个梦想实际上对于许多类型的应用而言仍然遥不可及。
领取专属 10元无门槛券
私享最新 技术干货