Да, о DSL и метапрограммировании
Кроме всего прочего, меня еще посещает мысль, что привычное программирование в виде последовательного набора линейного текста слабо совместимо с идеями DSL и метапрограммирования, из-за чего в новых языках возникают жуткие малочитабельные конструкции.
Вот к примеру - нужно вставить в код двумерную таблицу каких-нибудь коэффициентов фильтра дурачных. Какой у нас есть выбор?
1) Записать ее в виде массива прямо на нашем языке программирования. Выглядит криво, редактировать неудобно, менять в рунтайме не получится, зато обращение быстрое.
2)Поместить ее в файл и оттуда загружать, что тянет за собой: либо парсинг файла, либо придумывание его формата, либо требование наличия метапрограммирования в языке для того, чтобы этот файл подгрузить на этапе компиляции и сгенерить тут же на месте парсер. Возникает жесткая связь между программой и наличием файла и его форматом со всеми вытекающими последствиями типа "клоуны-юзера удалили файл потому что подумали, что он мешает им работать". Код загрузки файла в качественно написанной программе тоже немалый получается - проверка ошибок, вывод сообщений(а представьте себе вывод сообщения юзеру, если этот код находится в глубинах сервера приложений). Опять же - редактировать файл только руками.
3) Запилить это дело в СУБД, грузить оттуда. Все то же самое, что с файлом, но еще нужен контекст коннекта к БД. Зато можно сделать редактор таблицы, бо если есть БД, то в проекте и вся инфраструктура CRUD-редакторов обычно наличествует.
Выборы, скажем так, примерно равнозначные, я с ходу не скажу какой лучше, какой хуже. Поэтому, если по хорошему, то реализовываться они должны примерно с одинаковыми усилиями.
В идеале это было бы что-то вроде: мы пишем некий код, нам понадобилось вставить что-то что в виде кода описывается с трудом. Мы пишем прямо тут в коде некую команду/ссылку на класс/чорти-чо и сбоку бантик но самое главное- чтобы это не более 5-15 символов занимало, и тут же запускаем на исполнение и у нас прямо посреди текстового редактора вылазит редактор в виде электронной таблицы/дизайнер GUI/поле для ввода SQL запроса и некий набор опций "куда сохранять результат(отдельный файл, ресурс, прямо в коде, бд, настройки) и без всяких хождений по сотне файлов проекта мышой начинаем править объект в естесвенном и удобном для него виде.
Причем если нам понадобится - мы можем написать прямо для проекта своих таких произвольных редакторов и вызывать их. Да еще и оставить это дело в проекте в рунтайме для настройки его на месте.
Отдаленно похожим на такое является intellisense - что бы там не говорили гуру с бесконечной памятью, лучше набрать пару-тройку символов идентификатора и дальше выбрать из списка, чем набирать идентификатор длиной в 10-15 символов целиком. Это как бы получается "редактор для более удобного ввода идентификаторов".
Вроде, насколько я помню, что-то похожее есть в IDEA, с ее рефакторингами и подсказками.
И самое главное - что это дело требует меньших усилий для переключения контекста работы, как сейчас - переход от кода к SQL запросам или редактированию GUI требует перехода куда-то хз куда в IDE, да еще не всегда на это горячие клавиши есть.
В экстремальном случае это будет выглядеть таким кошмаром:
начинаем писать текст, постепенно наворачиваем DSL и редакторы для него, язык программирования на ходу меняется, в нем появляются графические и табличные вставки, к концу разработки уже пишем чуть ли не по методу "пару строк - готов новый модуль в систему", а исходный код вместо линейного одномерного текста превратился в двумерную картинку типа электронной схемы :)
Вот к примеру - нужно вставить в код двумерную таблицу каких-нибудь коэффициентов фильтра дурачных. Какой у нас есть выбор?
1) Записать ее в виде массива прямо на нашем языке программирования. Выглядит криво, редактировать неудобно, менять в рунтайме не получится, зато обращение быстрое.
2)Поместить ее в файл и оттуда загружать, что тянет за собой: либо парсинг файла, либо придумывание его формата, либо требование наличия метапрограммирования в языке для того, чтобы этот файл подгрузить на этапе компиляции и сгенерить тут же на месте парсер. Возникает жесткая связь между программой и наличием файла и его форматом со всеми вытекающими последствиями типа "клоуны-юзера удалили файл потому что подумали, что он мешает им работать". Код загрузки файла в качественно написанной программе тоже немалый получается - проверка ошибок, вывод сообщений(а представьте себе вывод сообщения юзеру, если этот код находится в глубинах сервера приложений). Опять же - редактировать файл только руками.
3) Запилить это дело в СУБД, грузить оттуда. Все то же самое, что с файлом, но еще нужен контекст коннекта к БД. Зато можно сделать редактор таблицы, бо если есть БД, то в проекте и вся инфраструктура CRUD-редакторов обычно наличествует.
Выборы, скажем так, примерно равнозначные, я с ходу не скажу какой лучше, какой хуже. Поэтому, если по хорошему, то реализовываться они должны примерно с одинаковыми усилиями.
В идеале это было бы что-то вроде: мы пишем некий код, нам понадобилось вставить что-то что в виде кода описывается с трудом. Мы пишем прямо тут в коде некую команду/ссылку на класс/чорти-чо и сбоку бантик но самое главное- чтобы это не более 5-15 символов занимало, и тут же запускаем на исполнение и у нас прямо посреди текстового редактора вылазит редактор в виде электронной таблицы/дизайнер GUI/поле для ввода SQL запроса и некий набор опций "куда сохранять результат(отдельный файл, ресурс, прямо в коде, бд, настройки) и без всяких хождений по сотне файлов проекта мышой начинаем править объект в естесвенном и удобном для него виде.
Причем если нам понадобится - мы можем написать прямо для проекта своих таких произвольных редакторов и вызывать их. Да еще и оставить это дело в проекте в рунтайме для настройки его на месте.
Отдаленно похожим на такое является intellisense - что бы там не говорили гуру с бесконечной памятью, лучше набрать пару-тройку символов идентификатора и дальше выбрать из списка, чем набирать идентификатор длиной в 10-15 символов целиком. Это как бы получается "редактор для более удобного ввода идентификаторов".
Вроде, насколько я помню, что-то похожее есть в IDEA, с ее рефакторингами и подсказками.
И самое главное - что это дело требует меньших усилий для переключения контекста работы, как сейчас - переход от кода к SQL запросам или редактированию GUI требует перехода куда-то хз куда в IDE, да еще не всегда на это горячие клавиши есть.
В экстремальном случае это будет выглядеть таким кошмаром:
начинаем писать текст, постепенно наворачиваем DSL и редакторы для него, язык программирования на ходу меняется, в нем появляются графические и табличные вставки, к концу разработки уже пишем чуть ли не по методу "пару строк - готов новый модуль в систему", а исходный код вместо линейного одномерного текста превратился в двумерную картинку типа электронной схемы :)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Если не ошибаюсь то этим в Eclipse как ра mylin занимается http://www.eclipse.org/mylyn/
no subject
ААА!!! ;)
Двумерные картинки вместо линейного одномерного текста так и не стартовали на моей памяти.
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(Anonymous) - 2008-12-22 09:30 (UTC) - Expand