写点什么

面向 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:512184

评论

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

Java stream流用法总结

爱好编程进阶

Java 程序员 后端开发

为什么花大本钱培训后,研发团队的表现还是很差?

高山

培训 CMMI 培训效果

基于SVN的CICD调研方案 _

ZuccRoger

5月月更

从相亲来看Flutter 的 StatefulWidget 和 StatelessWidget

岛上码农

flutter ios开发 安卓开发 跨平台应用 5月月更

使用声网 SDK 为Android APP添加视频直播

声网

android 教程 视频直播

覆盖 70% 核心业务,ShardingSphere 如何成为喜马拉雅架构演进的催化剂

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

Cocos Creator学习の有限状态机

空城机

Cocos 5月月更

Redis「2」缓存一致性与异常处理

Samson

Redis 核心技术与实战 学习成长 5月月更

Druid连接池源码阅读04

石小天

druid 源码阅读 4——走一个单测看sql运行

张大彪

反向代理 413 Request Entity Too Large 问题

HoneyMoose

【C 语言】指针 Two 之[定义指针变量、有效声明指针、使用指针、指针变量初始化]

謓泽

5月月更

Graylog 中文手册 常用功能和问题整理

爱好编程进阶

Java 程序员 后端开发

【LeetCode】一次编辑Java题解

Albert

LeetCode 5月月更

【刷题第八天】11. 盛最多水的容器

白日梦

5月月更

Docker下的OpenResty三部曲之三:OpenResty加Tomcat的服务

程序员欣宸

Kubernetes openresty 5月月更

[数据分析实践]-音频分析-BirdCLE-2

浩波的笔记

人工智能 机器学习 数据分析

学生管理系统(2)

5月月更

设计模式之原型模式

乌龟哥哥

5月月更

前缀和算法

工程师日月

算法 5月月更

网站开发进阶(六十三)详解CSS3中的calc()

No Silver Bullet

css3 5月月更 calc()

CDH5部署三部曲之二:部署和设置

爱好编程进阶

Java 程序员 后端开发

CRMEB 知识付费模版消息修改教程

CRMEB

看 AWS 如何通过 Nitro System 构建竞争优势

云物互联

云计算 AWS DPU 硬件虚拟化技术

使用 Amazon Cloud WAN 构建您的全球网络

云物互联

云计算 AWS Cloud WAN

一份让面试官满意的简历究竟要做到什么

宇宙之一粟

简历模板 简历 5月月更

如何备份 WordPress 数据库

海拥(haiyong.site)

WordPress 5月月更

数据库连接池 -Druid 源码学习(四)

wjchenge

Druid 数据库连接池

FLV封装格式

Loken

音视频 5月月更

在Flutter中使用WillPopScope

坚果

5月月更

2021-12-15【Codeforces Round #760 (Div

爱好编程进阶

Java 程序员 后端开发

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