写点什么

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

评论

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

Java线程池执行器的饱和策略

Janwee

线程池 java

React源码分析(一)Fiber

goClient1992

React

什么大模型?我是时尚产业“大模王”!

脑极体

AI

运维训练营第17周作业

好吃不贵

PyTorch深度学习实战 | 搭建卷积神经网络进行图像分类与图像风格迁移

TiAmo

PyTorch 图像处理

最新Blender 3.3安装包+详细安装教程

Finovy Cloud

blender 3D软件

使用Nginx作为MySQL的TCP负载均衡器

Janwee

nginx 负载均衡 :MySQL 数据库

精华推荐 |【深度挖掘RocketMQ底层源码】「生产故障分析系列」深度挖掘RocketMQ底层那些导致消息丢失的汇总盘点透析(TIMEOUT_CLEAN_QUEUE)broker busy

洛神灬殇

RocketMQ 消息队列 3月日更 原理分析 底层源码

React-Hooks源码深度解读

goClient1992

React

看透react源码之感受react的进化

goClient1992

React

MQTT 5.0新特性:属性与载荷

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 载荷

毕业设计

张贺

如何用好免费的chatGPT

劼哥stone

人工智能 openai ChatGPT

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

Java中让两个线程交替执行的实现方式

Janwee

并发 信号量 java 多线程、

马克·安德森:纯粹产品护城河在硅谷少见,SaaS公司护城河是“分销”

B Impact

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

mybatis plus怎么使用注解的方式执行原生sql

俊俊哥

mybatis Mybatis-Plus 原生sql

Nautilus Chain 现已推出测试网“Triton ”,有哪些潜在的机会?

股市老人

细说react源码中的合成事件

flyzz177

React

天工人巧日争新:昇腾AI的绚丽今日

脑极体

AI

React Context源码是怎么实现的呢

flyzz177

React

Amazon Detective 支持 Amazon EKS 上的 Kubernetes 工作负载以进行安全调查

亚马逊云科技 (Amazon Web Services)

提示工程在AI绘画领域中的应用

FinFish

AI绘画 提示工程

一天吃透分布式事务八股文

程序员大彬

Java 分布式事务

盘点10款优秀的工作任务进度管理软件

爱吃小舅的鱼

项目管理 项目进度管理 项目进度管理软件

微信小程序管理软件助力企业数字化转型,实现智能化升级

FinFish

私有小程序技术 小程序管理平台 小程序技术 小程序管理

深入react源码看setState究竟做了什么?

flyzz177

React

工业数字孪生:西门子工业网络与设备虚拟调试案例

Openlab_cosmoplat

工业互联网 开源社区 数字孪生

活动推荐 | 博睿数据数智领航营火热报名中

博睿数据

保险 博睿数据 活动报名 数智领航营

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