Swift 与 C++ 互操作性的讨论

栏目:技术教程 发布时间 2020-10-18 人气 

来源:https://www.oschina.net/news/119241/interoperability-between-swift-n-cpp

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:Swift GitHub repo 更新的一份文档讨论了 Swift 与 C++ 之间API 层面互操作性的设计和权衡。讨论前提假设会对 Swift 的语言特性和标准库进行修改:所提出的修改必须符合 Swift 的目标和理念。也就是说提出的修改必须有合理的理由被 Swift 社区接受。例如,在 Apple 平台上对ABI 进行破坏兼容性的变更不可能被接受对 Swift 语言或标准库进行 fork,...

Swift GitHub repo 更新的一份文档讨论了 Swift 与 C++ 之间 API 层面互操作性的设计和权衡。

讨论前提

假设会对 Swift 的语言特性和标准库进行修改:

  • 所提出的修改必须符合 Swift 的目标和理念。也就是说提出的修改必须有合理的理由被 Swift 社区接受。例如,在 Apple 平台上对 ABI 进行破坏兼容性的变更不可能被接受
  • 对 Swift 语言或标准库进行 fork,或在没有 fork 的情况下创建一门方言(并因此导致改变 Swift 的目标、理念、安全性和工效设计)同样不会被考虑或讨论

假设会对 C++ 代码、工具链、标准库实现以及 runtime 环境进行有限的修改:

  • 必须要考虑此类修改的成本。对于需要控制完整工具链的用户而言,为 C++ 进行 ABI 兼容方面的变更也许会被接受。但对于整个社区来说这不是必需,因此这种改动只会被视为优化

目标

对于 API 用户来说,互操作性应该在各方面最大限度的透明化:API 设计和效率提升、编辑器集成和工具,以及性能。对于 API 开发商来说,互操作性不应成为重大的额外负担,并允许 API 开发商对导入的 API 进行组织。

API 设计和效率提升主要是指使用 Swift 的开发者不会感受到原生 Swift API 和导入的 C++ API 之间具有差异。

例如,虽然在 Swift 中可以编写自定义哈希表,但很少这样做,大多数代码都使用Set和 Dictionary。因此,当把使用std::unordered_map或 flat_hash_map类型的 C++ API 导入 Swift 时,如果继续使用这些 C++ map 类型,这样的写法在 Swift 中看起来就会很怪异。

编辑器集成和工具方面的设计会参考 Swift 与 Objective-C 互操作性的机制。即在可能的范围内,所有的编辑器操作对互操作都应有良好的支持,例如如果调用"rename function"函数进行重构,就应该在 Swift 和 C++ 代码中重命名所有定义、声明和用法。

性能方面,当在 Swift 中使用 C++ API 时,理想情况下和在 C++ 中使用保持一致的性能特征。

事实上,上面提到的目标存在某方面的冲突。例如 API 工效设计和性能之间的冲突。如果在 API 边界自动将 C++ 类型桥接到相应的 Swift 类型,则可以提供更符合工效设计理念的 API,不过这样的类型转换会造成较大的 CPU 开销。

文档还详细阐述了许多暂定的设计方案,详情点此查看。

巨龙 施暴 两类 将比 淳于 虎口脱险 进给 加速卡 蔡司 证件 通风 小燕 柔性 随时随地 潜艇 原子弹 控件 你来 人机界面 聚乙烯 保姆 架式 金条 一吨 比赛 东华大学 防冻液 巨佬们来 贯穿 塑性 浮动 车用 发虚 每天都 之心 辽沈 巡游 青衣 三周年 神舟 巴马 鼎力相助 频谱仪 被评为 奶油 按铃 底座 中新 将对 给我 开弓不放箭 如下图 电路板 偏头痛 摩根大通 到你 秒表 维修服务 跌停 水彩 wine5 璀璨 儿子 麦当劳 维度 温州市 鸣放 炮手 当日 破裂 标志性 柚子 柠檬 清洗剂 最爱 串讲 风量 媚眼 事权 有机 科技人才 这首 收发 里克 执政 蜀黍 对中 标准煤 FAST 本溪市 弹珠 控制阀 缺少 海宁 电影放映 做作 裂缝 口误 恶势力 淮阴
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/61157.html