Проектирование и реализация языка программирования
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2023 г. ) |
Языки программирования обычно создаются путем разработки формы представления компьютерной программы и написания реализации разработанной концепции. [1] обычно интерпретатор или компилятор . Интерпретаторы предназначены для чтения программ, обычно в некоторых вариантах текстового формата , и выполнения действий на основе прочитанного, тогда как компиляторы преобразуют код на более низкий уровень. [2]
Дизайн [ править ]
При разработке языка программирования необходимо учитывать множество факторов. Некоторые факторы могут быть взаимоисключающими (например, безопасность и скорость). Может возникнуть необходимость рассмотреть, будет ли язык программирования лучше интерпретироваться или компилироваться, должен ли язык быть динамически или статически типизирован, будет ли использоваться наследование, а также общий синтаксис языка. [3] Многие факторы, связанные с разработкой языка, могут определяться целями, стоящими за языком. Важно учитывать целевую аудиторию языка, его уникальные особенности и предназначение. [4] Хорошей практикой является изучение того, чего не хватает существующим языкам или чего они затрудняют, чтобы убедиться, что язык служит определенной цели. [4]
Различные эксперты предложили полезные принципы проектирования:
- В последнем абзаце статьи, опубликованной в 1972 году, Тони Хоар дал несколько общих советов для любого программного проекта: [5]
- «Итак, мой совет разработчикам и разработчикам программного обеспечения будущего в двух словах:
- не решайте точно, что вы собираетесь делать, пока не знаете, как это сделать;
- и не решайте, как это сделать, пока не оцените свой план по всем желаемым критериям качества.
- А если вы не можете этого сделать, упрощайте свой дизайн до тех пор, пока не сможете».
- На симпозиуме SIGPLAN в 1973 году Тони Хоар довольно подробно обсудил различные аспекты языка. [6] Он также указывает на ряд недостатков современных языков программирования.
- «Язык программирования — это инструмент, который должен помогать программисту в самых сложных аспектах его искусства,
- а именно: проектирование программ, документация и отладка».
- «Объективные критерии хорошего языкового дизайна можно сформулировать в пяти крылатых фразах:
- простота, безопасность, быстрый перевод, эффективный объектный код и читаемость».
- «Абсурдно проводить сложные проверки безопасности при отладке, когда результатам не доверяют, а затем удалять их при производстве, когда ошибочный результат может быть дорогостоящим или катастрофическим. Что бы мы подумали об энтузиасте парусного спорта, который носит его спасательный жилет во время тренировок на суше, но он снимает его, как только выходит в море?»
- На конгрессе ИФИП 1974 года Никлаус Вирт , разработчик языка Паскаль , представил доклад «О разработке языков программирования». [7] Вирт перечислил ряд противоречивых предложений, в первую очередь то, что язык должен быть простым в изучении и использовании, его можно использовать без добавления новых функций, компилятор должен генерировать эффективный код, компилятор должен быть быстрым и что язык должен быть совместим с библиотеками, системой, в которой он работает, и программами, написанными на других языках.
Реализация [ править ]
Переводчики [ править ]
Интерпретатор — это программа, которая читает другую программу, обычно в виде текста. [4] как это видно в таких языках, как Python . [2] Интерпретаторы читают код и непосредственно выдают результат. [8] Интерпретаторы обычно читают код построчно и анализируют его, чтобы преобразовать и выполнить код как операции и действия. [9]
Компиляторы [ править ]
Компиляторы — это программы, которые читают программы, также обычно в виде текста, и преобразуют код в более низкого уровня . машинный код или операции [4] Скомпилированные форматы, созданные компиляторами, сохраняют действия нижнего уровня в виде файла. [2] Скомпилированные языки, преобразованные в машинный код , обычно работают намного быстрее, поскольку операции более низкого уровня легче выполнять, а результаты можно предсказать и скомпилировать заранее. [9]
Процесс [ править ]
Процессы создания языка программирования могут отличаться от разработчика к разработчику; однако вот общий процесс создания языка программирования, включающий общие концепции:
- Дизайн: рассматриваются такие аспекты дизайна, как типы, синтаксис, семантика и использование библиотек для разработки языка. [10]
- Рассмотрение: учитываются синтаксис, реализация и другие факторы. Такие языки, как Python, интерпретируют код во время выполнения, тогда как такие языки, как C++, используют подход, основанный на C. компиляторе [11]
- Создайте реализацию: пишется первая реализация. Компиляторы конвертируют в другие форматы, обычно заканчивая столь же низкоуровневым, как ассемблер, даже до двоичного. [12]
- Улучшите свою реализацию. Реализации следует улучшать. Расширьте язык программирования, стремясь к тому, чтобы он имел достаточную функциональность для начальной загрузки , когда язык программирования способен написать собственную реализацию.
- Начальная загрузка: при использовании компилятора разработчик может использовать процесс начальной загрузки, при котором компилятор языка программирования переписывается сам по себе. [13] Это полезно для проверки ошибок и подтверждения его возможностей. [14] Преимущество начальной загрузки также заключается в том, что с этого момента вам нужно будет только запрограммировать язык сам по себе.
Ссылки [ править ]
- ^ Томассетти, Федерико (8 мая 2019 г.). «Как бы я начал создавать язык программирования?» . Струмента . Проверено 3 марта 2023 г.
- ^ Jump up to: Перейти обратно: а б с «Компилятор против интерпретатора» . Гики для гиков . 17 января 2022 г. Проверено 3 марта 2023 г.
- ^ «Языки программирования и обучение» . Вашингтонский EDU . Университет Вашингтона . Проверено 2 марта 2023 г.
- ^ Jump up to: Перейти обратно: а б с д «Как создаются языки программирования» . GoNoCode . 8 декабря 2021 г. Проверено 2 марта 2023 г.
- ^ Хоар, ЦАР (1972). «Качество программного обеспечения» . Программное обеспечение: практика и опыт . 2 (2): 103–105. дои : 10.1002/спе.4380020202 . S2CID 62662609 .
- ^ «Советы по проектированию языков программирования» (PDF) . 1973 год . Проверено 7 марта 2023 г.
- ^ «О проектировании языков программирования» (PDF) . 1974 год . Проверено 9 марта 2023 г.
- ^ Дайвер, Лоуренс (7 декабря 2021 г.). «Опубликовано 7 декабря 2021 г. Интерпретация правил кода: производительность, производительность и производство» . Отчет MIT по вычислительному праву .
- ^ Jump up to: Перейти обратно: а б Рати, Мукул (31 марта 2017 г.). «Как я написал свой «правильный» язык программирования» . мукулрати . Проверено 2 марта 2023 г.
- ^ Чучанян, Вик. «Языки программирования» . Калифорнийский государственный университет в Нортридже . Проверено 2 марта 2023 г.
- ^ Страуструп, Бьерн. «История C++: 1979−1991» (PDF) . Архивировано (PDF) из оригинала 2 февраля 2019 г. Проверено 18 июля 2013 г.
- ^ Фергюсон, Эндрю. «История языков программирования» . Университет Брауна . Проверено 2 марта 2023 г.
- ^ Глюк, Роберт (2012). «Загрузка генераторов компиляторов из частичных вычислителей». В Кларке, Эдмунд; Вирбицкайте Ирина; Воронков, Андрей (ред.). Перспективы системной информатики: 8-я Международная конференция памяти Андрея Ершова, PSI 2011, Новосибирск, Россия, 27 июня – 1 июля 2011 г., Переработанное избранное . Конспекты лекций по информатике. Том. 7162. Спрингер. стр. 125–141. дои : 10.1007/978-3-642-29709-0_13 .
Начало работы представляет собой проблему курицы и яйца, знакомую по конструкции компилятора: для начальной загрузки компилятора нужен компилятор, и загрузка генераторов компиляторов не является исключением.
- ^ «Установка GCC: Сборка» . Проект GNU — Фонд свободного программного обеспечения (FSF) .