转载

在Visual Studio中将Objective-C编译为C++

曾有人谣传微软Windows 10平台将支持运行Android程序,没有人会预料到iOS应用也将得到同样的支持。目前,微软正结合C2和Clang使之变为可能。

编译器支持

谷歌和苹果都使用Clang作为他们的C++前端,微软将Clang与Visual C++编译器的后端C2结合,以此来支持在Windows上运行Android和iOS程序。

苹果的Objective-C同样使用Clang作为前端,所以一旦Clang与C2整合完成,他们也将获得解析并编译Objective-C的能力。

IDE支持

Visual Studio中的Objective-C支持语法高亮、代码补全、和代码调试功能。C++和C#文件可以被引入到相同的项目中,允许程序直接跨边界调用。编译器将处理所有封送工作,所以开发者只会看到普通的函数调用。

大多数Objective-C项目都以建立XCode项目开始,所以Visual Studio将支持导入XCode项目,VS和XCode项目文件可在混合模式项目中共存,因此可以在两种IDE中同时开发这个项目。

混合模式项目

Windows为Objective-C应用提供了新的API,例如:动态磁贴。为了确保可以继续在平台间共享代码,微软允许你在调用Windows API前通过运行时检查它们是否可用。或者, 你可以使用预处理器指令显式地隔离平台特定代码与共享代码。

运行时行为

Windows的Objective-C运行时默认通过检测应用原始平台来决定具体行为。举个例子:如果你移植某个iPhone应用,那么它将默认运行在一个小窗口中,而从iPad移植的应用将默认运行在常规大小的窗口中。

所有这样的行为可以在需要时被应用覆盖。

iOS API兼容性

Windows 10支持iOS API的一个“合理子集”,它不会对应于iOS的某个版本,而是通过查看指标来寻找最常用的API。在第一个版本中,微软将关注以下API:

  • 游戏:对OpenGL、OpenAL和传感器提供良好的支持
  • UI:UIKit、核心动画、核心图形、核心文字、触控
  • Objective-C:自动引用计数、代码块、Foundation框架

对于像分享、消息提示、存储组件这样的功能,开发者需要选择是继续使用iOS API,还是切换到Windows替代解决方案。如果你选择继续使用iOS API,Windows将提供一个兼容层来支持API正常运行;当然,微软更希望你使用他们提供的解决方案,这样你就可以访问高级Windows特性。

Swift

对于Swift,微软官方的立场是“暂不评论”。而在私下交流中,他们透露出支持Swift的意愿,但由于要在秋天到来前忙于准备Objective-C,以致于没有资源可以提供给Swift。

查看英文原文:Compiling Objective-C into C++ with Visual Studio

感谢邵思华对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 在Visual Studio中将Objective-C编译为C++ )。

正文到此结束
Loading...