2009-09-21 39 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從被管理的二進制文件中刪除。只留下元數據。