среда, сентября 26, 2007

И еще немного про скрипты

В предыдущем посте я поднимал проблему использования скриптов для расширения возможностей программ. Вывод, сделанный мной, был довольно прост: скрипты используются потому, что основной язык не позволяет описывать логику также хорошо, как скриптовый. Рекомендацией было отказаться от скриптов и использовать в качестве основного более высокоуровневый язык.

Но есть еще одна причина, по которой люди используют скрипты — расширяемость программ. И эта проблема уже больше психологическая. Программист, как и любой умник, хочет написать что-то клевое и универсальное (движок), чем потом можно будет как угодно рулить из скрипта: «Смотрите, вот вам exe-шник, а работать он будет так, как мы ему напишем в скриптах» (вернее, «Смотрите, какой я умный, умею создавать гибкие решения»). Внимание, вопрос! А не является ли ваш скрипт, по сути, очередным exe-шником или dll-кой? Не добьетесь ли вы такой же гибкости просто написав модуль к программе?

Неужели разделения на модули и библиотеки является недостаточным для создания гибких и расширяемых программ? Неужели действительно надо городить всю эту обвязку, вставлять в программу интерпретатор, экпортировать/импортировать функции/классы/данные? Вам очень нужен этот модный abstraction barrier, о который можно потом и разбиться? Я думаю, что нет.

Soft coding — не лучшая замена hard coding-у. Чем отличается код скрипта в отдельном файле от обычного модуля программы? Тем, что красивше? Значит у вас недостаточно выразительный основной язык. Тем, что его можно динамически загрузить в рабочую программу? А разве обычный модуль нельзя?

В общем, пишите всю программу на нормальном языке и изучите возможности динамической загрузки кода. И тогда «болезнь чрезвычайной гибкости при помощи скриптов» покинет вас.

PS: еще рекомендую почитать (не столько про скрипты, сколько про липовую расширяемость за счет «правильной» архитектуры): The Mythical Business Layer.