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