2009-09-21 38 views
16

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

在此先感谢。

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

回答

8

MonoTouch的使用名列前茅的时间编译生成一个单一的静态编译的文件 - 所以它没有实现iPhone上的.NET运行库。 Monotouch使用绑定到暴露给C#的iPhone库。 Objective-C没有翻译。

基本上,它可以让你在C#和相关的工具链工作时暴露下面的iPhone OS的库调用的熟悉。

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

+1

*“因此它不会在iPhone上实现.Net运行时”* - 此声明**错误**,或者至少具有误导性。运行时存在,实际上运行时包含在您引用的“静态编译的文件”中。 – cdhowie 2013-04-09 16:22:47

0

Monotouch大概是iPod的Mono端口。

单本身就是各种* nix的环境.NET运行库(和一些开发工具)的开源实现。

这是由米格尔奥德伊卡萨率领一个庞大的劳动力谁实现.NET的早期的重要性,并着手将它移植到开放式平台。显然,他接受了MicroSoft的大力支持,因为MONO赋予了本地.NET和mono之间的不可分离性。

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

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

该理论认为,任何“图灵完备”系统可以完成任何其它的“图灵完备”的系统可以做到。因此,鉴于任何合理完整的编程语言环境,您应该可以使用其他程序环境来模拟它。

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

+0

谢谢你的回答!但是,我意识到图灵完成和其他与科学相关的东西,但我的问题是一个更技术性的问题:他们如何做到这一点?他们只是实现一个运行时,并以某种方式将其捆绑到应用程序中?或者是什么? – Anton 2009-09-21 08:49:54

+0

它们从标准开始,它指定了什么组件需要在.NET环境中呈现,然后他们实现了这些组件,以使它们符合标准。 – Eric 2009-09-21 08:56:35

+0

我明白这一点。但是,又一次,用.NET编写的MonoTouch应用程序如何在iPhone上运行?他们有一个运行时间?或者他们只是以某种方式将其转化为Obj-C/Arm Asm /无论如何? – Anton 2009-09-21 11:08:12

39

MonoTouch不是翻译器。它只是在iPhone上运行的Mono运行时,具有一些花哨的诡计,使其与iPhone的限制兼容。

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

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