写点什么

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

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

关注

评论

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

Bigdata 作业第九周

Pyel

java内存模型之双重检查锁定与线程安全的延迟初始化

急需上岸的小谢

5月月更

某小视频App v10.x 手机号加密算法分析

奋飞安全

android 移动安全

2020java面试题-chukou-chengzhang

爱好编程进阶

Java 程序员 后端开发

Go Web 编程入门:创建动态 HTML 和文本文件

宇宙之一粟

Web Go 语言 5月月更

[Python] 题集 ②

謓泽

5月月更

面试突击46:公平锁和非公平锁有什么区别?

王磊

Java 面试 java常见面试题

算力免费,还奖钱,OpenI日常激励活动“我为开源打榜狂”来袭

OpenI启智社区

开源 我为开源打榜狂

跨境电商中的秘密

Geek_e369a5

跨境电商 编程解决 跨境电商快速更新产品 多图AI融合 图片背景替换

函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务

阿里巴巴云原生

阿里云 云原生 函数计算

kubernetes下的Nginx加Tomcat三部曲之一:极速体验

程序员欣宸

Java tomcat Kubernetes 5月月更

cdn日志文件导入mysql进行分析,核心用到 Python

梦想橡皮擦

5月月更

【校招/社招】面试字节,写了一份硬核简历!

小傅哥

Java 面试 小傅哥 招聘 简历

【刷题第三天】无重复字符的最长字串

白日梦

5月月更

与众不同的企业,都有最棒的知识管理!

小炮

知识管理

10个 解放双手的 IDEA 插件,少些冤枉代码

爱好编程进阶

Java 程序员 后端开发

浅谈Java中的Math.random

工程师日月

java 5月月更

C语言_数组的查找、替换、排序、拼接

DS小龙哥

5月月更

六大应用场景解决方案重磅发布,华为开发者联盟助力开发者商业成功

最新动态

1024属于程序员的专属浪漫

爱好编程进阶

Java 程序员 后端开发

网站开发进阶(四十九)由JS报“未结束的字符串常量”引发的思考

No Silver Bullet

作用域 5月月更 解析引擎

Flink CDC Meetup · Online,5.21 开讲!

Apache Flink

大数据 flink 编程 流计算 实时计算

SAP GUI 一些实用技巧分享

汪子熙

router 客户端 SAP GUI 5月月更

docker可视化管理工具之shipyard

乌龟哥哥

5月月更

架构训练营-毕业总结

默光

架构训练营5期

从这些云原生企业身上,我看到了数字化创新者该有的样子

阿里巴巴云原生

阿里云 云原生 实战案例

OpenYurt 开源之夏开始申请啦

阿里巴巴云原生

阿里云 云原生 开源之夏

网站开发进阶(四十五)浅谈XML与HTML的区别

No Silver Bullet

html xml 5月月更

11-SpringSecurity:Session共享

爱好编程进阶

Java 程序员 后端开发

【ICDE 2022】稀疏模型训练框架HybridBackend,单位成本下训练吞吐提升至5倍

阿里云大数据AI技术

深度学习 推荐系统 开源项目

目标检测的算法

恒山其若陋兮

5月月更

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