MonoЧасть 1. Что такое .Net Framework?

Некоторое время назад мне нужно было составить общее описание технологий Mono/.Net. Теперь, чтобы не пропадал труд, решил выложить его на open-life. Это не оригинальные материалы, а «компиляция», составленная из текстов, которые были найдены в internet. Весь материал разделил на несколько частей, сегодня первая, про .Net, т.к. зная, что такое дотнет, проще понять, что такое Mono. Да и про Rotor, наверняка, знают не все (я не знал).

.Net Framework

Net Framework — это платформа для разработки и исполнения приложений, которая создавалась с целью упрощения и ускорения написания программ. Одно из ключевых преимуществ данной технологии — возможность исполнения программ на любой ОС, для которой реализована .Net CLR.

Независимость .Net от ОС стала возможной благодаря тому, что .Net-программы компилируются в специальную форму, известную как универсальный промежуточный язык (CIL, common intermediate language), не привязанный к конкретному процессору. Когда программа запускается первый раз, .Net конвертирует CIL-код в оптимизированный машинный код для процессора, на котором он работает, и это объясняет, как один и тот же исполняемый файл можно поместить на какую угодно машину и оптимизировать для любой ситуации. Иными словами, .Net, так же как и Java, генерирует байт-код (IL), предназначенный для исполнения виртуальной машиной.

Наиболее распространенный .NET-язык называется С#, он был разработан для максимально удобного использования всех возможностей платформы. Но для .Net можно писать и на нескольких других языках программирования — Visual Basic, C++, Cobol, Eiffel, Perl, PHP, Python, Ruby, Tcl. Все они компилируются в тот же самый CIL-код, и полностью совместимы — над одним проектом может работать команда, где каждый программист пишет на своем любимом языке.

Первая версия Microsoft .NET Framework появилась в начале 2002 г., но её разработка велась с конца 1990-х годов под именем Next Generation Windows Services (NGWS). В октябре 2000 года корпорации Microsoft представила для сертификации в ЕСМА (Европейская Ассоциация Производителей Компьютеров) язык программирования С# (Стандарт ЕСМА-334) и команды универсального промежуточного языка CIL (Стандарт ЕСМА-335). А в 2003 году эти спецификации были приняты и в ISO (Международной организацией по стандартизации).

Очень часто, говоря об .Net, упоминается еще и проект Rotor. Rotor — усеченный вариант .Net CLR, который был адаптирован Microsoft для FreeBSD, Windows и Mac OS X. Исходные тексты Rotor распространяются на условиях Shared Source, которые явно запрещают его использование в коммерческих целях.

Основные компоненты платформы .Net — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов (Framework Class Library).

Common Language Runtime (CLR) — общеязыковая исполняющая среда, которая расположена поверх операционной системы и предоставляет виртуальную машину для исполнения байт-кода приложений — языка Common Intermediate Language (CIL или просто IL). Команды CIL компилируются в машинный код соответствующего типа процессора по запросу (JIT, just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. ЛТ-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код. Но существует возможность скомпилировать сборку и в родной (native) код для выбранной платформы.

В .NET включены сборки библиотеки классов .NET Framework Class library (FCL), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы «родственных» типов собраны в отдельные пространства имен. Все .Net-приложения используют единую библиотеку классов FCL. Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.

Продолжение тут)
  • +4
  • fog
  • 12 марта 2010, 22:23

Комментарии (11)

Еще к языкам можно добавить F# — функциональный язык от Microsoft. Его официальный выход запланирован вместе с C#4.0. Кстати некоторые добавки в C# (например кортежи) обязаны именно F#.

Ну и Nemerle — мультипарадигменный язык, разработанный в польском университете. Особенно сильный в задачах метапрограммирования.

Мне довелось пописать на обоих — очень интересные и не обычные языки. Про метапрограммирование в Nemerle я вообще молчу. Мозг поломать придется, но если имели опыт программирования на Haskell'е или чем-то подобном, то будет полегче:)
Я старался перечислить ЯП, которые достаточно широко известны и относительно независимы.
  • avatar
  • LRN
  • 13 марта 2010, 12:26
  • #
  • 0
Я думаю, всё очень чётко изложено вот здесь.
Во-первых, за прошедшие почти 10 лет с момента написания той статьи произошло достаточное количество событий. Например вышел .Net Framework 1.0 и последующие :)
Ну а во-вторых и так ясно, что все придумано до нас. Наша же задача найти это все и перевести на понятный далекому человеку язык.
  • avatar
  • LRN
  • 13 марта 2010, 12:50
  • #
  • 1
По теме: чем .Net отличается от LLVM?
Мне лично не приходилось иметь дело с LLVM, поэтому с удовольствием почитал бы об его особенностях. Тогда может и смог бы сформулировать отличия.
А из прочитанного об LLVM я правильно понял, что если не использовать внешних библиотек, а все собирать из исходников, то программа будет работать на всех поддерживаемых платформах?
Да. Насколько я понял, основная идея LLVM — создание виртуальной машины (back-end), выполняющей откомпилированную с помощью специального компилятора (front-end) в байт-код программу. Процессорозависимые оптимизации и прочая лабуда выполняются на месте (перед запуском или во время — не знаю, в детали не углубялся). Бэк-энды есть для разных платформ (точно собирается под виндой, линухом и макосью, про остальные не знаю), фронт-эндов пока мало, я запомнил только два: один — основанный на gcc (не знаю, какие из языков, поддерживаемых gcc, он поддерживает, наверное все?), второй — отдельный, для C/C++/ObjC — clang.
Собственно, о самой LLVM я знаю мало, мне интересовал только clang (потому что из него можно выдирать модули и использовать в разных целях).
LLVM более низкоуровневый (в плане байт кода) и куда более кроссплатформенный:)
Это немного разные вещи. LLVM — это из области компиляторов. Архитектура похожа на gcc — бэкэнды, фронтенты и т.д.
.NET же позволяет взаимодействовать программам на разных ЯП, например. Т.е. в некоторой степени стирается разница между языками.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.