Type systemIn computer programming, a type system is a logical system comprising a set of rules that assigns a property called a type (for example, integer, floating point, string) to every "term" (a word, phrase, or other set of symbols). Usually the terms are various constructs of a computer program, such as variables, expressions, functions, or modules. A type system dictates the operations that can be performed on a term. For variables, the type system determines the allowed values of that term.
Uniqueness typeIn computing, a unique type guarantees that an object is used in a single-threaded way, with at most a single reference to it. If a value has a unique type, a function applied to it can be optimized to update the value in-place in the object code. Such in-place updates improve the efficiency of functional languages while maintaining referential transparency. Unique types can also be used to integrate functional and imperative programming. Uniqueness typing is best explained using an example.
Théorie des typesEn mathématiques, logique et informatique, une théorie des types est une classe de systèmes formels, dont certains peuvent servir d'alternatives à la théorie des ensembles comme fondation des mathématiques. Ils ont été historiquement introduits pour résoudre le paradoxe d'un axiome de compréhension non restreint. En théorie des types, il existe des types de base et des constructeurs (comme celui des fonctions ou encore celui du produit cartésien) qui permettent de créer de nouveaux types à partir de types préexistant.
Système nominatif de typesUn système nominatif de types est une classe majeure de système de types en programmation informatique. C'est avec lui qu'on détermine la compatibilité et l'équivalence de types par la déclaration explicite et/ou le nommage des types. On utilise les systèmes nominatifs pour déterminer si des types sont équivalents ou pour savoir si un type est un sous-type d'un autre. Ce système est en contraste avec le système structurel, où les comparaisons sont fondées sur la structure des types en question et donc ces types ne nécessitent pas de déclarations explicites.
Substructural type systemSubstructural type systems are a family of type systems analogous to substructural logics where one or more of the structural rules are absent or only allowed under controlled circumstances. Such systems are useful for constraining access to system resources such as , locks, and memory by keeping track of changes of state that occur and preventing invalid states. Several type systems have emerged by discarding some of the structural rules of exchange, weakening, and contraction: Ordered type systems (discard exchange, weakening and contraction): Every variable is used exactly once in the order it was introduced.
Sûreté du typageLa sûreté du typage est un principe permettant d'améliorer la qualité de la programmation. Dans les langages à typage statique, l'un des objectifs est d'intercepter les erreurs de type de données lors de la compilation. Un type peut être vu comme un ensemble de valeurs et un ensemble d'opérateurs. La programmation objet a introduit les notions d'objets, messages, classes, héritage. Il est tentant de faire coller les classes à des types.
Strong and weak typingIn computer programming, one of the many ways that programming languages are colloquially classified is whether the language's type system makes it strongly typed or weakly typed (loosely typed). However, there is no precise technical definition of what the terms mean and different authors disagree about the implied meaning of the terms and the relative rankings of the "strength" of the type systems of mainstream programming languages.
Pure type systemNOTOC In the branches of mathematical logic known as proof theory and type theory, a pure type system (PTS), previously known as a generalized type system (GTS), is a form of typed lambda calculus that allows an arbitrary number of sorts and dependencies between any of these. The framework can be seen as a generalisation of Barendregt's lambda cube, in the sense that all corners of the cube can be represented as instances of a PTS with just two sorts. In fact, Barendregt (1991) framed his cube in this setting.
Emprunt lexicalEn linguistique, et plus particulièrement en étymologie, lexicologie et linguistique comparée, l’emprunt lexical est un type d’emprunt consistant, pour une langue, à adopter dans son lexique un terme d’une autre langue. L’emprunt peut être direct (une langue emprunte directement à une autre langue) ou indirect (une langue emprunte à une autre langue via une ou plusieurs langues vecteurs). L’emprunt fait partie des moyens dont disposent les locuteurs pour accroître leur lexique, au même titre que le néologisme, la catachrèse ou la dérivation (voir lexicalisation pour d’autres détails).
Fondements des mathématiquesLes fondements des mathématiques sont les principes de la philosophie des mathématiques sur lesquels est établie cette science. Le logicisme a été prôné notamment par Gottlob Frege et Bertrand Russell. La mathématique pure présente deux caractéristiques : la généralité de son discours et la déductibilité du discours mathématique . En ce que le discours mathématique ne prétend qu’à une vérité formelle, il est possible de réduire les mathématiques à la logique, les lois logiques étant les lois du « vrai ».
New FoundationsEn logique mathématique, New Foundations (NF) est une théorie des ensembles axiomatique introduite par Willard Van Orman Quine en 1937, dans un article intitulé « New Foundations for Mathematical Logic », et qui a connu un certain nombre de variantes. Pour éviter le paradoxe de Russell, le principe de compréhension est restreint aux formules stratifiées, une restriction inspirée de la théorie des types, mais où la notion de type est implicite.
Correction (logique)En logique, la forme d'une argumentation déductive est correcte si et seulement si elle est valide et que toutes ses prémisses sont effectivement vraies. En logique formelle, un système logique est correct si on peut lui associer une sémantique (on dit aussi un modèle) qui le justifie. La correction indique donc que les règles d’un tel système mettent en œuvre des raisonnements qui font du sens, puisqu'on peut les interpréter. Le terme de correction peut ici être pris dans son sens de qualité de ce qui est correct.
Programmation concurrenteLa programmation concurrente est un paradigme de programmation tenant compte, dans un programme, de l'existence de plusieurs piles sémantiques qui peuvent être appelées threads, processus ou tâches. Elles sont matérialisées en machine par une pile d'exécution et un ensemble de données privées. La concurrence est indispensable lorsque l'on souhaite écrire des programmes interagissant avec le monde réel (qui est concurrent) ou tirant parti de multiples unités centrales (couplées, comme dans un système multiprocesseurs, ou distribuées, éventuellement en grille ou en grappe).
Théorème de complétude de GödelEn logique mathématique, le théorème de complétude du calcul des prédicats du premier ordre dresse une correspondance entre la sémantique et les démonstrations d'un système de déduction en logique du premier ordre. En termes intuitifs le théorème de complétude construit un pont entre vérité et démontrabilité formelle : tout énoncé vrai est démontrable.
Complétude (logique)En logique mathématique et métalogique, un système formel est dit complet par rapport à une propriété particulière si chaque formule possédant cette propriété peut être prouvée par une démonstration formelle à l'aide de ce système, c'est-à-dire par l'un de ses théorèmes ; autrement, le système est dit incomplet. Le terme « complet » est également utilisé sans qualification, avec des significations différentes selon le contexte, la plupart du temps se référant à la propriété de la validité sémantique.
Inférence de typesL'inférence de types est un mécanisme qui permet à un compilateur ou un interpréteur de rechercher automatiquement les types associés à des expressions, sans qu'ils soient indiqués explicitement dans le code source. Il s'agit pour le compilateur ou l'interpréteur de trouver le type le plus général que puisse prendre l'expression. Les avantages à disposer de ce mécanisme sont multiples : le code source est plus aéré, le développeur n'a pas à se soucier de retenir les noms de types, l'interpréteur fournit un moyen au développeur de vérifier (en partie) le code qu'il a écrit et le programme est peu modifié en cas de changement de structure de données.
Programmation orientée prototypeLa programmation orientée prototype est une forme de programmation orientée objet sans classe, fondée sur la notion de prototype. Un prototype est un objet à partir duquel on crée de nouveaux objets. Dans le langage de programmation orientée prototype Self, les propriétés d'un objet, qu'elles renvoient à des attributs ou à des méthodes, sont appelés slots ; il n'y a pas la même distinction entre les slots de données et les slots de code qu'on a avec les classes.
Passage de messagesLe modèle de passage de messages (message passing en anglais) est un modèle de communication entre ordinateurs ou entre processus à l'intérieur d'un même ordinateur. Il réalise l’envoi de messages simples. Il constitue la couche de base des Middleware Orientés Messages. Au-dessus de cette couche, on trouve d'autres couches de middleware de plus en plus perfectionnées et qui sont : La (message queueing en anglais) qui ajoute la notion de persistance au passage de messages ; Le modèle par abonnement (publish-subscribe en anglais), qui utilise les fonctions du passage de messages ou des files d'attente de message et qui ajoute la notion d’anonymat et d’abonnement.
Stratégie d'évaluation (informatique)Un langage de programmation utilise une stratégie d'évaluation pour déterminer « quand » évaluer les arguments à l'appel d'une fonction (ou encore, opération, méthode) et « comment » passer les arguments à la fonction. Par exemple, dans l'appel par valeur, les arguments doivent être évalués avant d'être passés à la fonction. La stratégie d'évaluation d'un langage de programmation est spécifiée par la définition du langage même. En pratique, la plupart des langages de programmation (Java, C...
Futures (informatique)En programmation, les notions de futurs (« futures »), promesses (« promises ») ou délais (« delay ») font référence à des techniques de synchronisation pour certains langages concurrents. Il s'agit d'abstractions qui servent de proxy pour un résultat non-connu au moment où il est référencé pour la première fois, car son calcul ou son obtention se feront « plus tard » à l'exécution. Le terme générique de promise (« promesse ») a été proposé par Daniel P. Friedman et David Wise en 1976 ; Peter Hibbard le dénommait eventual à la même époque.