写点什么

Xamarin 到 64 位 iOS/OSX 平台的粗野过渡

  • 2013-11-18
  • 本文字数:911 字

    阅读完需:约 3 分钟

当 Xamarin 开始自己的 iOS 项目的时候,设备仅能够在 32 位模式下使用,也就是 32 位版本的 NSInteger 和 CGFloat。当他们开始调查 64 位 OSX 的时候,他们意识到自己对那些数据类型的假设是错误的。 Miguel 继续说

我们将需要审计我们的所有 API 从而实现合适的类型映射,同时我们将破坏源码的兼容性,使用类似于下面的代码:

复制代码
var foo = new Xxx ();
int count = foo.GetRowCount ();
// oops, can not cast a long into an int.

当我们把源码的破坏和 Apple 拥有一个 32 位兼容性故事,同时我们仅有一些遗留类库依赖于 32 位 API 的事实结合起来的时候,我们意识到我们并不急于转移到 64 位的世界。

随着仅能引入 64 位类库的 Mountain Lion 的出现,他们看到了改变这种设计的需要。而 Apple 提供 32 位和 64 位版本的 iPhone 5 的决定进一步加剧了这种局面。为了处理这些新的挑战,Xamarin 已经创建了三个新的数据类型:

  • nint
  • nuint
  • nfloat

这些新的结构被定义为 32 位或者 64 位,依赖于代码编译的目标平台。但是故事的内容远不止如此。原始的数学运算使用特殊的 IL 指令进行操作(例如加法),而用户定义的结构需要调用 op_Addition 方法。

对于性能敏感的代码而言这可能会引发一些小的但是值得注意的影响。因为在使用本地类库的时候这些类型是非常基础的,AOT 编译器会被修改为重新解释使用这些类型的操作。Miguel 继续说:

op_Addition 调用最终会和本地 ECMA CIL add 指令一样。IL 可能看起来很恐怖,但是本地代码也是如此。

一些人可能会想知道为什么 Xamarin 不使用 IntPtr——支持平台特定整数的 CLR 数据类型。Miguel 写道:

我们选择了 nint 和 nuint 而不是内置的 IntPtr 和 UIntPtr,因为前者让人感觉是自然的“原生整型”,而 IntPtr 则是文化相关的,它已经有指针或者一个本地符号。另外,我们并没有等价的本地浮点类型。

我们选择避免使用名称 NSInteger 和 CGFloat 有几个方面的原因:一般情况下功能已经足够,它们可能值得在 Mono 中用于除了 Mac 和 iOS 之外的地方;同时感觉这些是真正的 VM 支持的类型,而不是一些类型定义或者别名。在理想的情况下,这些最终会成为 C#标准的一部分。

查看英文原文 Xamarin’s Rough Transition to 64-bit iOS/OSX

2013-11-18 05:311820
用户头像

发布了 321 篇内容, 共 134.6 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

Databend 向量索引:加速 AI 应用的数据引擎

Databend

龙蜥邀您参加 AICon 全球人工智能开发与应用大会,探索 AI 应用边界

OpenAnolis小助手

AI 操作系统 龙蜥社区

体验为王时代,天润融通助力台铃以服务撬动品牌长期价值

天润融通

征程 6 | 自定义查表算子实现量化部署

地平线开发者

自动驾驶 算法工具链 地平线征程6

开源免费!敲敲云APaaS零代码平台,做轻流/明道本地化的平替产品

JEECG低代码

零代码 无代码平台 流程引擎 敲敲云 表单引擎

加密货币交易所开发:如何打造安全、高并发的数字资产交易平台?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

法国农业部如何利用Elastic技术监控商业捕鱼业

qife122

数据分析 Elastic技术

全球客服行业集体紧张,GPT-5带来的3个颠覆你不可不知

天润融通

深度学习如何优化某中心包装减废方案

qife122

自然语言处理 深度学习

PPT文件怎么添加视频?3个PPT高级技巧盘点!

职场工具箱

效率工具 PPT 办公软件 AI生成PPT

工业管理 项目管理经验总结(1)

万里无云万里天

项目管理 工厂运维

在AI技术快速落地的时代,挖掘数据库连接工具的真实需求——某知名MySQL协议框架需求洞察

qife122

需求分析 AI辅助开发

Dify入门篇(4)| 初识 Dify 控制台:工作区与应用管理逻辑

测吧(北京)科技有限公司

人工智能

数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系

博睿数据

微软SharePoint五重漏洞剖析:ToolShell攻击链技术内幕

qife122

漏洞分析 零日漏洞 反序列化漏洞

用“数”创新,聚“数”赋能!中石大携手和鲸主办 2025 年青岛市公共数据创新应用大赛圆满落幕!

ModelWhale

中国石油大学 和鲸 公共数据创新应用大赛

夜莺监控的几种架构模式详解

巴辉特

Prometheus 夜莺监控 Victoriametrics

Databend 向量索引:加速 AI 应用的数据引擎

Databend

基于OpenHarmony的Nexus_Geometry_Nano_Board亮灯实验

华为云开发者联盟

别再靠加人提效了!天润融通AI训练师正在重构客户服务模式

天润融通

直播预告 | 破解能源转型痛点!全链路可观测如何助力能源业高质量发展?

博睿数据

深度学习为何有效及其局限性解析

qife122

机器学习 深度学习

华为元服务“服务商”生态加速计划正式启动,共拓服务分发新蓝海

新消费日报

从0到1:构建下一代去中心化应用(DApp)的全栈开发指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 代币开发 交易所开发公链开发

计算机视觉构建地球数字孪生体

qife122

计算机视觉 卫星遥感

如何轻松编写Rootkit:Linux内核系统调用拦截技术解析

qife122

Linux内核 漏洞挖掘

链游(GameFi)开发破局:如何平衡可玩性与经济模型可持续性?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

公链开发竞争白热化:如何设计下一代高性能、可扩展的区块链基础设施?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

Dify入门篇(4)| 初识 Dify 控制台:工作区与应用管理逻辑

测吧(北京)科技有限公司

从零开始学MCP(1)| MCP 协议核心原理解析

测吧(北京)科技有限公司

人工智能 MCP

基于扩散先验的自适应多模态蛋白质即插即用框架

qife122

机器学习 扩散模型

Xamarin到64位iOS/OSX平台的粗野过渡_语言 & 开发_Jonathan Allen_InfoQ精选文章