При проектировании языка программирования проектировщики полностью определяют его операционную / денотационную семантику?
Для языков, которые появляются на научных конференциях, таких как POPL или ICFP, часто семантика языка (в форме операционной или денотационной семантики) хорошо указана. Я пытался найти документированную семантику для популярных языков (например, C, Python, JavaScript), но не смог найти ни одной.
Когда такие языки с "тяжелыми" (относительно тяжелыми по отношению к языкам, разработанными в качестве доказательства концепции) функциями, разрабатываются, добавляют ли разработчики (или члены комитета) этих языков функции без указания их семантики? И так ли это для большинства популярных языков программирования?
Если так, то я думаю, что это имеет смысл практически, потому что не каждый человек, который хочет внести свой вклад в развитие языка, должен быть исследователем PL. Но мне было интересно, какие существуют реальные компромиссы.
2 ответа
Появляется семантика некоторых динамических языков программирования, потому что они минимальны по своему синтаксическому ядру и в основном определяются их библиотеками (язык, который фактически используется для программирования, гораздо медленнее, чем тот, который определяется синтаксисом). Примеры:
- Лисп
- PERL
- TCL
Некоторые языки определены с такой синтаксической неоднозначностью, что семантика в конечном итоге определяется конкретной реализацией. Примеры:
- Ранний C++
- C++ с STL
- AG Natural
Любой язык программирования с возможностями макросов или тот, который обычно используется с препроцессором макросов, заканчивается семантикой, переопределяемой используемыми макросами (как в предметно-ориентированных языках). Динамические языки, которые допускают изменения в поведении синтаксического анализа во время выполнения, также определяются во время выполнения.
В объектно-ориентированных языках (и других языках, которые отправляются в зависимости от типа объектов) семантика выражения зависит от типов участвующих объектов, и они могут в значительной степени отличаться от семантики эквивалентных выражений для встроенных и стандартных типы.
Почти все языки обычно определяются с помощью нормативных обозначений, таких как BNF. На этом сайте есть ссылки на многие.
Частью этого является устранение неясностей и обеспечение синтаксической согласованности. Было бы трудно создавать компиляторы или рендеры без них.
Части этого входят в дизайн HTML5.2, который объясняет некоторые причины.