                          Уважаемые коллеги !

   Появление достаточно качественного  компилятора  с  языка  С++ фирмы
Zortex о  котором  будет идти речь на декабрьском семинаре создает воз-
можность "попробовать руками" современный объектно-ориентированный язык
программирования, основанный  на С - рабочей лошадке системных програм-
мистов всего мира.  В этой связи мне хочется поблагодарить своего аспи-
ранта Хрисантеса Ходжияниса, не пожалевшего долларов на покупку компиля-
тора.  Без  его  усилий  тема  декабрьского  семинара  была  бы другой.
   Появление   С++   как   преемника   "старого   доброго"  С  наглядно
свидетельствует о непрерывности эволюции языков программирования, эволю-
ции которая  для любого "рабочего" языка, взятого на длительный (скажем
десятилетие) период времени, неопровержимо свидетельствует  о повышении
его "уровня".  При этом под "уровнем" понимается способность "достигать
многого малыми средствами" или, другими  словами, способность  выражать
сложную семантику простыми и экономными языковыми конструкциями. В этом
смысле С++ это значительный шаг вперед, причем шаг сделанный "мягко", с
сохранением преемственности и без потери эффективности.
   С другой стороны, история свидетельствует, что "техническое" качество
языка программироания  имеет  решающее значение только на ранней стадии
его развития.  Как только накапливается "критическая масса" пользовате-
лей судьба языка зависит скорее от социальных процессов, чем от появле-
ния "конкурентов".  Нельзя не отметить, что непрерывно ведущуюся дискус-
сия о том, какие конструкции и как включать в языки программирования яв-
ляется,  в основном,  академическим,  хотя и интересным упражнением,  не
оказывающим глубокого влияния на ход событий.
   Нет никакого сомнения, что Фортран,  Кобол,  С, Паскаль, останутся с
нами "навсегда". Другими словами, попытки заменить один язык другим об-
речены на неудачу. Поэтому основной тенденцией будет постепенная эволю-
ция этих языков, причем  эволюция, идущая для каждого из них, в опреде-
ленной степени, "своим путем".
   Отсюда следует вывод  о  необходмости "терпимого" отношения к выбору
языка программирования и переноса акцента с языка  программирования  на
программы на нем. Если вспомнить, что персональный компьютер нового по-
коления NeXT включает полное собрание сочинений  Шекспира  на  лазерном
диске, то по видимому можно констатировать, что Шекспира в программиро-
вании пока не появилось. Тем не менее  есть  исключительно  талантливые
программисты и написанные ими программы могут и должны изучатся как ли-
тературные произведения.  Одним из  таких  "гигантов"  программирования,
оказавшим большое влияние на системное программирование Д. Кнут, три то-
ма классической монографии которого несомненно будут изучатся  и  в  ХХI
веке,  несмотря на то, что многие программы написаны на языке ассемблера
искусственной машины MIX в сочетании с полуформальной  формулировкой  на
естественном языке.  Перефразируя известную фразу Кропоткина "люди лучше
учреждений",  про программы в его книге можно сказать  "программа  лучше
языка, на котором она написана". Главное все же является идея, алгоритм,
а язык играет роль средства, а не цели.
   Аналогично книга  Кернигана  и  Ричи  по языку С для целого поколения
программистов служит не только учебником по языку С,  но и учебником  по
написанию программ на этом языке,  вводящим в атмосферу UNIX.  Последняя
является чем-то большим,  операционная система и ряд прикладных программ.
В какой-то  мере  можно говорить о "философии UNIX",  которая определяет
стиль и методы создания имеющихся в ней программ.  Неслучайно переведен-
ная на  русский язык книга "Software Tools" Кернигана и Ричи воспринима-
ется как второй том этой книги, хотя в ней используется Паскаль.
   Stroustrup - автор языка С++, как и многие создатели языков програм-
мирования, также является программистом экстракласса, программы которого
заслуживают внимательного изучения. Поэтому примеры, приведенные в книге
Строструпа (Stroustup B. The C++ Programming Language / N.Y.-L., Addison
-Wesley, 1986.  - 327 p.) и воспроизводимые в данном номере СОФТПАНОРАМы
заслуживают внимательного изучения независимо от того,  собирается чело-
век  переходить на язык С++ или не собирается.  Программистам работающим
на языке ассемблера, на языке Паскаль или Модула-2, или dBase. Всем, кто
хочет "повысить свой класс". К сожаления перевод этой статьи, полученный
редакцией в рамках обмена материалами с редакцией  электронного  журнала
НПО Горсистемотехника (г.Киев) и публикуемый в данном номере СОФТПАНОРА-
МЫ,  страдает рядом недостатков,  которые из-за цейтнота возникающего  в
конце  года не удалось устранить.  В нем исправлены только бросающиеся в
глаза опечатки и неточности, а также очевидные ошибки в программах.
   Вторая сторона языка С++ связана с концепцией объектно-ориентирован-
