Моно компилирует C # и на нативный? - PullRequest
11 голосов
/ 24 февраля 2010

Я новичок в Mono и только недавно начал. Моно-программы скомпилированы из C # в собственный код, чтобы иметь возможность работать на нескольких ОС?

а также, я видел скринкаст на MonoTouch, который говорит мне, что monotouch (особенно) компилирует все до Native для C #, чтобы иметь возможность работать на Iphone.

Я совсем запутался.

Ответы [ 6 ]

21 голосов
/ 24 февраля 2010

Mono по умолчанию компилируется в промежуточный байт-код, который затем запускается на виртуальной машине. Этот байт-код переносим, ​​но не является машинным кодом.

Mono имеет компилятор AOT , который будет генерировать собственные изображения, когда байт-код не является опцией.

7 голосов
/ 04 февраля 2012

Проверьте 'mkbundle', чтобы скомпилировать моно среду выполнения в ваш исполняемый файл. например. mkbundle --static --deps Hello.exe -o привет

7 голосов
/ 24 февраля 2010

Практически все платформы .NET, как Microsoft (включая настольные системы, компактные платформы и микросхемы), так и сторонние (например, моно) компилируют все сначала в общий промежуточный язык, который переносим, ​​а затем компилируют точно во время выполнения в нативный код. Некоторые не имеют JIT и просто интерпретируют IL напрямую.

Родной код явно непереносим.

Это помогает?

5 голосов
/ 24 февраля 2010

Mono сам скомпилируется в байт-код .NET CLR, что позволяет выполнять его на любой платформе с поддержкой .NET или Mono. Эти исполняемые файлы не состоят из машинных инструкций; они как раз вовремя компилируются в собственный код во время выполнения в системе, выполняющей его. Короче говоря, двоичные файлы Mono являются портативными.

Начиная с CocoaTouch, компиляция его в нативный код была необходима, потому что Apple не разрешит такие системы, как Mono, на iPhone. Это исключительный случай; нормальные монофонические программы этого не делают.

2 голосов
/ 24 февраля 2010

Да, вы можете писать на c # или других языках dotnet, таких как VB.Net, при компиляции с Mono. Mono компилирует ваш код в IL (промежуточный язык), который вы развертываете, а затем получает JIT (как раз вовремя), скомпилированный при запуске.

Mono может работать на нескольких платформах, таких как Windows, Mac OSX, Linux и даже iPhone. Хотя с реализацией для iPhone, я полагаю, что ваш код фактически компилируется в Objective C, который затем компилируется в собственный код, а не в IL.

1 голос
/ 24 февраля 2010

Ядром проекта Mono является JITter для MSIL (промежуточный язык, создаваемый компиляторами .NET).

Конечно, компилятор Just-In-Time все еще является компилятором, и вы можете просто взять собственный код, созданный процессом JIT, и запустить его позже. В зависимости от JITter, он может явно предоставлять средства для этого.

...