Learning to fly - McSeem2 - part3
От: McSeem2 США http://www.antigrain.com
Дата: 10.01.05 05:06
Оценка: 80 (15) +1 :)
#Имя: FAQ.Learningtofly.McSeem2.part3
Нет дороге окончанья, есть зато ее итог,
Дороги трудны, но хуже без дорог...



Дальнейшим этапом накопления личной силы, были две IBM-PC/AT с двумя мегами памяти на борту и с цветными EGA-дисплеями. Это было круто! Цветной дисплей, который может отображать аж целых 16 цветов одновременно, при выборе из палитры в 2^18 цветов. Разрешение, правда было не сравнимо с шедеврами графики на запоминающей трубке, какие-то жалкие 640x350 пикселов, но самое главное — пикселы можно было засвечивать и стирать без перерисовки всего экрана! Смешно? Кому смешно — тот настоящего пороху не нюхал (шутка!). Но на этом, собственно, вся крутость и заканчивалась, для меня, во всяком случае. Там был MS-DOS, который от RT-11 отличался только наличием вложенных каталогов и файловой системой с возможностью фрагментации файлов (не факт, фрагментация — это хорошо). В RT-11 файл мог быть только непрерывным и если места было достаточно но все было зафрагментировано, то создать файл было нельзя, надо было пользоваться утилитой SQUEEZE, которая фактически была эквивалентна Defragment, появившийся штатным образом в поставках Microsoft только начиная с Win2000. Что я этим хочу сказать — простая организация файловой системы требовала определенной самодисциплины и надо было непрерывно поддерживать свое рабочее место в порядке. MS-DOS с его фрагментированными файлами привнес некий хаос в умы. Отвлекаясь от темы — С++ так или иначе требует бережного обращения с памятью, сколько бы ее ни было. Иначе придет страшный зверь под названием "фрагментация". Причем, в отличие от файловой системы RT-11, в C++ в общем случае, нет никакой возможности сделать SQUEEZE. С другой стороны, современные архитектуры пока что не позволяют мапировать логически непрерывное пространство памяти на множество физических кусочков произвольного размера (а было бы круто). Так вот, вся доблесть автоматической сборки мусора в дот-нет заключается в том, что там есть возможность перемещать объекты по памяти произвольным образом, и таким образом делать SQUEEZE. Это действительно большое достижение, грубо говоря, C++ — это файловая система RT-11 без возможности SQUEEZE, а .Net — та же самая файловая система с автоматически запускаемым SQUEEZE (сейчас придут дот-нетчики и меня зачморят — пожалуйста, я не против). А в идеале — надо бы что-то типа NTFS, реализованной в памяти на аппаратном уровне и никаких сборок мусора (во какой бред, во куда заносит)...

Во всем остальном, IBM-PC с MS-DOS были разочарованием. Система команд — ужасная и нелогичная, типа не думали особо, а просто сели и напедалили по-быстрому — именно такое впечатление у меня и сложилось, а первое впечатление, как правило, самое верное. Но в результате Intel победил! А победителей, как известно, не судят — повод задуматься о смысле жизни (мне в первую очередь)...

Фортран на IBM-PC не был не популярен, это был компьютер для языков C и Pascal по большому счету (Бэйсик не считаем в силу его изначальной ущербности). Разумеется, мне, как истинному патриоту Фортрана тут же стал жутко интересен язык C. Я его изучал исключительно по справочнику (молитвеннику) товарища Болски — миллиметров восемь в толщину и такого портсигарного формата. Была еще "книжка" некого бумагомараки по имени Г.Шилдт, с помпезным названием "Язык C для профессионалов". Посвящалась она тому, как из Turbo-C вызвать то или иное прерывание MS-DOS или функцию BIOS. То есть, к языку C как таковому, эта книжка не имела ни малейшего отношения. Справочник Болски был составлен очень грамотно — все что нужно (включая функции CRT и форматы printf/scanf) и ничего лишнего. Гэ-Шилдт — полная профанация языка как такового. Понятно, что им двигал мотив заработать денег как можно быстрее, но нельзя же так в конце концов — ведь множество людей доверилось этой книжке и стало считать, что язык Си — это и есть те самые вызовы int21. А по приходу Windows оказалось, что язык Си — это нечто совсем другое и тот же Гэ-Шилдт тут же тиснул другую книженцию, с другим помпезным названием, конечно же тоже про язык C или C++... Я вполне верю, что эти книги кому-то помогли, но гадом буду — так жить нельзя. Это и есть то самое, что я называю беспардонностью (это был откровенный наезд).

