写点什么

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

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

关注

评论

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

《数字经济全景白皮书》金融篇:五十弦翻塞外声,金融热点领域如何实现增长?

易观分析

金融 经济

Zebec完成BNB Chain以及Near链上协议部署,多链化进程加速

股市老人

DawnSql构建数仓--DawnSql集群的安装

陈飞

分布式数据库 实时数仓 实时数据引擎 实时数据平台

小白指南:手把手教你用低代码开发一个应用页面

HarmonyOS开发者

HarmonyOS

使用开源实时监控 HertzBeat 5分钟搞定 Linux 监控

TanCloud探云

Java GitHub 开源

新必应(New Bing)申请与使用教程

kcodez

聊天机器人 ChatGPT newbing 新必应

2023-02-16:两种颜色的球,蓝色和红色,都按1~n编号,共计2n个, 为方便放在一个数组中,红球编号取负,篮球不变,并打乱顺序, 要求同一种颜色的球按编号升序排列,可以进行如下操作: 交换相邻

福大大架构师每日一题

算法 rust 福大大

业务+研发=一体化管理平台?

没有用户名丶

小程序化

「推荐收藏!」【MySQL技术之旅】(4)总结和盘点优化方案系列之常用SQL的优化

码界西柚

MySQL 数据库 2月日更 优化专题

DawnSql超越传统数据仓库

陈飞

分布式数据库 实时数仓 数仓 实时数据湖

2023 年 dotnet 仓库社区年度调查已经开始

newbe36524

C#

从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路

API7.ai 技术团队

api 网关 APISIX

飞书首次披露2022年1亿美金ARR,明确 TO B商业化立场

B Impact

无FTTR不千兆,华为星光F30让家中不再有“隐秘的角落”

脑极体

华为 宽带 光纤

【ECCV 2022】高效视频学习框架 EVL,CLIP 助力视频识别

Zilliz

java高级工程师体系课第四周作业

刘博

CleanMyMac更新最新版本x4.12.5

茶色酒

CleanMyMac X2023

聊聊系统上线前,SQL脚本的9大坑

程序员小毕

数据库 sql 程序员 后端 架构师

面试官:熔断和降级有什么区别?

小小怪下士

Java 后端 熔断

这些「误区」99%的研发都踩过

程序人生 职场

通用 GPU 领先企业登临科技加入龙蜥社区,完成与龙蜥操作系统的兼容适配

OpenAnolis小助手

开源 操作系统 龙蜥社区 兼容 登临科技

李志飞回媒体“出门问问硬件和ToB业务”表现不错,将做中国 OpenAI,美国YC项目1/3已基于大模型

B Impact

智慧赋能,Analysys易观宣布接入百度“文心一言”能力,共同打造数字经济智慧分析全系产品及服务

易观分析

易观新闻 易观

Zebec完成BNB Chain以及Near链上协议部署,多链化进程加速

鳄鱼视界

一文读懂 | 什么是 DevOps?企业该如何落地 DevOps ?

飞算JavaAI开发助手

低代码实现探索(五十六)低代码正确方式

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

docker jenkins

平凡人生

vue项目中webpack-dev-server的open和host0.0.0.0配置冲突

咖啡教室

Vue webpack

面试官:熔断和降级有什么区别?

王磊

java面试

「Go框架」mvc模式:iris中的mvc包是如何将model、view、controller联系在一起的?

Go学堂

golang 开源 程序员 个人成长

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