beldmit: (Программизм)
[personal profile] beldmit
За что я люблю C, так это за невозможность прострелить себе ногу способом «не то имя переменной». Есть масса других, не менее романтических, но этого — нет. У Perl есть use strict и -wc, у Python приходится прикручивать внешние линтеры.

Тут пришлось немного попрограммировать на bash, и после толпы ошибок системы «забыл пробел перед скобкой» я нашёл утилиту shellcheck - линтер для shell-скриптов. Написан на хаскелле, но это я переживу.

Ловит глупые и не очень ошибки. Я его поставил из buster-backports и запускаю с -S warning (в более древних версиях этой опции нет), а то он слишком много говорит. Понимает несколько shell-овских диалектов.

Date: 2020-09-03 03:10 pm (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4
Для чего-то средне-крупного тесты обязательны, а линтеры желательны. Время запуска юнит-тестов сравнимо с временем компиляции на Си. Думаю, здесь баш на баш.

А мелкий скрипт просматривается глазами, и всё равно ведь запускать нужно.

Насчёт Питона, то в принципе несложно добавить проверку при компиляции модуля что каждому чтению глобального имени соответствует создание глобального имени или имя в builtins. Но есть трудности:

1. «from something import *» не так уж редки. Это делает проверку невозможной.
2. «globals().update()» тоже используется при массовой генерации имён. И это отследить труднее чем первый случай.
3. Есть и другие случаи динамического создания глобальных переменных. То что они редки не оправдание для компилятора.
4. Главное — это разрушит годами работающие скрипты, которые содержат неиспользуемые функции или код «закомментированный» при помощи «if 0:».

Для внешнего линтера это меньшая проблема. Он может учитывать код всего проекта, а не одного файла, его предупреждения опциональны и могут быть отключены в настройках. Компилятор должен без возражения принимать любой код, соответствующий спецификации, который не является заведомой ошибкой. Поэтому он производит так мало синтаксических предупреждений.

Date: 2020-09-04 10:58 am (UTC)
livelight: (hot)
From: [personal profile] livelight
> А мелкий скрипт просматривается глазами, и всё равно ведь запускать нужно

Мне сразу вспомнился патч Бармина в перловой версии

Upd: что за хрень? DW разучился работать с HTML?
Edited Date: 2020-09-04 11:00 am (UTC)

Date: 2020-09-04 11:56 am (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4
Поэтому программистам и приплачивают за вредность.

Profile

beldmit: (Default)
Dmitry Belyavskiy

May 2025

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 21st, 2025 05:21 am
Powered by Dreamwidth Studios