Что касается программирования, что означает семантика?
Это предложение из блог Эрика Липперта:
Учитывая эту неудачную ситуацию, имеет смысл подчеркнуть хранение сначала, а затем семантика вторая.
Легко получить определение словаря того, что означает "семантический" , но что это означает с точки зрения компьютерного жаргона?
Ответы
Ответ 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" предоставляет переменную со значением и семантикой.