Уважаемые коллеги ! Появление достаточно качественного компилятора с языка С++ фирмы 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 С уважением Н.Н. Безруков.