En termes de programmation, que signifie la sémantique?

Ceci est une phrase du blog de Eric Lippert :

Compte tenu de cette situation malheureuse, il sens pour souligner le stockage mécanisme d'abord, puis l' sémantique seconde.

, Il est facile d'obtenir un définition du dictionnaire de ce que la "sémantique", mais que signifie en termes de jargon informatique?

23
demandé sur Richard Nienaber 2009-05-27 21:00:29

7 réponses

Mais qu'est-ce que cela signifie en termes de jargon informatique?

Essentiellement la même chose. Exemple:

x = 5;

Ce qui précède est la syntaxe (représentation). Le sens (c'est à dire la sémantique) de ce terme est d'affecter la valeur 5 à un symbole (variable, peu importe) appelé x. Différentes langues offrent des syntaxes différentes pour fournir la même sémantique. Par exemple, l'affectation ci-dessus serait écrite comme

x := 5;

En Pascal, et comme

x <- 5

Dans plusieurs autres langues. Dans tous les cas, la signification est essentiellement la même. Mais parfois, les mêmes syntaxes peuvent aussi avoir des significations différentes, selon la langue et / ou le contexte. VB par exemple redéfinit l'opérateur = pour signifier deux choses différentes. Tout d'abord, une mission, comme ci-dessus.

Deuxièmement, dans le code sippet suivant, plutôt que d'attribuer, il prend la signification de comparant deux valeurs:

If x = 5 Then Console.WriteLine("x is 5")
25
répondu Konrad Rudolph 2009-05-27 17:01:47

La sémantique est ce que nous voulons dire que le programme devrait faire. Sytax est une contrainte spécifique au langage sur la façon dont nous exprimons la sémantique.

En théorie, tant que la sémantique d'un programme est correcte, peu importe la langue utilisée pour l'écrire.

6
répondu Peter Perháč 2009-05-27 17:10:20

La définition du dictionnaire s'applique.

La sémantique est (sont?) tout sur la signification des mots.

Par exemple, si vous utilisez le type.net KeyValuePair pour représenter autre chose qu'une clé et une valeur, vous avez un problème sémantique. Il peut fonctionner... c'est peut-être la meilleure solution, mais ce n'est pas sémantiquement précis.

C'est exactement ce dont il parle dans ce billet de blog. Nous listons d'abord les types de retour dans les langages de type C, mais vraiment le retour vient en dernier. C'est sémantiquement inexact.

6
répondu Instance Hunter 2009-05-27 17:12:19

En termes de jargon de langage de programmation, il existe plusieurs notions de sémantique:

  • La sémantique statique vous indique quels programmes grammaticaux sont également bien formés. De nombreux langages n'ont pas de sémantique statique (Scheme, Ruby, Python, Icon, Lua, Perl) ou ont une sémantique statique qui consiste principalement à implémenter un système de type (Java, C, C#, Haskell). "Déclaration requise avant l'emploi" est une autre sémantique statique. Sémantique statique répond à la question "ce programme est-il significatif?" et le fait au moment de la compilation.

  • La sémantique dynamique vous indique l'une des deux choses suivantes:

    • étant Donné qu'un programme est significatif, quelle est sa signification? Sens a été défini mathématiquement dans beaucoup, beaucoup de manières différentes. Une sémantique dynamique classique peut définir une fonction (ou une relation) entre les entrées d'un programme et les sorties du programme. Signification des fonctions ("dénotationnel la sémantique") ont été lancées par Dana Scott et Christopher Strachey; les relations de sens ("sémantique axiomatique") ont été lancées par Tony Hoare. Scott et Hoare ont remporté des Prix Turing; Strachey aurait probablement, mais il est mort jeune. Une bonne façon de se présenter serait de lire le livre de Tony Hoare Essays in Computing Science.
    • étant Donné qu'un programme est significatif, comment se comporter lors de l'exécution?. Ce type de sémantique est généralement appelé un "sémantique opérationnelle" et décrit l'exécution du programme, sur une sorte de machine abstraite. Encore une fois, il y a beaucoup, beaucoup de variétés. Aujourd'hui, la sémantique opérationnelle est l'outil de choix car il existe de puissantes techniques de preuve, par exemple, en utilisant la sémantique opérationnelle, vous pouvez prouver qu'il n'y a jamais d'erreur de mémoire dans le code géré. Robin Milner a obtenu son Prix Turing en partie pour différentes techniques opérationnelles utilisées pour décrire les programmes simultanés ou multithread (CCS et le calcul pi). Son 1999 livre sur communication et les systèmes mobiles est également une très bonne lecture si vous sautez les preuves: -)

Si vous lisez le mot "sémantique" dans un manuel ou un article, et que le contexte est anglais informel plutôt qu'une description mathématique précise, l'auteur fait probablement référence au comportement opérationnel dynamique-si vous voulez, une sémantique opérationnelle décrite de manière informelle. Ce genre de description informelle peut être très utile pour les compilateurs et programmeur.

4
répondu Norman Ramsey 2009-05-28 23:29:53

Si je comprends bien, la sémantique est "ce que tout cela signifie pour un humain". C'est le ce, il fait partie de la comment, il le fait.

3
répondu Vilx- 2009-05-27 17:02:42

Un peu plus de contexte du blog:

Donc en C vous mettez le stockage métadonnées d'abord (int statique customerCount;) plutôt que le sémantique d'abord (cela aurait pu être var customerCount: static int;).

Il dit que "static int" apparaît avant "customerCount". L'appel de "static int" stockage des métadonnées et "customerCount" sémantique. Les métadonnées de stockage sont des informations sur ce que la variable contient - implicites est le nombre de bits qu'il occupe, les valeurs qu'il peut contenir, s'il est partagé entre les instances et sa volatilité.

La sémantique , le nom de la variable, est une information pour les lecteurs du code sur ce qui doit être stocké dans la variable. Ce que la variable signifie. Vous pourriez l'appeler "x" et le programme fonctionne tout aussi bien, mais il serait difficile pour un programmeur de le comprendre. L'appeler "customerCount" donne une signification à la variable, et c'est sémantique.

3
répondu Carl Manaster 2009-05-27 17:09:47

En d'autres termes, compte tenu du contexte de l'article, il dit qu'il aurait été préférable pour les développeurs de C# de se concentrer sur la façon dont ils stockeraient les données en interne lorsqu'une variable a été déclarée et de ne pas se soucier de spécifier la méthode précise de déclaration de la variable.

En d'autres termes, ce faisant, dans C#

static int customerCount

Vous dites au compilateur de préparer le stockage pour un entier accessible statiquement, puis de lui dire d'étiqueter ce stockage comme customerCount

Alors que dans VB vous utiliseriez cette ligne

dim shared customerCount as Integer

Dire au compilateur, en théorie, que vous avez une variable appelée customerCount qu'elle devrait stocker et rendre disponible statiquement, et oh au fait, il se trouve être un entier.

Tout cela vraiment une distinction fine ligne un peu chose.

3
répondu Peter Lange 2013-05-23 10:24:28