Телега о Консоли
Текст, который я заслал в рассылку farbugs для последующей корректировки и размещения на сайте Фара. Замечания-дополнения-исправления принимаются.
Почему Консоль,
или
О преимуществах консоли перед GUI.
1. Скорость.
Консоль менее прихотлива к системным ресурсам и менее тормозна. Графический интерфейс связан с системой виндовых сообщений, их обработчиками - оконными процедурами, постоянным созданием и уничтожением окон, рисованием на экране, фонтами, рисованием полосок, иконок и прочим тормозящим геморроем. Любая программа, написанная под GUI, содержит оконную процедуру, работающую в user mode, и не одну - для каждого окна она своя. Даже такая простая программа, как Notepad, содержит три окна - общее, edit control и status bar. Причём даже стандартный системный edit control имеет обработчик в юзер моде, а не протектед, хоть и находящийся в системной DLL, но принадлежащий процессу Notepad. Это значит, что _каждое_ событие, которое приходит в окно, вызывает переключение из защищённого режима в пользовательский и обратно. А во время работы программы (например, загрузки большого файла) окно просто не перерисовывается.
Если графическое окно, долго находившееся в фоне, всплывает, есть большая вероятность того, что код обработчиков событий находится в виртуальной памяти на диске, поэтому постепенная перерисовка окна занимает заметное время - на практике нередки раздражающие задержки в 1-2 секунды.
Консоль представляет собой одно-единственное примитивное окно (без дочерних), оконная процедура которого находится в ядре в защищённом режиме. (Насчёт защищённого режима, как выяснилось — ерунда, сам не знаю, откуда я это взял.) Его отрисовкой занимается winsrv.dll в системном процессе csrss.exe. Всё происходит безо всяких переключений режимов, к тому же у процесса csrss.exe высокий приоритет. Это особенно заметно при загруженном процессоре или интенсивной операции с диском. Консольное окно прорисовывается и во время загруженности работой программы, которая в нём запущена, и даже при полном её зависании.
2. Клавиши и мышь.
Интерфейс гуя стандартен, в том числе стандартно и назначение некоторых клавиш, которые в фаре используются "по-фаровски". Да, можно их переопределить, но гуй начнет диктовать свой стиль: вопли возмущенных гуевых пользователей заставят сделать дефолты по гуевому стандарту. Так, в Total Commander'е быстрый поиск навешен по умолчанию на Ctrl-Alt-буква вместо Alt-буква, фокус ввода должен быть или на панели, или в командной строке, для изменения ширины столбцов надо тянуться к мышке, и т.д. и т.п.
3. Вывод команд.
В гуевой оболочке вывод консольных команд или теряется, или попадает в отдельное окно, с которым надо возиться: специально создавать (тоже занимает время), по окончании или закрывать (теряется результат), или оставлять (и этим раздражать юзера, которому приходится закрывать его вручную).
4. Удалённая работа.
С консолью можно работать через телнет, клиент которого есть если не на всех, то на многих платформах. Для удалённой работы с GUI же требуется клиент Terminal Services. Он занимает гораздо большую полосу сетевого траффика, и количество платформ для его клиента явно меньше.
5. Дополнительные нюансы.
В консоли элементарно реализовывается грабилка экрана, которая в _любой_ момент возьмет вам кусок текста с _любого_ места экрана. В гуе это делается гораздо сложнее. Кроме того, в консоли грабилка работает при любых обстоятельствах и даже при зависании самой программы.
Почему Консоль,
или
О преимуществах консоли перед GUI.
1. Скорость.
Консоль менее прихотлива к системным ресурсам и менее тормозна. Графический интерфейс связан с системой виндовых сообщений, их обработчиками - оконными процедурами, постоянным созданием и уничтожением окон, рисованием на экране, фонтами, рисованием полосок, иконок и прочим тормозящим геморроем. Любая программа, написанная под GUI, содержит оконную процедуру, работающую в user mode, и не одну - для каждого окна она своя. Даже такая простая программа, как Notepad, содержит три окна - общее, edit control и status bar. Причём даже стандартный системный edit control имеет обработчик в юзер моде, а не протектед, хоть и находящийся в системной DLL, но принадлежащий процессу Notepad. Это значит, что _каждое_ событие, которое приходит в окно, вызывает переключение из защищённого режима в пользовательский и обратно. А во время работы программы (например, загрузки большого файла) окно просто не перерисовывается.
Если графическое окно, долго находившееся в фоне, всплывает, есть большая вероятность того, что код обработчиков событий находится в виртуальной памяти на диске, поэтому постепенная перерисовка окна занимает заметное время - на практике нередки раздражающие задержки в 1-2 секунды.
Консоль представляет собой одно-единственное примитивное окно (без дочерних)
2. Клавиши и мышь.
Интерфейс гуя стандартен, в том числе стандартно и назначение некоторых клавиш, которые в фаре используются "по-фаровски". Да, можно их переопределить, но гуй начнет диктовать свой стиль: вопли возмущенных гуевых пользователей заставят сделать дефолты по гуевому стандарту. Так, в Total Commander'е быстрый поиск навешен по умолчанию на Ctrl-Alt-буква вместо Alt-буква, фокус ввода должен быть или на панели, или в командной строке, для изменения ширины столбцов надо тянуться к мышке, и т.д. и т.п.
3. Вывод команд.
В гуевой оболочке вывод консольных команд или теряется, или попадает в отдельное окно, с которым надо возиться: специально создавать (тоже занимает время), по окончании или закрывать (теряется результат), или оставлять (и этим раздражать юзера, которому приходится закрывать его вручную).
4. Удалённая работа.
С консолью можно работать через телнет, клиент которого есть если не на всех, то на многих платформах. Для удалённой работы с GUI же требуется клиент Terminal Services. Он занимает гораздо большую полосу сетевого траффика, и количество платформ для его клиента явно меньше.
5. Дополнительные нюансы.
В консоли элементарно реализовывается грабилка экрана, которая в _любой_ момент возьмет вам кусок текста с _любого_ места экрана. В гуе это делается гораздо сложнее. Кроме того, в консоли грабилка работает при любых обстоятельствах и даже при зависании самой программы.
no subject
no subject
Это - как?
Re: Это - как?