В Xamarin, опережающие время (АОТ) компилятор и обычный компилятор

Я понимаю, что компилятор Xamarin Ahead-of-Time (AOT) компилирует Xamarin.приложения iOS непосредственно на собственный код сборки ARM (Как работает Xamarin).

чего я не понимаю, однако, почему его нужно называть "досрочно", а не просто обычным компилятором. Есть ли различие между компилятором AOT Xamarin и традиционным компилятором или это просто маркетинговый термин?

1 ответов


Как AOT сравнивается с традиционным JIT-компилятором

компиляция Ahead-of-Time (AOT) в отличие от Just-In-Time compilation (JIT).

короче говоря, компиляторы .NET не генерируют код сборки для конкретной платформы, они генерируют байт-код .NET, инструкции, которые интерпретируются виртуальной машиной .NET. Этот байт-код является портативным, любой .NET VM может запустить его, будь то Windows Phone, Mono на Linux или на основе JavaScript реализация. К сожалению, поскольку код должен интерпретироваться виртуальной машиной, он медленнее, чем собственный код, который может быть выполнен самим процессором. Вот где JIT и AOT приходят.

при запуске приложения .NET компилятор JIT анализирует байт-код, определяет области, которые могут быть ускорены путем перевода в собственный код, и компилирует их. Во время выполнения, компилятор может определить горячие пути для компиляции.

к сожалению для .NET, Java и любая платформа, которая выиграет от JIT, динамическая генерация кода запрещена условиями обслуживания App Store. Поскольку Xamarin не может выполнять JIT на устройстве и Они знают, что они отправляют на устройства ARM, они могут запустить компилятор JIT-типа раньше времени (AOT) и связать его в двоичный файл.

Как AOT сравнивается с компилятором машинного кода

Как упоминалось выше, AOT переводит часть интерпретируемого байт-кода на машину код. Это не устраняет необходимость в интерпретаторе байт-кода виртуальной машины. Виртуальная машина будет работать так же, как если бы, но иногда видеть инструкцию, которая говорит "выполнить этот кусок машинного кода".

это просто маркетинговый термин?

нет. Сообщение, которое Xamarin передавал в этом абзаце, заключалось в том, что их код работает быстрее, чем простой язык на основе байтового кода. Для iOS и Android они могут выполнять собственный код на hot-коде пути повышения производительности. Термины AOT и JIT являются техническими подробностями о том, как они это делают.