Разместить заказ
Вы будете перенаправлены на Автор24

Как создаются языки программирования

8-800-775-03-30 support@author24.ru
Статья предоставлена специалистами сервиса Автор24
Автор24 - это сообщество учителей и преподавателей, к которым можно обратиться за помощью с выполнением учебных работ.
как работает сервис
Все предметы / Программирование / Языки программирования / Как создаются языки программирования
Как создаются языки программирования

Зачем нужны новые языки программирования

Количество языков программирования исчисляется уже сотнями. Не все они популярны и актуальны, но их число продолжает расти. Это обусловлено факторами, набор которых с течением времени меняется.

В первые десятилетия развития компьютерных технологий потребность в новых языках программирования объяснялась, прежде всего, сложностью написания программ в машинных кодах или даже средствами ассемблера. По мере того, как росли мощность вычислительных машин и удобство работы с ними, менялись и требования, предъявляемые к языкам. Некоторые были ориентированы на интенсивную работу с математическими вычислениями (Fortran), некоторые - на легкость освоения и учебные цели (Basic, Pascal), некоторые - на универсальность и быстроту (Си).

Появления в мире программирования тех или иных достижений провоцировали бурный рост новых языков. Так, открытие парадигмы объектно-ориентированного программирования привело в 1980-1990-е гг. к появлению таких языков, как C++, Objective C, Java. В 2000-е гг. получило импульс развитие скриптовых языков для быстрого создания веб-приложений (PHP, JavaScript, Python). Даже в наши дни появляются новые мощные языки программирования, сочетающие в себе высокую скорость разработки и быстродействие написанных на них программ (Go, Swift, Rust).

Готовые работы на аналогичную тему

Появление новых языков программирования может быть обусловлено не только компьютерной "модой". Они возникают и как средства решения специфических задач. Например, Prolog появился как язык автоматизации логических умозаключений. Отраслевым стандартом в разработке ПО для сетевых коммуникаций является Erlang и т.д.

Как создать свой язык программирования

Прежде всего нужно определиться с тем, будет ли новый язык компилируемым или интерпретируемым. В первом случае текст, написанный программистом, преобразуется в машинный код и сохраняется в этом виде на каком-либо носителе для дальнейших применений. Во втором скрипт преобразуется в процессорные инструкции "на лету" и превращается в алгоритм, исполняемый процессором сразу же. Для создания компиляторов и интерпретаторов используют какой-нибудь универсальный высокоэффективный язык, чаще всего C/C++.

Лексический анализ. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Лексический анализ. Автор24 — интернет-биржа студенческих работ

Для преобразования исходного кода в инструкции процессора в первую очередь необходим лексический анализатор, преобразующий фрагменты текста в последовательность токенов - текстовых фрагментов, пригодных для строгой алгоритмизации. Токенами являются имена переменных, названия функций, ключевые слова.

Следующий необходимый инструмент для преобразования текста программы в последовательность машинных инструкций - синтаксический анализатор (парсер). Он служит для контроля правильности объединения токенов в более сложные конструкции, описывающие исполняемый алгоритм. Список токенов, связанных синтаксическими знаками (скобками, точками с запятыми, пробельными отступами, ключевыми словами вроде begin и end) парсер преобразует в абстрактное синтаксическое дерево.

Замечание 1

Существуют готовые программы, облегчающие создание лексических анализаторов, например, Flex. Для создания синтаксических анализаторов также имеются готовые инструменты, например, Bison.

Построение синтаксического дерева позволяет создать абстрактный семантический граф. Он содержит некоторую дополнительную информацию: о возвращаемых функциями типах, многократно используемых переменных и т.д.

Семантический граф определяет последовательность работы вызываемых функций, объединенных в функциональные узлы. На этом этапе можно говорить о появлении полноценного интерпретатора для нового языка программирования.

Особенности разработки компилятора

Преобразования исходного кода в исполняемую программу. Автор24 — интернет-биржа студенческих работ

Рисунок 2. Преобразования исходного кода в исполняемую программу. Автор24 — интернет-биржа студенческих работ

Создание компилятора требует дополнительных усилий, поскольку необходим учет специфики операционной системы, архитектуры процессора и т.п.

Для создания компиляторов существуют готовые инструменты, из которых наиболее одним из наиболее универсальных и зарекомендовавшим свою эффективность считается, например, LLVM.

Определение 1

LLVM — система анализа, преобразования и повышения эффективности программ, построенная на основе виртуальной машины. Алгоритмы для нее предоставляются в виде специального промежуточного байт-кода, который может быть преобразован в нативные бинарные последовательности для различных архитектур, либо сохранен для дальнейшей интерпретации.

Языки и архитектуры, поддерживаемые LLVM. Автор24 — интернет-биржа студенческих работ

Рисунок 3. Языки и архитектуры, поддерживаемые LLVM. Автор24 — интернет-биржа студенческих работ

Задачу создания компилятора для нового языка программирования можно облегчить, задействовав метод транспайлинга, когда исходный код одного языка преобразуется в исходный код другого, и уже он "пропускается" через имеющиеся надежные интерпретаторы или компиляторы. Так работает, например, язык Coffeescript, программы на котором преобразуются в стандартный JavaScript. Похожий принцип используется в популярах фронтенд-фреймворках для веб-разработки (React, Angular, Vue).

Замечание 2

Несмотря на то, что после завершения работы над интерпретатором или компилятором создание нового языка с технической точки зрения можно считать законченной, в современном IT-мире правилом хорошего тона считается создание дополнительных ресурсов: публичных репозиториев, форумов для сообщества, документации. Всё это необходимо для успешного развития языка, за исключением случаев, когда речь идет о проекте для персонального использования или для решения единичной задачи.