2009-05-27 2 views
23

Это предложение от Eric Lippert's blog:Что касается программирования, что означает семантика?

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

Легко понять, что означает «семантический», но что это означает с точки зрения компьютерного жаргона?

+2

Этот вопрос не соответствует теме, поскольку речь идет о общем программировании, а не о проблеме программирования. Лучше всего подходит для programers.stackexchange. – nawfal

ответ

25

но что это означает с точки зрения компьютерного жаргона?

По существу то же самое. Пример:

x = 5; 

Выше приведено синтаксис (представление). Значение , означающее (т. Е. Семантика) этого термина, означает присвоение значению 5 символу (переменному, независимо), который называется x. Различные языки предлагают разные синтаксисы для обеспечения той же семантики. Например, указанное назначение будет записано как

x := 5; 

в Паскале, а также

x <- 5 

на нескольких других языках. Во всех случаях значение означает, по существу, одно и то же. Но иногда одни и те же синтаксисы могут также иметь разные значения, в зависимости от языка и/или контекста. Например, VB переопределяет оператор equals для обозначения двух разных вещей. Во-первых, назначение, как и выше.

Во-вторых, в следующем коде гренок, а не назначение, оно принимает значение сравнения два значения:

If x = 5 Then Console.WriteLine("x is 5") 
+0

Это может быть смысл «семантического», но я не вижу, как он соответствует контексту (или обычному использованию в этом отношении) вообще. –

+2

Не уверен, относится ли этот ответ к статье в блоге, которую Ричард опубликовал (не прочитал), но если этот ответ относится к вопросу об этой теме «Что касается программирования, что означает семантика?» то я бы сказал, что ваш ответ лаконичен и удовлетворен. –

+0

И могу ли я добавить, что в VHDL _signal присваивание_ (_with_ '<=') отличается от _variable assign_ (_with_ ': =') тем, что, когда присвоение сигнала 'a <= b' может быть выполнено только один раз, это говорит что 'b' теперь является _driver_ сигнала' a'; Таким образом, если управляющий сигнал 'b' изменяется (по другому назначению в будущем), то так же будет ведомый сигнал' a', без необходимости «распространять» назначение. Фактически вы подключаете 'a' к' b', а не устанавливаете его на текущее значение и позволяете им изменять независимо после назначения. Это еще одна потенциальная семантика задания. –

3

Как я понимаю, семантика «что все это означает, что человеку» , Это , что это часть, а не , как это делается.

+1

Вот как я интерпретирую смысл семантики в контексте программирования. –

6

Используется определение словаря.

Семантика есть (есть?) Все о значении слов.

Например, если вы используете .NET-тип KeyValuePair для представления чего-то ДРУГОГО, кроме ключа и значения, у вас есть семантическая проблема. Он может работать ... это может быть лучшее решение, но оно не является семантически точным.

Это именно то, о чем он говорит в этом сообщении в блоге. Сначала мы возвращаем типы возвращаемых данных на языках C-типа, но на самом деле возвращение приходит последним. Это семантически неточно.

3

Другими словами, учитывая контекст статьи, он говорит, что разработчикам C# было бы лучше сосредоточиться на том, как они будут хранить данные внутри, когда объявлена ​​переменная, и не заботятся о ней с указанием точного метода объявления переменной.

Других слов, делая это в C#

static int customerCount 

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

, тогда как в VB вы будет использовать эту строку

dim shared customerCount as Integer 

комментируя теоретически, что у вас есть переменная customerCount, что он должен хранить и делать статически доступными, и, кстати, это, оказывается, Integer.

Все это очень тонкое различие в линии.

3

Немного больше контекста из блога:

Поэтому в C вы положили метаданные хранения первый (статический Int customerCount;), а не семантики первых (это могло бы быть вар customerCount: статический int;).

Он говорит, что перед «customerCount» появляется «статический int». Вызов «статический int» метаданные хранения и «customerCount» семантика. Метаданные хранения - это информация о том, что содержит переменная - неявное в ней - сколько бит она занимает, какие значения она может содержать, независимо от того, делится ли она между экземплярами и ее волатильность.

Семантика , имя переменной - это информация для читателей кода о том, что должно храниться в переменной. Какая переменная означает. Вы можете назвать это «x», и программа будет работать так же хорошо, но программисту это будет сложно понять. Вызов «customerCount» предоставляет переменную со значением, и это семантика.

6

Семантика - это то, что мы подразумеваем под программой. Sytax - это ограничение, специфичное для языка, как мы выражаем семантику.

В теории, если семантика программы правильная, не имеет значения, какой язык использовался для ее записи.

4

С точкой зрения языка программирования жаргона существует несколько понятий семантики:

  • Статической семантика говорит вам, какие программы, которые грамматические также хорошо образованная. Многие языки либо не имеют статической семантики (Scheme, Ruby, Python, Icon, Lua, Perl), либо имеют статическую семантику, которая в основном связана с внедрением системы типа (Java, C, C#, Haskell). «Декларация, требуемая до использования», является еще одной возможной статической семантикой.Статическая семантика отвечает на вопрос «эта программа значимая?» и делает это во время компиляции.

  • Динамическая семантика говорит вам один из двух вещей:

    • Учитывая, что программа имеет смысл, чем ее смысл?Значение было определено математически многими, разными способами. Классическая динамическая семантика может определять функцию (или отношение) между входами программы и выходами программы. Значимые функции («денотационная семантика») были впервые применены Даной Скоттом и Кристофером Стрэчи; означающие отношения («аксиоматическая семантика») были впервые выдвинуты Тони Хоаре. Скотт и Хоар выиграли награды Тьюринга; Вероятно, Страчай, но он умер молодым. Хорошим способом познакомиться с ним станет чтение книги Тони Хора Эссе в вычислительной науке.
    • Учитывая, что программа имеет смысл, как она будет вести себя при выполнении?. Такая семантика обычно называется «оперативной семантикой» и описывает выполнение программы на какой-либо абстрактной машине. Опять же, существует много и много разновидностей. Сегодня операционная семантика является инструментом выбора, потому что существуют мощные методы доказательства, поэтому, например, используя оперативную семантику, вы можете доказать, что в управляемом коде никогда не происходит ошибка памяти. Робин Милнер получила его Премия Тьюринга частично за различные методы работы, используемые для описания параллельных или многопоточных программ (CCS и pi-исчисление). Его 1999 книги по проходным и мобильным системам также очень хорошо читать, если вы пропустите доказательства :-)

Если вы читаете слово «семантику» в ручных или статьях, и контекст является неформальным английским, а не точным математическим описанием, автор, вероятно, ссылается на динамическое оперативное поведение —, если вы это сделаете, неформальная описательная оперативная семантика. Такое неофициальное описание может быть весьма полезным для компиляторов и программистов.

Смежные вопросы