Про интерпретируемые языки
Sep. 3rd, 2020 01:27 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
За что я люблю C, так это за невозможность прострелить себе ногу способом «не то имя переменной». Есть масса других, не менее романтических, но этого — нет. У Perl есть use strict и -wc, у Python приходится прикручивать внешние линтеры.
Тут пришлось немного попрограммировать на bash, и после толпы ошибок системы «забыл пробел перед скобкой» я нашёл утилиту shellcheck - линтер для shell-скриптов. Написан на хаскелле, но это я переживу.
Ловит глупые и не очень ошибки. Я его поставил из buster-backports и запускаю с -S warning (в более древних версиях этой опции нет), а то он слишком много говорит. Понимает несколько shell-овских диалектов.
Тут пришлось немного попрограммировать на bash, и после толпы ошибок системы «забыл пробел перед скобкой» я нашёл утилиту shellcheck - линтер для shell-скриптов. Написан на хаскелле, но это я переживу.
Ловит глупые и не очень ошибки. Я его поставил из buster-backports и запускаю с -S warning (в более древних версиях этой опции нет), а то он слишком много говорит. Понимает несколько shell-овских диалектов.
no subject
Date: 2020-09-03 03:10 pm (UTC)А мелкий скрипт просматривается глазами, и всё равно ведь запускать нужно.
Насчёт Питона, то в принципе несложно добавить проверку при компиляции модуля что каждому чтению глобального имени соответствует создание глобального имени или имя в builtins. Но есть трудности:
1. «from something import *» не так уж редки. Это делает проверку невозможной.
2. «globals().update()» тоже используется при массовой генерации имён. И это отследить труднее чем первый случай.
3. Есть и другие случаи динамического создания глобальных переменных. То что они редки не оправдание для компилятора.
4. Главное — это разрушит годами работающие скрипты, которые содержат неиспользуемые функции или код «закомментированный» при помощи «if 0:».
Для внешнего линтера это меньшая проблема. Он может учитывать код всего проекта, а не одного файла, его предупреждения опциональны и могут быть отключены в настройках. Компилятор должен без возражения принимать любой код, соответствующий спецификации, который не является заведомой ошибкой. Поэтому он производит так мало синтаксических предупреждений.
no subject
Date: 2020-09-04 10:58 am (UTC)Мне сразу вспомнился патч Бармина в перловой версии
Upd: что за хрень? DW разучился работать с HTML?
no subject
Date: 2020-09-04 11:56 am (UTC)