2009-09-21 3 views
16

MonoTouch 같은 것들을 구현하는 일반적인 접근 방식은 무엇입니까? 나는 사람들이 Java와 같은 플랫폼을 만들어서 C/Objective-C와 같은 것으로 번역 할 때 처음 보는 예제가 아니기 때문에 정말 놀랍습니다. 가비지 컬렉터와 같은 것들이 어떻게 번역되고 있는지 나는 상상할 수 없다.MonoTouch의 작동 방식은 무엇입니까?

미리 감사드립니다.

수정 : 한 언어를 다른 언어로 번역 할 수있는 이론적 인 가능성을 알고 있습니다. 제 질문은 좀 더 기술적 인 부분입니다 : 그들은 ObjC에서 완전한 런타임을 구현하고 그것을 번들합니까? (나는 그것을 의심 ...) 아니면 그들은 단지 ObjC/바이너리/등으로 C# 코드를 번역?

답변

8

Monotouch는 Ahead-Of-Time 컴파일을 사용하여 하나의 정적으로 컴파일 된 파일을 생성하므로 iPhone에 .Net 런타임을 구현하지 않습니다. Monotouch는 C#에 노출 된 iPhone 라이브러리에 바인딩을 사용합니다. Objective-C 로의 번역은 없습니다.

기본적으로 기본 iPhone OS의 라이브러리 호출을 노출하는 동안 C# 및 관련 도구 체인에서의 작업에 익숙합니다.

Miguel di Icaza는 Stackoverflow podcast에서이 사실을 설명했습니다. link

+1

* "iPhone에 .Net 런타임을 구현하지 않습니다"* -이 문장은 ** 잘못되었습니다 **, 또는 오해의 소지가 있습니다. 런타임은 실제로 런타임이 참조하는 "정적으로 컴파일 된 파일"에 포함되어 있습니다. – cdhowie

0

Monotouch는 아마도 iPod의 Mono 포트 일 것입니다.

모노 자체는 다양한 * nix 환경에서 .NET 런타임 (및 일부 개발 도구)의 오픈 소스 구현입니다.

Miguel de Icaza는 .NET의 중요성을 일찌감치 깨닫고 개방형 플랫폼에 이식하는 데 집중했습니다. 부수적으로 그는 MONO가 .NET과 모노 간의 ineteroparability를 부여하면서 MicroSoft 자체로부터 많은 지원을 받았다.

그래서 첫 번째 대답은 잘 조직되고 열심히 일하는 천재가되어야한다는 것입니다.

두 번째 대답은 Comp Sciency입니다. "Turing Complete"는 시스템을 프로그래밍 가능한 컴퓨터로 간주해야하는 최소한의 기능 집합입니다. 실제로는 매우 작은 세트 - 빼기, 비교, 분기 및 읽기 및 저장.

"튜링 완료"시스템은 다른 "튜링 완료"시스템으로 수행 할 수있는 모든 작업을 수행 할 수 있다는 이론입니다. 합리적으로 완전한 프로그래밍 언어 환경을 제공한다면 다른 프로그램 환경을 사용하여 에뮬레이트 할 수 있어야합니다.

여기에는 여러 가지 예가 있습니다. Jpython은 Java JVM에서 에뮬레이트 C 파이썬을 실행합니다. 내 두 개인 즐겨 찾기 which runs original zX spectrum games in your browserKnuth MIX assembeler machine 둘 다 순수한 자바 스크립트입니다.

+0

답변 해 주셔서 감사합니다. 그러나, 나는 튜링 완료와 다른 comp-science-related 물건을 알고있다. 그러나 나의 질문은 더 기술적이다 : 그들이 그것을 어떻게합니까? 그들은 단지 런타임을 구현하고 어떻게 든 그것을 애플 리케이션에 번들합니까? 또는 무엇을? – Anton

+0

이들은 표준으로 시작합니다.이 표준은 .NET 환경에 있어야하는 구성 요소를 지정하고 표준을 준수하도록 구성 요소를 구현합니다. – Eric

+0

그 점을 이해합니다. 그러나 다시 말해, MonoTouch 앱이 iPhone으로 실행되는 방법은 무엇입니까? 거기에 런타임이 있습니까? 아니면 그들은 어떻게 든 이것을 Obj-C/Arm Asm/어떤 것으로 번역합니까? – Anton

39

MonoTouch는 번역자가 아닙니다. iPhone에서 실행되는 Mono 런타임 일 뿐이며 iPhone의 제한 사항과 호환되도록 만드는 약간의 속임수가 있습니다.

일반적인 "런타임"은 JIT뿐만 아니라 GC, 반사, I/O 레이어, 스레딩, 예외 등을 처리합니다. 클래스 라이브러리도 있습니다. 앱이 iPhone에서 실행 되려면 대부분이 앱에 포함되어야합니다. 그것을 슬리밍하는 것은 몇 가지 어려움을 나타냅니다. 또한 iPhone은 JIT 런타임 코드 생성을 방지하고 서명 된 코드 만 실행하며 동적 라이브러리는 허용하지 않습니다.

MonoTouch의 기능은 IL 링커를 사용하여 코드에서 사용하는 클래스 라이브러리의 일부만을 단일 IL 바이너리로 결합하는 것입니다. 그런 다음 AOT 컴파일을 사용하여 JIT가 일반적으로 IL에서 생성하는 모든 원시 코드를 미리 생성 한 다음이를 JIT없는 런타임과 함께 서명 할 수있는 단일 원시 바이너리로 연결합니다. 마지막으로 IL은 관리되는 바이너리에서 제거됩니다. 메타 데이터 만 남겨 둡니다.