Что такое язык программирования?
Язык и платформа программирования это важнейшие две составляющие процесса разработки и исполнения программы. Определений языка программирования много. Вот, например, определение из Википедии.
Язы́к программи́рования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических равил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.
Проще сказать язык программирования это совокупность алфавита(набора допустимых символов), синтаксиса(набора правил) и семантики(смыслового содержания).
Современные языки программирования(Delphi, C#, Java, Python и др.) в качестве алфавита широко используют мультиязычные символы Юникода для идентификаторов и хранения исходного кода. Исторически, до начала 2000-х годов в языках применялась 7-и битная кодировка ASCII, принятая стандартом в США.
Синтаксис или грамматика языка программирования предписывает правила написания кода программы из допустимых символов.
При описании семантики в рамках операционного подхода обычно понимается смысл исполнения конструкций языка программирования, который интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
Для программиста важным является возможности языка программирования и простота их использования при решении определенного класса задач.
Основные приемы выбора языка программирования представлены в статье Как выбирать язык программирования высокого уровня для изучения.
Что такое платформа программирования?
Термин платформа программирования имеет двойное значение — платформа разработки(создания) и платформа исполнения программы. Иногда оба значения имеют одно и тоже наименование. Но функции у них разные.
Можно найти много различных определений платфтрмы программирования. Приведем некоторые их них, представленные в статье «Всё ли то «платформа», что называют «платформой»?«.
Например, в Wikipedia приводится следующее определение.
Вычислительная платформа или цифровая платформа — это среда, в которой выполняется часть программного обеспечения. Это может быть аппаратное обеспечение или операционная система (ОС), даже веб-браузер и связанные интерфейсы прикладного программирования или другое базовое программное обеспечение, если программный код выполняется вместе с ним. Вычислительные платформы имеют разные уровни абстракции, включая архитектуру компьютера, ОС или библиотеки времени выполнения. Вычислительная платформа — это сцена, на которой могут работать компьютерные программы.
А в книге «Современные операционные системы» Таненбаум Э. приводится следующее определение.
Платформа — это комплекс аппаратных и программных средств, на котором функционирует программное обеспечение пользователя ЭВМ.
Последнее более простое и понятное, его и будем брать за основу. Далее рассмотрим общую характеристику основных платформ программирования, как среды исполнения программ, их состав и структуру, а также основные возможности.
Платформа исполнения программ
Разработанные программы нуждаются в выполнении, для этого им также необходима платформа(среда) для исполнения. Среда выполнения это вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы. В среде выполнения, как правило, невозможно изменение исходного текста программы, но может наличествовать доступ к переменным окружения операционной системы, таблицам объектов и модулей разделяемых библиотек.
Среда выполнения программ(задач) загружает файлы программы в оперативную память, обеспечивает доступ к памяти и другим системным ресурсам для запуска программы. Программа, написанная на определенном языке программирования, может выполняться на различных платформах или предназначаться для различных платформ. При этом различают аппаратную(компьютерную) и программную платформы исполнения программы на языке программирования.
Аппаратная или компьютерная часть платформы — это аппаратная среда выполнения программы, в которой должен выполняться фрагмент программного обеспечения или объектный модуль с учётом накладываемых этой средой ограничений и предоставляемых возможностей. Основой этой части платформы является разрядность процессора и его регистров, объем оперативной и постоянной памяти и т.п.
Для бывалых программистов важным является то, что кроме программных средств в среде выполнения необходимо учитывать и особенности построения аппаратной части платформы, оказывающей влияние на программирование.
К основным аппаратным средствам платформы программирования относится нижний слой многоуровневой организации вычислительной системы (аппаратура, операционная система, прикладное программное обеспечение), на который опираются ОС и прикладное ПО. Аппаратные платформы отличаются друг от друга архитектурой центрального процессора и используемыми шинами связи функциональных блоков. Каждой аппаратной платформе соответствуют совместимые с ней операционные системы и прикладные программы, которые могут на ней запускаться.
Программные средства платформы программирования
К программным средствам платформы исполнения программ относится совокупность некоторых базовых библиотек, используемых при работе приложений в конкретной операционной системе, имеющих свой программный интерфейс API, с помощью которого эти библиотеки используются при разработке программ. Это, прежде всего библиотеки классов, на основе которых могут создаваться и выполняться объекты.
Программная часть платформы исполнения программы представляет собой общую организацию исполнения прикладных программ, задавая, например, порядок запуска программы, схему использования ею адресного пространства, зафиксированные в архитектуре операционной системы и ее программного интерфейса API на низком уровне. Основой этой части платформы на самом низком уровне является система команд процессора.
Далее под термином платформа программирования будет пониматься общая среда исполнения программы.
Таким образом, платформа программирования определяется как комплекс аппаратных (технических) средств, реализованных на соответствующем типе процессора, соответствующей операционной системы с ее программным интерфейсом API.
Программно-аппаратная платформа состоит из взаимосвязанной совокупности следующих основных элементов:
- комплекс технических средств, на базе которого проектируются программы;
- базовое программное обеспечение интеграции комплекса технических средств в программно-технический комплекс, обеспечивающее конфигурирование программ и реализующее другие универсальные функции программы.
Основным компонентом комплекса технических средств является электронная вычислительная машина (ЭВМ) — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач, тип которого определяется типом процессора: Macintosh, Atari, Sincler, Intel, J2EE и т.д.
Основным компонентом базового программного обеспечения (программной платформы) является операционная система( Windows, UNIX, LINUX и т.д.), обеспечивающая работоспособность прикладного программного обеспечения на том или ином процессоре, программный интерфейс API и статические или динамические библиотеки классов, функций(фреймворки).
Примечание. Кроме того термин платформа может применяться к разным уровням абстракции, включая определенную аппаратную архитектуру, операционную систему или библиотеку времени выполнения программы.
Совокупность аппаратной и программной платформ составляет единую среду выполнения программы. Как только программа запущена, она находится в состоянии выполнения. В этом состоянии программа может отправлять инструкции процессору компьютера и получать доступ к памяти компьютера (RAM) и другим системным ресурсам. Такое состояние программы принято называть процессом.
Процесс имеет виртуальное адресное пространство, исполняемый код, открытые дескрипторы системных объектов, контекст безопасности, уникальный идентификатор процесса, переменные среды, класс приоритета, минимальный и максимальный размеры рабочего набора и по крайней мере один поток выполнения. Каждый процесс запускается с одного потока, часто называемого основным потоком, но может создавать дополнительные потоки из любого из своих потоков.
Таким образом, платформа(система времени выполнения, среда выполнения)-это программное обеспечение, предназначенное для поддержки выполнения компьютерных программ, написанных на некотором компьютерном языке.
Система времени выполнения содержит реализации базовых команд низкого уровня, а также может реализовывать команды более высокого уровня и может поддерживать проверку типов, отладку и даже генерацию и оптимизацию кода. Некоторые службы системы времени выполнения доступны программисту через интерфейс прикладного программирования, но другие службы (такие как планирование задач и управление ресурсами) могут быть недоступны.
Что важнее на практике язык программирования или среда выполнения программы(платформа), что больше оказывает влияние на качество программы? Ответ на этот вопрос не является тривиальным, потому что они не только взаимообусловленны, но и каждый по своему оказывают существенное влияние на качество программы. Однако существуют ситуации, когда возникает вопрос — язык или платформа программирования?
Программистам — новичкам не обязательно знать в какой программно-аппаратной среде выполняются их программы, ибо за них все решает инструментальная среда программирования. Для них важно правильно выбрать язык программирования.
Опытные же программисты, обычно, не спрашивают друг друга — на каком языке ты программируешь, они спрашивают – с каким компилятором или в какой библиотеке ты работаешь? Поэтому для бывалых программистов важным вопросом является — что выбирать язык или платформу программирования? И зачастую ответом на этот вопрос звучит то, что правильно выбирать не Язык, а Платформу.
Это связано с тем, что не всегда качество языка играет решающую роль. Например, сложный язык Java не был бы хорошим языком с момента его создания, если бы не появилась виртуальная машина(платформа), которая оказалась настоящим прорывом для своего времени. Именно она вывела язык Java в самый популярный язык. Другой пример, платформа dotNet Framework также сделала популярным язык программирования C#, иначе он мог бы так и остаться простым совершенствованием С+.
Выбор платформы близок по существу к выбору языка программирования по профессии. Потому что платформы создаются и поддерживаются крупными корпорациями. Практически все известные вам IT корпорации продвигают свои и языки и платформы программирования. Microsoft: dotNet, IBM, Oracle: Java VM. И тогда вопроса — язык или платформа программирования нет.
В прошлом, большинство программ использовали операционную систему (ОС) в качестве среды выполнения. Программы запускались на любом компьютере, но для доступа к ресурсам полагались на параметры операционной системы. Ресурсами выступали память, программные файлы и зависимости. В свое время именно среда выполнения Java изменила все это, по крайней мере, для Java-программ. Вопроса что важнее язык или платформа программирования практически не возникало.
Таким образом, коротко платформа это среда выполнения программы. И чтобы ответить на вопрос что выбирать язык или платформу программирования рассмотрим эти понятия более подробно. Прежде всего, рассмотрим программные средства платформы программирования.
Платформы программирования для классических Windows приложений
Основная программно-аппаратная платформа, на которой работают операционные системы фирмы Microsof, — компьютеры с архитектурой IBM PC. Именно их архитектура и определяет особенности построения аппаратной платформы среды выполнения программ.
Если необходимо создать классическое приложение для компьютеров под управлением Windows, то сначала нужно принять решение о том, какая платформа приложений будет использоваться. Windows предоставляет четыре основные платформы приложений, каждая из которых имеет свои преимущества:
Win32. Это исходная платформа для нативных Windows-приложений, которым требуется прямой доступ к Windows и оборудованию. Win32 стает оптимальной платформой для приложений, которым требуется самый высокий уровень производительности и прямой доступ к системному оборудованию.
WPF и Windows Forms. Эти платформы на базе .NET предоставляют систему общих типов, интерфейсы API и модель приложений для управляемых приложений.
Универсальная платформа Windows (UWP). На этой платформе предоставляется система общих типов, интерфейсы API и модель приложений для всех устройств под управлением Windows 10
Программирование в Windows основывается на использовании функций API (Application Program Interface, т.е. интерфейс программного приложения). Windows API это общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Microsoft Windows.
Основными версиями Windows API являются:
Win16 — первая версия WinAPI для 16-разрядных версий Windows. Изначально назывался Windows API, позднее был ретроспективно переименован в Win16 для отличия от Win32.
Win32 — 32-разрядный API для современных версий Windows. Самая популярная ныне версия. Базовые функции реализованы в динамически подключаемых библиотеках, базовых модулях графического интерфейса пользователя;
Win64 — 64-разрядная версия Win32, содержащая дополнительные функции Windows на платформах x86-64 и IA-64.
Примечание. История развития платформ от компании Microsoft началась с Microsoft COM, затем MS DOS, далее появилась Win16, затем Win32, сейчас все аппаратные средства ориентированы на Win64. С точки зрения архитектуры, данные системы имеют достаточно сильные отличия. Отличия обусловлены разрядностью используемых типов данных, указателей и форматов исполняемого файла. Основным отличительным фактором является формат исполняемого файла(программы в машинном коде). К настоящему времени известно о четырех форматах исполняемых файлов.
Теоретически, контейнер Win32 – это виртуальная машина, и все дополнительные компоненты отключается, когда не работают приложения Win32, что повышает производительность системы и увеличивает автономность устройства. В отличие от традиционных виртуальных машин и эмуляторов, контейнеры Windows 10X обеспечивают меньшую задержку и доступ к большему количеству ресурсов устройства.
COM — формат исполняемого файла
Разработанный фирмой Microsoft COM-формат исполняемых файлов для компьютеров на базе 8-разрядных микропроцессоров мог применяться лишь для небольших программ. Одной из отличительных характеристик этих микропроцессоров была поддержка размера оперативной памяти не более 64 Кбайт. Таким образом, размер программы, выполняющейся на компьютере с 8-разрядным микропроцессором, изначально был ограничен его архитектурой. А с учетом того, что некоторая часть оперативной памяти отводилась для программ операционной системы, — реальный размер программы был еще меньше. COM-формат поддерживался операционной системой CP/M фирмы Digital Research и показал свою эффективность.
MZ — формат исполняемого файла
С появлением 16-разрядного микропроцессора фирмы Intel, возникла необходимость в операционной системе, которая в полной мере использовала бы его возможности. Фирма Microsoft разработала операционную систему MS-DOS. Для MS-DOS, поддерживающей сегментную организацию программы, был разработан специальный формат исполняемых файлов — MZ-формат. С точки зрения структуры, файл MZ-формата имеет три части: заголовок, таблицу размещения и программный код.
NE — формат исполняемого файла
Со временем был спроектирован для использования в программах специальный программный интерфейс API (Application Programming Interfaces): Windows API для операционной системы Windows, POSIX для различных UNIX-подобных операционных систем и т. д., с помощью которого был реализован наиболее близкий к системе способ взаимодействия с ней из прикладных программ пользователей.
Первым был программный интерфейс Win16 API это первая версия Windows API для 16-разрядных ОС типа Windows. Для Win16 был разработан новый NE-формат (New Executeable code file) исполняемого файла. Исполняемый файл NE-формата состоит из двух исполняемых файлов: исполняемый файл MZ-формата и исполняемый файл NE-формата. Этот формат долгое время полностью обеспечивал потребности 16-разрядной платформы Win16, хотя и имел ряд недостатков.
PE — формат исполняемого файла
С появлением 32-разрядных операционных систем фирма Microsoft разработала новый Win32 API и для него специальный формат исполняемого файла. Он получил название переносимый формат исполняемого файла (PE — Portable Executable). Это единый формат исполняемого файла, впервые реализованный в операционной системе Windows NT, выполнялся на различных аппаратных платформах, что, конечно, не означало совместимости на уровне машинных команд. Информация в PE-файле является, в основном, высокоуровневой и используется системой или приложениями, чтобы определить правила обращения с конкретным исполняемым файлом.
Структура файла содержит:
В начале файла располагается DOS-MZ заголовок, размер которого составляет 80 байт.
Файловый заголовок, который находиться в PE-файле сразу же после сигнатуры IMAGE_NT_SIGNATURE и содержит наиболее общую информацию о данном файле.
Опциональный заголовке, в котором хранится более специфическая информация о приложении и его потребностях, и абстрактно состоящий из двух частей: стандартные поля и дополнительные поля NT.
Таблица секций – это база данных, для всех секций используемых в PE-файле, а также таблица экспорта и импорта.
Основными особенностями данного формата являются: простота загрузки файла PE-формата; поддержка сплошной модели памяти; использование относительных адресов памяти, равных смещению от начала PE-файла — физическому адресу памяти, с которого начинается загруженный в память модуль. Одним из главных преимуществ плоской модели памяти, использующей 32-разрядные указатели, является возможность создания сегментов объемом до 4 Гбайт.
Сегодня повсеместно применяется Win 64 — код, который объединяет в себе основные возможности 32-разрядного кода и изменения, связанные с повышением разрядности. В распоряжении программиста оказываются: 64-разрядные типы данных, указатели и интерфейс Win64 API. Старые 32-разрядные типы данных не исчезли при повышении разрядности платформы (как было с 16-разрядными типами данных при переходе к Win32).
PE64 – это расширение PE32 на случай 64-разрядной платформы. Не бойтесь, изменения между этими форматами минимальны, т.к. все что изменяется — это адреса в памяти. Поэтому все 32-разрядные поля превращаются в 64-разрядные.
Win64 допускает использование и 32-, и 64-разрядных данных. Новые 64-разрядные указатели обеспечивают возможность адресации до 16 Тбайт памяти (1 Тбайт = 1024 Мбайт). Современными бизнес-приложениями этот объем вполне востребован. Функции в Win64 API претерпели незначительные изменения.
На новых 64-битных системах Windows для совместимости со старыми 32-битными приложениями существует подсистема WoW64. Система транслирует вызовы 32-битного API в вызовы 64-битного API, осуществляет перенаправление при работе с реестром, файлами, а также выполняет ряд других функций.
Работа классического Windows приложения начинается с того, что операционная система создает процесс. Это не просто загруженная в память программа пользователя; процесс предполагает создание множества внутренних системных структур для обеспечения работы программы и предоставления ей различных ресурсов, таких как память, процессорное время, доступ к установленному в системе оборудованию и т.д.
В адресном пространстве процесса резервируются области для динамически выделяемой памяти («кучи») и стека. Образ программы состоит из одной или нескольких секций. Для каждой секции выделяется несколько страниц памяти, имеющих одинаковые атрибуты. Например, это могут быть исполняемые страницы, страницы только для чтения или для чтения и записи.
Использовать особенности построения различных программных интерфейсов и аппаратных платформ могут только опытные программисты, хорошо владеющие операциями с указателями. Для многих программистов достаточно уметь использовать возможности программных средств платформы.
Платформы программирования на языке Java
Язык Java и платформа программирования для него, которая включает в себя набор инструментов разработки на Java (JDK), виртуальная машина (JVM) и среда выполнения (JRE), образуют вместе мощную тройку компонентов для разработки и запуска Java-приложений. Среда выполнения для Java JRE содержит:
- Загрузчик классов отвечает за правильную загрузку классов и их связь с основными библиотеками классов Java;
- JVM отвечает за обеспечение Java-приложений ресурсами, необходимыми для их запуска и эффективной работы на устройстве или в облачной среде;
- JRE в основном является контейнером для этих компонентов и отвечает за организацию их деятельности.
Основой платформы программирования для языка Java является виртуальная машина JVM. Среда времени выполнения Java –программ позволяет запускать программу в любом месте и в любое время, где существует виртуальная Java-машина. Эта способность Java исполнять свой код на любой из поддерживаемых платформ достигается тем, что ее программы транслируются в некое промежуточное представление, называемое байт-кодом (bytecode).
Байт-код, в свою очередь, может интерпретироваться в любой системе, в которой есть среда времени выполнения Java. Несмотря на то, что в Java используется интерпретатор, байт-код легко переводится непосредственно в “родные” машинные коды “на лету” с помощью JIT-компилятора (Just In Time compilers). При этом достигается очень высокая производительность (Symantec JIT встроен в Netscape Navigator).

JIT-компиляция происходит в режиме реального времени в процессе выполнения программы. В отличие от стандартной компиляции, она имеет доступ к динамической информации во время выполнения кода. Это означает, что такая компиляция лучше обрабатывает код, например, встроенные функции.
Виртуальная машиной Java JVM поддерживает внутреннюю среду исполнения байт-кода, которая имеет следующие особенности:
- динамическая объектно-ориентированная модель представления программы. Java-программа представляет собой набор классов, для каждого класса при компиляции создается двоичный файл с расширением class, содержащий кроме собственно байт-кода методов еще и описание структуры класса (описание данных и заголовки методов);
- «самоопределение» — многие элементы внутреннего представления программы могут быть описаны средствами самой же Java, прежде всего это описатели классов Class,а также процедуры их загрузки и связывания. Кроме того, структура объектов класса Class, описана в объекте – загрузчике классов ;
- динамическое связывание внешних методов. При вызове методов в «посторонних» классах байт-код содержит символическое имя метода, которое при первом обращении заменяется на адрес блока байт-код, найденного в описании «постороннего» класса (Class). Что касается данных «постороннего» класса. Им должны соответствовать смещения от начального адреса объекта;
- тотальный контроль за объектами. Все объекты в программе являются динамическими и наследуются от общего предка – класс Object, т.е. все объекты имеют общую внутреннюю сущность, через которую JVM может «следить» за ними;
- многопоточность. В Java идея многопоточности реализована на уровне языка как возможность создания объектов классов, производных от класса Thread, в которых метод run выполняется параллельно с подобными ему в локальной среде текущего объекта. В JVM потоки не интерпретируются, а реализуются в виде физических потоков, поддерживаемых операционной системой.
Для языка Java существуют несколько редакций платформы, позволяющие разработчикам приложений, поставщикам услуг и производителям аппаратного обеспечения создавать решения, отвечающих требованиям конкретных групп пользователей. Рассмотрим их по порядку.
Редакция Java Platform, Standard Edition(Java SE) включает большое количество библиотек классов, необходимых для создания различного рода приложений от Java-приложений для настольных компьютеров до серверных Java-приложений, а также разрабатывать встроенное программное обеспечение и программы для систем реального времени и Web-сервисов и т.д.
Используя платформу программирования Java SE, Вы можете создавать и развертывать Java-приложения для настольных компьютеров и серверов, а также разрабатывать встроенное программное обеспечение и программы для систем реального времени. Редакция Java SE включает классы, необходимые для создания Web-сервисов, и базовые компоненты Java EE (Java Platform, Enterprise Edition). Среди версией платформы Java SE в недалеком прошлом применялись Java SE 5 или «Тигр», Java SE 6, также известная как «Мустанг». Текущей версией платформы Java SE является Java SE 11, которая в течение года стала достаточно популярной.
Следующей редакцией платформы является Java EE (Java Platform, Enterprise Edition). Эта корпоративная версия платформы программирования помогает разработчикам создавать и развертывать переносимые, надежные, масштабируемые и безопасные серверные приложения на Java. Развивая возможности Java SE, Java EE предоставляет API Web-сервисов, компонентных моделей, удаленного взаимодействия и управления для реализации корпоративного программного обеспечения по принципам сервис — ориентированной архитектуры(SOA) и Web 2.0.
Мобильной версией платформы программирования на языке Java является Java ME (Java Platform, Micro Edition). Java ME предоставляет среду для выполнения приложений, созданных для широкого круга мобильных и встроенных систем, например мобильных телефонов, карманных компьютеров, телевизионных приставок и принтеров. Эта редакция платформы предоставляет средства создания гибких пользовательских интерфейсов, надежную модель обеспечения безопасности, полный спектр встроенных сетевых протоколов, а также мощную поддержку сетевых и оффлайновых динамически загружаемых приложений. Приложения, базирующиеся на спецификациях Java ME, могут быть запущены на множестве устройств и при этом способны эффективно задействовать их системные возможности.
Для создания функционально насыщенных приложений на скриптовых языках можно использовать JavaFX Script, работающую поверх платформы Java SE 6 и служащую для упрощения программирования сложных пользовательских интерфейсов. JavaFX работает на основеJava. На платформе JavaFX разработчики могут создавать и развертывать полнофункциональные интернет-приложения (RIA), одинаково стабильно функционирующие на различных платформах. JavaFX расширяет возможности Java, позволяя разработчикам использовать любые библиотеки Java в приложениях JavaFX. Разработчики могут расширить свои возможности в Java и воспользоваться технологией презентаций, обеспечиваемой JavaFX для создания увлекательных визуальных образов.
Платформа программирования dotNet Framework
В 2002 г. компания Microsoft создала новую платформу разработки и выполнения программ dotNET Framework. Платформа dotNet Framework предоставила новый подход к созданию и выполнению прикладных программ (приложений). С точки зрения программиста dotNET может интерпретироваться как новая среда выполнения программ и всеобъемлющая библиотека базовых классов.
Язык C# и платформа программирования dotNET являются полностью объектно-ориентированными и позволяют использовать уже имеющиеся типы данных и создавать новые. В dotNET под термином «тип» понимаются: классы, структуры, перечисления и другие формы данных. Платформа dotNET позволяет разрабатывать компоненты (называемые сборками), которые предоставляют другим компонентам (возможно, написанным на других языках) доступ к описанным в них типам.
Основными компонентами платформы dotNET являются:
- новый формат выполняемых программных модулей (EXE и DLL), называемых сборками (assembly), или управляемыми модулями; их основной особенностью является использование общего (независимого от исходного языка) промежуточного языка программирования (Common Intermediate Language, CIL) и метаданных, описывающих все содержащихся в них открытые типы данных;
- специальная виртуальная машина (общеязыковая исполняющая среда, Common Language Runtime, CLR), которая управляет компиляцией команд промежуточного языка в инструкции конкретного процессора; CLR начинает работать при каждом запуске управляемых модулей на выполнение;
- другим строительным блоком платформы dotNET является CTS (Common Type System – общая система типов);
- спецификации CLS (Common Language Specification – общеязыковые спецификации), которые определяют подмножество общих типов и программных конструкций, понятных всем языкам программирования, совместимым с dotNET;
- общая библиотека классов dotNET Framework (Framework Class Library, FCL), которые реализуют все базовые функции управляемых приложений (например: работа с коллекциями, файлами, сетями, графическим интерфейсом и т. п.);
- набор программных средств, помогающих разрабатывать управляемые модули, как например: компиляторы и отладчики; основным средством разработки является интегрированная среда разработки – Visual Studio, позволяющая автоматизировать разработку приложений на всех языках, поддерживаемых платформой dotNET.
Взаимосвязи компонентов платформы программирования dotNET Framework с концептуальной точки зрения показаны на рисунке.

Более подробно рассмотрим три ключевых (и взаимосвязанных) компонент dotNET, которые и обеспечивают преимущества данной платформы: CLR, CTS и CLS.
Главной задачей слоя общеязыковой среды выполнения CLR являются размещение, загрузка и управление dotNET-типами по указанию программиста. Кроме того, CLR отвечает за ряд низкоуровневых вопросов, таких, как, например, управление памятью и проверка безопасности и т.п.
Под управлением CLR осуществляется выполнение программы на языке IL. При выполнении программы CLR вызывает так называемый JIT-компилятор(just in time -компилятор времени выполнения), переводящий код с языка IL в машинные команды конкретного процессора, которые немедленно выполняются. При этом компилируются только та часть программы, которую требуется выполнить в данный момент времени.
Откомпилированная часть программы сохраняется в кэше для дальнейшего использования. В результате компилятор создаёт так называемую сборку – файл с расширением exe или dll, который содержит код на языке IL и метаданные. Метаданные представляют собой сведения об объектах, используемых в программе, а также сведения о самой сборке. Они позволяют организовать межъязыковое взаимодействие, обеспечивают безопасность и облегчают развёртывание приложений, то есть установку программ на компьютеры пользователей.
Среда CLR ориентирована на ОС Windows, но может быть реализована для любой операционной системы.
Спецификации CTS полностью описывают все возможные типы данных и программные конструкции, поддерживаемые средой выполнения, указывают, как эти элементы могут взаимодействовать друг с другом и как они представляются в формате метаданных dotNET.
Если конкретный язык, совместимый с dotNET, не поддерживает абсолютно все возможности, определенные CTS, то используются связанные общеязыковые спецификации CLS, которые определяют подмножество общих типов и программных конструкций, понятных всем языкам программирования, совместимым с dotNET. Поэтому, если создаваемые dotNET-типы опираются только на возможности, соответствующие CLS, то можно быть уверенным, что использовать их сможет любой совместимый с dotNET язык. А если используются типы данных или программные конструкции, выходящие за пределы CLS, то нет гарантии, что с используемой библиотекой программного dotNET-кода сможет взаимодействовать любой язык программирования dotNET.
При этом следует отметить, что данная платформа активно развивается и с 2013 г. уже используется версия dotNET Framework 4.5.1. Платформа dotNET Framework позволяет также писать оконные приложения нового поколения — WPF. Эта технология позволит по — новому взглянуть на формы Windows, которые напоминают больше HTML-страницу, чем прежние WindowsForms, благодаря DirectX. Так как Windows полностью пропитана dotNet Framework, то разработчик dotNET может работать также и с сервером на Windows — благодаря ASP.NET. В паре с Silverlight — можно создавать проекты практически любой сложности.
После выхода dotNET 5 Microsoft ещё больше уходит от монолитного dotNET Framework в сторону модульного легковесного dotNET Core. Теперь dotNET 5 заслуживает особого внимания, если вы хотите разрабатывать под Windows 10X. Более того, это даже выгодно, так как приложения, разработанные под Windows 10X запустятся и на других версиях Windows 10.
Однако надо иметь в виду, что в dotNET все созданные приложения очень сильно привязаны к Microsoft Windows — одна операционная среда(ОС) и одна среда разработки IDE. Чего не скажешь о Java SE.
Выбор программных платформ
Так что же важнее язык или платформа программирования? Однозначного ответа на этот вопрос практически не существует. Однако в жизни и деятельности программиста могут возникать такие ситуации, когда необходимо найти ответ на этот вопрос.
Если возникает ситуация, когда ответ на вопрос — язык или платформа программирования, склоняется в сторону платформы, то естественно приходится делать выбор среди платформ. Чтобы выбрать платформу программирования и далее соответствующий ей язык, необходимо определиться с критериями, о которых шла речь выше, и сделать правильный выбор — язык или платформа программирования, если платформу, то какая.
При выборе платформы программирования необходимо руководствоваться мледующими критериями:
- высокая производительность решения прикладных задач;
- высокая степень надежности и устойчивости к сбоям;
- достаточный уровень защиты от несанкционированного доступа посторонних лиц.
Учитывая то, что Java SE и dotNET это две ведущие, можно сказать конкурирующие, современные платформы создания и исполнения разнообразных приложений, то выбирать чаще всего приходится их них двоих. Неправильного выбора бояться не надо. Переучиться с одной платформы на другую не так уж сложно. Более того программист, владеющий особенностями обоих платформ будет востребован больше.
Аналогично и с языком программирования. Например, язык C#, являющийся основным в dotNET, ничуть не труднее Java, а если Вы знакомы с C-подобным синтаксисом, то с легкостью освоите любой из этих языков программирования на платформе dotNet Framework и JavaVM.
Таким образом, при создании приложения для компьютеров под управлением установленной операционной системы, сначала нужно принять решение о том, какая платформа приложений будет использоваться. Так, например, операционная система Windows предоставляет четыре основные платформы приложений, каждая из которых имеет свои преимущества:
- универсальная платформа Windows (UWP). На этой платформе предоставляется система общих типов, интерфейсы API и модель приложений для всех устройств под управлением Windows 10. Приложения UWP могут быть нативными или управляемыми;
- WPF и Windows Forms. Эти платформы на базе .NET предоставляют систему общих типов, интерфейсы API и модель приложений для управляемых приложений;
- Win32/64. Это исходная платформа для нативных Windows-приложений C/C++, которым требуется прямой доступ к Windows и оборудованию. Благодаря этому API Win32/64 стает оптимальной платформой для приложений, которым требуется самый высокий уровень производительности и прямой доступ к системному оборудованию.
- Примечание. В цитируемой статье приводятся сведения и о других современных платформах, которые могут выполняться в Windows 10, а также могут работать на iOS и Android. Каждая из этих платформ содержит полнофункциональную инфраструктуру и набор элементов управления пользовательского интерфейса.
Чтобы стать высококлассным программистом на современных алгоритмических языках целесообразно хорошо знать не только языки, но и платформы программирования.
Изучение платформ программирования можно осуществлять на курсах по программированию Среди курсов с высоким рейтингом можно выделить курсы онлайн-университетов Skillbox и GeekBrains.
Широко известный онлайн-университет Skillbox является одним из лидеров в сфере дистанционного обучения программированию, включая и изучение платформ программирования для алгоритмических языков Python, Java, C++, C#. По окончанию обучения на некоторых гарантируется трудоустройство. Это тоже важно на сегодняшний день. На образовательном IT-портале GeekBrains и Mail.Ru Group имеется первый в России онлайн-университет GeekBrains, который по популярности незначительно уступает онлайн-университету Skillbox, а в кое в чем может и опережает его. На этом портале также можно найти различные программы обучения по многим IT-направлениям, включая как платные, так и бесплатные курсы программирования на аналогичных алгоритмических и скриптовых языках.
Заключение
Язык и платформа программирования важные элементы приложения, которые оказывают существенное влияние на его качество. Поэтому вопрос что выбирать язык или платформу программирования совсем не риторический.
Чтобы ответить на вопрос что важнее язык или платформа программирования, необходимо получить некоторый опыт программирования на различных языках и платформах. Чаще всего язык и платформа программирования это основа среды исполнения и они неразрывны.
Однако, если требуется создание многофункциональных и эффективных приложений для мобильных телефонов, удаленных процессоров, микроконтроллеров, беспроводных модулей, датчиков, шлюзов, потребительских продуктов и практически любых других категорий электронных устройств, то не заменимым средством является платформа языка Java.
Платформа Java также является основой практически для всех типов сетевых приложений и всеобщим стандартом для разработки и распространения встроенных и мобильных приложений, игр, веб-контента и корпоративного программного обеспечения. На платформе Java можно разрабатывать высокопроизводительные портативные приложения практически на всех компьютерных платформах.
Если необходимо писать достаточно сложные приложения под Windows, то на сегодняшний день рекомендуется платформа программирования dotNET Framework. Эта платформа позволяет писать приложения, взаимодействующие с другими аналогичными приложениями и технологиями, достаточно легким способом.
Основные компоненты платформы специальная виртуальная машина (общеязыковая исполняющая среда, Common Language Runtime, CLR), которая управляет компиляцией команд промежуточного языка в инструкции конкретного процессора и общая библиотека классов dotNET Framework (Framework Class Library, FCL), которые реализуют все базовые функции управляемых приложений, сделали ее достаточно простой в использовании и достаточно эффективной в разработках.
Связанные материалы
- Что такое программирование?
- Онлайн школы и курсы IT профессий
- Как быстро изучить языки программирования?
- Курсы и высшее образование в профессии программиста
- Как стать Web программистом?
- Интегрированные средства разработки программного обеспечения