ного программирования - концепцией, которая является ведущей идеей 80-х
годов. Здесь  нас подстерегает опасность, поскольку в программировании,
как и в других областях человеческой деятельности,  многое  зависит  от
моды. Достаточно вспомнить моду на "структурное программирование" и фа-
натичных адептов этой моды с их рассуждениями о вреде GOTO, COMMON бло-
ков в Фортране или ON-блоков в PL/1. А чего стоят некоторые печатавшиеся
в книгах примеры "структурного
программирования", с которыми автору приходимлось сталкиваться работая на
ПЛ/1. Например некоторые "на полном серьезе" уверяли, что
            ON ENDFILE (SYSIN) EOF='0'B;
               DO WHILE (EOF)
                ...  ...  ...
               END;
   значительно лучше чем
            ON ENDFILE (SYSIN) GOTO @EOF;
               DO WHILE ('1'B)
                ...  ...  ...
               END;
       @EOF:
   хотя дело  обстоит как раз наоборот.  И таких "структурных глупостей"
было напечатано немало.  Например некоторые уверяли,  что оператор цикла
типа  DO  WHILE лучше всех остальных и если программист использует выход
из середины цикла,  то это уже "не то".  Это уже напоминает стремление к
"идеологически  чистой  колбасе"  или,  если брать более далекое прошлое
"греховность свинины".  Вместе с тем, суть структурного программирования
состоит не в отсутствии GOTO,  а в наличии структуры из некоторых, пред-
вательно изученных и систематизированных конструкций  управления. Только
в 1975 г.  статья Д.Кнута несколько приостановила процесс вульгаризации,
превращающий  структурное  программированиее  в  "программирование   без
GOTO". К  сожалению эта статья,  безусловно относящаяся к "золотому фон-
ду" литературы по программированию,  до сих пор не переведена на русский
язык.  Автор  надеется  исправить  эту "историческую несправедливость" в
ближайших выпусках СОФТПАНОРАМЫ.
   По-видимому тот же процесс вульгаризации ожидает и концепцию обьектно
-ориентированного  программирования.  Важно не попасться в ловушку новых
апостолов , которые вчера учили нас структурному программированию, а се-
годня  будут учить объектно-ориентированному,  не написав самостоятельно
ни одной приличной программы.  В этом смысле Строструпу можно вполне до-
верять.  Автор, как настоящий профессионал, не прибегает к дешевой само-
рекламе и не пытается свести обёектно-ориентированное программирование к
одной или двум "заповедям".
   Если не вникать в подробности, то объектно-ориентрованные черты языка
С++ позволяют  программисту  быть "более ленивым" в том смысле,  что он
или она затрачивает меньше времени на написание, на изменение структуры
программы, на  сопровождение.  Это дает возможность писать лучшие прог-
раммы, поскольку программист получает  возможность "остановится,  огля-
нутся" вместо непрерывного нажимания на клавиши. Мне также кажется, что
механизм структурирования, обеспечиваемый С++ (классы и подклассы) поз-
воляет опытным  программистам  создавать программы, в которые несколько
легче и безопаснее вносить изменения, хотя очень жаль, что в целях упро-
щения реализации в язык не включены сопрограммы и прерывания (по типу ON
блоков ПЛ/1). На мой взгляд это конструкции "чье время пришло".
   В целом С++ содержит достаточно интересных идей, чтобы быть привлека-
тельным и для начинающих пограммистов,  конечно при наличии хорошей реа-
лизации.  Сейчас такая реализация появилась.  Появление Turbo Pascal 5.5
свидетельствует о том, что и фирма Borland, по видимому, в скором време-
ни выпустит компилятор С++.  Так что с моей точки зрения, как преподава-
теля,  есть смысл попробовать С++ уже сейчас, преодолевая однобокую ори-
ентацию на  Паскаль  и  Модулу-2,  сложившуюся  во  многих  вузах.  Идея
поддержки  верификации  в  языках  программирования - идее написанной на
знаменах адептов Паскаля и,  в меньшей степени,  Модулы-2 - это идея чье
время уже прошло. Обещания оказались невыполненными, "большой скачок" не
состоялся.  Профессиональный программист, как профессиональный дипломат,
должен владеть несколькими языками, чтобы уметь выбрать правильный комп-
ромисс в сложной ситуации,  хотя, конечно, один из языков будет для него
основным и здесь выбор, конечно, за ним.

10.12.89                                      С уважением  Н.Н. Безруков.



