Очень редко можно встретить людей, которые изучают язык программирования по спецификации.Спецификация в основном нацелена на авторов компиляторов (которым необходимо придерживаться ее дословно, чтобы гарантировать правильность) и как окончательный арбитр того, что является законным в языке.Большинство языковых спецификаций чрезвычайно плотны и технически и не являются хорошим способом научиться программировать на языке.Часто только очень опытные пользователи языка действительно читают спецификацию.
Кроме того, очень немногие языки определены в качестве эталонной реализации.Большинство языков определены относительно некоторой абстрактной среды выполнения.Например, спецификация C ++ говорит, что
Семантические описания в этом международном стандарте определяют параметризованную недетерминированную абстрактную машину.Настоящий международный стандарт не предъявляет требований к структуре соответствующих реализаций.В частности, им не нужно копировать или эмулировать структуру абстрактной машины.Скорее, соответствующие реализации требуются для эмуляции (только) наблюдаемого поведения абстрактной машины, как описано ниже.
Другими словами, спецификация C ++ описывает, как программы на C ++ должны вести себя в чисто теоретическом смысле.,Это дает авторам спецификаций большую свободу в том, как они определяют язык.Например, они могут говорить об «объектах» и «указателях», не говоря, как они на самом деле должны быть реализованы.Им даже не нужно говорить, как работает физическая машина, на которой работает C ++, поскольку они могут просто определить, как машина будет вести себя так, как им хочется, и затем предоставить фактическим авторам компилятора возможность перевести эту абстрактную машину на физическую машину.
Некоторые языки определены по отношению к виртуальной машине (ярким примером этого является Java).Они могут рассказать о поведении программ на Java относительно этой виртуальной машины, рассказав, как программы на Java взаимодействуют с виртуальной машиной, а затем оставить детали реализации виртуальной машины на усмотрение разработчиков виртуальной машины.
Некоторые другие языки, такие как ML, имеют определения, которые являются чисто математическими.Семантика языка описывается как абстрактные математические преобразования между состояниями, что означает, что можно доказать свойства ML, которые нельзя было бы легко показать, если бы язык был определен относительно эталонного компилятора.
Подводя итог -Спецификации языка - это сложные документы, которые немногие программисты читают.Они в основном предназначены для авторов компиляторов и определяют программу обычно в каком-то абстрактном смысле, который не учитывает машину.Таким образом, язык может быть определен переносимым способом, поскольку вы можете сделать совместимую реализацию на любой машине, просто переведя формальное описание в операции машины.
Надеюсь, это поможет!