Что такое дот нет
.Net developer, data scientist
Что такое .Net — вопрос №1 на собеседование C# / .NET
Текст к видео «Что такое .Net» на канале YouTube
Для определения чем является .Net изначально необходимо определить несколько понятий. Среди них среда выполнения (execution / runtime environment) и программное обеспечение (software). Средой выполнения можно назвать совокупность ресурсов необходимых для выполнения и в рамках которых выполняется программа. Например, к таким ресурсам можно отнести операционную систему, переменные окружения, доступ к определенным библиотекам необходимым для выполнения программы. Программное обеспечение это собственно программа, которую мы планируем запускать в среде выполнения. Пользователь взаимодействует с программой, программа взаимодействует с операционной системой, операционная система взаимодействует с аппаратными средствами компьютера. Программа может быть написана на интерпретируемом языке программирования либо на компилируемом языке программирования. В случае использования интерпретируемого языка программирования (например, PHP) программа взаимодействует со средой выполнения непосредственно в интерпретаторе языка. С другой стороны, при использовании компилируемого языка (например, C#) взаимодействие со средой выполнения реализовано посредством взаимодействия промежуточного кода, скомпилированного из исходного кода, со средой выполнения через подключаемые библиотеки. Так как наша тема посвящена .Net дальнейшее изложение материала будет основано на втором варианте, то есть на примерах с компилируемыми языками программирования.
В данный момент мы можем вернуться к вопросу чем является .Net. После изложенного материала легко ответить на данный вопрос сказав, что платформа .Net является компьютерной платформой или другими словами это среда выполнения. Естественно, данный ответ является правильным, но не полным. Для полноты ответа было бы неплохо указать, что предшествовало платформе .Net, какие преимущества платформа .Net имеет по сравнение с предшественником и из чего состоит платформа .Net.
Начнем с ответа на вопрос что являлось предшественником платформы .Net. До момента выпуска платформы .Net в 2002 году программисты приложений под операционную систему Windows довольно часто использовали программную модель COM (это аббревиатура на английском языке: Component Object Model). Очень большое число приложение было написано с использованием этой программной модели. Одним из преимуществ данной модели была возможность создания библиотек кода, которые могли быть использованы с разными языками программирования. Например, библиотека COM в языке C++ могла быть использована программистом Visual Basic. Недостатки программной модели COM послужили толчком для создания новой платформы, которой стала платформа .Net.
Таким образом мы плавно перешли к вопросу преимуществ платформы .Net по сравнению с программной моделью COM. Таких преимуществ несколько. На собеседовании будет достаточно если вы назовите 2-3 преимущества. Например:
- Упрощенная модель установки программного обеспечения – в отличии от модели COM библиотеки .Net не регистрируются в системном реестре. Также несколько версий одной библиотеки .Net могут быть установлены на один компьютер. Более подробно об этом можно будет узнать, ознакомившись с ответом на вопрос, что такое Глобальный Кэш Сборок или на языке оригинала — Global Assembly Cache.
- Совместимость с существующим кодом – существующее программное обеспечение COM может взаимодействовать с новым программным обеспечением .Net. Это взаимодействие также имеет и обратный характер – программное обеспечение .Net может работать с библиотеками COM.
- Поддержка большого числа языков программирования – приложения .Net могут быть написаны, используя различные языки программирования (C#, Visual Basic, F#).
Последним в списке, но не последним по значению, является понимание того, из чего состоит платформа .Net. Технической основой .Net являются 3 ключевых элемента:
- общеязыковая исполняющая среда (Common Language Runtime);
- общая система типов (Common Type System);
- общая спецификация языков (Common Language Specification);
В дополнение к вышеуказанным 3 элементом можно указать библиотеки базовых классов (Base Class Libraries).
Мы остановимся на каждом из этих ключевых элементов, но начнем с последнего – с библиотек базовых классов. Данные библиотеки доступны для каждого языка программирования .Net. Они содержат в себе функционал, без которых программирование современных приложений не представляется возможным. Ниже несколько примеров:
- доступ к базам данных;
- поточность;
- доступ к файловой системе;
- доступ к элементам графического интерфейса пользователя;
- безопасность приложений;
- доступ к различным программным интерфейсам приложения;
Для определения чем является общеязыковая исполняющая среда (Common Language Runtime) необходимо понимание что представляют из себя понятия IL (Intermediate Language), MSIL (Microsoft Intermediate Language) и CIL (Common Intermediate Language). По большому счету все три вышеперечисленные понятия означают одно и то же – промежуточный язык, который компилируется из исходных языков .Net (C#, Visual Basic). Если сравнить промежуточный язык скомпилированный из 2 исходных программ, написанных аналогично на C# и Visual Basic, то он будет такой же для 2 вариантов. Исходя из это следует важный вывод – независимо от того, какой из языков .Net будет использован, компилятор создаст идентичный промежуточный код. Возвращаясь к вопросу, чем является общеязыковая исполняющая среда – это среда, в которой выполняется промежуточный код. Промежуточный код хранится в библиотеках .dll или .exe. Кроме промежуточного кода в данных библиотеках содержится детальное описание использованных типов – так называемые мета данные. В среде .Net такие библиотеки называются сборкой (assembly).
Создавая приложения, вы с большой долей вероятности будет использовать уже созданные типы данных, а также создавать свои собственные типы. Когда речь идет о типах данных, то скорей всего имеется в виду один из элементов следующего списка: класс, интерфейс, структура, перечисление (enumeration), делегат. Общая система типов (Common Type System) это формальная спецификация, определяющая как типы данных должны быть определены, чтобы их можно было использовать в общеязыковой исполняющей среде в дальнейшем.
Ниже пара слов о каждом типе данных:
- класс – основа объектно-ориентированного программирования; Класс может содержать различные члены: поля, свойства, конструкторы, события, методы. Класс имеет следующее характеристики: запечатан ли класс, является ли класс абстрактным или конкретным, реализует ли класс какие-либо интерфейсы, какая у класса видимость.
- интерфейс – это список функционала, который должен быть реализованы классом
- структура – не вдаваясь в подробности реализации данного типа данных, можно просто сказать, что это «легковесная» версия класса. Наиболее частое применение структур — это моделирование математических, физических или геометрических данных.
- перечисление – это удобный способ создания пар «ключ-значение», которые легко использовать в различных частях нашего когда.
- делегат – очень сильно упрощая делегатом можно назвать указатель на определённую функцию / метод в памяти, однако по сравнению с другими языками программирования в .Net делегат не является просто указателем на определенное место в памяти, а реализует в себе дополнительную полезную функциональность.
Как уже было сказано ранее существует несколько .Net языков программирования, которые для выполнения одного и того же действия используют разный стиль записи (синтаксис). Это не является проблемой, так как код так или иначе независимо от исходного языка программирования будет скомпилирован до идентичного промежуточного языка (intermediate language). Однако не все языки .Net имеют одинаковые возможности и часть языков могут (или не могут) поддерживать определенную функциональность. То есть можно сказать, что с точки зрения определенного функционала языки программирования .Net не совместимы. В этом случае возникает понятие общая спецификация языков (Common Language Specification). Общая спецификация языков определяет минимальный набор функционала, который должен быть поддерживаться каждым .Net компилятором, чтобы скомпилированный код можно было выполнить в общеязыковой исполняющей среде в дальнейшем. То есть общая спецификация языков это набор правил, которые относятся к элементам, которые выставлены «наружу» и могут быть использованы другими языками .Net (например, публичные методы классов). Общая спецификация языков не ограничивает использование функционала конкретного языка во внутренней имплементации (например, приватные методы).
В повседневной жизни программиста вам вряд ли придется задумываться над проблематикой общей системы типов и общей спецификации языков – это узкая сфера интересов программистов, которые программируют компиляторы. С другой стороны понимание, что происходит с кодом, написанным, например, в C#, во время компиляции и зачем это необходимо – полезно для вас как для профессионала. Дополнительно в ходе разговора о том, чем является .Net может возникнуть дополнительный вопрос чем является управляемый код и чем он отличается от неуправляемого кода. Отвечая на данный вопрос, достаточно будет дать 2 определения: для управляемого и неуправляемого кода. Итак, управляемый код – это код, который можно запустить на платформе .Net (например, код C#); библиотеки, которые содержат управляемый код, называются сборкой (assembly). В отличие от управляемого кода, неуправляемый код – это код, который не может быть непосредственно запущен на платформе .Net (например, неуправляемое приложение в C/C++).
.NET для начинающих. Что такое среда .NET и как она работает?
Вопрос, освещённый в данной статье, будет полезен для понимания всей структуры программирования на .net в целом, независимо от языка. Будь то C#, Visual Basiс или J#. Статья ориентирована на начинающих программистов, только осваивающих программирование на .NET.
Что такое .NET?
.Net (читается как «дот нет») – это кросплатформенная среда выполнения приложений. Проще говоря – это то, что позволяет запускаться нашим приложениям в системе Microsoft Windows. Кросплатформенная – означает, что созданное приложение будет работать на всех процессорах и на всех операционных системах семейства Windows (за исключением самых ранних).
Более того! Те, кто уже имел дело с программированием, например, на С++, знает что под процессоры на разной платформе приходится «пересобирать» программы. Например программа, скомпилированная для x64 не будет корректно работать на x86, а программа, собранная для x86 не сможет полностью показать свой потенциал работы на x64 системе.
Тут нам на помощь приходит .Net framework.
.Net Framework – это набор уже скомпилированных библиотек, откуда берутся методы и функции для запуска и разработки приложений. В разработке, на деле, нам придётся просто вызвать уже готовую функцию для того чтобы она заработала. Большинство методов и функций, необходимых программисту, уже скомпилировано и лежит в .net framework внутри системы. И каждая библиотека с функциями лежит в двух вариантах – для x86 и для x64, так что о «пересборке» программы под разные платформы можно забыть! Созданная вами программа будет показывать свой полный потенциал на любой аппаратной («железе») и программной (операционной системе) платформе.
Как это всё работает?
Вспомним, что такое процесс компиляции – это перевод вашего кода, понятного человеку, в бинарный код, понятный компьютеру.
В программировании на .net компиляция и запуск приложений происходит следующим образом:
Код из любого языка преобразовывается в код, написанный на общем языке (Common intermediate language или CIL). Этот язык является языком низшего уровня, похожего по синтаксису на язык ассемблер.
После, этот код передаётся так называемой исполняющей среде (Common language runtime или CLR), которая берёт функции и методы из .net Framework
После этого конечный результат передаётся на процессор и выполняется программа.
CLR – это некая «виртуальная машина», которая собственно и управляет нашими приложениями, написанными для .net.
В ней есть такая занятная штука, как сборщик мусора (Garbage collector). Он подчищает всё ненужное, оставленное программой в оперативной памяти во время выполнения самой программы. То есть, если мы использовали, например, переменную всего один раз в программе, то после обращения к этой переменной, если она больше нигде не задействована – автоматический сборщик мусора её удаляет из оперативной памяти. Это абсолютно безопасно, а главное – это даёт огромный прирост в производительности масштабных и ресурсоёмких приложений. Это очень удобно, ведь в других языках, например в С++ чтобы достичь максимальной скорости работы приложения необходимо вручную удалять обьекты, а в этом случае нужно просчитать когда они не будут востребованы, чтобы их можно было безопасно удалить, чтобы не вызвать ошибку или крах программы.
Также такая схема сборки приложений очень удобна и тем, что происходит «компиляция на лету». То есть не компилируя программу, среда разработки может указать Вам на Ваши ошибки, а это заметно ускоряет процесс разработки.
Как работает .NET и зачем он нужен
Чтобы стать хорошим программистом, нужно понимать, как работают инструменты и технологии. Рассказываем, что такое .NET.
.NET — это фреймворк от Microsoft, который позволяет использовать одни и те же пространства имён, библиотеки и API для разных языков. Чаще всего это четыре языка из семейства .NET:
- C#;
- Visual Basic;
- Visual C++;
- F#.
Когда вы создаёте программу на одном из этих языков, в самом начале вы подключаете пространство имён System. Если бы не .NET, то для каждого из этих языков пришлось бы создавать отдельный System. То есть нарушился бы один из главных принципов программирования — DRY (англ. Don’t repeat yourself — не повторяйся).
На момент написания статьи наиболее распространён .NET Framework, меньшей популярностью пользуется .NET Core. Возможно, когда вы будете читать эту статью, уже выйдет .NET 5, который объединит в себе оба фреймворка. Поэтому в статье используется название .NET.
Для чего нужен .NET
Обычным пользователям может показаться, что это какие-то программистские штуки, которые никак не влияют на их жизнь. На самом деле в этом есть смысл и для них.
Если бы не .NET, пользователям пришлось бы устанавливать среду исполнения для программ на каждом языке. То есть чтобы запустить приложение на Visual Basic, нужно скачать среду выполнения для Visual Basic. Если же программа написана на C#, то придётся скачивать среду и для неё.
Это очень быстро забьёт всё место на компьютере немного отличающимися копиями одних и тех же библиотек.
Для программистов это тоже важно, потому что даёт возможность развивать одну среду, которая используется сразу для четырёх языков. Иначе обычным разработчикам приходилось бы ждать, пока выйдет новая версия библиотек для их языка. Менее популярные языки, вроде F#, получали бы обновление намного позже C#.
Кроме основных языков есть также и другие, которые поддерживаются .NET. Среди них COBOL, Fortran, Haskell и даже Java — вы можете ознакомиться с полным списком.
На этих языках часто написаны старые (legacy) проекты, которые сложно перевести на новую технологию. .NET позволяет переписать часть программы на COBOL под стандарты .NET, а потом просто писать новые части на более современном языке, вроде Visual Basic.
Как это работает
Принцип работы достаточно простой, хотя выглядит запутанным. В основном — из-за схожих названий: CLR, CLI и CIL. Для начала посмотрите на это изображение:
Что такое .Net и для чего нужна эта платформа
Платформа .NET Framework – это специальная технология, предназначенная для выполнения различных веб-служб и создания приложений на ОС Windows. Так нам говорит официальный источник Microsoft.
Что все это означает для программиста и обычного пользователя – разберемся в сегодняшней статье.
Что такое .NET?
Первый выпуск .Net Framework состоялся еще в далеком 2002 году. Тогда платформа была разработана как альтернатива Java. Основное отличие .Net заключалось в том, что платформа официально рассчитывалась на работу с операционными системами семейства Microsoft Windows.
Прошло уже целых 20 лет, но .Net до сих пор пользуется популярностью несмотря на то, что есть платформы нового поколения, например .Net Core. Сегодня .Net позволяет использовать одни и те же пространства имен, библиотеки и API для разных языков:
- C#;
- Visual Basic;
- Visual C++;
- F#.
Когда программист создает программу на одном из этих языков, то в первую очередь ему необходимо подключить пространство имен System. Это позволяет организовать код программы в логические блоки, объединить и отделить от остального кода некоторую функциональность. Если бы не было .Net, то приходилось бы создавать отдельный System для каждого языка программирования, а это бы уже нарушало один из главных принципов программирования: «Не повторяйся».
Зачем нужен .NET?
На первый взгляд может показаться, что .Net – технология, затрагивающая только программистов, но на деле это не так. Она также влияет и на удобство пользователей.
Предположим, что нам нужно установить программу, которая была написана на языке программирования C#. Для нее также потребуется установить и среду для C#. Если нам нужна программа на другом языке, то для нее нужно установить уже другую среду, и так со всеми языками.
.Net позволяет не устанавливать для каждой программы отдельную среду. Таким образом, уменьшается не только время на установку, но и жесткий диск не забьется лишними копиями немного отличающихся библиотек.
Если говорить о программистах, то фреймворк .Net позволяет заметно сократить время и ресурсы при разработке. С его помощью можно развить одну среду и использовать ее для нескольких языков.
Разработчики, которые знают разные языки, могут писать общий программный продукт под конкретную .NET-платформу. Элементы этого продукта, написанные на разных языках, смогут коммуницировать между собой без каких-либо проблем. Это также объясняет то, почему комьюнити .NET такое большое и разнообразное.
Помимо основных языков, фреймворк поддерживает несколько десятков других языков – это Delphi, Cobra, Oxygene и другие. С полным списком вы можете ознакомиться на Википедии.
Как работает .Net?
Принцип работы .Net довольно прост, достаточно разобраться в понятиях CLI, CIL и CLR.
CLI (от англ. Common Language Infrastructure – общеязыковая инфраструктура) – определяет архитектуру исполнительной системы .NET.
При такой инфраструктуре у каждого языка есть свой компилятор, однако программы компилируются не в нативный код, а в промежуточный байт-код CIL. Если мы напишем небольшую программу, выводящую надпись «Hello, World» на разных языках, то в результате она сформируется в промежуточный байт-код.
Когда мы запустим такую программу, то ее байт-код передастся в общеязыковую исполняющую среду CLR (Common Language Runtime). Там он уже компилируется в нативный код и начинает выполняться.
Аналогичным образом работают и виртуальные машины Java, но вот только .Net работает гораздо быстрее и может быть использован на персональных ПК, а не только на серверах.
Где используют .NET?
Диапазон продуктов, над созданием которых трудятся разработчики, довольно обширный. Рассмотрим наиболее популярные сферы, где используется технология .Net.
Веб-разработка
Веб-приложения – это одна из распространенных групп приложений, которые пишутся под .Net. Особенность заключается в том, что такие приложения работают через браузер и требуют стабильного интернет-соединения.
Сюда могут входить простые одностраничные сайты, но чаще всего это крупномасштабные проекты, требующие больших усилий. Например, Stack Overflow – сайт, известный каждому разработчику.
Для написания веб-приложений под .Net надо знать C#, а также владеть фреймворком ASP.NET MVC. Кроме того, нужно понимать, что такое клиент/сервер, как устроен протокол HTTP, как работает REST.
Клиентские приложения
Клиентские приложения – продукты, которые запускаются на персональных компьютерах и мобильных устройствах.
С применением .NET были разработаны такие приложения Windows, как блокнот и калькулятор. Но это лишь малая часть того, что можно сделать на .Net. Например, технология была использована в NinjaTrader и Tradesignal, а также в приложении для бизнес-аналитиков Microsoft Power BI.
Существуют клиентские приложения и для смартфонов, но в них, как правило, используется более современная технология .Net Core. С помощью нее и Xamarin.Forms можно написать приложение и опубликовать его в Apple Store или Google Play.
Компьютерные игры
Используя .Net, можно создавать различные игры под Unity. Примеры: Inside, Kerbal Space Program, Endless Legend и даже Pokemon Go. Для создания подобных игр необходимо знать язык программирования C# и использовать библиотеки платформ Mono и Unity.
Интернет вещей
Интернет вещей – это огромное количество устройств, которые подключены к интернету для обмена данными с другими «вещами» и приложениями. Устройства используют встроенные датчики для сбора данных и воздействуют на них. Примеры применения: от умного дома, который автоматически регулирует отопление и освещение, до умной фабрики, контролирующей промышленные машины для поиска проблем.
Здесь также можно применять .NET, например, с использованием Raspberry PI с Windows 10 IoT Core. Если вы планируете развиваться в данном направлении, то первым делом почитайте в интернете про Azure IoT и Azure IoT Hub.
Enterprise
Enterprise – это область разработки продуктов для решения проблем бизнеса. К таким продуктам можно отнести CRM для отслеживания поведения клиентов, а также системы менеджмента информации и документооборота.
Подобные системы – это чаще всего комбинация веба, десктопных и мобильных приложений. Чтобы начать работать с Enterprise, потребуются знания в C#, .NET и JavaScript, а также в инструментах, которые являются базой для проектируемого Enterprise-продукта.
Стоит ли учить .NET?
Технология .Net привлекательна среди молодых специалистов, так как она открывает обширные возможности. Например, можно пойти в backend и стать профессионалом в WCF или ASP.NET Core. Использование Razor/Blazor позволит создавать под .NET полноценные веб-приложения как с клиентской, так и с серверной частью.
Если говорить о современных технологиях по типу React, NG или Vue, то обучение для backend-разработчика станет более понятным с использованием языка TypeScript, который был разработан Microsoft специально для C#-программистов.
Также не стоит забывать и о том, что .Net – это фреймворк, заточенный под Windows. Не нужно ничего устанавливать, все уже под рукой. Если же взять тот же Java, то потребуется установить много дополнительного ПО, а для работы с iOS вовсе нужен Mac.
У .Net отличное комьюнити, которое поможет справиться с трудностями на первых этапах. Поэтому если у вас есть интерес к данной технологии и вы видите в ней перспективы, то самое время начать изучение .Net прямо сейчас.
Заключение
Технология .Net – это возможность писать сложные и функциональные приложения. Чтобы стать .Net-разработчиком, в первую очередь стоит изучить основы – теорию алгоритмов и теорию информации. После изучения основ можно переходить к выбору платформы и языку, который она поддерживает.