Что означает семантика с точки зрения программирования?

Это предложение из Блог Эрика Липперта:

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

Легко получить словарное определение того, что означает "семантический", но что это значит с точки зрения компьютерного жаргона. ?


person Richard Nienaber    schedule 27.05.2009    source источник
comment
Этот вопрос кажется не по теме, потому что он касается общего программирования, а не проблемы программирования. Лучше всего подходит для программистов.stackexchange.   -  person nawfal    schedule 22.05.2014


Ответы (7)


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

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

x = 5;

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

x := 5;

на Паскале и как

x <- 5

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

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

If x = 5 Then Console.WriteLine("x is 5")
person Konrad Rudolph    schedule 27.05.2009
comment
Это может быть значение семантики, но я не понимаю, как это вообще соответствует контексту (или обычному использованию в этом отношении). - person Instance Hunter; 27.05.2009
comment
Не уверен, относится ли этот ответ к статье в блоге, которую опубликовал Ричард (не читал ее), но относится ли этот ответ к вопросу этой темы Что означает семантика с точки зрения программирования? то я бы сказал, что ваш ответ лаконичен и удовлетворителен. - person Petrus K.; 10.10.2011
comment
И могу ли я добавить, что в VHDL назначение сигнала (с <=) отличается от назначения переменной (с := ) в том, что хотя назначение сигнала a <= b может быть выполнено только один раз, оно говорит, что b теперь является драйвером сигнала a; Таким образом, если управляющий сигнал b изменится (по какому-либо другому назначению в будущем), то же самое произойдет и с управляемым сигналом a без какой-либо необходимости распространения назначения. По сути, вы подключаете a к b, а не устанавливаете его в текущее значение и позволяете им изменяться независимо после назначения. Это еще одна потенциальная семантика присваивания. - person Iwillnotexist Idonotexist; 11.11.2014

Семантика — это то, ЧТО мы имеем в виду, что программа должна делать. Синтаксис — это специфическое для языка ограничение на то, как мы выражаем семантику.

Теоретически, пока семантика программы верна, не имеет значения, на каком языке она была написана.

person Peter Perháč    schedule 27.05.2009

Применяется словарное определение.

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

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

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

person Instance Hunter    schedule 27.05.2009

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

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

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

    • Given that a program is meaningful, what is its meaning? Meaning has been defined mathematically in many, many different ways. A classic dynamic semantics might define a function (or a relation) between a program's inputs and the program's outputs. Meaning functions ("denotational semantics") were pioneered by Dana Scott and Christopher Strachey; meaning relations ("axiomatic semantics") were pioneered by Tony Hoare. Scott and Hoare won Turing awards; Strachey probably would have, but he died young. A good way to get introduced would be to read Tony Hoare's book Essays in Computing Science.
    • Учитывая, что программа имеет смысл, как она будет вести себя при выполнении?. Этот вид семантики обычно называется «операционной семантикой» и описывает выполнение программы на какой-либо абстрактной машине. Опять же, есть много, много разновидностей. Сегодня операционная семантика является предпочтительным инструментом, потому что существуют мощные методы доказательства, поэтому, например, с помощью операционной семантики вы можете доказать, что в управляемом коде никогда не бывает ошибок памяти. Робин Милнер получил свою награду Тьюринга частично за различные методы работы, используемые для описания параллельных или многопоточных программ (CCS и исчисление числа Пи). Его книга 1999 года по коммуникационным и мобильным системам также очень полезна, если не читать корректуру :-)

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

person Norman Ramsey    schedule 28.05.2009

Насколько я понимаю, семантика - это "то, что все это значит для человека". Это что он делает, а не как он это делает.

person Vilx-    schedule 27.05.2009
comment
Вот как я интерпретирую значение семантики и в контексте программирования. - person Petrus K.; 10.10.2011

Еще немного контекста из блога:

Поэтому в C вы сначала ставите метаданные хранилища (static int customerCount;), а не семантику (это могло быть var customerCount: static int;).

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

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

person Carl Manaster    schedule 27.05.2009

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

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

static int customerCount

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

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

dim shared customerCount as Integer

Теоретически сообщая компилятору, что у вас есть переменная с именем customerCount, которую он должен хранить и делать статически доступной, и, кстати, это целое число.

Это все действительно тонкая линия различия своего рода вещь.

person Peter Lange    schedule 27.05.2009