Software platform что это
Framework vs Platform: в чём разница?
Привет, Хабр! Представляю вашему вниманию перевод статьи «Framework Vs. Platform What’s The Difference?» автора G. Harris.
Исповедуюсь: я педант. Несмотря на личные неудачи на этом поприще, я глубоко верю, что использование правильного языка добавляет множество преимуществ. Процитирую афоризм Марка Твена:
Разница между почти правильным словом и правильным словом действительно много значит. Это разница между светлячком (lightning bug) и молнией (lightning).
Ввиду этой разницы я вижу смысл в том, что время от времени меня раздражает недостаток ясности вокруг двух концепций фреймворк и платформа. Какая-нибудь платформа есть у любой компании в мире, которая имеет отношение к разработке. В мире опенсорса полно фреймворков. Но мало кто может определить эти концепции, будучи спрошен. Если я не способен дать чёткие определения базовой терминологии, могу ли я претендовать на полное понимание предмета обсуждения?
Я хотел бы предложить одно из возможных определений по аналогии.
Платформа — это нечто, что можно сравнить с коробкой-конструктором, которая была в комнате у моих детей, когда они были маленькими. Отдельные кубики являются компонентами. На идеальной платформе доступно множество разных комбинаций для сборки компонент, и может быть создан широкий спектр конечных продуктов. Платформы предлагают святой грааль повторного использования ПО: вот почему они так популярны.
Но каковы пререквизиты для построения платформы? Чтобы быть успешной, платформа должна отвечать некоторым обязательным техническим требованиям, и удовлетворить их — задача фреймворка.
Фреймворк теперь можно определить как набор концепций, библиотек, инструментов и практик, которые обеспечивают:
Платформа — это набор повторно используемых компонентов, которые были сконструированы в соответствии с принципами и философией платформы.
Возможны и другие определения, но я считаю именно эти определения чрезвычайно полезными.
Прошу заметить, насколько фундаментальной является концепция стандартизации в этом контексте. Задумайтесь на минуту о мире, в котором каждая электрическая вилка была уникальным продуктом ручной работы. Массовое производство электрических устройств никогда не станет индустрией в таком мире. То же самое относится и к платформе. Чтобы они могли играть в команде, все компоненты платформы должны иметь стандартизированную структуру и должны использовать стандартизированные концепции для взаимной коммуникации.
Я объяснил свою точку зрения: платформе требуется фреймворк в качестве основы. Фреймворк обеспечивает парадигмы компонентности и коммуникации. Он обеспечивает стандартизацию, необходимую для создания взаимозаменяемых компонентов. По мере того, как компоненты проектируются, создаются и тестируются, они становятся строительными блоками и вносят свой вклад в платформу. Фреймворк ограничивает степени свободы, которые доступны разработчикам. Он направляет и руководит их усилиями, чтобы достичь той критической степени стандартизации, которая требуется для успеха платформы.
Фреймворк может иметь дополнительные обязанности. В идеале он будет поддерживать концепцию причинно-следственных связей (по-немецки Wirkketten), позволяющую идентифицировать зависимости времени выполнения, потоки данных и потоки управления. Кроме того, он должен содержать (и скрывать) необходимый механизм для работы с параллелизмом. Но это послужит материалом для другой статьи.
Что выбирать язык или платформу программирования?
Что такое платформа программирования?
Язык и платформа программирования это важнейшие две составляющие процесса разработки программы. Программы нуждаются в выполнении, для этого им необходима платформа(среда) для исполнения. Среда выполнения загружает файлы программы, обеспечивает доступ к памяти и другим системным ресурсам для их запуска. Программа, написанная на определенном языке программирования может выполняться на (или предназначаться для) различных платформах. При этом различают аппаратную(компьютерную) и программную платформы.
Аппаратная или компьютерная платформа — в общем смысле, это аппаратная среда выполнения, в которой должен выполняться фрагмент программного обеспечения или объектный модуль с учётом накладываемых этой средой ограничений и предоставляемых возможностей. Основой этой платформы является разрядность процессора и регистров, объем оперативной и постоянной памяти и т.п.
Программная платформа представляет собой общую организацию исполнения прикладных программ, задавая, например, порядок запуска программы, схему использования ею адресного пространства, зафиксированные в архитектуре операционной системы плюс API на уровне операционной системы. Основой этой платформы на самом низком уровне является система команд процессора.
Примечание. Часто понятие программная платформа относится не к области выполнения, а к области разработки программы. Например, программная платформа это совокупность программных решений и технологий, позволяющая осуществлять разработку и/или производство программных продуктов в определенной предметной области методом компоновки и настройки уже готовых модулей и модулей, специально разработанных в целях расширения функционала и включаемых затем в платформу.
Таким образом, платформа программирования включает в себя:
Кроме того термин платформа может применяться к разным уровням абстракции, включая определенную аппаратную архитектуру, операционную систему или библиотеку времени выполнения.
Совокупность аппаратной и программной платформ составляет единую среду выполнения программы. Как только программа запущена, она находится в состоянии выполнения. В этом состоянии программа может отправлять инструкции процессору компьютера и получать доступ к памяти компьютера (RAM) и другим системным ресурсам. Такое состояние программы принято называть процессом.
Процесс имеет виртуальное адресное пространство, исполняемый код, открытые дескрипторы системных объектов, контекст безопасности, уникальный идентификатор процесса, переменные среды, класс приоритета, минимальный и максимальный размеры рабочего набора и по крайней мере один поток выполнения. Каждый процесс запускается с одного потока, часто называемого основным потоком, но может создавать дополнительные потоки из любого из своих потоков.
Таким образом, платформа(система времени выполнения, среда выполнения)-это программное обеспечение, предназначенное для поддержки выполнения компьютерных программ, написанных на некотором компьютерном языке. Система времени выполнения содержит реализации базовых команд низкого уровня, а также может реализовывать команды более высокого уровня и может поддерживать проверку типов, отладку и даже генерацию и оптимизацию кода. Некоторые службы системы времени выполнения доступны программисту через интерфейс прикладного программирования, но другие службы (такие как планирование задач и управление ресурсами) могут быть недоступны.
Что важнее на практике язык программирования или среда выполнения программы(платформа), что больше оказывает влияние на качество программы? Ответ на этот вопрос не является тривиальным, потому что они не только взаимообусловленны, но и каждый по своему оказывают существенное влияние на качество программы. Однако существуют ситуации, когда возникает вопрос — язык или платформа программирования?
Программистам — новичкам не обязательно знать в какой программно-аппаратной среде выполняются их программы, ибо за них все решает инструментальная среда программирования. Для них важно правильно выбрать язык программирования. Опытные же программисты, обычно, не спрашивают друг друга — на каком языке ты программируешь, они спрашивают – с каким компилятором или в какой библиотеке ты работаешь? Поэтому для бывалых программистов важным вопросом является — что выбирать язык или платформу программирования? И зачастую ответом на этот вопрос звучит то, что правильно выбирать не Язык, а Платформу.
Это связано с тем, что не всегда качество языка играет решающую роль. Например, сложный язык Java не был бы хорошим языком с момента его создания, если бы не появилась виртуальная машина(платформа), которая оказалась настоящим прорывом для своего времени. Именно она вывела язык Java в самый популярный язык. Другой пример, платформа dotNet Framework также сделала популярным язык программирования C#, иначе он мог бы так и остаться простым совершенствованием С+.
Таким образом, коротко платформа это среда выполнения программы. И чтобы ответить на вопрос что выбирать язык или платформу программирования рассмотрим эти понятия более подробно. Прежде всего, рассмотрим программные средства платформы программирования.
Программные средства платформы программирования
К программным средствам платформы относится совокупность некоторых базовых библиотек, используемых при работе приложений в конкретной операционной системе, имеющих свой программный интерфейс API, с помощью которого эти библиотеки используются при разработке программ. Это, прежде всего библиотеки классов, на основе которых могут создаваться и выполняться объекты.
Выбор платформы близок по существу к выбору языка программирования по профессии. Потому что платформы создаются и поддерживаются крупными корпорациями. Практически все известные вам IT корпорации продвигают свои и языки и платформы программирования. Microsoft: dotNet, IBM, Oracle: Java VM. И тогда вопроса — язык или платформа программирования нет.
В прошлом, большинство программ использовали операционную систему (ОС) в качестве среды выполнения. Программы запускались на любом компьютере, но для доступа к ресурсам полагались на параметры операционной системы. Ресурсами выступали память, программные файлы и зависимости. В свое время именно среда выполнения Java изменила все это, по крайней мере, для Java-программ. Вопроса что важнее язык или платформа программирования практически не возникало.
Платформы программирования на языке Java
Основой платформы программирования для языка Java является виртуальная машина. Среда времени выполнения Java –программ позволяет запускать программу в любом месте и в любое время, где существует виртуальная Java-машина. Эта способность Java исполнять свой код на любой из поддерживаемых платформ достигается тем, что ее программы транслируются в некое промежуточное представление, называемое байт-кодом (bytecode).
Байт-код, в свою очередь, может интерпретироваться в любой системе, в которой есть среда времени выполнения Java. Несмотря на то, что в Java используется интерпретатор, байт-код легко переводится непосредственно в “родные” машинные коды (Just In Time compilers) “на лету”. При этом достигается очень высокая производительность (Symantec JIT встроен в Netscape Navigator).
Для языка 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 под термином «тип» понимаются: классы, структуры, перечисления и другие формы данных. Платформа dotNET позволяет разрабатывать компоненты (называемые сборками), которые предоставляют другим компонентам (возможно, написанным на других языках) доступ к описанным в них типам.
Основными компонентами платформы dotNET являются:
Взаимосвязи компонентов платформы программирования dotNET Framework с концептуальной точки зрения показаны на рисунке.
При этом следует отметить, что данная платформа активно развивается и с 2013 г. уже используется версия dotNET Framework 4.5.1. Платформа dotNET Framework позволяет также писать оконные приложения нового поколения — WPF. Эта технология позволит по — новому взглянуть на формы Windows, которые напоминают больше HTML-страницу, чем прежние WindowsForms, благодаря DirectX. Так как Windows полностью пропитана dotNet Framework, то разработчик dotNET может работать также и с сервером на Windows — благодаря ASP.NET. В паре с Silverlight — можно создавать проекты практически любой сложности.
Однако надо иметь в виду, что в dotNET все созданные приложения очень сильно привязаны к Microsoft Windows — одна операционная среда(ОС) и одна среда разработки IDE. Чего не скажешь о Java SE.
На конференции Build 2020 Microsoft анонсировала платформу для разработки Project Reunion, которая призвана упростить разработку приложений для Windows 10, в частности UWP-приложений. Новая платформа должна объединить программные интерфейсы Win32 и Universal Windows Platform и сохранить обратную совместимость. Структура Project Reunion показана на рисунке.
Один из компонентов Project Reunion — нативная библиотека интерфейса WinUI 3, с помощью которой приложение будет корректно адаптироваться и масштабироваться в зависимости от устройства. Также в состав Project Reunion включен компонент WebView2 — с его помощью любое приложение Windows будет поддерживать веб-контент через встроенный Microsoft Edge и Chromium.
Выбор среди программных платформ
Если возникает ситуация, когда ответ на вопрос — язык или платформа программирования, склоняется в сторону платформы, то естественно приходится делать выбор среди платформ. Чтобы выбрать платформу программирования и далее соответствующий ей язык, необходимо определиться с критериями, о которых шла речь выше, и сделать правильный выбор — язык или платформа программирования, если платформу, то какую.
Учитывая то, что Java SE и dotNET это две ведущие, можно сказать конкурирующие, современные платформы создания и исполнения разнообразных приложений, то выбирать чаще всего приходится их них двоих. Неправильного выбора бояться не надо. Переучиться с одной платформы на другую не так уж сложно. Более того программист, владеющий особенностями обоих платформ будет востребован больше.
Аналогично и с языком программирования. Например, язык C#, являющийся основным в dotNET, ничуть не труднее Java, а если Вы знакомы с C-подобным синтаксисом, то с легкостью освоите любой из этих языков программирования на платформе dotNet Framework и JavaVM.
Роль аппаратных средств платформы программирования
Для бывалых программистов важным является то, что кроме программных средств в среде выполнения необходимо учитывать и особенности построения аппаратной части платформы, оказывающей влияние на программирование.
К основным аппаратным средствам платформы программирования относится нижний слой многоуровневой организации вычислительной системы (аппаратура, операционная система, прикладное программное обеспечение), на который опираются ОС и прикладное ПО. Аппаратные платформы отличаются друг от друга архитектурой центрального процессора и используемыми шинами связи функциональных блоков. Каждой аппаратной платформе соответствуют совместимые с ней операционные системы и прикладные программы, которые могут на ней запускаться.
Основная программно-аппаратная платформа, на которой работают операционные системы фирмы Microsof, — компьютеры с архитектурой IBM PC. Именно их архитектура и определяет особенности построения аппаратной платформы среды выполнения программ.
История развития платформ от компании Microsoft началась с Microsoft COM, затем MS DOS, далее появилась Win16, затем Win32, сейчас все аппаратные средства ориентированы на Win64. С точки зрения архитектуры, данные системы имеют достаточно сильные отличия. Отличия обусловлены разрядностью используемых типов данных, указателей и форматов исполняемого файла. Основным отличительным фактором является формат исполняемого файла(программы в машинном коде). К настоящему времени известно о четырех форматах исполняемых файлов.
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-файле является, в основном, высокоуровневой и используется системой или приложениями, чтобы определить правила обращения с конкретным исполняемым файлом.
Основными особенностями данного формата являются: простота загрузки файла PE-формата; поддержка сплошной модели памяти; использование относительных адресов памяти, равных смещению от начала PE-файла — физическому адресу памяти, с которого начинается загруженный в память модуль. Одним из главных преимуществ плоской модели памяти, использующей 32-разрядные указатели, является возможность создания сегментов объемом до 4 Гбайт.
Сегодня повсеместно применяется Win 64 — код, который объединяет в себе основные возможности 32-разрядного кода и изменения, связанные с повышением разрядности. В распоряжении программиста оказываются: 64-разрядные типы данных, указатели и интерфейс Win64 API. Старые 32-разрядные типы данных не исчезли при повышении разрядности платформы (как было с 16-разрядными типами данных при переходе к Win32). Win64 допускает использование и 32-, и 64-разрядных данных. Новые 64-разрядные указатели обеспечивают возможность адресации до 16 Тбайт памяти (1 Тбайт = 1024 Мбайт). Современными бизнес-приложениями этот объем вполне востребован. Функции в Win64 API претерпели незначительные изменения.
Использовать особенности построения различных программных интерфейсов и аппаратных платформ могут только опытные программисты, хорошо владеющие операциями с указателями. Для многих программистов достаточно уметь использовать возможности программных средств платформы.
Таким образом, при создании приложения для компьютеров под управлением установленной операционной системы, сначала нужно принять решение о том, какая платформа приложений будет использоваться. Так, например, операционная система Windows предоставляет четыре основные платформы приложений, каждая из которых имеет свои преимущества:
Примечание. В цитируемой статье приводятся сведения и о других современных платформах, которые могут выполняться в Windows 10, а также могут работать на iOS и Android. Каждая из этих платформ содержит полнофункциональную инфраструктуру и набор элементов управления пользовательского интерфейса.
Заключение
Чтобы ответить на вопрос что важнее язык или платформа программирования, необходимо получить некоторый опыт программирования на различных языках и платформах. Чаще всего язык и платформа программирования это основа среды исполнения и они не разрывны.
Однако, если требуется создание многофункциональных и эффективных приложений для мобильных телефонов, удаленных процессоров, микроконтроллеров, беспроводных модулей, датчиков, шлюзов, потребительских продуктов и практически любых других категорий электронных устройств, то не заменимым средством является платформа языка Java.
Платформа Java также является основой практически для всех типов сетевых приложений и всеобщим стандартом для разработки и распространения встроенных и мобильных приложений, игр, веб-контента и корпоративного программного обеспечения. На платформе Java можно разрабатывать высокопроизводительные портативные приложения практически на всех компьютерных платформах.
Если необходимо писать достаточно сложные приложения под Windows, то на сегодняшний день рекомендуется dotNET Framework. Эта платформа позволяет писать приложения, взаимодействующие с другими аналогичными приложениями и технологиями, достаточно легким способом.
Основные компоненты платформы специальная виртуальная машина (общеязыковая исполняющая среда, Common Language Runtime, CLR), которая управляет компиляцией команд промежуточного языка в инструкции конкретного процессора и общая библиотека классов dotNET Framework (Framework Class Library, FCL), которые реализуют все базовые функции управляемых приложений, сделали ее достаточно простой в использовании и достаточно эффективной в разработках.
Чтобы стать высококлассным программистом на современных алгоритмических языках целесообразно хорошо знать не только языки, но и платформы программирования. Изучение платформ программирования можно осуществлять на курсах по программированию Среди курсов с высоким рейтингом можно выделить курсы онлайн-университетов Skillbox и GeekBrains.
Широко известный онлайн-университет Skillbox является одним из лидеров в сфере дистанционного обучения программированию, включая и изучение платформ программирования для алгоритмических языков Python, Java, C++, C#. По окончанию обучения на некоторых гарантируется трудоустройство. Это тоже важно на сегодняшний день.
На образовательном IT-портале GeekBrains и Mail.Ru Group имеется первый в России онлайн-университет GeekBrains, который по популярности незначительно уступает онлайн-университету Skillbox, а в кое в чем может и опережает его. На этом портале также можно найти различные программы обучения по многим IT-направлениям, включая как платные, так и бесплатные курсы программирования на аналогичных алгоритмических и скриптовых языках.
Вот и все. Удачи при выборе языка или платформы программирования.