Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

x = 5;

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

x := 5;

в Паскале и

x <- 5

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

static int customerCount

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

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

dim shared customerCount as Integer

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

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

Ответ 7

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

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

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

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