Простое определение «семантики», как оно обычно используется по отношению к языкам программирования / API? - PullRequest
9 голосов
/ 19 июля 2010

Сегодня мне пришло в голову, что, хотя я принял и не редко использую термин «семантика» при обращении к элементам языка и соглашениям об именах, у меня нет никакого смысла в формальном определении.

Моя попытка найти формальное определение в области программирования заставила меня вспыхнуть.

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

Это определение, однако, является моей собственной идеей. Я был специалистом по антропологии / английскому языку и никогда не учился на курсах информатики. Это преподается в CS?

Есть ли более точное определение, которое можно свести к одному или двум утверждениям, а не к исчерпывающей и утомительной статье?

Ответы [ 3 ]

6 голосов
/ 19 июля 2010

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

Как вы можете видеть на странице википедии, у вас в основном есть 3 вида семантики:

  • операционная семантика выражают значение языка, определяя, как ведет себя абстрактная виртуальная машина всякий раз, когда она выполняет термин. (например: +: извлекает два элемента из стека и складывает сумму. Это НЕ формально, и это НЕ , как вы действительно должны это учитывать, это просто дать вам идея). Это наиболее часто используемый для описания семантики "нормальных" языков программирования. Например, для Java вы можете иметь для каждого возможного термина последовательность инструкций JVM, предназначенную для выполнения для моделирования этого термина. Возможно, когда вы спросили значение семантика , это именно то, что вы искали.
  • денотационная семантика - это другой подход: для каждого термина языка вы даете значение, представленное математической функцией. Таким образом, для предыдущего примера у вас будет функция f , связанная с +, которая содержит семантическое (эффективное значение) термина
  • аксиоматическая семантика - это способ аннотировать термины вашего языка, выражая, как они изменяют действительность некоторых логических формул, которые вы хотите проверить в своей программе. Вам следует подумать о прочтении this только потому, что используемые правила вывода и аксиомы схожи в том, как вы разрабатываете этот вид семантики, но это объясняется на практике

Из этого описания вы понимаете, что семантика - это нечто, хорошо определенное внутри контекста, и вам нужен определенный контекст, в противном случае вы не сможете дать языку формальное определение того, что делают его термины.

6 голосов
/ 19 июля 2010

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

Существует много различных формальных моделей вычислений, и каждая приводит к различной форме семантики.Операционная семантика, вероятно, наиболее близка к тому, как большинство людей неофициально моделируют семантику, когда каждый фрагмент кода проходит через интерпретатор и изменяет состояние абстрактной подпрограммы.Этот подход ломается во многих моделях, где параллелизм или недетерминизм и т. Д., Поэтому существуют другие семантики, лучше подходящие для этих ситуаций.

5 голосов
/ 19 июля 2010

С точки зрения теории и практики языков программирования, языковые элементы имеют семантику.Соглашения об именах - нет.И семантика не имеет ничего общего с «верностью» чему-либо, за исключением, возможно, того, что если реализация верна, ее иногда называют «верной семантике».

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

  • Кристофер Стрейчи был тем, кто действительно выдвинул идею, что обычно это фраза (например, объявление , определение , утверждение , или выражение ) составлено из меньших подфраз, и что значение (семантика) большей фразы должно быть функцией значения составляющих подфраз.В этом стиле каждая синтаксически правильно сформированная подфраза имеет семантику.Похоже, это то, что вы ищете.

Существуют и другие стили семантики, называемые «операционной семантикой», где для данной программы семантика говорит вам, как эта программа будет выполняться наабстрактная машина (или в другом варианте семантика говорит не о том, как будет выполняться программа, а только о том, каков будет результат).

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

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

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


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

...