Н. Вирт - Программирование на языке Модула-2 (1160777), страница 2
Текст из файла (страница 2)
Серебрякова и В.М. Ходукинапод редакцией В.М. КурочкинаМОСКВА «МИР» 1987ББК 32.973В 52 УДК 681.3Вирт Н.В52Программирование на языке Модула-2: Пер. с англ.- М.: Мир,41987. — 224 с, ил.Книга известного швейцарского специалиста по системному программированию, знакомогосоветским читателям по переводам его книг «Введение в системное программирование» (М.: Мир,1977) и «Алгоритмы + структуры данных = программы» (М Мир, 1985).
Язык Модула-2 являетсяпреемником известного языка Паскаль и ориентирован на однопроцессорные малые ЭВМ. Книга сочетает в себе достоинства учебного пособия и справочногоруководства по этому языку.Для системных программистов, для специалистов, работающих с языком Модула-2.1702070000-102В 041(01) - 88 45 -88, ч1ББК 32.973Редакция литературы по математическим наукам©1985 by Springer-Verlag New York Inc. All rights reserved.Authorized translation from English language edition published by Springer-Verlag Berlin — Heidelberg— New York — Tokyo©перевод на русский язык, «Мир», 1987ПРЕДИСЛОВИЕ РЕДАКТОРА ПЕРЕВОДАБолее 15 лет назад появился язык Паскаль, который быстро завоевал популярность, получивширокое распространение. Создан он был для целей обучения программированию, однако оченьскоро нашел другое поприще - системное программирование.
И пожалуй, в дальнейшем (в томчисле и у нас) он больше всего используется именно для создания программного обеспечения.Правда, целый ряд черт языка мешал этому. Прежде всего отсутствовала модульность. Немалуюроль играли также такие моменты, как отсутствие в языке параллельных процессов, затруднения сорганизацией работы различных независимых устройств вычислительной машины и др. Видимо,все это привело Н.Вирта к идее разработки языка Модула, а затем и настоящей его модификации Модула-2. С того момента, когда этот язык стал известен системным программистам в СССР,число его сторонников постоянно увеличивалось. .Можно смело рассчитывать на то, что вближайшее время, кроме зарубежных, мы будем располагать целым рядом высококачественных5отечественных трансляторов, в большей степени приспособленных к нашей специфике работына ЭВМ.Трудно объяснить причины успеха (или неуспеха) какого-либо языка программирования. Помимопривычки (возможно, основной причины, объясняющей распространенность, например,Фортрана), есть еще какие-то Факторы.
И не исключено, что весьма существенным для языков,создаваемых Н.Виртом, и в частности для Модулы-2, является относительная простота: при всейшироте возможностей и мощности изобразительных средств описание его требует всего 40страниц ("Сообщение о языке программирования Модула-2" в настоящей книге). Это, конечно,существенно облегчает изучение языка и его использование.Следует все же сказать, что в языке не все может нравиться. В таких оценках многосубъективного, но тем не менее хочется отметить, например, отсутствие динамических массивов,бедность аппарата параллельных процессов и средств их взаимодействия, отсутствие способовгибкого задания отображения типов на Физическую память машины.
Создалось впечатление, чтосложные системные программы будут ориентированы на те ЭВМ, для которых они пишутся, иперенос программ с одних ЭВМ на другие будет затруднен. Впрочем, язык Модула-2 не следуетрассматривать как окончательно сформированный и законченный, и возможно, что какПредисловие редактора переводапо инициативе самого Н.Вирта, так и в результате накопления опыта работы с языком в нем будутпроисходить изменения. Это, в частности, подтверждается дрейфом языка, наблюдаемым вразличных авторских публикациях описаний языка. В частности, в 1985 г.
появился препринт(N.Uirth. A fast and compact compiler for Modula-2. O.Gutknecht. Compilation of data structures: annew approach to efficient Modula-2 symbol files, duly 1985, #64, Institut fur informatic, ETH-Zentrum,Zurich, Switzerland), в котором Н.Вирт требует объявления объектов (констант, переменных,процедур) до их использования. Для процедур разрешено предварительное описание заголовков.В настоящем переводе,- выполнявшемся с третьего английского издания, часть идентификаторов впрограммах не переведена на русский язык. Неизменными остались идентификаторы в техмодулях, которые могут войти в библиотеки Модулы-2 в качестве стандартных.
При подготовкерусского издания переводчики и редакторы пользовались средствами современнойвычислительной техники.Будем надеяться, что книга окажется очень интересной для советских читателей и принесетбольшую пользу, в первую очередь разработчикам программного обеспечения. Кроме того, первая(и основная) часть книги, задуманная скорее как введение в язык программирования Модула-2, ане как его строгое определение, может служить прекрасным учебником по программированию,написанным свойственным Н.Вирту четким языком, выдержанным в стиле структурногопрограммирования и иллюстрированным весьма интересными примерами.В.М.КурочкинПРЕДИСЛОВИЕНастоящая книга представляет собой введение в программирование вообще и руководство попрограммированию на языке Модула-2 в частности.
Она ориентирована в основном на лиц, ужезнакомых с элементами программирования и желающих систематизировать свои знания в этойобласти. Тем не менее в книгу включен вводный раздел для начинающих, где в сжатом видепредставлены Фундаментальные понятия информатики, благодаря чему книга может служить исамоучителем. Используемая здесь система обозначений -это язык Модула-2, которому в большоймере присущ структурный подход. Он вырабатывает у изучающего стиль работы, широкоизвестный под названием структурное программирование.Эта книга, служащая руководством по программированию на языке Модула-2, охватываетпрактически все его средства.
В гл. 1 рассматриваются такие основные понятия, как переменная,выражение, присваивание, условный оператор, оператор цикла, а также массивы. Эта и вторая6глава, в которой вводится важное понятие процедуры или подпрограммы, по существу, содержатматериал стандартного вводного курса программирования.
Глава 3 касается типов и структурданных, что составляет ядро курсов программирования повышенного типа. Четвертая главапосвящена понятию модуля, являющегося фундаментальным средством при разработке большихпрограммных систем и при совместной работе коллективов программистов.
Наиболее широкоиспользуемые служебные программы ввода и вывода даны в виде примеров модулей. И наконец, вгл. 5 описываются средства системного программирования, работа с внешними устройствами имультипрограммирование. Книга содержит практические рекомендации по тому, как и гдеиспользовать конкретные средства языка. Эти рекомендации должны помочь читателювыработать хороший стиль программирования.Язык Модула-2 - потомок и прямой наследник языков Паскаль [1] и Модула £2].
Паскаль былразработан как язык общего назначения и после его реализации в 1970 г. получил широкоераспространение, а Модула возникла из экспериментов по мультипрограммированию и нацелена,следовательно, на аспекты, относящиеся именно к этой сфере приложений. Язык Модула былспецифицирован и реализован в опытном порядке в 1975 г.В 1977 г. в Цюрихе, в Институте информатики (Institut fur Informatic of ETH, Zurich) была начатаработа по созданию новой вычислительной системы. Проект предполагал одновременнуюразработку аппаратуры и программного обеспечения. Эта система (позже названная Lilith) должнабыла программироваться на едином языке высокого уровня, который, следовательно, должен был,с одной стороны, удовлетворять требованиям проектирования в целом, а с другой - допускатьпрограммирование ее отдельных Фрагментов, описывающих взаимодействие с аппаратурой.
Врезультате скрупулезного анализа проекта возник язык Модула-2, включающий все характерныечерты Паскаля и дополненный важными понятиями модуля и мультипрограммирования.Поскольку синтаксис нового языка соответствовал больше синтаксису Модулы, чем Паскаля,было выбрано название Модула-2. Далее мы будем использовать названия Модула и Модула-2 каксинонимы.От Паскаля язык отличается следующими основными средствами:1. Понятие модуля и возможность его разбиения на раздел определений и раздел реализации.2. Более систематизированный синтаксис, что облегчает изучение языка.
В частности, каждаяконструкция, начинающаяся с ключевого слова, заканчивается тоже ключевым словом (заисключением оператора REPEAT ... UNTIL ...), т.е. заключена в своего рода скобки.3. Процесс - как ключевое понятие мультипрограммирования.4. Так называемые средства программирования низкого уровня. позволяющие ослабить жесткийконтроль типов и отображать данные, имеющие структуру Модулы-2, на память, не обладающуювнутренней структурой.5.
Процедурный тип. который позволяет динамически присваивать процедуры переменным.Первая реализация Модулы-2 заработала на PDP-11 в 1979 г., а первое определение языка былоопубликовано в марте 1980 г. как сообщение о языке Института .информатики. С тех пор языкинтенсивно используется в стенах нашего института. После годичной эксплуатации и проверок наразличных приложениях в марте 1981 г. компилятор был передан внешним пользователям.Интерес к компилятору быстро возрос, поскольку он оказался мощным инструментом разработкисложных систем и был реализован на широко распространенной мини-ЭВМ. Этот интерес вызвалнеобходимость написания руководства и учебника по языку.
Сообщение о языке, содержащеесжатое определение языка Модула-2, включено в конец настоящего руководства в основном дляоблегчения ссылок на него. Оно осталось практически неизменным; в нем лишь опущены разделы,посвященные стандартным служебным модулям и использованию компилятора.Английский оригинал книги был получен в виде, удобном для тиражирования, с помощью миниЭВМ Lilith, присоединенной к лазерному печатающему устройству Canon LBP-10. Параллельно снаписанием книги автор разрабатывал программы, необходимые для Форматирования текстов (и7управления печатающим устройством), а также проектировал интерфейс связи с устройствомпечати. Естественно, что все эти программы были написаны на Модуле (для Lillth).Просто невозможно выразить заслуженную благодарность всем, кто оказал влияние на написаниеэтой книги и на проект Модула-2.
Большую пользу принес мне год (1976), проведенный висследовательской лаборатории корпорации Xerox, и знакомство с некоторыми идеями,касающимися модульного программирования, содержащимися в языке Mesa [3]. Вероятно, оченьважной была мысль о возможности эффективной реализации языка высокого уровня на миниЭВМ. Приношу свою благодарность также разработчикам Модулы, в особенности Л.Гайсмену, А.Горангуру, Ч.Якоби и СЕ.Кнудсену, которые не только превратили Модулу в эффективный инадежный инструмент, но также часто (и очень мудро) предостерегали меня от включения в языкновых модных средств.ПРЕДИСЛОВИЕ К ТРЕТЬЕМУ ИЗДАНИЮВ третье издание книги включены изменения и модификации Модулы-2, сделанные в конце 1983г. Изменения по сравнению с предыдущими изданиями отмечены символом ((). Односущественное изменение касается модуля определений, который теперь не содержит экспортногосписка, а сам Фактически представляет собой экспортный список (см.
разд. 24). Дополнительно вприложение включены несколько стандартных модулей, оказавшихся весьма полезными. Восновном они относятся к вводу и выводу, т.е. использованию клавиатуры, дисплея и Файловойсистемы.Н.ВиртЛитература1. N.Ulrth. The programming language PASCAL. Acta Informatica 1, 35-63 (1971).2. N.Ulrth.