Lint — это термин в компьютерной науке , обозначающий инструмент статического анализа кода, используемый для обозначения ошибок программирования, ошибок , стилистических ошибок и подозрительных конструкций. [1] Этот термин происходит от утилиты Unix , которая исследовала исходный код языка C. [2] Программа, выполняющая эту функцию, также известна как «линтер».
Стивен С. Джонсон , ученый-компьютерщик из Bell Labs , придумал термин «lint» в 1978 году во время отладки грамматики yacc , которую он писал для C, и решения проблем переносимости , возникающих при переносе Unix на 32-битную машину. [5] [2] Этот термин был заимствован из слова «ворс» , крошечных кусочков волокна и пуха, сбрасываемых одеждой, поскольку написанная им команда действовала как ловушка для ворса в сушилке для одежды, улавливая ненужные волокна, оставляя при этом целые ткани нетронутыми. . В 1979 году lint-программирование было впервые использовано за пределами Bell Labs, в седьмой версии ( V7 ) Unix.
За прошедшие годы для многих компиляторов C и C++ были разработаны различные версии lint , и хотя современные компиляторы имеют функции, подобные lint, их возможности также расширились. Например, PC-Lint от Gimpel , представленный в 1985 году и использовавшийся для анализа исходного кода C++, до сих пор продается. [5]
В своей оригинальной статье 1978 года Джонсон изложил свои доводы в пользу создания отдельной программы для обнаружения ошибок, отличной от той, которую он анализировал: «...общая идея наличия двух программ является хорошей» [потому что они концентрируются на разных вещах, тем самым позволяя программисту] «концентрироваться на одном этапе процесса программирования исключительно на алгоритмах , структурах данных и правильности программы, а затем позже модифицировать с помощью lint желаемые свойства универсальности и переносимости». [2]
Анализ, выполняемый lint-подобными инструментами, также может выполняться оптимизирующим компилятором , целью которого является создание более быстрого кода. Несмотря на то, что современные компиляторы эволюционировали и теперь включают в себя многие исторические функции lint, подобные lint инструменты также развиваются для обнаружения еще более широкого спектра подозрительных конструкций. К ним относятся «предупреждения о синтаксических ошибках, использовании необъявленных переменных , вызовах устаревших функций, соглашениях о пробелах и форматировании, неправильном использовании области видимости, неявных провалах в операторах переключения , отсутствующих заголовках лицензий и [и]... опасных функциях языка». [6]
Lint-подобные инструменты особенно полезны для динамически типизированных языков, таких как JavaScript и Python . Поскольку интерпретаторы таких языков обычно не соблюдают стольких и строгих правил во время выполнения , инструменты линтера также могут использоваться в качестве простых отладчиков для поиска распространенных ошибок (например, синтаксических несоответствий), а также труднообнаружимых ошибок, таких как ошибки Гейзенбага ( например, синтаксические несоответствия). привлечение внимания к подозрительному коду как к «возможным ошибкам»). [7] Инструменты, подобные Lint, обычно выполняют статический анализ исходного кода. [8]
Инструменты, подобные Lint, также были разработаны для других аспектов разработки программного обеспечения: обеспечения соблюдения грамматики и руководств по стилю для исходного кода данного языка. [ нужна цитация ] Некоторые инструменты (например, ESLint ) также позволяют автоматически исправлять правила: определение правила также может сопровождаться определением преобразования, которое делает правило более не срабатываемым. Правила стиля, скорее всего, будут иметь автоматическое исправление. Если линтер запускается в режиме «исправить все» для файла, который запускает только правила форматирования, линтер будет действовать точно так же, как форматтер.