Есть unix. В нем есть философия toolbox (каждая программа выполняет одну и только одну задачу, выход одной программы может быть подан на вход другой; что позволяет строит длинные эффективные цепочки программ). На мой вкус, идеология чудо как хороша. Проблема в том, что ее до сих пор никто не смог перенести на современные, двумерные программы, которые а) таки двумерны и б) не запускаются-отрабатывают-выключаются, а запускаются и работают, получают пользовательский ввод, что-то пользователю отображают, короче — continuous.
Ниже описана очень сырая идея, как это могло бы быть реализована. Точнее, даже не описана (руки не доходят), а просто приведен пример, как можно было бы реализовать простейший интернет-браузер на основе такой идеологии. Элемент такого 2d-тулбокса я называю (surprise! surprise!) виджетом. Роль средства для их объединения (которую в unix выполняет shell), пусть выполняет нечто html-подобное. Итак, пример (некоторые пояснения ниже).
файл browser.htmr:
<htmr>
<widget src='line-input-autocomplete.htmr' id='address'>
<widget src='html-render.htmr' id='page'>
<widget src='http-client.htmr' id='http'>
<widget src='browser-user-settings.htmr' id='options'>
<script role ='links'>
options.last_urls => address.autocomplete_source
address.text => http.url
address.text => options.input_url
http.body => page.source
page.link => http.url
</script>
</htmr>
Пояснения
Есть файлы:
* line-input-autocomplete.htmr
* html-renderer.htmr
* http-client.htmr
* browser-user-setting.htmr
* browser.htmr
Роли их таковы:
line-input-autocomplete.htmr
* описана строка ввода с автокомплитом
* определен вход autocomplete_source, на который можно передать список строк или курсор БД для выборки такого списка, а контрол сам решит, чего показать в кач-ве autocomplete
* определен выход text, на который по нажатию Enter посылается текущее значение строки ввода
html-renderer.htmr
* описана отображалка html
* определен вход source, на который можно передать собственно html (В виде строки, или resource handle из которого можно прочитать эту строку)
* определен выход link на который при нажатии на гиперссылку подается ее адрес
http-client.htmr
* невизуальный виджет, инкапсулирует HTTP client
* описан вход url
* описаны различные выходы, в т.ч. выход body, на который подается тело http-ответа
browser-user-setting.htmr
* невизуальный виджет, инкапслуриует различные опции, какие могут быть у браузера
* в частности определен выход last_urls, на который подается список последних введеных юзером url
* определен также вход input_url, на который можно передать очередной введеный пользователем url для сохранения его в списке last_urls
browser.htmr
* подключены все эти виджеты (может быть также задан их размер, стили, расположение и т.п.
* установлены следующие связи между виджетами:
** выход options.last_urls связан со входом address.autocomplete_source. теперь адресная строка может показать последние введенные урлы и предложить их для автокомплита
** выход address.text соединен со входом http.url. теперь при нажатии enter в адресной строке HTTP-клиент начнет грузить страничку с этого урла
** выход address.text соединен со входом options.input_url. теперь при нажатии enter в адресной строке введенный url будет сохранен в списке последних
** выход http.body связан со входом page.html. теперь по загрузке какой-то части страницы она будет немедленно отображена
** выход page.link связан со входом http.url. теперь при нажатии на гиперссылку HTTP-клиент начнет грузить страничку с этого урла
Собственно, я могу наговорить еще дофигища всего (видные мне преимущества и недостатки, существующие аналоги, проблемы реализации и т.п.), но сначала предпочитаю выслушать мнение окружающих (буде оно возникнет).
Спасибо за внимание.