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

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

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

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

7 ответов

Решение

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

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

x = 5;

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

x := 5;

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

x <- 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

static int customerCount

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

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

dim shared customerCount as Integer

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

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

Другие вопросы по тегам