写点什么

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

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

关注

评论

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

面试高并发,凉了!!(全程高能,建议收藏)

冰河

并发编程 多线程 高并发 协程 异步编程

华云数据与龙蜥社区完成产品兼容互认证,携手推动开源生态体系建设与发展

OpenAnolis小助手

云计算 开源社区 生态体系 华云数据 兼容互认证

手把手教你搭建博客

亚马逊云科技 (Amazon Web Services)

云计算时代服务器运维就用行云管家!功能齐全,福利多多!

行云管家

云计算 云管平台 服务器运维

Apache ShardingSphere Agent 可观察性实用指南

SphereEx

数据库 ShardingSphere SphereEx apache 社区

API成数据安全最大风险敞口 如何打赢数字时代的“数据保卫战”?

BeeWorks

【IT运维】传统运维与云运维到底有什么不同呢?

行云管家

云计算 IT运维 云运维

Figma断供大疆,对国产设计软件的启示

ToB行业头条

SaaS tob 国产替代

带你详细了解mongodb数据库

编程江湖

SpringBoot性能怎样优化

编程江湖

团队需要移动CRM系统的原因

低代码小观

移动 CRM 客户关系管理 CRM系统 客户关系管理系统

知识社会的到来:知识管理与知识协同

小炮

知识管理

Flink Watermark 机制及总结

腾讯云大数据

大数据 flink 实战 流计算 Oceanus

百万大数据错题笔记

Clarke

每周问答精选:PolarDB 和 PolarDB-X 的区别是什么?

阿里云数据库开源

数据库 阿里云 开源 polarDB

你可能需要知道的API接口文档神器

ModStart开源

科创人·36氪副总裁王坤:企服产品应重视使用者体验,36氪将推出中国版「魔力象限」

科创人

企业服务

从 0 到 1 教你在亚马逊云科技中部署动态网站 Typecho 系统

亚马逊云科技 (Amazon Web Services)

php 亚马逊 typecho

物联网——智能点灯搭建

kof11321

【Altium Designer】工程的组成 & 创建

謓泽

3月月更

容器化 | K8s 部署 RadonDB MySQL Operator 和集群

RadonDB

MySQL 数据库 Kubernetes 高可用 RadonDB

2022年2月视频行业用户洞察:冬奥吸引全民关注拉动视频平台出圈

易观分析

短视频 冬奥会

中文版Postmna

Liam

Jmeter Postman 开发工具 swagger 测试工具

Sealer - 把 Kubernetes 看成操作系统集群维度的 Docker

阿里巴巴中间件

云计算 阿里云 云原生 中间件 sealer

MapReduce的Shuffle过程及Hadoop优化(包括:压缩、小文件、集群优化)

编程江湖

一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点

阿里巴巴中间件

阿里云 云原生 中间件 蓝绿发布 A/B 测试

专访 KubeVela 核心团队:如何简化云原生复杂环境下的应用交付和管理

阿里巴巴中间件

阿里云 云原生 OAM KubeVela

一文弄懂Linux下五种IO模型

Linux服务器开发

epoll Linux服务器开发 Linux后台开发 select IO复用

【OH干货】 告别代码,让Openharmony软总线测试用例跑起来!!!

拓维信息

分布式软总线 OpenHarmony

领域驱动设计入门与实践[上]

LigaAI

领域驱动设计与实践

【高效开发】不止面对面,Cloud Studio 推出 MetaWork 云协作套件

CODING DevOps

疫情 协同办公 Cloud Studio 云端编码

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