写点什么

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

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

关注

评论

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

图解 K8S 源码 - QoS 篇

郭旭东

Kubernetes Kubernetes源码

腾讯技术官又曝神作,两份堪称‘千古绝唱’操作系统笔记现已被全网疯传

编程 操作系统 计算机

推荐一款MySQL开源客户端,免费+跨平台+使用便捷!

王磊

MySQL

Anaconda安装使用和akshare库使用

MySQL从删库到跑路

Python 数据分析 Windows 10 Anaconda akshare

OpenResty 项目脚手架

铁匠

lua nginx openresty

详细讲解:python中的lambda与sorted函数

计算机与AI

Python

随机森林原理介绍与适用情况(综述篇)

计算机与AI

数据挖掘 学习 数据科学 随机森林

华为丁耘,解读百尺竿头的中国5G

脑极体

Kubeless 函数部署遇到了问题,如何 Debug? | 玩转 Kubeless

donghui

Serverless kubeless

容器技术为什么会这么流行

架构师修行之路

Docker 容器 分布式 微服务

UBBF2020:智能联接,共创行业价值新增长

DT极客

netfilter/iptables 原理

为为

Service Mesh Linux Kenel

甲方日常 30

句子

工作 随笔杂谈 日常 心情

优秀开源项目、博客、书籍整理

铁匠

收藏教程 资源汇总

融合与共生之下,区块链都能“+”什么?

CECBC

区块链 大数据

面向对象编程会被抛弃吗?这五大问题不容忽视

Java架构师迁哥

解释一下==和equals的区别,你以为就这么简单?那你就草率了

小Q

Java 学习 架构 面试 基础

极客时间架构师培训 1 期 - 第 4 周总结

Kaven

Tensorflow2.0安装使用

MySQL从删库到跑路

人工智能 tensorflow Anaconda Jupyter Notebook

打通Docker镜像发布容器运行流程

架构师修行之路

Docker 容器 分布式 微服务

华为云专家带你解读文本情感分析任务

华为云开发者联盟

内容 数据 分析

后疫情时代,华为云会议如何定义未来会议?

华为云开发者联盟

视频 会议

BATJ内部Java求职面试宝典,尤其应届生如果还没有学过那后悔去吧,也许你已经错过N多家大厂offer;

Java架构师迁哥

Python 疑难问题:[] 与 list() 哪个快?为什么快?快多少呢?

Python猫

Python 学习 编程 程序员

「红黑树」背了又忘?深入本质,他也不过是一棵二叉树

小松漫步

技术心得丨一种有效攻击BERT等模型的方法

华为云开发者联盟

学习 AI

Underlay网络:如何立住可靠又支持大规模无收敛的“人设”

华为云开发者联盟

云服务 交换机

远程触发Jenkins的Pipeline任务的并发问题处理

小Q

Java 学习 编程 架构 并发

分配时间戳和生成水位线

小知识点

scala 大数据 flink

技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议

华为云开发者联盟

云计算 华为 技术

CECBC区块链专委会副主任吴桐主讲全国社保基金数字货币讲座

CECBC

区块链 数字货币

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