lint (software)

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

lint, o linter, è uno strumento che analizza il codice sorgente per evidenziare errori di programmazione, bug, errori stilistici e costrutti sospetti[1]. Il termine deriva dall'omonimo strumento Unix che esamina il codice sorgente del linguaggio C[2].

Storia[modifica | modifica wikitesto]

Stephen C. Johnson, uno scienziato informatico di Bell Labs lo ha inventato, nel 1978, mentre eseguiva il debug della grammatica yacc che stava scrivendo per C e si stava occupando di problemi di portabilità derivanti dal porting di Unix su una macchina a 32 bit[3][2]. Il termine lint ("lanugine", "pelucchi") deriva dal nome dei frammenti indesiderabili di fibre e lanugine che si accumulano sugli abiti. Nel 1979, il lint fu usato per la prima volta al di fuori del Bell Labs nella settima versione (V7) del sistema operativo Unix .

Nel corso degli anni, sono state sviluppate varie versioni di lint per molti compilatori C e C++, e, anche se i compilatori dei nostri giorni includono funzioni simili a quelle di un lint, anche gli strumenti simili al lint hanno via via migliorato le loro capacità. Ad esempio, PC-Lint di Gimpel, utilizzato per analizzare il codice sorgente C++, viene ancora venduto anche se è stato introdotto nel 1985[3].

Panoramica[modifica | modifica wikitesto]

L'analisi eseguita da strumenti simili al lint può anche essere eseguita da un compilatore ottimizzante, che mira a generare codice più veloce o efficiente. Nel suo documento originale del 1978, Johnson affrontò questo problema, concludendo che "in generale avere due programmi è una buona cosa" perché si concentravano su cose diverse, permettendo così al programmatore di "concentrarsi in una fase del processo di programmazione esclusivamente sugli algoritmi, sulle strutture di dati e sulla correttezza del programma, e successivamente implementare a posteriori, con l'aiuto di lint, le proprietà desiderabili di universalità e portabilità"[2].

Gli strumenti tipo lint si sono evoluti per rilevare una varietà ancora più ampia di costrutti sospetti rispetto a quanto fanno i moderni compilatori: tra questi "avvisi su errori di sintassi, uso di variabili non dichiarate, chiamate a funzioni deprecate, convenzioni di spaziatura e formattazione, uso improprio degli scope, fallthrough implicito nelle istruzioni switch, intestazioni di licenza mancanti, [e] ... caratteristiche pericolose del linguaggio"[4].

Gli strumenti tipo lint sono particolarmente utili per linguaggi interpretati come JavaScript e Python. Poiché tali linguaggi mancano di una fase di compilazione che visualizzi un elenco di errori prima dell'esecuzione, tali strumenti possono anche essere utilizzati come semplici debugger per errori comuni (ad esempio discrepanze sintattiche) ma anche per errori difficili da trovare come heisenbug (segnalando il codice sospetto come "possibili errori")[5].

Generalmente l'analisi del codice sorgente eseguita dagli strumenti tipo lint è una analisi statica[6].

Note[modifica | modifica wikitesto]

  1. ^ About SublimeLinter — SublimeLinter 3.4.24 documentation, su sublimelinter.com. URL consultato il 18 novembre 2019 (archiviato dall'url originale il 21 gennaio 2018).
  2. ^ a b c Stephen C. Johnson, Lint, a C Program Checker, su citeseerx.ist.psu.edu, 25 ottobre 1978, pp. 78–1273. Ospitato su CiteSeer.
  3. ^ a b Richard Morris, Stephen Curtis Johnson: Geek of the Week, in Red Gate Software, 1º ottobre 2009. URL consultato il 19 gennaio 2018.
  4. ^ Arcanist User Guide: Lint, su Phabricator. URL consultato il 19 gennaio 2018.
  5. ^ (EN) ESLint - Customizable JavaScript linting tool (1), su theCodeCampus, 9 giugno 2015. URL consultato il 21 aprile 2019.
  6. ^ Nigel Jones, How to Use Lint for Static Code Analysis, in Barr Group, 1º maggio 2002.

Bibliografia[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  • LINT(1), in FreeBSD General Commands Manual (FreeBSD 11.1), 23 marzo 2015.
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica