Языки программирования высокого уровня
Высокоуровневые языки появились сравнительно поздно, в 1970-х гг., т.е. примерно через 20 лет после появления компьютеров с современной архитектурой. Создание таких языков было обусловлено стремлением избавить программистов от трат времени и умственных усилий на рутинные операции, связанные с учетом особенностей тех или иных компьютерных архитектур.
Язык программирования (ЯП) высокого уровня — формализованная семантическая система, максимально приближенная к обычному человеческому языку или иным привычным знаковым системам (например, математическим формулам). Язык высокого уровня в минимальной степени привязан к процессору или операционной системе и направлен на то, чтобы программист сосредоточился на решении поставленной задачи, не отвлекаясь на особенности устройства компьютера.
Рассмотрим наиболее популярные на сегодняшний день языки программирования, а также наиболее перспективные новинки.
Традиционные языки программирования
За последние десятилетия сложился устойчивый круг эффективных ЯП, удерживающих лидирующие позиции в рейтингах популярности.
Языки с Си-подобным синтаксисом
Рисунок 1. Деннис Ритчи и фрагмент кода на языке Си. Автор24 — интернет-биржа студенческих работ
Язык Си, появившийся на рубеже 1960-1970-х гг. и ставший одним из наиболее востребованных за всю историю развития компьютерных технологий, дал толчок формированию большого количества языков, развивающих заложенные в нем идеи:
- C++ — универсальный объектно-ориентированный язык, реализации которого существуют практически для всех популярных операционных систем (Unix, Windows, MacOS); программы, написанные на C++ отличаются высокой производительностью, надежностью и масштабируемостью; язык обладает развитой системой библиотек для решения практически любых задач;
- Objective C — версия Си для разработки программ, запускаемых на платформах Apple (MacOS, iOS);
- C# — язык, применяемый преимущественно для разработки программ для работы в операционной системе Windows;
- Java — универсальный язык, заявленный с самого момента своего появления на рынке как кроссплатформенный, т.е. написанный на Java код можно без внесения изменений использовать на любой операционной системе, в том числе на мобильных устройствах (хотя, все-таки, с некоторыми оговорками);
- JavaScript — интерпретируемый язык для написания веб-приложений; пригоден для решения широкого круга задач благодаря активно развивающемуся в последние годы фреймворку Node.js.
К семейству Си-подобных языков относятся и другие средства разработки: PHP, Perl, Bash и др.
Одним из самых популярных и востребованных ЯП в последние годы является интерпретируемый язык Python. Круг его возможностей чрезвычайно широк: от написания прошивок для встраиваемой техники до систем искусственного интеллекта. При этом Python обладает простым синтаксисом, низким порогом вхождения, широким коммьюнити, обширной коллекцией библиотек и модулей. Он хорошо документирован и обладает широкой образовательной базой для обучения новичков.
Рисунок 2. Логотип Python-foundation. Автор24 — интернет-биржа студенческих работ
Haskell — популярный универсальный язык, ориентированный на функциональное программирование. Его сильной стороной является полноценная поддержка т.н. отложенных вычислений.
Erlang — язык программирования функционального типа, направленный на создание распределённых вычислительных систем. Развивается усилиями корпорации Ericsson.
Новые языки программирования
Развитие языков программирования активно продолжается в связи с бурным ростом вычислительных возможностей современной техники. В последние годы появилось несколько языков, уверенно отвоевывающих популярность у традиционных средств разработки. Перечислим некоторые из них.
Рисунок 3. Популярность новых языков программирования. Автор24 — интернет-биржа студенческих работ
Язык Go, разрабатываемый и поддерживаемый компанией Google, стал одним из первых, учитывающих преимущества многоядерных процессоров: он отлично поддерживает многозадачность, что обеспечивает высокую производительность написанных на нем приложений.
Развиваемый организацией Mozilla Foundation язык Rust позиционируется как низкоуровневый, однако код, написанный на нем считается безопасным, т.е. можно сказать, что Rust преодолевает один из главных недостатков низкоуровневых языков. Приоритетными в развитии Rust считаются эргономика, скорость и безопасность.
Swift — новый язык от компании Apple, призванный заменить устаревший Objective-C. Этот ЯП предназначен для разработки нативных приложений как для iOS (мобильные устройства), так и для MacOS (десктопные системы). Приложения, написанные на Swift, демонстрируют высокую производительность. Кроме того, он хорошо подходит для создания 2D-игр. На развитие Swift большое влияние оказали ЯП Ruby и Python.
Kotlin – язык, созданный на платформе Java. Он всё чаще используется для написания мобильных приложений, работающих в среде ОС Android. Kotlin обладает более низким порогом вхождения по сравнению с Java, при этом он полностью поддерживается в привычной для разработчиков мобильных программ IDE Android Studio. Вполне вероятно, что Kotlin может со временем стать основным языком разработки для этого класса мобильных устройств.
Приятно отметить, что язык Kotlin создан российскими разработчиками и назван в честь острова, расположенного близ Санкт-Петербурга.
Общие характеристики языков высокого уровня
Языки программирования высокого уровня (в дальнейшем язык) были названы так, потому что в отличие от машино — ориентированных языков оперировали ограниченным набором операторов, с помощью которых можно было реализовать любой алгоритм. В общем, каждый из существующих языков имеет следующие группы операторов:
- описания типов данных
- присваивания
- условные операторы
- операторы цикла
- операторы ввода – вывода
- механизм использования подпрограмм и функций
Для реализации всего многообразия возможностей языка используются подпрограммы и функции организованные в библиотеки программ. Отличие языков только в синтаксисе и количестве и разнообразии программ в библиотеках. Есть и другие различия, но они влияют только на удобство программирования. За всю историю языков программирования их существовало несколько десятков. Начиная с языка Fortran, Cobol 1 , которые использовались на в 60 – 70 –х годах прошлого столетия, и до современных языков менялись не только сами языки, но и способы их использования. (Здесь и далее понятия, помеченные верхними индексами, подробно описаны в приложении). Сам язык и соответствующую ему программную среду стали называть системой программирования. Системы программирования менялись в зависимости от предметной области, для которой разрабатывалась программа, уровня разработчика программных средств. Так язык Fortran использовался для решения математических и инженерных задач, Cobol – для экономических задач и т.д. Обобщённо систему программирования с использованием языков высокого уровня можно отобразить следующей схемой.
Исполнение программы в режиме компиляции требует больше времени на подготовку программы к исполнению, но затем программа (исполняемый модуль) может многократно выполняться с очень большой скоростью. Важной особенностью в этой цепочке является подключение заранее подготовленных проверенных фрагментов программ, реализующих разнообразные функции и хранящихся в библиотеке программ, к объектному модулю. Богатство библиотеки программ определяет мощность системы программирования для того или иного языка.
В режиме интерпретации каждый оператор исходной программы переводится на машинный язык, при необходимости из библиотеки программ извлекается подпрограмма и запускается процесс её выполнения. Результаты сохраняются и используются при выполнении следующего оператора.
Долгое время системы программирования ориентировались на технологию программирования называемую процедурной. Схема разработки программы состояла из следующих этапов:
- Постановка задачи
- Разработка алгоритма
- Кодирование программы
- Подготовка тестовых примеров
- Трансляция (компиляция или интерпретация) программы
- Отладка программы
- Анализ ошибок и повторение процесса в зависимости от их типа с пунктов 3,2 или 1
- Документирование программы
- Релиз (выпуск программного продукта)
В такой программе все действия описывались последовательным выполнением операторов программы. При этом характер этих действий можно разделить на две группы: действия связанные с расчётным алгоритмом и отображение интерфейса с пользователем на экране монитора. В дальнейшем это обстоятельство подготовило почву для объектно — ориентированного программирования.
Процедурно ориентированный подход был связан с большой трудоёмкостью и необходимостью исправлять большое число ошибок. Попытки сделать структуру программы такой, чтобы снизить количество ошибок, связанных с невнимательностью или забывчивостью программиста, привели к созданию структурного программирования. Примером языка, реализующим эти принципы, является Pascal.
В настоящее время наиболее распространёнными языками программирования являются
Использование этих языков программирования связано с объектными технологиями программирования 7 . В дальнейшем все вопросы связанные с программированием мы будем рассматривать с позиций объектно ориентированного подхода.
Системы программирования и связанные с ними технологии исторически использовались для разработки программ, которые функционировали на компьютерах и использовали данные размещённые на том же компьютере или в пределах доступной ему сети. При этом основной формой хранения данных являются базы данных, организующих хранение данных на центральном узле или в распределённой среде. Базы данных хранят данные во внутренних форматах и программы, использующие их, «понимают» эти форматы. С появлением такой информационной среды как интернет 8 появилась необходимость представлять данные в универсальном формате, основной задачей которого было представлять любые типы данных в виде последовательности символов. Поэтому сначала возникает язык HTML, позволяющий отображать на экране различные визуальные объекты: тексты и изображения. Затем для представления данных в универсальном символьном формате создан язык XML. Создаваемые на их основе WEB формы или сайты позволяли на конечных узлах отображать информацию предоставляемую сервером. С течением времени этого становится недостаточно. Появляется необходимость сделать так, чтобы сайты функционировали как полновесные приложения, то есть работали в интерактивном режиме, позволяя формировать и исполнять запросы по требованию пользователя. Таким образом, к HTML были добавлены возможности включения в WEB формы фрагментов программных кодов на одном из языков программирования. Так, язык Java был специально разработан для этих целей 4 . Язык HTML с такими возможностями стали называть динамическим HTML.
Такой широкий спектр требований к создаваемым программным продуктам обусловил появление универсальных систем программирования. К таким системам можно отнести Delphi фирмы Borland и Visual Studio фирмы Microsoft.
Поскольку в дальнейшем все практические примеры программирования будут рассматриваться на программных продуктах фирмы Microsoft, рассмотрим более подробно среду программирования Visual Studio. В основе этой среды лежит анонсированная в 2000 году .Net (читается Dot Net) стратегия 6 . Её идея, вкратце, заключается в следующем. Была разработана огромная структурированная библиотека программ (платформа) Framework ( в настоящее время доступна версия 4.0). Каждый из модулей библиотеки описывает класс объектов 7 , и может быть использован программами практически на любом из широко распространённых языков. Более полно система рассмотрена в приложении 9.