lint (en lettres minuscules ; de l'anglais lint : « touffe hirsute » ) est une commande UNIX de préprocesseur permettant l’analyse statique de code source en langage C.
L'utilitaire lint a été l'un des premiers outils d'analyse statique de code source. Sa création visait à remédier aux faiblesses des compilateurs des années 1970-1980, qui présupposaient que les programmes ne comportaient que des erreurs ponctuelles et n'effectuaient que des vérifications rudimentaires. Outre la traque de certaines fautes récurrentes, comme l’adressage de variables non-initialisées, lint se consacrait pour l’essentiel à la rectification des indentations anarchiques de code source et à la détection de tours stylistiques et de syntaxes non-portables, comme le recours à des particularités du système d'exploitation ou d'un compilateur.
Développé à l'origine par les Laboratoires Bell pour le langage C, lint fut incorporé en 1979 à la version 7 (V7) du système d'exploitation Unix comme composant du PCC, le « compilateur C portable. » Ce fut le second compilateur pour système UNIX, après le compilateur du PDP-11.
Dès 1985, une version de lint pour PC était disponible et est commercialisée depuis comme un logiciel. lint reste à ce jour l'un des plus vieux outils de développement logiciel encore en usage.
Plusieurs des vérifications qu'effectuait lint sont aujourd'hui, compte tenu des progrès dans la génération de code natif, intégrées aux compilateurs (moyennant parfois l'activation d'une option, comme -Wall pour GCC). Ces compilateurs doivent en effet, pour optimiser l'exécutable, effectuer une analyse statique bien plus poussée que leur ancêtre UNIX.
Plusieurs vérifications de lint sont désormais inutiles, car la standardisation des différents langages de programmation a beaucoup réduit les problèmes de portabilité. L'utilisation de plates-formes de développement modernes et d’éditeurs de texte contextuels avec analyseur syntaxique et indentation automatique permet par ailleurs de produire d'emblée un code source plus sûr et agréable à relire.
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.
In 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.
vignette|upright=1|Le Mac triste : écran indiquant un code erreur sur les premières versions du MacIntosh d'Apple. En informatique, un bug (prononcé en français : ) ou bogue est un défaut de conception d'un programme informatique à l'origine d'un dysfonctionnement. La gravité du dysfonctionnement peut aller de bénigne, causant par exemple des défauts d'affichage mineurs à majeure, tels un plantage du système pouvant entraîner de graves accidents, par exemple la destruction en vol de la première fusée Ariane 5, en 1996.
Rust est un langage de programmation compilé multi-paradigme conçu et développé par Mozilla Research depuis 2010. Il a été conçu pour être « un langage fiable, concurrent, pratique », supportant les styles de programmation purement fonctionnel, modèle d'acteur, procédural, ainsi qu'orienté objet sous certains aspects. En 2020, ses domaines de prédilection sont la programmation système, les applications en ligne de commande, les applications Web via WebAssembly, les services réseaux et les systèmes embarqués.
Fuzzing is one of the most popular and effective techniques for finding software bugs. To detect triggered bugs, fuzzers leverage a variety of sanitizers in practice. Unfortunately, sanitizers target long running experiments-e.g., developer test suites-not ...
USENIX ASSOC2020
This thesis demonstrates that it is feasible for systems code to expose a latency interface that describes its latency and related side effects for all inputs, just like the code's semantic interface describes its functionality and related side effects.Sem ...
EPFL2023
, , , ,
Programming languages and systems have failed to address the security implications of the increasingly frequent use of public libraries to construct modern software. Most languages provide tools and online repositories to publish, import, and use libraries ...