С точки зрения программирования, что означает семантика? - PullRequest
23 голосов
/ 27 мая 2009

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

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

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

Ответы [ 7 ]

26 голосов
/ 27 мая 2009

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

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

x = 5;

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

x := 5;

в Паскале и как

x <- 5

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

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

If x = 5 Then Console.WriteLine("x is 5")
6 голосов
/ 27 мая 2009

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

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

6 голосов
/ 27 мая 2009

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

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

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

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

4 голосов
/ 29 мая 2009

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

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

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

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

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

3 голосов
/ 27 мая 2009

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

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

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

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

3 голосов
/ 27 мая 2009

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

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

static int customerCount

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

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

dim shared customerCount as Integer

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

Это все действительно отличительные черты вроде вещи.

3 голосов
/ 27 мая 2009

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

...