NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

什么是微信小程序WXSS ?

Geek_2305a8

FPS和SFTP的速度哪个更快?区别在哪里?

镭速

ftp sftp 传输大文件

Mac电脑图片处理必备:Photoshop 2021直装激活版

mac大玩家j

Mac软件 图片编辑工具 图片处理软件

常用的企业加速公司内部大文件传输速度方法

镭速

大文件传输 传输大文件 内部大文件传输

【写作训练营打卡|02】

终身学习 #学习

细说SQL与ETL之间的小秘密

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

公有云频繁宕机,从上云到下云备份如何实现?

财见

B 站基于 StarRocks 构建大数据元仓

StarRocks

数据库 StarRocks 数据分析、

XPET宠物游戏系统开发技术

薇電13242772558

gamefi

过去 100 天,发生了啥?丨 RTE 开发者日报 Vol.100

声网

如何通过营销策略和资源平台提升API竞争力

幂简集成

API 产品运营 营销模式 差异化

大模型数据集:突破边界,探索未来

来自四九城儿

亚马逊云科技携手埃森哲助力默沙东利用云技术缩短药物发现时间

财见

亚马逊云科技推出五项Amazon SageMaker新功能

财见

云图说 | 图解制品仓库服务CodeArts Artifact

华为云开发者联盟

华为云 华为云开发者联盟 华为云CodeArts 华为云云图说

社交泛娱乐出海,市场 & 赛道、投放 & 变现的最新干货分享

融云 RongCloud

社交 泛娱乐 市场 变现 梳理

大模型数据集:构建、挑战与未来趋势

来自四九城儿

DAPP算力挖矿系统开发丨合约技术开发

l8l259l3365

MySQL安全最佳实践指南(2024版)

这我可不懂

MySQL 数据库

Vue 应用程序性能优化:代码压缩、加密和混淆配置详解

可视化软件开发工具——JNPF

互联网工科生

低代码开发 可视化开发 JNPF

行外人提问:CST软件仿真能够解决哪些问题?

思茂信息

cst cst电磁仿真 cst仿真软件

身为 Go 程序员,我为啥更喜欢用 Zig?

树上有只程序猿

Go 编译器 Zig语言

图控软件大盘点 国内外顶级SCADA软件整理

2D3D前端可视化开发

组态软件 工业自动化 SCADA HMI 图控软件

用 2 种方法取消 Axios 请求,掌控请求的主动权

Liam

JavaScript 程序员 前端 axios 网络请求

免费SSL,阿里云免费SSL证书申请及如何宝塔更换SSL证书

JaneYork

阿里云 ssl 宝塔面板 免费SSL证书 宝塔

云服务器的安全防护:技术与策略全面解析

一只扑棱蛾子

云服务器

7 种查询策略教你用好 Graph RAG 探索知识图谱

NebulaGraph

知识图谱 LLM rag

小程序中添加用户隐私保护的操作方法

Geek_2305a8

离散元分析有什么用?仿真软件介绍

智造软件

CAE CAE软件 离散元

直播预告丨电商内容营销的AIGC式进化

京东科技开发者

电商 大模型 AIGC

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