写点什么

面向 Android 上 Dalvik 运行时的 C# 编译器 dot42 简介

  • 2013-03-03
  • 本文字数:757 字

    阅读完需:约 2 分钟

Mono for Android 最大的缺点是需要在 Mono 上面构建,这与 Android 预期的运行时完全不同。尽管能够直接访问完整的 CLR 的确有些优势,但是它与 Android 的 Dalvik 运行时之间的封送调用(marshalling call)可能非常昂贵。那为什么不跳过 IL 代码直接生成 Dex 代码呢?

事实上这有点夸张。 dot42 编译器实际上并没有跳过 IL。恰恰相反,它读取 IL 代码并将其转换为一种叫做 RL 或 Register Language 的新语言。IL 和 RL 主要的差异在于 IL 是基于栈的 (有点像 Java 的字节码),而 RL 基于寄存器。在转换为 RL 后,会执行一系列的优化,而且最终产品会被重新编译。最后的编译为我们生成 Android 上 Dalvik 运行时的 dex 代码。

.Net 原始调试信息在该过程的每个步骤中都会维护,当然它必须从 Windows/.NET PDB 格式转换为 dex 的调试信息格式。dot42 使用 Android 调试桥接器来连接 Visual Studio 调试工具。

Android 库可以通过直接引用 JAR 文件来访问。“编译后,调用会被重定向为对原始 Android 库的调用。”类型间的某些映射是必须的,但这主要由编译器解决。例如,java.lang.Boolean 被映射为 C#的 Nullable。

因为 dot42 生成的是 dex 代码,所以有些 C#特性无法使用。其中最值得注意的是用户定义值类型,也就是 struct,因为 Dalvik 中并不存在,所以根本没法映射。

在使用 dot42 时,往往需要决定选择常见数据结构的 C#版本还是 Android 版本。例如,应该使用.Net 的 List 还是 Java 的 ArrayList?据 Ewout Prangsma 介绍,如果关注内存和下载大小,开发者应该首选 Java 版本。即使他们的 List 实现基本上是对 ArrayList 的很薄的包装,有些额外的代码仍然需要打包并传到手机上去。

dot42 是商业产品,正常批量许可是每开发者 499 欧元起。

查看英文原文: Introducing dot42, a C# Compiler for Android’s Dalvik Runtime

2013-03-03 00:512274

评论

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

一文简述:云端架构的演变过程

穿过生命散发芬芳

3月月更

从2018到2022: 一个大数据工程师眼中的TiDB

TiDB 社区干货传送门

关于在hive任务中number of reducers的探讨

编程江湖

《2021年IT行业项目管理调查报告》重磅发布!

禅道项目管理

项目管理 DevOps 加班

浅谈外挂常识和如何防御

行者AI

深度确定性策略梯度(DDPG)

行者AI

华为公布终端云最新数据:终端全球月活用户超过7.3亿

叶落便知秋

华为

云效流水线 Flow 是什么?为什么选择云效「Flow」

阿里云云效

阿里云 云原生 持续交付 研发 云效流水线 Flow

区块链中的共识机制简介

中原银行

区块链 中原银行

私有化部署是什么意思?企业私有化部署的几种类型和利弊分析

BeeWorks

国产化浪潮下TiDB解决的痛点问题

TiDB 社区干货传送门

不后悔的星期四,明道云首次全网公开直播零代码训练营

明道云

一起来DIVE!在基础软件知识海洋遨游,还能赢取万元奖品!

InfoQ写作社区官方

热门活动 DIVE

Apache Shiro Realm实战及认证授权源码解读

编程江湖

数字化转型-基本认知

Geek_XOXO

数字化转型

【征文大赛】TiDB 社区专栏第一届征文大赛,快来一次性集齐所有周边吧!

TiDB 社区干货传送门

Flink CDC 2.2 正式发布,新增四种数据源,支持动态加表,提供增量快照框架

Apache Flink

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

基于Prometheus的企业级监控体系探索与实践

中原银行

分布式 微服务 云原生 Prometheus 中原银行

《中国金融科技与数字普惠金融发展报告(2022)》发布 十大趋势研判未来行业发展

BeeWorks

协同·转型·智慧,WorkPlus移动平台帮助企业走好数字化转型之路

BeeWorks

分布式事务揭秘

中原银行

分布式 分布式事务 云原生 中原银行

优酷播放黑科技 | 自由视角技术的全链路策略与落地实践

阿里巴巴终端技术

客户端 音视频技术 视频技术

阿里云智能编码插件,Cosy文档搜索上新了

阿里云云效

阿里云 代码管理 代码库 阿里云智能编码插件 Cosy

下一代对话系统中的关键技术

硬科技星球

Linux内核权限提升漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

模块1 作业

KennyQ

一张图看懂全球最新DDoS攻击趋势

科技热闻

低代码实现探索(三十九)组件库的开发

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

固定资产管理系统的主要功能和优点

低代码小观

低代码 企业管理 资产管理 企业管理系统 CRM系统

字节跳动基于 Apache Hudi 的多流拼接实践

字节跳动数据平台

字节跳动 实时数仓 Hudi

Apache Flink 在翼支付的实践应用

Apache Flink

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

面向Android上Dalvik运行时的C# 编译器dot42简介_C#_Jonathan Allen_InfoQ精选文章