AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:311601
用户头像

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

关注

评论

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

百度智能云 AI 公有云服务市场,连续五次第一!

百度大脑

人工智能

黑客是怎么盗取你的密码的?

喀拉峻

黑客 网络安全

26《重学JAVA》--网络编程之Socket类

杨鹏Geek

Java25周年 28天写作 12月日更

c语言学习笔记2021/12

姬翔

绩效评估的why&how

mtfelix

28天写作

为什么?为什么要先问目的?(27/28)

赵新龙

28天写作

过冬

搬砖的周狮傅

随笔杂谈

为什么很难得出结论

将军-技术演讲力教练

2021年全国人工智能大赛正式启动,396万奖金等你报名!

OpenI启智社区

人工智能大赛

软件设计之非功能性

xcbeyond

软件设计 28天写作 12月日更 非功能性

低代码实现探索(十)流程执行器

零道云-混合式低代码平台

一文了解 Redis 内存监控和内存消耗

程序员历小冰

redis 28天写作 12月日更

.NET中的Husky工具

喵叔

28天写作 12月日更

如何让TiDB在云上智能运维 (TiDB Hackathon 赛题)

如果迎着风就飞

云原生 operator TiDB Operator 存储上云

几个超火的编程网站,别错过!

程序员鱼皮

CSS JavaScript html 前端 后端

Go+ 结构体方法定义教程

liuzhen007

28天写作 12月日更

性能即天元:vivo S12的落子与棋局

脑极体

Go 语言快速入门指南:第七篇 方法

宇宙之一粟

12月日更

启梦行动再扬帆 | 2021启智社区优秀项目&优秀开发者评选结果重磅揭晓

OpenI启智社区

启智社区 优秀开发者 优秀开源项目

从AI前沿到科技自立:百度大脑的风向标意义

脑极体

57 K8S之自动弹性缩放

穿过生命散发芬芳

k8s 28天写作 12月日更

HarmonyOS(鸿蒙)——滑动事件之上下左右滑动

李子捌

28天写作 21天挑战 鸿蒙开发 12月日更

慢跑的正确打开方式

wood

跑步 28天写作

记录与 Electron 的第一次亲密接触

何佩弦

跨平台 Electron

盘点2021(一)

圣迪

复盘 盘点 2021

Dubbo 框架学习笔记十五

风翱

dubbo 12月日更

第一财经年终总结

石云升

读书笔记 28天写作 12月日更

Dubbo 框架学习笔记十四

风翱

dubbo 12月日更

绘制监控页面的一些最佳实践

耳东@Erdong

最佳实践 监控 28天写作 12月日更

从0到1带你深入理解log4j2漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

低代码实现探索(十一)流程中的动作执行器

零道云-混合式低代码平台

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