Как программист на Java, концепция CLI кажется мне непонятной. При разработке приложения C# подразумевается, что один и тот же бинарный исполняемый файл должен быть скомпилирован один раз и затем может быть выполнен в Windows, если .NET Framework установлен и на Linux с установленным Mono? Если да, то как это работает?Как работает общая языковая инфраструктура и какова ее цель?
ответ
Да, вы правы.
Когда мы скомпилируем наш код, будет создана сборка. Эта сборка может быть загружена позже в 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.
Итак, сборка, о которой вы упоминаете, примерно эквивалентна Bytecode в java, которая скомпилирована JIT во время выполнения и не зависит от платформы? –
@AndreasHartmann, пожалуйста, посмотрите мое обновление. благодаря – Christos
- 1. Какова емкость StringBuffer? И какова его цель и ее влияние?
- 2. Какова цель EnableEventValidation и как она работает?
- 3. Какова цель урожайности и как она работает?
- 4. Какова цель #pragma aux и как ее использовать?
- 5. Какова цель TabPage.Hide()
- 6. Цель Цель Общая Печать
- 7. Общая инфраструктура компилятора: как работать с ICustomAttribute
- 8. Какова цель класса реестра?
- 9. Что такое кодовая страница и какова ее цель?
- 10. Какова цель "?"
- 11. Какова общая цель использования хеш-таблиц в качестве коллекции?
- 12. Какова общая цель do/end блоков в Ruby
- 13. Какова цель имени?
- 14. Какова цель и функция int.class
- 15. Какова цель ObjectMapper?
- 16. Какова цель API IBMBluemix.getLogger()?
- 17. Какова цель инструкции LEA?
- 18. Какова цель java.awt.Color.blue и java.awt.Color.BLUE
- 19. Какова цель ArrayController и ArrayProxy?
- 20. Какова цель solid_i18n_patterns?
- 21. Как работает этот цикл и какова его цель?
- 22. Какова цель 'var'?
- 23. Какова общая концепция XSS?
- 24. Какова цель HashMap.Entry.recordAccess и recordRemoval?
- 25. Какова цель LVCOLUMN.cchTextMax и LVITEM.cchTextMax?
- 26. Какова цель% d и% s
- 27. Какова цель __str__ и __repr__?
- 28. DiscoverMeteor: Какова цель объединения?
- 29. Какова цель сервера интеграции?
- 30. Какова цель функции активации WCF?
Пара ссылок, получаемых с помощью googling .net CLR http://en.wikipedia.org/wiki/Common_Language_Runtime http://msdn.microsoft.com/en-us/library/8bs2ecf4(v=vs.110). aspx –
Наибольшее различие между Java (платформой) и CLI заключается в том, что JVM ориентирован в первую очередь на Java, но C# является всего лишь одним из языков .Net. – MSalters