Языки программирования Оберон и Оберон-2
МОСКОВСКИЙ ТЕХНИКУМ КОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
Реферат по предмету
"Технология разработки
программных продуктов"
по теме:
"Языки программирования
Оберон и Оберон-2"
Выполнил Знобищев А. В.
группа МП31-03
Проверил Сидорова Н. А.
2005 г
Содержание
1 История создания и развития языка..........................3
1.1 Предшественники языка...............................3
1.2 Проект Oberon.......................................4
1.3 Затмение Оберона....................................5
1.4 Ренессанс Оберона...................................6
2 Краткие сведения об авторах языка..........................9
Никлаус Вирт...........................................9
Ханспетер Мессенбок....................................9
3 Краткая характеристика основных языков Оберон-семейства...10
3.1 Оберон.............................................10
3.2 Оберон-2...........................................10
3.3 Компонентный паскаль...............................10
3.4 Active Oberon......................................10
3.5 Zonnon.............................................10
4 Отличия от Паскаля........................................11
5 Различия между языками Oberon и Oberon-2..................12
5.1 Типизированные процедуры...........................12
5.2 Замороженный экспорт (READ-ONLY EXPORT)...........13
5.3 Открытые массивы...................................13
5.4 Оператор WITH......................................14
5.5 Оператор FOR......................................14
6 Сравнение Оберона с другими языками по сложности.........15
Приложение: Описание языка программирования Оберон-2........16
Пример программы............................................36
Литература..................................................39
1 История создания и развития языка.
Судьба Оберона
1.1 Предшественники Оберона (Романтические 1970-е)
Паскаль умер. Эту фразу приходится слышать довольно часто. Одни произносят ее с ностальгией, с налетом грусти, мом понимая, что романтические 1970-е годы же не вернуть. Другие - без тени эмоций, спокойно, как констатацию приговора, вынесенного самой судьбой. Начало 1970-х ознаменовалось рождением трех языков, роль которых в развитии современного программирования переоценить тяжело. Паскаль (Никлаус Вирт, 1970; ETH, Швейцария), Си (Деннис Ритчи, 1971; AT<&T Bell Labs, США) и Smalltalk (Алан Кей, 1972; Xerox PARC, США) - эта великая тройка дала путевку в жизнь трем важнейшим направлениям: структурному, системному и объектно-ориентированному программированию (ООП). Она определила и разные языковые ветви с непохожим синтаксисом и существенно отличающейся языковой культурой. Паскаль продолжил строгую линию Алгола-60, брав все наносное и порядочив его фундамент. Три кита структурного программирования (последовательность операторов, ветвление и цикл), закрепленные Чарльзом Хором и Никлаусом Виртом в аксиоматическом описании Паскаля, стали столь же незыблемыми в информатике, как законы Ньютона в классической механике. Для математиков, физиков и представителей других наук Паскаль стал нифицированной языковой средой, своего рода латынью программирования. Как известно, в истории латинского языка выделяют три ярких периода: золотая латынь (Цицерон, Цезарь, Вергилий, Гораций, Овидий), серебряная латынь и поздняя латынь. Язык Паскаль также прошел три этапа: золотой (197Ч1985, ETH Pascal, UCSD Pascal), серебряный (198Ч1995, Turbo/Borland Pascal) и поздний (с 1995, Delphi).
Язык Си, этот бунтарь-анархист, в начале 1970-х бросил дерзкий вызов всем классическим языкам. Си не хотел ни внешне, ни внутренне походить на то, что до него знали. Машинная арифметика, ассемблерный стиль программирования, странный синтаксис. Язык получился незамысловатый, хотя и весьма "огнеопасный". Но для тех, кто искал приключений, любил ходить по лезвию ножа, он оказался родным и просто незаменимым. Си имел мощный
практический фундамент - на нем была написана ОС UNIX, причем росли и чились жизни они бок о бок, в одной комнате, в стенах AT&T Bell Labs.
Smalltalk почти все 1970-е годы был малоизвестен. В лабораториях Xerox только-только зарождались первые ростки персональных компьютеров, об исследованиях знали лишь посвященные. Да и в отличие от Паскаля и Си язык сразу сросся со своей инструментальной средой. Это была маленькая селенная, особый мир, в котором творить можно было буквально все. Рай для детей и взрослых. Но он слишком опередил времяЕ C++, Java, C# спустя десятилетия шли по его стопам, но же куда более жестким, размеренным, прагматичным шагом.
В этой большой тройке Паскаль выделялся ярче остальных. Он появился в период кризиса языков Алгол семейства и противопоставил имперскому величию Алгола-68 и ПЛ/1 изысканность и простоту. Мир больших машин становился все более тесным и душным для воплощения новых идей. Человечество смутно искало выход, и революция микрокомпьютеров, где Паскаль блестяще солировал, стала сильнейшим катализатором популярности самого известного языка профессора Вирта. Паскаль открывал широкие перспективы не только перед высшей школой и научным миром, ибо благодаря нификации резко силился обмен идеями, но и перед бизнесменами новой волны, рванувшим на "золотые прииски" Кремниевой долины. Практичные американцы подхватили знамя Паскаля и с присущим им размахом стали водружать его на ключевых высотах. Марка Паскаля была сильна, но в реальности под ней чего только не выпускали. Рынок сначала подмял под себя язык, затем и размыл его на множество несовместимых диалектов. Так от блестящих образцов "золотой латыни" остались одни лишь смутные воспоминания. А что же Вирт? Он старался не отвлекаться на всю ту мишуру и шумиху, которая окружила такой корыстной заботой его детище. Вдохновленный поездкой в Xerox PARC (197Ч1977), где был создан Mesa, один из лучших языков модульного программирования, он приходит к мысли, что всю триаду "компьютер-язык-ОС" надо проектировать одновременно. Только тогда можно добиться гармонии в этом трудном инженерном деле - конструировании удобной и надежной среды для персональной работы. Один за другим он создает языки Modula (1976) и Modula-2 (1979). Причем на этот раз переносит акцент на аппаратную составляющую - компьютер Lilith (197Ч1981) стал первым в Европе персональным 16-разрядным компьютером с растровым дисплеем, винчестером, мышью, лазерным принтером и локальной сетью, при этом был создан силами небольшой группы исследователей из ниверситетского центра. Он работал под правлением собственной модульной ОС - Medos (автор - Свен Кнудсен), полностью написанной на новом языке Вирта (Modula-2). Более того, для эффективности выполнения на аппаратном ровне была реализована поддержка M-кода, дальнейшего развития знаменитого P-кода Вирта (кода виртуальной Паскаль-машины), который спустя почти четверть века после своего появления был положен в основу платформы Java. За эти работы Никлаус Вирт в 1984 г. был представлен ассоциацией ACM к высшей награде - премии Алана Тьюринга (Alan Turing Award), которая в компьютерном научном мире эквивалентна Нобелевской премии. 1980-е годы прошли под знаком колоссального интереса к персональным компьютерам. Apple и IBM начали свое великое противостояние в мире ПК. Но как же далеки были эти компьютеры от того, что было сделано в лабораториях Xerox и учебных корпусах ETH ! Отрасли потребовалось еще целое десятилетие, чтобы подобраться к идеям, реализованным вдохновенными инженерами по обе стороны Атлантики. На страницах PC World, PC Magazine, BYTE не только замелькала реклама новинок рынка, но и стали появляться статьи, определявшие пути развития компьютерного мира. Благодаря феномену языка Smalltalk (точнее, системы Smalltalk-80) интерес к ООП стал расти как снежный ком. Стало очевидно, что новый подход к программированию не обойдет стороной и другие языки.
1.2 Проект Oberon
Осенью 1985 г. Вирт и его коллега Юрг Гуткнехт начинают проект Oberon. Вновь создавалась триада "язык-компьютер-ОС". На этот раз акцент переносился на ОС и произошло более четкое разделение труда. Вирт проектировал язык и писал компилятор, Ганс Эберле конструировал компьютер, Гуткнехт создавал систему Oberon. На самом деле работы над новым компьютером начались немного раньше. Дальнейшее развитие Lilith поставило, по словам Вирта, задачу создания "современной, гибкой и эффективной операционной системы для однопользовательской рабочей станции". Поначалу казалось, что этого можно было добиться в рамках Medos и Modula-2. Лишь затем стало ясно, что нужны более кардинальные шаги. Если Lilith (архитектор - Ричард Оран) создавался на основе микропроцессоров AMD2901 фирмы Advanced MicroDevices, то Ceres (так звали новый компьютер, в честь богини Цереры)
использовал 32-разрядный процессор NS32032 фирмы National Semiconductor (затем жеNS32532 и NS32GX32). Вслед за серией Ceres в ETH был разработан компьютер Chameleon (Хееби Пфистер). Первой ОС была Medos, да и первый компилятор Оберона создавался на языке Modula-2 (Вирт).
Системе Oberon предшествовали исследования, которые проводились в ETH в 198Ч1985 гг. на Lilith Юргом Гуткнехтом и его коллегами, Винигером и Шером. Сначала появился редактор Andra с поддержкой всевозможных окон, шрифтов, средств композиции страницы, затем и редактор Lara. Примерно в тот же период Вирт разработал графический редактор и завершил работы над новым однопроходным компилятором языка Modula-2.
К середине
1988 г. же был готов компилятор для экспериментальной рабочей станции Ceres-2 (на базе NS-32532) и прошли первые публикации Вирта (в апреле и июле; сначала
"Type Extensions<" в ACM Transactions "Компилятор Оберона был реализован для процессоров семейства NS32 и был встроен в операционную среду Oberon. Этот компилятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим размером около 4 строк исходного текста и сам себя компилирует примерно за 15 секунд на рабочей станции с 25 Гц процессором типа NS32532<". Никлаус Вирт (1988) Вторая стадия проекта Oberon наступила летом 1991 г., когда было положено начало так называемой
Oberon System 3. "Графические интерфейсы ныне используются повсеместно, и игнорировать это проявление духа времени не может себе позволить ни одна серьезная операционная система. Поэтому летом 1991 г. мы приступили ко второй стадии проекта Oberon. Однако, в ту пору мы хотели не просто облачить по сути "голую" систему Oberon в нарядные GUI-одежды,
но и сделать важный шаг вперед. Несколько раздвигая границы стоявшихся представлений, мы сразу стали рассматривать графический интерфейс как набор истинных визуальных объектов".Ю. Гуткнехт (1994) О системе
Oberon следует говорить куда более обстоятельно, чем это позволяют рамки данной статьи. Здесь же помяну, что многие ключевые идеи взяты на вооружение современной ИТ-индустрией из системы Oberon: динамическая компиляция и аплеты,
смарт-теги и Digital Dashboard, концепция интеллектуального документа и веб-службы. Одно из наиболее перспективных направлений дальнейшего развития Oberon - превращение его в совершенствованную общую платформу для предоставления слуг даленным пользователям; слово
"усовершенствованную" мы понимаем в данном случае как гибкую, высоко интегрированную и индивидуализированную. К настоящему времени мы провели эксперименты по организации следующих слуг даленным пользователям (и реализовали доступ к ним через Ethernet и TCP/IP): Х электронный телефонный справочник; Х электронный справочник пассажира железной дороги; Х электронный словарь; Х фотосервис Digital Kodak; Х информационная система по географии Швейцарии; Х служба символьных вычислений Maple; Х служба TrueType-шрифтов; Х FTP; Х электронная почта; Х правляющая служба Telnet; Х поддержка World Wide Web; Х Teletext и Telenews. Ю. Гуткнехт
(1994) Подобно тому, как в свое время ОС UNIX начала ветвиться (System V и BSD), в ETH
возникли две конкурирующие группы - Oberon V4 и Oberon System 3. Да и сама система Oberon оказалась непростой для самостоятельного изучения: интерклики мышкой - почти азбука Морзе. Спроектирована она была хорошо, вот реализация подкачала (главным архитектором проекта был Гуткнехт; главного инженера, вы,
не было). добной становится после длительного освоения и только для посвященных - тех, кто сумел набраться терпения и преодолеть все издержки экспериментального программирования. Система Oberon оказалась Великой Китайской стеной, отделяющей новаторов-затворников от остального мира. Будучи хорошей базой для исследований Oberon System сыграла роковую роль в судьбе самих языков Оберон-семейства. Она затмила собой одноименный язык, созданный Виртом с участием Гуткнехта, окружив его "теплом и заботой". "Перечислить все идеи, на основе которых сформировалось то, что сегодня называется Обероном, Ч писал Вирт, - просто нет возможности. Большинство этих идей родилось в ходе применения или изучения существующих языков (таких, как Modula-2, Ada, Smalltalk, Cedar), которые часто показывали нам, каких решений следует избегать". На сегодняшний день компиляторы канонического Оберона доступны только внутри системы Oberon и системы Juice (Oberon System
для Netscape и Internet Explorer), также представлены транслятором COP2 (трансляция в Си). В контакт с агрессивным внешним миром коммерческих систем вступили последователи Оберона: Oberon-2 и Component Pascal, затем Active Oberon и Zonnon. Силы в
ETH в 1990-е годы были сосредоточены на создании переносимых и перенацеливаемых компиляторов для разных платформ. Этим занимались преимущественно аспиранты Вирта и Гуткнехта.
Кадры выросли очень сильные, апробированные идеи можно плодотворно изучать до сих пор (диссертации почти все как на подбор), вот результат их работы почти неизвестен даже специалистам. К февралю
1990 г. был готов переносимый компилятор OP2. Кстати, именно его брали за основу при начале работ над компилятором Oberon-2 Алексей Недоря и его новосибирские коллеги по XDS. В июне 1989 г. Ханспетер Мессенбок спроектировал
Object Oberon, добавив ООП-расширения в канонический Оберон. Именно Мессенбока,
пожалуй, и следует считать автором Oberon-2, в который вылился Object Oberon.
Вирт не возражал против совторства в языке, поскольку расхождения по сравнению с Обероном были не фатальными, хотя и не лежали в рамках того критического взгляда на ООП, который исповедовал сам Вирт. Весной 1991 г. в журнале Structured
Programming (издательство Springer-Verlag, в редколлегии были Н. Вирт и Д.
Кнут) в одном номере вышли две статьи, давшие публичную жизнь языку Oberon-2:
"The Programming Language Oberon<-2" и "Differences К моменту появления Oberon-2 в 1991 г. информация об Обероне только-только стала выходить из стен ETH. Сторонние разработчики компиляторов сделали ставку именно на
Oberon-2, считая, что это просто лучшенный Оберон. При этом важно отметить,
что распространение пошло не по линии Open Source - едва ли не каждый сторонний разработчик компиляторов хотел сделать на новом языке свой бизнес. В июне
1993 г. в Кройдоне, что в предместье Лондона, в отеле Oakwood собрались заинтересованные лица, многие из которых получили горький опыт затяжной промышленной ISO-стандартизации
Modula-2. Были там и главные архитекторы лучших Оберон-компиляторов: лексей Недоря
(XDS), Гюнтер Дотцель (ModulaWare), Куно Пфистер (Oberon microsystems), Джон Гуг (John Gough, QUT,
GPCP). В ходе дискуссий были выработаны рекомендации и стандартная библиотека для Oberon-2. Ее следы вы теперь найдете в компиляторах XDS и JOB. 1.3 Затмение Оберона В 1993 г.
в ETH приехали представители Sun Microsystems во главе с Биллом Джоем. Они приобрели лицензию на систему Oberon и пригласили с ответным визитом выступить у них лучших учеников Вирта - Микаэль Франц сразу после защиты соответствующей диссертации в ETH делал доклад по динамической кодогенерации в Sun Labs в марте 1994 г., за 14 месяцев до выхода Java и за полгода до разработки браузера HotJava. Согласно информации Sun [JavaSoft], идея переориентации Java на World Wide Web возникла в 1994 г. и принадлежала Биллу Джою, одному из основателей фирмы. Осенью 1994 г. Началась работа по реализации
Web-браузера HotJava с возможностью выполнения аплетов. В марте 1995 г. браузер был представлен избранному кругу стратегических партнеров Sun, включая руководство корпорации Netscape Communications, чья публичная поддержка впоследствии немало способствовала спеху новой технологии. В августе 1995 г. состоялся триумфальный выпуск Java, который происходил в довольно необычной для базовых технологий форме - в виде серии пресс-конференций.Е может быть интересно то обстоятельство, что в марте 1994 г. автором был прочитан в Калифорнии ряд докладов по теме диссертации, причем один из них - в Sun Laboratories, Inc. Кроме того, помянутый выше Билл Джой, который переориентировал проект Java на,
стал одним из первых обладателей лицензии на Oberon System из ETH, и в конце
1994 - начале 1995 г. он неоднократно связывался с ETH; в процессе контактов выяснилось, что он читал мою диссертацию. Микаэль Франц
(1996) В 1994 г.
Франц, разрабатывавший ранее кодогенератор Оберона для MC680x0 (Macintosh), завершил кодогенератор в промежуточный код - OMI (Oberon Module Interchange). Впервые на русском языке информация об этом была опубликована в альманахе Технология программирования
(1995, №1). Идея Франца была проста - вместо традиционной схемы компилятор Ч компоновщик - загрузчик получить схему компилятор - кодогенерирующий загрузчик,
иными словами, совместить генерацию кода, компоновщик и загрузчик в одном флаконе. Концепция Уcode-generation on-the-flyФ (динамическая кодогенерация, кодогенерация на лету) с использованием компактного древовидного представления вместо классического байт-кода была положена в основу одноименной диссертации М.
Франца, которую он защищал в ETH в феврале 1994 г. Его научными руководителями были Никлаус Вирт и Юрг Гуткнехт. Крайне интересная диссертация. Помню, как о ней в среде Modula- и Оберон-сообщества только и говорили (почти с придыханием).
Редкий случай - в Цюрихе в марте 1994 г. она была переиздана в виде книги. В Sun не рискнули сразу копировать все из Oberon (идеи браузерной среды языка, аплетов и трансляции в мобильный код взяли, вот путь реализации мобильного кода выбрали свой). В 1991 г. автор Java Джеймс Гослинг при реализации Oak (прототипа языка
Java) взял старую идею P-кода, которую хорошо знал: в 1975 г. Гослинг вместе с Недом Китлицем и Бобом Сайдботемом частвовал в построении среды программирования Pyxis/Multics Pascal, способной по быстродействию кода и добству интеграции на равных конкурировать в Multics c родным для этой ОС языком ПЛ/1.
А начинали они с поддержки компилятора ETH/Zurich Pascal, разработанного в Цюрихе группой профессора Вирта. В 1979 г. Гослинг реализовал PERQ - транслятор с P-кода в машинный код DEC VAX. В 1994 г.
Sun не стали рисковать включением новейшей хитроумной реализации мобильного кода в древовидном представлении, что предлагал в диссертации Франц, а сохранили готовый подход Гослинга. Для всей отрасли модель Sun на долгие годы стала эталоном. К тому моменту широкой аудитории доступ к Оберон-компиляторам был заказан: даже при нынешнем ровне пиратского тиражирования столь специфичный инструментарий, имеющий единичные продажи, заполучить нереально. Единственный игрок, кто мог cделать массовый коммерческий компилятор Оберона - компания TopSpeed
(JPI) - в те годы шел к закату. Их последним движением в сторону новых языков Вирта было включение в Modula-2 собственных ООП-расширений. (Напомню, что фирма JPI/TopSpeed
вышла из недр Borland. Ее, вы, короткая жизнь началась после того, как в знак протеста против замораживания проекта Turbo Modula-2 в году рыночным перспективам раскрученного
Turbo Pascal компанию Borland покинула группа вице-президента Йенсена.) Брюс Баррингтон, основатель и глава Clarion Software, приобрел компанию TopSpeed,
гдеосновным рабочим языком был Modula-2, для перевода своего детища, языка
Clarion, на рельсы лучших в ПК-отрасли компиляторов TopSpeed (Assembler,
Modula-2, Pascal, C/C++). В связи с этим был заморожен проект TopSpeed Ada, а затем и все остальные компиляторы (они остались на 16-разрядной платформе).
Единицы знают, что внутри среды Clarion (теперь этот бизнес ни шатко ни валко ведет фирма SoftVelocity) до сих пор запрятан 32-разрядный компилятор TopSpeed
Modula-2, так никогда и не вышедший на рынок. Это был еще один дар по Оберонам. Но самой мощной волной, накрывшей Обероны с головой и на долгие годы предавшей их забвению, стала
Java. Она стремительно ворвалась в ту нишу, которую себе подготовил Оберон, нахраписто и без какого-либо поминания вырвала многие его идеи, высосала лучшие кадры. Но если бы еще это делалось с мом. А так... С другой стороны, прошло 10 лет с момента появления Java, и теперь после ревизии ошибок прошлого можно взглянуть на Обероны по-новому. Как и Smalltalk, cлишком ж они опередили свое время. 1.4 Ренессанс Оберона Продолжим краткий рассказ об истории языков Оберон-семейства. Новый виток в их жизни начался в том момент, когда в ETH созрела идея создания небольшой компании (Oberon microsystems),
ориентированной на внутренний швейцарский рынок (в основном, это были промышленные роботы). Главным мотором стал Куно Пфистер, архитектором Component Pascal Ч Клеменс Шиперски. К концу
1990-х годов на волне очевидного негатива к Sun в ETH пришла Microsoft.
Начались совместные проекты (по линии Microsoft Research), совпавшие по времени с проектированием платформы.NET. Клеменс Шиперски из Oberon microsystems
перешел в Microsoft Research. К тому моменту он же завоевал огромный авторитет в мире компонентно-ориентированного проектирования и программирования благодаря книге "Component Software - Beyond Object- Oriented Programming". Там есть отдельная глава, посвященная системе BlackBox (Component Pascal). Книга вышла в 1997 г., затем дважды стереотипно переиздавалась в 1998 г., затем дважды в 1 г., наконец второе ее издание вышло в 2002 г. Компонентный Паскаль проектировался так, чтобы, с одной стороны, иметь возможность работать с основной компонентной моделью - COM (Oberon/F, предвестник BlackBox, получил в конце 1990-х годов на CeBIT приз за технологическое совершенство - за реализацию Direct-to-COM Compiler), с другой - с миром Java. При этом в
Oberon microsystems (где, кстати, был написан по заказу Borland JIT-компилятор для JBuilder) начались работы по использованию Component Pascal для мира встроенных систем (ОС Portos, ныне JBed). Именно эти работы положили начало зарождению компании Esmertec - мирового лидера заказных решений для Java 2 Micro Edition. Среди критиков Оберона можно слышать слова о том, что если он обладал столь совершенными технологиями, то почему его не видно на рынке. Честно говоря,
трудно привести примеры, когда за последние четверть века технологическое совершенство в инфраструктурном или инструментальном программном обеспечении предопределяло безусловное лидерство на рынке. Обратных примеров сколько угодно. Чтобы понять ту пропасть, которая отделяет нынешнюю ИТ-индустрию от взвешенного научно- технологического подхода, стоит задаться вопросами: 1. Зачем
Borland в 1980-х годах топила в своих недрах технологически наиболее совершенную среду Turbo Modula-2? Правильно, в году своего рыночного положения, дабы этим не бить свой же
Turbo Pascal - курицу, несущую золотые яйца. 2. Почему в
1990-х годах элегантный Smalltalk так и не смог поколебать позиции родливого C++,
неумело поставившего крайне модные тогда идеи ООП на рельсы Си? Верно, не в интересах
Microsoft и Borland было восстанавливать былую мощь IBM в области инструментария. 3. Почему
Microsoft не вывела на орбиту очень приличный Eiffel Бертрана Мейера? Помните,
как Билл Гейтс лично хлопал мэтра по плечу и всячески расхваливал компилятор
Eiffel for.NET? Книгу Мейера о.NET превозносили до небес. Но... мавр сделал свое дело - мавр должен йти. Профессор Мейер был нужен Гейтсу лишь для раскрутки.NET. Мейер шел в затворничество в швейцарский ETH - альма-матер виртовских языков. 4. Почему компания Esmertec, отпочковавшаяся от Oberon microsystems и сделавшая в конце 1990-х годов свою дуальную ОС Portos для встроенных систем (Оберон+Java), вынуждена была практически полностью перевести свою продукцию на рельсы Java? Точно, если рынок предпочитает для себя худший язык (Java) и худшую среду (Java 2 Micro
Edition) - пожалуйста, они сделали это просто лучше всех в отрасли и стали здесь лидерами. А вслед за этим реализовали и компактный Smalltalk для систем реального времени. В последние годы ИТ-индустрия насильно превращает ниверситеты в ремесленные училища. При этом Россия благодаря своей защитной инертности мудрилась во многом сохранить озис неремесленного программирования. И Delphi явился той палочкой-выручалочкой, которая этому во многом способствовала. За это Delphi
большое спасибо. Но сейчас перспективы Delphi в маркетинговом плане выглядят весьма туманно. На платформе Linux инструментарий Kylix заморожен. Borland
стала по сути филиалом Microsoft и нужна редмондскому гиганту, чтобы достойно противостоять линейке IBM Rational. Но дело не только в более чем реальном уходе Delphi с рынка. же сейчас специалисты по Delphi остаются в индустрии невостребованными. А поскольку ниверситеты стремительно сращиваются с индустрией, то Delphi будет вымываться из учебного процесса. На этом может быть поставлена жирная точка в судьбе языков Паскаль- семейства. Мир инструментария все больше становится двухполюсным: Microsoft - IBM. Компания
Sun Microsystems вопреки огромной шумихи не только почти ничего серьезного не сделала в Java за 10 лет (весь воз корпоративной Java почти в одиночку тащила
IBM), но и своим апрельским соглашением 2004 г. с Microsoft фактически объявила войну своему бывшему союзнику. На рынке ИТ все более силивается пропагандистская война, битва за мы. Здесь неуместны рассуждения о технологическом совершенстве и, паси Боже, о какой-то там науке! Причины забвения Оберона выглядят так: Х распыление сил и средств внутри ETH (V4 против System 3, Оберон против Oberon-2); Х распространение лучших оптимизирующих компиляторов единичными тиражами на коммерческой основе; Х отсутствие групп пользователей (User Groups) и собственных изданий; Х слабая интернет-активность; Х мощная волна
Java-пропаганды; Х отток специалистов в коммерческий мир Java и.NET. И все же самыми главными стали три момента: 1. Отсутствие четкой программы популяризации/вывода языков на рынок. 2. Колоссальный информационный голод. 3.
Игнорирование резко выросшего потенциала OpenSource-движения. Но язык не поворачивается обвинить во всем этом ETH. Он вел интенсивные исследования и совершенствовал свой учебный процесс, в чем достиг выдающихся результатов, вот поддержка "народных масс" в Швейцарии и близлежащих европейских странах оказалась слабоватой. Америке же Оберон был чужд и, наверное, наивно было бы полагать, что его подобно Паскалю начнут активно продвигать американцы, у которых был теперь свой
"золотой телец" в лице Java. И все же Оберон отнюдь не мер. Люди, занимавшиеся и продолжающие заниматься им, стараются не особо это афишировать. За примерами далеко ходить не надо. ченик Вирта, Микаэль Франц,
создал внутри ниверситета Калифорнии в Ирвайне свою маленькую Оберон- империю. Вот только он об этом не кричит на каждом перекрестке. Все финансирование проектов идет для его группы только по линии Java. Ныне его команда - один из мировых лидеров в исследовании мобильного кода и проблем ИТ-безопасности для Java. Ирония судьбы, ярый противник Java ведет перспективные Java-проекты для американского ВПК. Критики Оберона не ставят под сомнение элегантность языка (да и перспективность всего семейства),
а считают старевшим доступный для него инструментарий и неустойчивое положение компаний-разработчиков. С позиций таких IDE-систем, как Visual Studio, Delphi и Eclipse, он в самом деле выглядит по-спартански скромным, без "свисточков и звоночков". В то же время благодаря Клеменсу Шиперски (Microsoft Research) и группе Пола Ро в Квинслендском университете
(Австралия) ориентированный на компонентное программирование диалект Оберона в лице
Component Pascal имеет три актуальных реализации для Visual Studio (.NET 1.x и 2.0),
Java (JVM) и Eclipse (JVM). Юрг Гуткнехт совместно с Евгением Зуевым (ETH) продолжают развивать компилятор Zonnon для.NET с интеграцией в
Visual Studio. Наконец, в России ведутся работы по переносу, пожалуй, основной инструментальной среды для Оберонов - BlackBox (Component
Поворотный этап в развитии Оберона начался с переводом BlackBox в категорию freeware и
Open Source (конец 2004 г.). В мае 2005 г. новосибирская фирма Excelsior (XDS)
перевела свою линейку Modula-2/Oberon-2 компиляторов в разряд freeware, вслед за началом разработки нового компилятора Modula-2 для НПО ПМ им. Решетнева,
ведущего российского центра по созданию спутников связи. Одновременно с этим профессор Никлаус Вирт начал работы по адаптации своих бестселлеров для языка Оберон и перевод в открытый доступ своих лучших книг. Важнейшую роль в возрождении интереса к Оберону сыграла растущая активность нарождающегося Оберон-сообщества в России, которую стимулировал проект
"Информатика-21", стартовавший на физфаке в МГУ в 2001 г. (автор - Ф.
В. Ткачев). Вокруг проекта сформировалась панель консультантов, представляющих аэрокосмическую индустрию, Российскую академию наук и МГУ. Весной 2004 г. на базе швейцарского CERN (Европейский центр ядерных исследований, Женева), откуда вышел World Wide Web, с частием России были инициированы работы по активному применению Component Pascal в фундаментальных научных исследованиях. С 2003 г.
в рамках "Студии программирования" журнала "Мир ПК" и CD- приложения
"Мир ПК-диск" начались регулярные публикации работ по развитию Оберона и размещение соответствующего инструментария. В сентябре-октябре 2005 г. с большим визитом по нашим крупнейшим ниверситетским центрам (Москва, С.-Петербург, Нижний Новгород, Новосибирск, Екатеринбург,
Томск) Россию посеетил Никлаус Вирт и Юрг Гуткнехт. Осенью этого года начнет выходить электронный журнал "Школа Оберона", ближе к концу года (к
35-летию Паскаля и 25-летию выпуска Lilith) запланировано открытие сайта, в котором будет собрана и систематизирована информация о прошлом, настоящем и будущем языков Вирта, в том числе о новых проектах в ETH и за его пределами. Если говорить об интересе к Оберону в остальном мире, то сейчас он более чем сдержанный. Те, кто разобрались, в чем его плюсы, - особенно не афишируют,
используя его как конкурентное преимущество в своем бизнесе. Бытует мнение, что Оберон сродни объектным СУБД: выглядит красиво, реально его почти не используют. Но разве то, что используют немногие, говорит об щербности или непрактичности? Конечно же, нет. Вопрос в том, сумеем ли мы вопреки шумной рекламе и сложившемуся статускво ИТ-индустрии приподняться над ветреной модой и суетой рынка и взять Оберон на вооружение. Это зависит лишь от нас самих. И если ж проводить параллели, то куда корректнее сравнивать Оберон с путеводной звездой (хоть и самый дальний спутник рана). Тихо светит и другим не мешает... 2 Сведения об авторах языка Никлаус Вирт (Niklaus
Wirth) Ч профессор Швейцарского Федерального технологического института (ETH) в Цюрихе,
который Вирт закончил в 1958 г. и где получил специальность инженера в области электроники. Затем он продолжил свое обучение в Лавальском ниверситете (Laval
University) в Квебеке (Канада). В ниверситете Калифорнии в Беркли (University
of California at Berkeley, США) в 1963 г. Вирт защитил докторскую диссертацию.
До 1967 г. работал доцентом на вновь образованном факультете компьютерных наук в Стэнфордском ниверситете (Stanford University, США), где он разработал язык
PL360 и, в сотрудничестве с рабочей группой IFIP Working Group 2.1, язык
Algol-W. В том же 1967 г. становится доцентом в ниверситете Цюриха (University
of Zurich), в 1968 г. переходит в ETH, где в период с 1968 по 1970 годы разрабатывает язык Pascal. Среди последующих проектов - разработка и реализация персонального компьютера Lilith, высокопроизводительной 16-разрядной рабочей станции с растровым дисплеем, создание языка Modula-2 (1978-1982 г.), и
32-разрядной рабочей станции Ceres (1984-1986 г.). Затем им были созданы языки
Oberon и Oberon-2 (совместно с профессором Х.Мессенбоком), также операционная система Oberon (1986-1989 г.). В 1984 г. профессор Вирт был достоен почетной премии Алана Тьюринга (Turing Award), в 1989 г. - премии Max Petitpierre Prize,
а также премии Science and Technology Prize от IBM Europe. Один из последних его проектов - система Lola System для разработки электронных схем (1995 г.). Ханспетер Мессенбок (Hanspeter Moessenboeck) - известный специалист в области компиляторов, языков и систем программирования, объектно-ориентированного программирования,
программной инженерии; разработчик экспериментального языка Object Oberon,
вместе с Никлаусом Виртом (Niklaus Wirth) является создателем языка Oberon-2.
Он частвовал в ряде проектов, проводимых в Швейцарском Федеральном технологическом институте (Swiss Federal Institute of Technology), был профессором в департаменте компьютерных наук (Computer Science Department) в
ETH (Цюрих, Швейцария). Он автор известной книги Object-Oriented
Programming in Oberon-2 (Springer-Verlag, 1993). В настоящее время работает профессором в ниверсите Йоганна Кеплера в Линце (Johannes Kepler University, Linz, Austria). 3 Краткая характеристика основных языков Оберон-семейства 1. Оберон (Никлаус Вирт, 1988) - изящный компактный язык (меньше и проще Паскаля), идеален для преподавания основ информатики (computer science),
концепций структурного, модульного и объектно-ориентированного программирования
(ООП). Хорошо подходит для реализации малых и средних проектов. Имеет компиляторы внутри Oberon System и Juice. Блестящий кандидат на роль эсперанто программирования. 2. Oberon-2
(Ханспетер Мессенбок, Никлаус Вирт, 1991) - развитие Оберона в сторону привычного ООП, в связке с Modula-2 (как языка системного программирования)
создает хорошую основу для реализации крупных проектов из макромира и микромира
(встроенных систем, систем реального времени). Двуязыковая связка отлично реализована в системе XDS (Excelsior). Позволяет осуществлять кросс-разработку в Win32/Linux за счет трансляторов промышленного качества в Си и C++. Если нужно обобщение алгоритмов (задействование ООП), написание автономных программ,
устойчивая работа с ОС на ровне системных вызовов, использование внешних библиотек на других языках, перенос на другие платформы через Cи/C++,
эффективная реализация (оптимальный объектный код), то подходит Oberon-2 в исполнении XDS. 3. Компонентный Паскаль/Component Pascal (Клеменс Шиперски, Куно Пфистер, 1997) - развитие Оберона и Oberon-2 в сторону компонентно-ориентированного рограммирования
(КОП). Хорошо проявляет себя для программирования в большом. Если требуется строить расширяемую систему с использованием КОП, подходов программной инженерии, иметь прямой выход на современные наработки для Win32,.NET и Java
Platform, то нужен Component Pascal в реализациях BlackBox и GPCP. В реализации
BlackBox обладает никальной особенностью динамического расширения систем
("на лету") за счет поддержки Оберон-компонентов, легко настраивается на решение задач любого ровня сложности (от преподавания информатики в школах до сложных исследовательских систем), имеет средство формирования
COM-компонентов со сборкой мусора (Direct-To-COM Compiler), получившее на CeBIT
приз за технологическое совершество. 4. Active
Oberon (Юрг Гуткнехт, Патрик Реали, 2) - воплощение в Обероне идеи активных объектов (мультипроцессные системы для многопроцессорных конфигураций). Исследовательский проект, выполняемый группой проф. Гуткнехта
(ETH, Цюрих). Базовый язык для реализации ОС Bluebottle Чдальнейшего развития системы Oberon. Поддерживает работу в Win32, на голой машине (PC), сосуществует с Java и.NET. Показал отличную эффективность в специфических областях
(мультимедиа, повсеместный компьютинг). 5. Zonnon
(Юрг Гуткнехт, Евгений Зуев, 2003) - ревизия Modula-2 и Оберона сквозь призму идей языка Mesa (Xerox PARC) и платформу Microsoft.NET.
Исследовательский проект группы проф. Гуткнехта. Ориентирован в большей степени на особенности реализации новых языков и компиляторов для платформы.NET с последующей интеграцией в Microsoft Visual Studio.NET (2005). Представляет интерес в преподавании на старших курсах вузов, несколько сложен для начинающих программистов, но достаточно красиво решает проблемы "мирного сосуществования" модульного программирования, ООП и КОП. Представитель композиционного программирования. 4 Отличия от Паскаля A. Синтаксис 1. Важен регистр букв в названии идентификаторов. 2.
Зарезервированные идентификаторы языка всегда пишутся большими буквами. 3. браны скобки begin-end. Начало оператора определяется его именем, окончание - словом
END. Для модулей и процедур требуется в конце повторять свое имя после слова
END. Комментарии обозначаются связкой (* *). B. Типы данных 1. браны перечисления, диапазоны. Тип SET определяет набор (множество) целых в диапазоне от 0 до MAX(SET). Введен процедурный тип (PROCEDURE) с операциями вызова и присваивания. 2. Индексы массивов нумеруются с нуля. Введены многомерные открытые массивы (ARRAY OF). 3. браны вариантные записи. Они заменяются расширяемыми комбинированными типами (см.
E1). C. Процедурное программирование 1. брано деление на процедуры и функции: процедуры могут возвращать значения через свое имя. 2. бран оператор FOR как источник ошибок. 3. Добавлен универсальный цикл LOOP-END с оператором выхода EXIT. D. Модульное программирование 1. Исключено понятие программы (Паскаль), как и деление на программные и библиотечные модули
(Modula-2). Есть единое понятие модуля - единицы компиляции и исполнения
(загрузки). Он может экспортировать сущности: константы, типы, поля типов,
переменные, процедуры. Вложенные (локальные) модули запрещены. Экспортируемые процедуры без параметров называются командами и определяют точки вызова модуля
(программы). 2. Для экспорта используется значок * (звездочка) при определении сущности сразу после ее имени. Интерфейсный (описательный) модуль строится автоматически компилятором. 3.
Импортируются только модули (IMPORT). Допустимо введение псевдонима модуля.
Импортируемые идентификаторы в тексте обязательно квалифицируются именем соответствующего модуля. E. Объектно-ориентированное программирование 1.
Комбинированный тип (RECORD) может расширяться путем добавления полей записи (в том числе и процедурных типов). Это определяет механизм проекции u1090 типов,
аналогичный наследованию в традиционном ООП. 2. Для работы с расширяемыми типами введена операция принадлежности типу (IS), также оператор
WITH (привратник типа). 3. Язык предусматривает механизм автоматической сборки мусора. F. Системное программирование 1. Введен псевдомодуль SYSTEM, который является интерфейсом между языком и низкоуровневыми средствами. Импортирование SYSTEM сигнализирует о привязке к конкретной операционной платформе. 2. Введены процедуры адресной арифметики (ADR, BIT, LSH, ROT, CC), преобразования типа
(VAL), работы с памятью (GET, PUT, MOVE) и резервирования области памяти (NEW). 3. Введен тип
BYTE. Формальный параметр вида ARRAY OF BYTE, передаваемый по ссылке, совместим с любым типом. 5
Различия между языками Oberon и
Oberon-2 Язык Oberon-2 является чистым расширением языка Oberon [Wir88]. В этом работе представлены сделанные расширения языка и в ней предпринята попытка осветить причины этих изменений.
Таким образом, мы надеемся простить читателю задачу классификации языка
Oberon-2. За более детальной информацией о языке читателю нужно обратиться к описанию непосредственно языка. Одной из важнейших целей языка Oberon-2 было стремление простить объектно-ориентировванное программирование без нарушения концептуальной простоты языка Oberon. После трех лет использования OberonТа и его экспериментального диалекта - языка Object
Oberon [MeT89] - мы воплотили наш опыт в единую точненную версию OberonТа. Новыми особенностями языка
Oberon-2 служат типизированные процедуры (type-bound procedures), экспорт переменных и полей записи только на чтение (read-only export), открытые массивы в роли ссылочных базовых типов, также оператор WITH с вариантами. Помимо этого в язык был возвращен оператор FOR, который первоначально при переходе от
Modula-2 к Oberon был изъят из языка. Язык Oberon-2 является плодом многочисленных дискуссий, которые велись среди всех сотрудников Института компьютерных систем в ETH (Institute for Computer System at ETH).
Особенно плодотворные идеи были высказаны Юргом Гуткнехтом (Juerg Gutknecht) и Йозефом Темплом (Josef Templ). 5.1 Типизированные процедуры Процедуры могут быть связаны с типом запись или со ссылочным типом. Они эквивалентны методам в объектно-ориентированной терминологии. Присоединение процедуры выражается с помощью дополнительного параметра (играющего роль операнда, к которому применяется процедура, или же лполучателя, как это называется в объектно-ориентированной терминологии). TYPE Figure = POINTER TO FigureDesc; FigureDesc = RECORD x,y,w,h:INTEGER BEGIN... ENDDraw; Draw и Move связаны с типом Figure, из чего следует,
что обе они могут быть применимы к объектам типа Figure. Эти процедуры рассматриваются как локальные по отношению к FigureDesc и к ним можно обращаться как к обычным полям записи, например: f.Move(10,10),
если f - это переменная типа Figure. Любая процедура, связанная с типом T, неявно также связана и со всеми расширениями типа T. Она может быть переопределена
(перегружена) процедурой с тем же самым именем и точно таким же списком формальных параметров, как и та, что явным образом связана с расширением T.
Взгляните на пример: TYPE Circle = POINTER TO CircleDesc; CircleDesc = RECORD (FigureDesc) radius: INTEGER END; PROCEDURE (c: Circle) Move (dx,dy: INTEGER); BEGIN... END Move;
Тип Circle является расширением типа Figure. Процедура
Move явным образом связана с Circle и переопределяет процедуру Move, которая была лунаследована от Figure. Пусть f - это переменная типа Figure, c Ч переменная типа Circle, тогда присваивание f := c меняет у переменной f ее динамический тип (ее тип) с Figure на Circle. В вызове f.Move(10,10)
переменная f выполняет две функции: во-первых, она передается в качестве параметра-получателя процедуре Move, во-вторых, ее динамический тип определяет то, какой вариант Move в действительности вызывается. Так как после присваивания f := c динамический тип переменной f
уже Circle, то вызывается процедура Move, которая связана с типом Circle, не та, что связана с типом Figure. Этот механизм называется динамическим связыванием (dynamic binding), поскольку динамический тип получателя используется для связывания имени процедуры с реальной процедурой. Внутри переопределяющей (redefining) процедуры переопределяемая (redefined) процедура может вызываться с использованием значка
^, например: f.Move^(dx,dy). ргументация. Мы отказались от введения концепции класса, вместо этого заменили его на хорошо известную концепцию записи. Таким образом, класс - это просто тип запись со связанными с ним процедурами. Мы также отказались от дублирования в самой записи заголовков типизированных процедур, как это сделано в других языках типа C++ и Object Pascal. Это позволяет сохранить записи короткими и избежать избыточности описаний. Ведь изменение в заголовке тогда повлекло бы за собой корректировку в двух разных местах программы, к тому же компилятору пришлось бы еще и проверять идентичность обоих заголовков. Если программист захочет видеть конкретную запись со всеми связанными с ней процедурами, то он может для получения информации на экране или на листе бумаги воспользоваться специальным инструментом, который называется навигатор модулей (browser). Процедуры, привязанные к типу, могут быть объявлены в произвольном порядке. Их можно даже перемежать процедурами, привязанными к другому типу. В языке Object Oberon, где все методы должны быть объявлены внутри соответствующего объявления класса, обнаружилось, что косвенная рекурсия между методами различных классов может поставить в затруднительное положение предварительные описания целых классов. В языках типа Object Pascal и C++ переменные экземпляра (instance variable) для объекта-получателя self могут быть доступны как с квалификацией, так и без нее (например, можно написать и x, и лself.x). В этих языках подчас трудно определить, что перед вами - обычная переменная или же переменная экземпляра. Бывает еще сложнее, когда имя обозначает переменную экземпляра, которая наследована от базового класса. По этой причине мы решили, что переменные экземпляра в языке Oberon-2 должны всегда квалифицироваться. Таким образом, дается избежать выбора между двумя семантически эквивалентными конструкциями, что на наш взгляд нежелательно для языков программирования. В языке Oberon-2 получатель представляет собой явный параметр, потому программист может выбирать для него характерное имя, которое обычно выглядит куда более выразительнее, чем предопределенное имя self, что используется в других объектно-ориентированных языках. Явное объявление получателя проясняет ту картину, что объект, к которому применяется данная операция, передается этой операции в качестве параметра. Это обычно нельзя выразить в других объектно-ориентированных языках. К тому же такой подход четко следует духу OberonТа - избегать любых скрытых механизмов. В языке Object Oberon методы имеют в точности такой же синтаксис, как и обычные процедуры. В больших классах, где заголовка класса не видно рядом с заголовком метода, невозможно понять, является ли данная процедура обычной процедурой или же перед нами метод. В этом случае трудно также понять, к какому классу данный метод относится. В языке Oberon-2 тип параметра-получателя типизированной процедуры обозначает тип, с которым процедура связана, поэтому никаких сомнений не возникает. 5.2
Замороженный экспорт (READ-ONLY EXPORT) В то время как в языке Oberon все экспортируемые переменные и поля записей могут быть изменены любым клиентным модулем, в языке
Oberon-2 появилась возможность ограничивать использование экспортированной переменной или поля записи доступом только на чтение. Этот факт отмечается объявлением с использованием знака -, не *. Знак лминус говорит об ограниченном использовании данной переменной. TYPE Rec* = RECORD
END;
PROCEDURE(f:Figure)Draw;
PROCEDURE (f: Figure) Move (dx,dy: INTEGER); BEGIN... END Move;