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

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

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

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

7 ответов


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

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

x = 5;

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

x := 5;

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

x <- 5

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

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

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

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

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


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

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

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

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


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

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

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

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

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


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


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

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

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

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


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

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

static int customerCount

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

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

dim shared customerCount as Integer

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

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