March 16th, 2018

404

Качественная разница между программой и скриптом

Хорошо написанная программа правильно (семантически) обрабатывает ошибки. Если ей в кофиге написали "х.." вместо запятой, то она не только пишет "unknown state" для state machine конфига, но ещё и объясняет, что из этого вытекает. Мол, "у конфига неправильный формат". Если программа гуманная, то она ещё и напишет имя файла конфига. А если гуманный программист, то она не просто напишет "неправильный формат", но и покажет на первое место, в котором "всё сломалось". Аналогично обрабатываются и остальные ошибки. Вместо ENOENT нам объяснят, что не получилось сделать на языке предметной области. Например, "температурный датчик не доступен".

Скрипт же, наоборот, предусматривает обработку ошибок по-умолчанию cat /etc/foo|do|mangle >save если нет /etc/foo, покажет общее сообщение, не объясняя, что такое foo. Если у do что-то не получится, то оно либо ничего не скажет (кроме кода возврата), либо напишет что-то своё.

Предполагается, что пользователь скрипта оперирует той же семантической моделью, что и автор этого скрипта. Они вместе понимают, что нет "температурного датчика", а есть /dev/sensors/thermal/3, что есть сокеты, pipe'ы и т.д. Если кто-то для удобства пользователя скрипта скроет "отладочную информацию", то это вызовет раздражение.

Наоборот, если программист для программы ошибку не обработает, а отдаст пользователю невнятный трейс на три страницы, то это вызовет такое же раздражение.

Соответственно, скрипт, который начинает обрабатывать ошибки - это уже программа. Программа, которая ошибки не обрабатывает - скрипт. При этом размер мало на что-то влияет, ключевым тут является вопрос, в одной ли семантической модели находится пользователь и программа/скрипт.