Другое, что меня неприятно удивило в IBM PC — это какая-то разобщенность и неорганизованность. Это чувствовалось во всем. Например, на PDP-11 был наимощнейший редактор "KED", адаптированный под систему команд тертинала VT-52 и поэтому прозванный K52. Он позволял, используя 32K памяти, редактировать мегабайтные файлы и реально с этим справлялся. На IBM-PC наиболее продвинутым был Multi-Edit, но он как-то кривовато работал с большими файлами, которые не лезли в 640K — надо было явно переключаться между страницами и были глюки. В K52 все было совершенно прозрачно — не было такого понятия как "страница" в памяти, все обеспечивалось управляющей системой и файл редактировался так, как если бы он был весь в памяти. Бардак и непродуманность чувствовались даже в мелочах. Например, в K52 была такая обобщенная функция — "повторить операцию N раз". Соответственно, была не нужна специальная команда "Goto line", все обеспечивалось обобщенными средствами. Скажите, можно ли в современном редакторе найти 18-е по счету слово с начала файла? Думаете не надо? А вот надо — это как парадигма в программировании — когда привыкнешь к хорошему, начинаешь критически смотреть на вещи. До сих пор мне подобной простой функции очень не хватает.

Другим неприятным сюрпризом было то, что каждый компилятор имел свою программу типа "LINK.EXE", как правило, не совместимую по формату obj-файлов с другими компиляторами. Фактически, идея о раздельной компиляции почила в бозе уже тогда — во времена MS-DOS. Или же, вместе с .LIB надо было давать и конкретный компилятор, что и делалось (нелегально!).

Ну и конечно же, был этап рисования пиксела (как же без этого!). Точнее сказать, я некоторыми своими идеями заразил людей, которые рисовали пиксел и линию "на два такта быстрее", в результате чего это все вылилось в целый проект и целую графическую библиотеку с тоже вполне помпезным названием GSE (Graphic Support for Engineers).

Во времена MS-DOS эпохи перестройки настоящим программистом считался тот, кто написал три вещи — собственный оконный интерфейс, бухгалтерскую систему и компьютерную игру. Три кита и три составные части.

Все это я доблестно выполнил, и даже перевыполнил. В том смысле, что когда я попытался познакомиться с Windows API, я заплевал весь монитор, настолько это было тупо по сравнению с моим собственным графическим оконным API (особенно файлы ресурсов). Но где я и где — Microsoft... Конечно же, все эти мои "достижения" канули в лету, но я о них нисколько не жалею — это было время полетов. Я не учился летать — я просто летал, с синяками и фингалами от падений и врезаниями башкой в деревья, но это были полеты. Вплоть до организации собственноручных DLL под MS-DOS в силу того, что не было нормальной системы оверлеев. Было что-то такое в турбо-паскале, потом (сильно потом) мигрировавшее в Borland-C++, но все это было фуфло по сравнению с простой и ручной организацией оверлеев в RT-11.

А народ тем временем изучал C++, а я этому тоже активно сопротивлялся, поскольку не было тогда достаточно хороших компиляторов C++, так же, как и не было хорошего Фортрана-4 на IBM-PC...

Окончания не получилось. Надо бы еще написать про становление C++ в моей жизни, но потом — боюсь, что только на следующих выходных...
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.