Семантическая спецификация языка Си - PullRequest
4 голосов
/ 05 марта 2011

Wikipidea говорит, что Perl имеет доминирующую реализацию, которая используется в качестве ссылки для его спецификации, в то время как язык C определяется стандартом ANSI ISO.

Я выучил язык C, не читая ни одной строки стандарта, это нормально ...?

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

Ответы [ 4 ]

7 голосов
/ 05 марта 2011

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

Кроме того, очень немногие языки определены в качестве эталонной реализации.Большинство языков определены относительно некоторой абстрактной среды выполнения.Например, спецификация C ++ говорит, что

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

Другими словами, спецификация C ++ описывает, как программы на C ++ должны вести себя в чисто теоретическом смысле.,Это дает авторам спецификаций большую свободу в том, как они определяют язык.Например, они могут говорить об «объектах» и «указателях», не говоря, как они на самом деле должны быть реализованы.Им даже не нужно говорить, как работает физическая машина, на которой работает C ++, поскольку они могут просто определить, как машина будет вести себя так, как им хочется, и затем предоставить фактическим авторам компилятора возможность перевести эту абстрактную машину на физическую машину.

Некоторые языки определены по отношению к виртуальной машине (ярким примером этого является Java).Они могут рассказать о поведении программ на Java относительно этой виртуальной машины, рассказав, как программы на Java взаимодействуют с виртуальной машиной, а затем оставить детали реализации виртуальной машины на усмотрение разработчиков виртуальной машины.

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

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

Надеюсь, это поможет!

5 голосов
/ 05 марта 2011

Большинство языков программирования изучаются без чтения стандарта или справочного документа по языку / проектного документа (если таковой существует).

Стандартом может быть , заданный формально - в очень строгой манере, которая может быть математически доказана как Тьюринг завершен .

3 голосов
/ 05 марта 2011

Изучение C (и аналогично определенных языков, таких как C ++) без чтения стандарта совершенно нормально.

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

Гораздо проще выучить язык из одного шага, например из книги, предназначенной для программистов. Конечно, автор должен был проверить, что то, что он описывает, является правильным в соответствии со стандартом.

Некоторые утверждают, что для разрешения некоторых вопросов полезно иметь стандарт. Я не пробовал этого, за исключением некоторых свободно доступных документов «языковых отчетов», которые обычно не проходили через официальную систему стандартизации (и поэтому, вероятно, немного более доступны и немного менее педантичны).

В большинстве случаев, если у вас есть вопрос, связанный со стандартами, вероятно, лучше поискать ответ (а если это не удастся, спросите) здесь.

1 голос
/ 05 марта 2011

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

Так я выучил SQL,Я узнал стандартный.Плохая сторона этого заключается в том, что всякий раз, когда я использую другую СУБД, мне приходится изучать различия в ее SQL-стиле.К счастью, наиболее распространенная часть SQL везде одинакова.

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

Хороший стандарт - это не просто документ на естественном языке - это довольно формальный документ.Считаете ли вы закон просто документом на естественном языке?

Я изучил язык C, не читая ни одной строки стандарта, это нормально ...?

Да,Ну ... да, если вы действительно хотите что-то кодировать.

...