При проектировании языка программирования проектировщики полностью определяют его операционную / денотационную семантику?

Для языков, которые появляются на научных конференциях, таких как POPL или ICFP, часто семантика языка (в форме операционной или денотационной семантики) хорошо указана. Я пытался найти документированную семантику для популярных языков (например, C, Python, JavaScript), но не смог найти ни одной.

Когда такие языки с "тяжелыми" (относительно тяжелыми по отношению к языкам, разработанными в качестве доказательства концепции) функциями, разрабатываются, добавляют ли разработчики (или члены комитета) этих языков функции без указания их семантики? И так ли это для большинства популярных языков программирования?

Если так, то я думаю, что это имеет смысл практически, потому что не каждый человек, который хочет внести свой вклад в развитие языка, должен быть исследователем PL. Но мне было интересно, какие существуют реальные компромиссы.

2 ответа

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

  • Лисп
  • PERL
  • TCL

Некоторые языки определены с такой синтаксической неоднозначностью, что семантика в конечном итоге определяется конкретной реализацией. Примеры:

  • Ранний C++
  • C++ с STL
  • AG Natural

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

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

Почти все языки обычно определяются с помощью нормативных обозначений, таких как BNF. На этом сайте есть ссылки на многие.

Частью этого является устранение неясностей и обеспечение синтаксической согласованности. Было бы трудно создавать компиляторы или рендеры без них.

Части этого входят в дизайн HTML5.2, который объясняет некоторые причины.

Другие вопросы по тегам