Семантика и синтаксис языков программирования
Язык программирования (ЯП) предназначен для преобразования человеческих мыслей в машинные коды. Далеко не каждый вид мыслительной деятельности может быть преобразован в компьютерную программу. Во-первых, потому, что это не всегда нужно. Например, можно научить компьютер генерировать литературные тексты и произведения искусства, но вряд ли они будут иметь эстетическую ценность. Во-вторых, есть области мыслительной деятельности, где машины пока не могут заменить человека: создание научных теорий, анализ культурного наследия и т.п. Об этом свидетельствуют регулярные кризисы, случающиеся в отрасли разработки искусственного интеллекта.
При создании нового ЯП разработчики исходят, прежде всего, из семантики - смысловой составляющей: чем он будет отличаться от предшествовавших, для решения каких задач предназначен? Например, язык Erlang ориентирован на создание распределённых вычислительных систем. На нем вряд ли будет удобно разрабатывать настольные приложения. На C# лучше всего писать программы, работающие под управлением операционной системы Microsoft Windows. Язык Prolog предназначен для логического анализа и малопригоден для придания интерактивности веб-страницам.
Конечно, любой язык программирования работает со смыслами не напрямую, а разбивая их на определения переменных, условные переходы, циклы, функции, классы. Но в его семантике всегда присутствует исходная ориентированность на решение определенного круга задач.
Семантика языка программирования - совокупность смыслов, для выражения которых он предназначен. Она наделяет значениями выражения, составленные на данном языке программирования.
Определившись со смысловой составляющей, разработчики языка программирования начинают разрабатывать средства его формализации, т.е. такие синтаксические конструкции, в которых каждое выражение можно трактовать единственным способом. Подавляющее большинство современных компьютеров работает дискретно. Каждое действие и каждая порция данных в них должны быть выражены целыми числами. Компьютеры "не понимают" оценочных и эмоциональных суждений. Для них невозможно, например, точно сформулировать, что такое "одна треть" или "число Пи". В электронной памяти эти числа могут быть представлены с достаточной для практики точностью, но, все-таки, с некоторой погрешностью. Поэтому при разработке синтаксиса ЯП следует строго определится со способами словесного выражения тех или иных констант, переменных, команд и умозаключений.
Синтаксис - набор символов и составляемых из них слов (лексем), допустимых в данном языке программирования безотносительно к описываемому содержанию.
Синтаксис ЯП должен быть составлен таким образом, чтобы была возможность преобразовать написанные с его помощью тексты в машинный код.
Рисунок 1. Принцип работы семантического анализатора. Автор24 — интернет-биржа студенческих работ
Средства разработки
После написания текста программы его следует, во-первых, проверить на наличие синтаксических ошибок, во-вторых, отладить (убедиться в работоспособности и при необходимости доработать), в-третьих - подготовить к дальнейшему использованию. Для решения этих задач предназначены средства разработки.
Средства разработки для языка программирования это наборы утилит и приложений, предназначенные для написания, отладки и эксплуатации программ.
Средства разработки, как правило, включают в себя:
- текстовый редактор;
- отладчик;
- транслятор;
- компоновщик;
- упаковщик.
Трансляторы представляют собой компьютерные программы для перевода текста, написанного на том или ином ЯП, в машинные коды. Трансляторы делятся на две категории: интерпретаторы и компиляторы. Интерпретатор последовательно преобразует в машинные коды каждую инструкцию исходной программы, проверяет ее корректность и сразу же выполняет. Компилятор преобразует в бинарную последовательность, пригодную для обработки процессором, всю программу, попутно стремясь обнаружить синтаксические и логические ошибки. После этого исполняемая последовательность сохраняется на жесткий диск и в дальнейшем может быть использована многократно.
Рисунок 2. Компиляция программы и ее запуск. Автор24 — интернет-биржа студенческих работ
К интерпретируемым (скриптовым) языкам относятся Python, JavaScript, Perl. К компилируемым - Си, C++, Pascal и др.
Программы на таких языках, как Java, C# сначала преобразуются в промежуточный кроссплатформенный байт-код (для Java - файлы с расширением *.class
). В машинные команды он преобразуется внутри т.н. виртуальной машины, скрывающей специфику операционной системы.
Компоновщик связывает текст программы с необходимыми для ее работы модулями (библиотеками) и приводит к виду, в котором она может быть использована в рамках той или иной операционной системы. Упаковщик объединяет разрозненные фрагменты кода в архивы, которые удобно переносить с компьютера на компьютер (например, jar-архивы для Java, COM-компоненты Microsoft).
Для удобства разработки утилиты, необходимые для создания программ, часто объединяют в IDE (Integrated Development Enviroments - интегрированные среды разработки). В таких системах все необходимые технологические операции, связанные с разработкой, скрыты за удобными графическими меню, а в процессе написания программы редактор подсвечивает синтаксис и автодополняет лексемы, облегчая работу программиста.
Инфраструктура языка программирования
Современные языки программирования предоставляют разработчикам мощную поддержку, которая заключается в следующем:
- развернутая справочная система; всегда есть ключевой интернет-ресурс, где можно узнать о правильном использовании возможностей языка; например, для Java это соответствующий сайт компании Oracle, для JavaScript - веб-каталоги организации Mozilla Development Network и т.п.;
- пакетные менеджеры; поставщики современных ЯП предоставляют своим пользователям возможность устанавливать необходимые компоненты для программ через сеть Интернет; для Java в этих целях может быть использована система Maven, для JavaScript - npm, для Python - pip;
- комьюнити; пользователи языков программирования объединяются в сообщества, чтобы делиться опытом, помогать друг другу в решении проблем, сообщать о новинках; периодически для разработчиков устраиваются офлайн-конференции, на которых выступают ведущие специалисты, рассматриваются перспективные направления развития ЯП. На таких мероприятиях можно иногда просто приятно повести время среди единомышленников.