50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

Hadoop中mapreduce作业日志是如何生成的

华为云开发者联盟

hadoop hdfs mapreduce YARN 作业日志

2021关键词:重新起航

faiting

数据结构算法 盘点 2021

阿里云何川:开放兼容的云,计算巢帮助合作伙伴云化升级

阿里云弹性计算

弹性计算 年度峰会 计算巢

深入解析Kafka的offset管理

编程江湖

kafka

在Mac上运行Rainbond,10分钟快速安装

北京好雨科技有限公司

大搜车面向复杂业务场景的研发运维体系治理实践

阿里云弹性计算

弹性计算 运维峰会 研发运维

Hyperf结合PhpOffice/PhpSpreadsheet实现Excel&CSV文件导出导入

Owen Zhang

php hyperf php扩展 PhpOffice/PhpSpreadsheet

在Windows上运行Rainbond,10分钟快速安装

北京好雨科技有限公司

区块链,元宇宙时代的“基础设施”

CECBC

Ubuntu LNMPR环境搭建(Ubuntu 20.04 + Nginx1.8 + PHP 7.3 + Mysql8.0 + Redis5.0)

Owen Zhang

ubuntu LNMPR

Golang:定时器的终止与重置

恒生LIGHT云社区

golang 定时器 语言 Go 语言

企业管理系统可视化权限功能设计

雯雯写代码

可视化 权限 企业管理系统

C语言-函数的可变形参(不定形参)

DS小龙哥

C语言

最佳实践:青藤云安全发布国内首个K8S ATT&CK攻防矩阵

青藤云安全

『征文精选』技术翻译与术语管理技术:专业人说专业话

SphereEx

数据库 翻译 ShardingSphere 征文 SphereEx

微服务分布式架构中,如何实现日志链路跟踪

华为云开发者联盟

微服务 日志 分布式架构 logback 链路跟踪

如何打造一款三消类游戏

Shopee技术团队

算法 前端 游戏 Shopee Candy

2021 OceanBase 年度报告 | 用技术让海量数据的管理和使用更简单!

OceanBase 数据库

开源 年度报告 oceanbase 成绩单

深入理解百度在离线混部技术

百度Geek说

云计算 云原生 后端

Linux之|etc|group文件

入门小站

Linux

发挥好数字人民币促“双碳”作用

CECBC

跨平台技术实战!百度文库跨平台技术快速落地全过程

百度Geek说

跨平台 PC 百度文库

Java开发Redis面试题分享

@零度

redis Java 开发

在线HTTP/HTTPS协议GET,POST,RESTful接口测试

入门小站

工具

从内存管理原理,窥探OS内存管理机制

华为云开发者联盟

cpu 内存 内存管理 应用程序 OS

Ubuntu 基于Nginx1.8的Golang环境搭建(Ubuntu 20.04 + Nginx1.8 + Golang 1.17 )

Owen Zhang

golang nginx ubuntu

抢占先机!为何说区块链通证经济象征未来?

CECBC

评委拍案叫绝、项目惊喜不断,这是一届怎样的 Hackathon ?丨TiDB Hackathon 2021 回顾

PingCAP

缓存一致性最佳实践

得物技术

缓存 分布式 数据 一致性 实践

新能力让数据多端协同更便捷,数据跨端迁移更高效!|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

城墙上的“云镜派”,如何守护云上资产安全?

白洞计划

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