MonoTouch如何工作?

时间:2009-09-21 08:07:02

标签: cross-platform translation xamarin.ios

我真的很感激任何人都能简单解释一下,实现像MonoTouch这样的东西的一般方法是什么?我真的很惊讶,因为它不是我看到的第一个例子,当人们获得像Java这样的平台并将其翻译成类似C / Objective-C的东西时。我无法想象垃圾收集器和东西是如何翻译的。

提前致谢。

编辑:我理解将一种语言翻译成另一种语言的理论可能性。我的问题更具技术性:他们是否在ObjC中实现一个完整的运行时并捆绑它? (我怀疑......)或者他们只是将C#代码翻译成ObjC / binary / etc?

3 个答案:

答案 0 :(得分:39)

MonoTouch不是翻译。它只是在iPhone上运行的Mono运行时,有一些奇特的技巧可以使它与iPhone的限制兼容。

传统的Mono“运行时”不仅仅是JIT,它还处理GC,反射,I / O层,线程,异常等。还有类库。为了让您的应用程序在iPhone上运行,应用程序中必须包含大部分内容。减肥可带来一些挑战。此外,iPhone可以防止JIT运行时代码生成,只运行签名代码,并且不允许动态库。

MonoTouch的作用是使用IL链接器将代码使用的类库的各个部分组合成单个IL二进制文件。然后,它使用AOT编译来预生成JIT通常从IL生成的所有本机代码,然后将其与无JIT运行时一起链接到可以签名的单个本机二进制文件中。最后,IL从托管二进制文件中删除。只留下元数据。

答案 1 :(得分:8)

Monotouch使用Ahead-Of-Time编译来生成单个静态编译的文件 - 因此它不会在iPhone上实现.Net运行时。 Monotouch使用绑定到暴露于C#的iPhone库。 Objective-C没有翻译。

基本上,它让您熟悉在C#及其相关工具链中工作,同时暴露底层iPhone OS的库调用。

Miguel di Icaza在Stackoverflow播客中解释了这一点,他是一位嘉宾。 link

答案 2 :(得分:0)

Monotouch可能是iPod的Mono端口。

Mono本身是各种* nix环境中.NET运行时(以及一些开发工具)的开源实现。

这是由Miguel de Icaza领导的大规模劳工,他早早意识到.NET的重要性,并着手将其移植到开放平台上。很明显,他收到了MicroSoft本身的大量支持,因为MONO在原生.NET和单声道之间提供了不可比性。

所以第一个答案是你需要成为一个组织良好,努力工作的天才。

第二个答案是更多Comp Sciency。 “图灵完成”是系统需要被视为可编程计算机的最小功能集。它实际上是一个非常小的集合 - 减法,比较,分支和读取和存储。

理论上说,任何“图灵完备”系统都可以做任何其他“图灵完备”系统所能做的事情。因此,给定任何相当完整的编程语言环境,您应该能够使用其他程序环境来模拟它。

这方面有很多例子。 Jpython在Java JVM中运行模拟C python。我的两个个人收藏夹是which runs original zX spectrum games in your browserKnuth MIX assembeler machine,两者都是纯粹的javascript。