2014-09-25 4 views
-1

Как программист на Java, концепция CLI кажется мне непонятной. При разработке приложения C# подразумевается, что один и тот же бинарный исполняемый файл должен быть скомпилирован один раз и затем может быть выполнен в Windows, если .NET Framework установлен и на Linux с установленным Mono? Если да, то как это работает?Как работает общая языковая инфраструктура и какова ее цель?

+0

Пара ссылок, получаемых с помощью googling .net CLR http://en.wikipedia.org/wiki/Common_Language_Runtime http://msdn.microsoft.com/en-us/library/8bs2ecf4(v=vs.110). aspx –

+1

Наибольшее различие между Java (платформой) и CLI заключается в том, что JVM ориентирован в первую очередь на Java, но C# является всего лишь одним из языков .Net. – MSalters

ответ

2

Да, вы правы.

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

CLI, на который вы ссылаетесь, является промежуточным языком, на котором ваш код, написанный на языке C# или другом .net, будет скомпилирован соответствующим компилятором. Кроме того, язык CLR «понимает» и может скомпилировать его с помощью собственного кода.

Кроме того, сборка не является бинарным исполняемым файлом. Он может иметь две формы: исполняемый файл или dll. Любой из них представляет собой сбор файлов, которые определяют типы, которые применяются в вашем приложении и т. Д.

Так как в нижней строке CLI имеется только одна цель.

обновление

Так сборка вы уже примерно эквивалентно Байткод в Java, который получает JIT-скомпилированного во время выполнения и является независимым от платформы?

Как указано в wikipedia:

Common Intermediate Language (CIL, выраженный либо "СИЛ" или "Киль") (прежнее название Microsoft Intermediate Language или MSIL) является lowest- который определяется стандартом языка Language Infrastructure (CLI) и используется платформой .NET Framework и Mono. Языки, ориентированные на CLI-совместимую среду выполнения , компилируются в CIL, который собран в объектный код , который имеет формат в стиле байт-кода. CIL представляет собой объектно-ориентированную сборку и полностью основан на стеке. Его байт-код переводится в собственный код или - чаще всего - выполняется виртуальной машиной.

Замечательное подробное описание вышеизложенного и многое другое, связанное с ними, является первой главой (модель исполнения CLR) CLR via C#, by Jeffrey Richter.

+0

Итак, сборка, о которой вы упоминаете, примерно эквивалентна Bytecode в java, которая скомпилирована JIT во время выполнения и не зависит от платформы? –

+0

@AndreasHartmann, пожалуйста, посмотрите мое обновление. благодаря – Christos

1

CLI есть .Net аналог JVM. Mono не поддерживает все библиотеки, которые есть в Windows.

+0

Это больше подходит для комментариев. – Krumia

+0

CLR будет эквивалентом JVM. – Joey

+0

Это справедливый ответ, учитывая сравнение Java в вопросе. – MSalters

Смежные вопросы