]> www.wagner.pp.ru Git - sites/home_page.git/blob - articles/true_unix_gui.html
Добавлена книга про русалок в список
[sites/home_page.git] / articles / true_unix_gui.html
1 <HTML><HEAD>
2 <META HTTP-EQUIV="Content-Type" "text/html; charset=utf-8">
3 <TITLE>True Unix GUI</TITLE>
4 <META NAME="DESCRIPTION" CONTENT="Размышления о том, какими
5 принципиальными свойствами обладает текстовый интерфейс Unix, и почему
6 ни один из современных графических интерфейсов не может считаться
7 полноправным наследником этого интерфейса"> 
8 </HEAD><BODY>
9
10 <H1>True Unix GUI</H1>
11 <p>
12 В последнее время много шума раздается вокруг идеи о вступлении
13 Linux (и вообще Unix-подобных систем) в войну за место на рынке
14 настольных систем. В качестве разведки боем в этой войне возникли и
15 развиваются такие системы, как KDE и GNOME. Но, по моему мнению, эти
16 системы обречены на провал. Я не считаю, что Linux не место на десктопе
17 пользователя. Просто атаковать позиции Windows надо с другого фланга.
18 </p><p>
19 Что такое KDE и GNOME&nbsp;&mdash; это всего лишь попытка построить над ядром
20 Unix и X-Window систему, основанную на тех же принципах, что и Windows -
21 документ-ориентированная модель, взаимодействие между приложениями на
22 базе drag'n'drop и Object Request Broker, куча бесполезного
23 украшательства. Фактически для такой системы все преимущества
24 нижележащей многозадачной, многопользовательской, прозрачно
25 интегрированной в сеть системы становятся недостатками, приводящими
26 только к ненужному расходу ресурсов. Ресурсов сейчас, как правило
27 избыток, но это же не повод транжирить их без пользы.
28 </p><p>
29 В результате, мы получаем монстра, в котором работа с удаленными
30 ресурсами ограничена лазаньем по Web, возможностей расширения&nbsp;&mdash; не
31 больше чем в Windows. Хорошо хоть компилятор бесплатный, но ведь и в
32 Windows его уже портанули, а так для написания минимальной примочки к
33 нужно писать на C, или в случае KDE на C++. 
34 </p><p>
35 Пользователь этой системы опять отдается на милость программистам&nbsp;&mdash; он
36 может пользоваться только тем что для него написали, поскольку изучать C
37 и, тем более писать на нем, у него нет времени. У него свои,
38 пользовательские, задачи&nbsp;&mdash; отчетик красивый сваять, посчитать
39 что-нибудь.
40 </p><p>
41 Заметим, что и программисты в наше время, во всяком случае то
42 подавляющее большинство их, которое обслуживает задачи
43 бизнес-пользователей, пользуется для разработки всяческими системами 
44 Rapid Application Development, то есть по отношению к самому Desktop
45 Environment выступают скорее как пользователи, чем как программисты.
46 В то же время ни KDE ни GNOME не начинались с идеи&nbsp;&mdash; давайте напишем
47 RAD-среду, в которой можно сделать все. Что, кстати, сильно ограничивает
48 и количество их разработчиков, и продуктивность каждого из них.
49 </p><p>
50 Разработчики NextStep лучше продумали свою политику в этом отношении, но
51 и они потерпели неудачу в войне как за десктопы пользователей, так и за
52 умы программистов.
53 </p><p>
54 Сравним это с ситуацией в начале 70-х годов&nbsp;&mdash; эпохи победного шествия
55 Unix по университетам США. Почему эта система смогла тогда вытеснить
56 гораздо более &laquo;дружественные к пользователю&raquo; LISP-машины?
57 </p><p>
58 На мой взгляд потому, что она последовательно проводила одну
59 незамысловатую идею&nbsp;&mdash; <strong>&laquo;не хочешь общаться с программой сам&nbsp;&mdash; заставь это
60 делать другую программу&raquo;</strong>. Я уверен, что на этом месте каждый из
61 читателей вспомнил что-то типа <tt>ls -l|grep root</tt> или 
62 <tt>find . -name &quot;*.bak&quot;|xargs rm</tt>. Да, речь именно об этих конструкциях.
63 </p><p>
64 Основное их достоинство заключается в том что они, во-первых, вполне
65 доступны пользователю, умеющему работать в командной строке, а во-вторых
66 являются полноценными программами на языке shell. Их можно записать в
67 файл, объявить этот файл исполняемым и пользоваться наряду с прочими
68 командами системы. 
69 </p><p>
70 Если вспомнить, что отчеты в те времена писали на troff, который весьма 
71 подходит для обработки sed-ом и awk, то окажется что
72 пользователи вполне могли легко адаптировать систему к своим нуждам.
73 Причем этот процесс скорее напоминал обучение&nbsp;&mdash; сделал что-то один раз,
74 дал этой операции имя, и дальше требуешь сделать операцию с таким-то
75 названием. 
76 </p><p>
77 Результатом этого явилось практически полное отсутствие барьера между
78 использованием системы и программированием в ней. И дальнейшее развитие
79 в общем-то не привело к его увеличению. В ответ на X-Window появился Tk,
80 в ответ на интерактивные программы типа ftp&nbsp;&mdash; expect. 
81 </p><p>
82 Другое дело что практически неизменным остался барьер между человеком,
83 видящим компьютер в первый раз и квалифицированным пользователем, в
84 снятии которого преуспели другие системы, в особенности MacOS.
85 </p><p>
86 Памятником тому славному времени служит O'Reilly-вская книжка
87 &laquo;<em>sed &amp;
88 awk</em>&raquo;, которая фактически является летописью верстки серии про X window.
89 </p><p>
90 Каковы же составляющие интерфейса командной строки Unix, которые
91 оказались в свое время настолько удачные, что живут уже 30 лет, и до сих
92 пор находится немало людей, предпочитающих их разнообразным GUI?
93 </p><p>
94 На мой взгляд их четыре:
95 </p>
96 <ol>
97 <li>
98  Универсальная форма представления информации&nbsp;&mdash; текстовый файл,
99 понимаемый как последовательность символов, некоторые из которых имеют
100 специальный смысл&nbsp;&mdash; разделяют строки(записи), поля и слова.
101   Его командно-строчные программы выдают на экран человеку (stdout),
102   его же ожидают в качестве ввода (stdin). Не будь этого стандарта
103  бесполезен был бы следующий пункт
104 <li> Переназначение ввода-вывода. Этот инструмент в Unix знают по-моему
105   все.
106 <li> Toolbox Phylosophy. Это свойство тоже широко известно. Во-всяком
107  случае именно на нем заостряет внимание Ричард Столлман в
108  info-документации на textutuls. Идея состоит в наличии многих маленьких
109  утилит, которые хорошо интегрируются, вместо огромного монстра, который
110  умеет все. Это единственный урок Unix, который усвоили разработчики
111  GNOME и KDE. 
112 <li> Регулярные выражения. Это тоже пункт, о котором многие забывают, 
113   но без них идея &laquo;заставить одну программу читать вывод другой&raquo; была бы
114   бессмысленной. Это формальный, достаточно гибкий и более-менее
115   интуитивный способ указать программе, что следует искать в потоке
116   данных. И стандартные средства текстовой обработки, и такие
117   инструменты как expect, появившиеся в ответ на появление программ,
118   отказывавшихся честно взаимодействовать со стандартными фильтрами,
119   опираются именно на этот механизм.
120 </ol>  
121 <p>
122 Очевидно, что модель обработки данных, основанная на этих четырех китах,
123 не покрывает потребностей современного пользователя. 
124 </p><p>
125 Наиболее слабым местом оказывается текстовый файл как универсальный
126 способ представления информации в сочетании с регулярными выражениями
127 для его обработки. Во-первых, кроме текста есть картинки и звук. 
128 Во-вторых, 
129 оперировать с текстом на уровне символов не всегда удобно&nbsp;&mdash; хочется
130 оперировать на уровне предложений, абзацев, а то и глав. В-третьих,
131 существуют табличные данные, которые не всегда удобно обрабатывать в 
132 awk&nbsp;&mdash; иногда нужен sql. В четвертых, есть элементы оформления&nbsp;&mdash; шрифты,
133 начертания и пр., которые иногда несут существенную тематическую
134 нагрузку. (Здесь мы вступаем на театр военных действий между
135 сторонниками логической и физической разметки, к борьбе между которыми
136 мы еще вернемся).
137 </p><p>
138 Другим слабым местом являются регулярные выражения, как встроенный в
139 систему способ распознавания образов. Они во-первых, сложны для
140 пользователя&nbsp;&mdash; недаром AltaVista ими не пользуется, во-вторых очень
141 ограничены по своим возможностям&nbsp;&mdash; переставьте местами два слова и все.
142 </p><p>
143 Есть ограничения и у концепции переназначения ввода-вывода. Она
144 принципиально линейна, хотя пространство на экране принципиально
145 двумерно. Мне очень часто хочется написать что-то вроде
146 </p><p>
147 <pre>
148   gzcat /var/log/httpd/access.log.gz | tee v | grep одно
149                                            |
150                                            +-&gt; grep другое
151 </pre>                                             
152 </p><p>
153 В командной строке так нельзя. Хотя со стороны ядра Unix принципиальных 
154 возражений нет. Другое дело что пытаясь записать это с каким угодно
155 синтаксисом на втором-третьем уровне вложенности обязательно
156 запутаешься. А если не писать, а рисовать на экране мышкой стрелочки?
157 Тогда можно охватить взглядом довольно сложную схему потоков данных. С
158 ветвлениями, слияниями  и много чем еще.
159 </p><p>
160 Отвлекаясь немного от темы: А не кажется ли вам, что время
161 графических интерфейсов как таковых заканчивается? Грядет время
162 интерфейсов голосовых, которые, как ни странно куда ближе к командной
163 строке Unix, чем к графическому интерфейсу Windows. Ведь речь линейна, и
164 буде надлежащим образом распознана, превращается в тот самый поток
165 текстовой информации, который так любят традиционные утилиты Unix.
166 Что же касается синтеза речи, то эта задача просто уже решена&nbsp;&mdash; берете
167 festival и переназначаете вывод на него. Потребуется, правда немного
168 изменить синтаксис shell'а и, особенно, регулярных выражений, чтобы
169 команды было удобно произносить, а выдачу&nbsp;&mdash; воспринимать на слух.
170 </p><p>
171 Но голосовой ввод&nbsp;&mdash; пока еще туманное будущее. Ближайшие года два-три
172 нам предстоит жить с мышкой, окошками и иконками, которым кстати,
173 примерно столько же лет, что и Unix.
174 </p><p>
175 Итак, каким же должен быть истинно юниксячий графический интерфейс?
176 </p>
177 <ol>
178 <li> Должен существовать единый способ представления информации.
179  Это позволит направлять выдачу любой программы на вход другой.
180 <li> Должно существовать средство поиска шаблонов в этом потоке
181   информации, причем такое, чтобы видя нечто на экране, пользователь легко
182   мог сформулировать задачу &laquo;найди мне все, похожее на это&raquo;
183 <li> Не должно существовать монстров типа Microsoft Word или Netscape
184 Communicator. 
185   Должна быть маленькая утилитка для показа форматированного текста,
186   другая маленькая утилитка для показа таблиц (которой будет заодно
187   пользоваться и средство доступа к sql-базе), отдельная утилитка для
188   доступа к удаленным ресурсам, больше похожая на wget,
189   
190 <li> Должен существовать нелинейный способ интегрирования этих утилит,
191   такой, что с одной стороны, пользователь способен с ним справиться
192   сам, с другой&nbsp;&mdash; он позволяет сцепить wget
193   с показывалкой текста и получить эквивалент Netscape. Этот способ
194   должен иметь интуитивно ясное интерфейсное выражение. 
195 </ol>  
196 <p>
197 Естественно, что реальная среда, построенная на этих принципах, не будет
198 состоять из одних голых кирпичиков. В дистрибутив должно входить
199 несколько сотен скриптов, которые будут создавать у пользователя
200 впечатление, что у него есть и Netscape и Word и Excel. Но если ему
201 вдруг захочется оторвать считалку формул от электронной таблицы и
202 воткнуть ее (вместе с sql-интерфейсом) внутрь текстового документа, это
203 должно делаться даже не написанием пяти строк, а несколькими движениями
204 мыши. Интересная метафора на эту тему была реализована в свое время во
205 FrameWork&nbsp;&mdash; у каждого окна была лицевая сторона (примерно то, что
206 окажется на принтере) и изнанка (макрос который это генерирует).
207 </p><p>
208 Интересно, что последовательная реализация этой концепции может привести
209 к существенному уменьшению размеров дистрибутива. Вы никогда не
210 задумывались сколько разных http-клиентов входит в типичный дистрибутив
211 Linux? Сходу: Netscape, Lynx, wget, http-пакет для Tcl, libwww-perl.
212 А ведь хватило бы одного, но хорошего. И так для всего остального.
213 </p><p>
214 Предвижу возражения, что описанная система&nbsp;&mdash; рай для программиста, но не
215 для пользователя. Пользователю не нужны reusable components&nbsp;&mdash; ему
216 подавай готовые приложения. Да, но... Если система представляет собой
217 одно большое средство для быстрой разработки приложений, то за
218 последними дело не станет&nbsp;&mdash; найдется немало (гораздо больше чем
219 участников &laquo;базара&raquo; сейчас) людей которые за деньги, для удовлетворения
220 собственных потребностей, и просто ради самовыражения будут эти самые
221 приложения клепать. Правда, это должна быть среда разработки приложений,
222 которая соотносится с существующими Delphi и C Builder-ами, примерно как
223 &laquo;Среда программирования Unix&raquo; времен Кернигана и Пайка
224 (shell+awk+yacc+C) соотносилась с распространенными в те времена языками
225 типа Fortran и Basic.
226 </p><p>
227 Посмотрим, какими же средствами мы располагаем сейчас, для того, чтобы
228 попытаться реализовать подобную идею. Начнем с универсального способа
229 представления информации. В NextStep попытались с этой целью
230 использовать Display Postscript. К сожалению, крупным недостатком
231 Postscript является то, что это полноценный процедурный язык, и
232 представить себе как выглядит постскриптовский файл, не
233 проинтерпретировав его полностью, принципиально нельзя. Поэтому
234 Postscript совершенно не подходит для программной обработки.
235 Кроме того, Postscript совершенно не заботится о сохранении
236 высокоуровневой содержательной информации&nbsp;&mdash; деления на какие-либо
237 логические части, например.
238 </p><p>
239 Во всех
240 остальных смыслах он совершенно замечателен&nbsp;&mdash; широко распространен, есть
241 свободно распространяемый код для интерпретации (Ghostscript), картинки
242 передаются в том же потоке, что и текст.
243 </p><p>
244 Display PDF уже гораздо лучше, чем Display Postscript, поскольку PDF -
245 язык преимущественно декларативный, а программы на декларативных языках
246 гораздо лучше поддаются автоматизированному анализу, чем программы на
247 процедурных. Есть в PDF и минимальные средства структурирования,
248 например гиперссылки. Но тут гораздо хуже как со средствами рендеринга, хотя
249 Alladin (а теперь уже и GNU) Ghostscript с этим справляется, и особенно
250 со средствами генерации. Кроме pdftex и того же Ghostscript ничего и
251 нет. 
252 </p><p>
253 Попробуем зайти с другой стороны&nbsp;&mdash; со стороны языков логической
254 разметки. Сразу же в голову приходит SGML с его наиболее
255 распространенным вариантом HTML и наследником XML. Похоже, что это
256 именно то, что нам надо. Правда, в HTML картинки хранятся отдельно от
257 текста, но кто мешает придумать другую DTD. Зато есть средства сколь
258 угодно высокоуровневого логического структурирования, существенно
259 упрощающие объяснение программе того, что нам от нее нужно.
260 </p><p>
261 Еще одним, неожиданным, кандидатом на роль универсального способа
262 представления является X-протокол. С очевидностью, все что можно
263 показать на экране, можно представить в виде последовательности команд
264 этого языка. Более того, с появлением Xprt он теперь годится и как язык
265 описания страниц. Любая существующая программа под Unix умеет его
266 генерировать. Единственный недостаток&nbsp;&mdash; никто не пытался написать
267 программу обработки, которая не была бы X-сервером. К тому же, в
268 X-протоколе поток событий от пользователя к программе очень не похож
269 на поток событий от программы к пользователю (Х-серверу).
270 </p><p>
271 И еще один нетривиальный кандидат:
272 <pre>
273 .c create rectangle 107.0 81.0 203.0 172.0 -disabledwidth 0 -tags {Rectangle obj utag1}
274 .c create line 108.0 81.0 158.0 18.0 202.0 82.0 -joinstyle miter -tags {Line obj utag2}
275 .c create rectangle 121.0 102.0 144.0 172.0 -disabledwidth 0 -tags {Rectangle obj utag3}
276 .c create rectangle 164.0 109.0 191.0 143.0 -disabledwidth 0 -fill #bfbfbf -tags {Rectangle obj utag4}
277 .c create text 155.0 207.0 -font {Helvetica 10 {}} -text {House, which Jack build
278 } -tags {text obj utag5}
279 </pre>
280 <p>
281 Что это такое по-вашему? Векторный графический формат? Программа?
282 И то и другое&nbsp;&mdash; это рисунок, сделанный в графической программе tkpaint,
283 который на самом деле является программой на языке Tcl (на котором
284 написан сам Tkpaint). 
285 </p><p>
286 Теперь о том, что не является документом&nbsp;&mdash; меню, диалоговое окно.
287 Заметим, что на программирование подобных вещей уходит львиная доля
288 труда пользователей RAD-систем, хотя казалось бы вот что RAD-инструменты
289 делают хорошо, так это диалоговые окна. 
290 </p><p>
291 На самом деле это не так.
292 Порочен сам подход к интерфейсу как к картинке. Пользователь типичного
293 Delphi рассуждает так &laquo;разместим здесь вот этот интерфейсный элемент. Он
294 будет делать то-то и то-то&raquo;. При этом минимальные изменения, такие как
295 переход к другому шрифту при создании национальной версии программы, или
296 увеличение размера поля БД приводят к полному развалу тщательно
297 продуманного внешнего вида окна.
298 </p><p>
299 Несколько более разумным подходом
300 представляется использование geometry manager, как в Tk или Xview, когда
301 расположение видимых элементов определяется в терминах их относительного
302 положения &laquo;вот эта кнопка под этой строкой ввода, выравненная по ее
303 правой границе&raquo;. Очевидно, что такой способ более устойчив к изменениям
304 размеров шрифта или полей базы данных. 
305 </p><p>
306 К сожалению, мощные geometry manager'ы имеют один существенный
307 недостаток&nbsp;&mdash; они отучают пользователя пользоваться графическими
308 application-designer'ами. Зачем, спрашивается рисовать на экране десять
309 полей ввода, когда трехстрочный скрипт с циклом foreach сам их
310 замечательно нарисует. Хотя, на самом деле разумной была бы гибкая
311 комбинация обоих подходов. Проблема в том, что для этого нужно то, что
312 не обеспечивается на данный момент ни одним средством RAD&nbsp;&mdash; возможность
313 переключаться между графическим дизайном и писанием кода в любой момент.
314 </p><p>
315 Но это только одна сторона вопроса. Вторая заключается в том, что мы,
316 имея готовую программу с диалоговыми окнами и прочим графическим
317 интерфейсом, хотим управлять ей из другой программы. На данный момент
318 существует только один способ решения этой проблемы&nbsp;&mdash; встраивание в
319 программу макроязыка, т.е. набора команд, которые можно тем или иным
320 способом вызывать, будь то встроенный язык типа WordBasic, или методы
321 объекта OLE или CORBA, когда сам по себе язык реализован где-то
322 отдельно, а программа предоставляет только набор функций.
323 </p><p>
324 И в том и в другом случае, набор функций как правило сильно отличается
325 от набора позиций меню, а набор их параметров от набора полей ввода в
326 соответствующих диалоговых окнах. Да, конечно, есть операции, которые
327 могут быть интересны разработчикам приложений, но совершенно не нужны 
328 пользователям, например &laquo;открыть файл и получить его дескриптор&raquo;.
329 </p><p>
330 Но, принцип первый: все что может сделать пользователь, должна иметь
331 возможность сделать программа. Без реализации этого принципа реализовать
332 базовую идею разработки приложения как интеграции существующих
333 инструментов, не удастся.
334 </p><p>
335 Принцип второй: Если существуют операции, доступные только из языка
336 программирования, но не через GUI, то должна быть консоль, с которой
337 команды этого языка можно ввести. Без реализации этого принципа будет
338 неудобно отлаживаться и изучать поведение существующих приложений.
339 Известно, что первым пунктом в разделе BUGS любого man должно идти
340 &laquo;User never reads documentation&raquo;. Поэтому надо дать пользователю
341 возможность изучать систему экспериментальным путем.
342 </p><p>
343 Обратите внимание, что в DOS существовал командный язык, слабенький, но
344 язык. В Windows 3.1 был Macro Recorder&nbsp;&mdash; попытка реализовать идею записи
345 сценариев работы. В Windows 95 его уже нет. Попытка реализовать писание
346 скриптов путем протоколирования действий пользователя в GUI-среде
347 блистательно провалилась. Почему? Потому что фиксировались слишком
348 низкоуровневые события&nbsp;&mdash; нажатия кнопок мыши в таких-то координатах. Это
349 существенно отличается от тех понятий, которыми оперирует пользователь
350 &laquo;Вытащим наверх окно Word и выберем позицию Open в меню File&raquo;. Если бы
351 макрос записанный макро-рекордером выглядел бы как
352 </p>
353 <pre>
354 MaximizeOrStart &quot;winword.exe&quot;
355 Menu.File.Open invoke
356 Filedialog.Filename insert &quot;myfile.doc&quot;
357 FileDialog.OpenButton invoke
358 </pre>
359 <p>
360 может быть этим и можно было бы пользоваться. Особенно если при
361 последующем редактировании макроса можно было бы предоставить
362 пользователю свободу действий на каких-то этапах, например
363 </p>
364 <pre>
365 Menu.File.Open invoke
366 Wait window.close &quot;Filedialog&quot;
367 if Filedialog.Exitcode=Ok then
368 ...
369 endif
370 </pre>
371 <p>
372 или наоборот, поместить эти действия внутрь цикла, скажем по всем файлам
373 в текущей директории.
374 </p><p>
375 Здесь мы сталкиваемся с той же проблемой, что и при проектировании
376 диалоговых окон&nbsp;&mdash; пользователь никогда не мыслит в терминах координат
377 экрана, даже когда он рисует мышкой линию в графическом редакторе. 
378 </p><p>
379 Таким образом, складывается концепция принципиально нового подхода
380 к устройству десктопной OS, которая состоит в следующем:
381 </p><p>
382 Имеется базовый скриптовый язык, имеющий графический интерфейс.
383 Все необходимые компоненты реализуются как расширения для этого языка.
384 Они могут быть как объектно-ориентированными, так и нет. Я считаю, что
385 ООП это не панацея, тем более в ситуации когда работать с этим языком
386 зачастую будет конечный пользователь, которому легче в качестве
387 собеседника воспринимать компьютер в целом и формулировать свою мысль
388 как &laquo;Сделай то-то вот с этим объектом&raquo;, а не &laquo;Эй, объект, сделай вот
389 это&raquo;, особенно в ситуациях когда задействовано несколько объектов.
390 Например, не очевидно, чьим методом должно являться копирование из
391 объекта в объект&nbsp;&mdash; источника или назначения.
392 </p><p>
393 Уровень абстракции, на котором пользователь работает с этим языком
394 должен быть несколько выше, чем тот, который предоставляют Tcl/Tk или
395 Python.
396 </p><p>
397 Для часто выполняемых операций, таких как создание диалогового окна,
398 связывание формы с базой данных, должны существовать графические интерфейсы.
399 В идеале у каждого приложения данной системы должна быть кнопочка в
400 заголовке окна &laquo;Показать внутреннее устройство&raquo;, которая превращает
401 окно приложение в окно RAD-системы. Последнее, видимо представляет собой
402 диалог с закладками, где можно посмотреть иерархию видгетов внутри окна,
403 связи с другими объектами в системе, текст который в результате
404 получился.
405 </p><p>
406 Для всех объектов в системе, которые по смыслу являются документами (а
407 таких будет не так много, как в MacOS или Windows) должен существовать
408 способ получить их стандартное представление, видимо на чем-то типа XML,
409 и должны существовать средства обработки этого XML, по простоте и
410 эффективности подобные grep, awk и sed, но учитывающие в удобных для
411 пользователя терминах структуру этого XML.
412 </p><p>
413 Мне кажется, что идеальным языком для реализации такой системы является
414 Tcl. Его преимущества:
415 <ol>
416 <li> Гибкий синтаксис, вплоть до возможности реализации собственных
417 управляющих структур, что облегчает создание языка верхнего уровня.
418 <li> Простота разбора скриптов на Tcl средствами самого Tcl, что облегчает
419 создание RAD-компонент, способных прочитать и графически представить
420 произвольный код.
421 <li> Наличие мощных интроспективных функций, которые делают ненужным
422 разбор кода, например для показа иерархии видгетов&nbsp;&mdash; проще спросить у
423 самих видгетов.
424 <li> Наличие системы соподчиненных интерпретаторов, что позволяет не
425 засорять пространство имен приложения функциями и объектами RAD-системы
426 <li> Наличие большого количества готовых компонент, хотя Python и Perl в
427 этом отношении несколько превосходят Tcl.
428 </ol>
429 <p>
430 Все вышеперечисленное не означает, что на Tcl должны быть написаны все
431 компоненты системы. Скорее наоборот, большая часть вещей, для которых
432 критична производительность, должны быть написаны на C или C++, но в
433 виде расширений Tcl. 
434 </p>
435
436 <h2>Комментании читателей</h2>
437 <pre>
438 From zappa@isssph.kiae.ru Fri Jun  2 19:34:41 2000
439 From: Andrei M. Zaparii &lt;zappa@isssph.kiae.ru&gt;
440 Subject: http://www.ice.ru/~vitus/ice/thoughts/true_unix_gui.txt
441 X-Mailer: Mozilla 4.61 [en] (Win95; I)
442
443 Доброго времени суток!
444 Если Вас интересует моё мнение, то:
445 1. Вы, как мне кажется, упустили один из важных моментов. Или, во всяком
446 случае, не акцентировали на нём внимание. А именно, пропорциональность
447 возможностей затраченному на обучение времени. UNIX way тем мне и нравится,
448 что я могу изучать ровно столько, сколько мне надо. С другой стороны в
449 существующих на сегодня UNIX-ах я могу разобраться на столько, на сколько мне
450 это нужно для решения задачи. И этот факт и делает для меня UNIX концепцию
451 наиболее привлекательной. По крайней мере с точки зрения эффективности, то
452 есть&nbsp;&mdash; отношения сэкономленного времени ко времени разработки.
453 2. Именно раздробленность стандартных средств UNIX на маленькие инструментики
454 позволяет таким как я людям заботиться о будущем. Я не могу повлиять на то,
455 какие инструментальные средства будут доступны в ближайшем будущем в среде MS
456 Windows. Если моё решение будет удачным, то оно быстро будет подхвачено в
457 среде UNIX, и не только fsf, и я в итоге получу инструмент, который мне
458 понадобится, именно в момент такой необходимости, а не тогда, когда для этого
459 созреет &laquo;рынок&raquo;.
460
461 Что же до универсального представления потоков данных, то это напоминает мне
462 Structured Task Description Language&nbsp;&mdash; вещь в принципе возможную, но как-то
463 пока нигде не реализованную (Забудем про всякие Jinie и пр. неработающую муру)
464 Уже объяснить &laquo;простому пользователю&raquo; на какого xyz нужен sql довольно трудно.
465 Успешное объяснение, зачем нужен такой монстр, как язык описания произвольных
466 данных, представляется мне маловероятным, в терминах &laquo;простого пользователя&raquo;.
467
468 Подводя итог, хочу отметить, что на сегодняшний день для UNIX community и
469 развития инструментария было бы гораздо полезнее определиться, кто такой -
470 этот &laquo;простой пользователь&raquo;. И определиться с отношением к
471 этому &laquo;простому пользователю&raquo; 
472 В частности, GUI должен быть прежде всего функционален, пропорционален в смысле
473 обучения, и только потом удобен, в той мере, в которой это нужно для первых
474 двух позиций.
475
476 С наилучшими,
477  Андрей
478 </pre>
479 <p>
480 <b>Из моего ответа Андрею</b></p>
481 <p>
482 Смысл в том, что пользователю и не надо это объяснять, так же как не
483 надо       
484 ему объяснять того, что буква A представляется в текстовом файле                
485 байтом со значением 65. Это должно быть в компетенции системы.                  
486                                                                  
487 </p><p>
488 <b>А вот еще одна интересная статья на сходную тему.</b><br>
489 <a href="http://www.itc.kiev.ua/article.phtml?ID=2149">
490 http://www.itc.kiev.ua/article.phtml?ID=2149</a>
491 </p>
492 </BODY>
493 </HTML>