Цитата:
Оберон, равно как и Паскаль - это языки, которые были самоцелью при создании. Вирт создавал новый язык, чтобы создать хороший новый язык, после этого занимался его распространением, как это сейчас происходит с компонентным паскалем. Про паскаль на сей момент все бы уже забыли, если не компания Борланд и жутко неповоротливая академическая среда в России.
Во-первых, Вирт - не теоретик, а крупнейший практик. В первую очередь - ИТ-инженер высочайшего класса - и именно за практическую деятельность в области разработки языков и операционных систем (семейства Оберон) он и получил высшую ИТ-награду - премию Алана Тьюринга. (Хотя сам он всегда подчеркивает, что для него основное - это образование. Осенью 2005 г. в МГУ на наш вопрос "What is the main target of your professional activity?" он ответил: "Of cource, I am a teacher").
Итак, поехали по пунктам...
Паскаль (1970). Цели создания Паскаля:
а) язык, на основе которого можно было бы обучать студентов современному (на тот момент) структурному программированию;
б) создание для науки и экспериментальной индустрии единого языка для обмена идеями.
И та, и другая цель были полностью достигнуты.
По поводу а) и доказывать нечего.
По поводу б) - язык получил широчайшее распространение и в Европе, и в США, совершенно без "злого Вирта, который занимался его распространением". Вирт учил студентов, а Паскаль брал все новые вершины, и, кстати, в первую очередь вдали от Швейцарии - в Штатах (в частности, университетсткий стандарт де-факто на то время - UCSD Pascal, который потом возьмет и будет двигать дальше Borland).
И причиной этого распространения стало не что иное, как переносимость кода. (К сожалению, слишком многие почти уверены, что термин "переносимость" изобрела SUN вместе с Java).
Именно в 1972 году Никлаусом Виртом был разработан байт-код для интерпретации на стековой машине - и именно для портирования на разные платформы реализаций Паскаля (поэтому язык и удалось столь быстро развить на всех платформах). Код так и был назван - P-код. Более того, именно этот байт-код, 1972 г. производства, с небольшими изменениями был использован Sun в своей Java.
Другая техническая деталь - для создания ВСЕХ БЕЗ ИСКЛЮЧЕНИЯ серьезных Паскаль-систем (компиляторов, сред разработки, ОС) с 70-го года и по сей день используется метод "раскрутки". Это значит, что компилятор языка реализуется на самом этом языке. Возьмите любую классическую реализацию Паскаля/Модулы/Оберона - и спросите: "на чем она сама сделана?" - ответом будет "На самой себе" (технические детали "раскрутки" можно прочесть в любой популярной литературе по теории компиляции). Так вот, из множества языков программирования по методу раскрутки (100% на самом себе) могут быть реализованы весьма немногие. В том числе - Паскаль и Си.
Итак, с пунтами а) и б) целей создания Паскаля разобрались. Однако на практике язык стал использоваться и как язык системного программирования. В частности, в 70-х годах эксперименты по параллельному программированию на 50% строились на базе спец. диалектов Паскаля - Concurrent Pascal, Parallel Pascal и т.п. При этом, заметьте, я рассказываю пока только про Паскаль, который для этих целей не создавался.
Едем дальше. Следующая остановка -
Модула-2 (1980 г.).
Язык, специально созданный для системного программирования. К 1976 году Вирт приходит к идее, что такой язык нельзя создавать "из головы", его следует разрабатывать параллельно с написанием реальной операционной системы и параллельно, в свою очередь, с разработкой новой аппаратной архитектуры.
"Теоретиком", "академистом" Виртом с двумя коллегами в 1978-1980 г. была создана первая в Европе персональная рабочая станция Lilith с первым в Европе 16-разр процессором, растровым дисплеем, мышью, лазерным принтером и поддержой локальной сети. Под эту рабочую станцию создана графическая OS Medos, а под эту ОС - язык системного программирования Modula-2. Lilith & OS Medos - это европейский аналог известной Lisa из Xerox PARC и идеологический аналог C & Unix, ответ Паскаль-семейства.
Что такое Модула-2? Это Паскаль спустя 10 лет. Отточенный синтаксис (в частности, неуклюжие "if then begin end else begin end; while do begin...", которые до сих пор используются в "самопальных" Паскалях от Борланда и прочих заменены на изящное написание "IF THEN ... ELSE ... END; WHILE DO END", без лишнего begin, но с обязательным end). Самое же главное - совершенная поддержка модульности, раздельной компиляции, разделения интерфейса и реализации. Такой поддержки модульности нет и не предвидится в mainstream-языках (в С++ модульности нет вообще, в Java и C# - жалкие на нее потуги). (Если вы не знаете, что такое "нормальная модульность", и что разбиение исходного кода на отдельные файлы - это отнюдь не модульность, то коротко "войти в тему" можете, прочитав эту статью:
http://www.oberon2005.ru/qa191005.html.)
Модула заслуженно получила распространения в самых серьезных областях системного программирования в Европе и СССР. При этом синтаксис языка, расширенный новыми возможностями, по сравнению с Паскалем стал не сложнее, а проще - описание языка уменьшилось с 64 до 48 страниц. Т.е. "системный" язык Модула не менее, если не более, пригоден для обучения программированию, чем его прославленный в педагогике предок.
Почему мы мало знаем более современную и совершенную Модулу, чем Паскаль - отдельный разговор. Причина в том, что американская Borland, имевшая в 1983 г. свою реализацию Turbo Modula, из чисто маркетинговых соображений положила ее "под сукно" и решила развивать дальше свой "самопальный" Паскаль, "сдирая" для него средства то с новым виртовых языков, то с других языков вроде С++ - как Вы совершенно справедливо отметили про Борландовское ООП. (Впрочем, команда Модулы-2 отделилась от Борланд и создала свой высококлассный инструментарий для системщиков Top Speed Modula-2, который, кстати, применялся в ряде средних школ в конце 80-х в СССР).
Прибываем на следующую станцию -
Оберон (1987-1989).
Опять же, язык создавался Н. Виртом и Ю.Гуткнехтом параллельно с разработкой на нем операционной системы под новую первую в Европе 32-разрядную рабочую станцию Ceres. Оберон на сегодняшний день объективно самый лучший язык для системного программирования. Опять же, своего рода "контр-С". Та же идеология компактного мини-языка, легко переносимого между платформами, только на идеях строгой типизации, модульности, безопасности указателей и автоматического управления памятью (сборка мусора, кстати, в Обероне реализована впервые среди компилируемых языков, задолго до Явы и Шарпа). Без этих качеств создание современных программных систем немыслимо (даже Microsoft сегодня разрабатывает новую OS Singularity иключительно на безопасном языке со строгой типизацией и сборкой мусора - C#).
Точно так же, как С, Оберон исключительно эффективно компилируется и оптимизируется в машинный код.
Отдельная песня -
Оберон в СССР. В 1990 г. на основании знакомства с работами Вирта и его коллег из Цюрихского ETH в Новосибирском академгородке разработана первая в СССР 32-разрядная рабочая станция Кронос, с процессором, специально заточенным под язык Оберон. На базе Кроноса, Оберона и Модулы-2 МАИ и Новосибирском был начат революционный проект комплекса распределенных вычислений для нужд оборонки - МАРС ("модульные асинхронные расширяемые системы",
http://start.iis.nsk.su/start.shtml,
http://www.iis.nsk.su/pottosin/40/win/book00.html). В 90-х финансирование проекта, естетсвенно, закрыли.
Однако новосибирцы продолжали работу и в середине 90-х разработали уникальный пакет оптимизирующих компиляторов для кроссплатформенной разработки - XDS Oberon & Modula-2. На состояние 1997 г. их компилятор Оберона превосходил по быстродействию оптимизированного кода все известные компиляторы С. Именно на XDS Modula-2 разрабатывается ПО для российской орбитальной группировки, космических войск и глобальной навигационной системы ГЛОНАСС. Сегодня бывшая компания XDS, ныне новосибирская Excelsior (см.
http://excelsior-usa.com) разрабатывает собственную оптимизирующую реализацию Java, но пишет ее на Модуле-2 и Обероне (На Обероне можно эффективно реализовать Яву, а вот обратное - неверно).
Вот такой вот язык Оберон образца 1989 года. Что он из себя представляет? Окончательно очищенный и вылизанный синтаксис Модулы-2, ряд исключенных устаревших средств, поддержка ООП на основе расширяемых типов данных, полная безопасность и сборка мусора, еще некоторые вроде бы незначительные, но мощные и неспроста введенные нюансы - и при этом его описание занимает 16 страниц. Язык становится мощнее, а синтаксис - гораздо проще, что, так же как и Модулу, делает промышленный Оберон еще более пригодным для образования, чем Паскаль.
Но история Оберона не заканчивается в 1989 г. - она продолжается и по сей день, так как язык и операционная система Oberon открыли новое направление в ИТ -
компонентное программирование. В Обероне была введена поддержка динамической загрузки модулей. Т.е. модуль программы не линкуется статически в исполняемый файл, а может быть добавлен, загружен, использован и выгружен прямо на этапе работы системы. Модуль языка становится мини-приложением, свободно распространяемым
компонентом.
В 1993 г. ученик Вирта Михаэль Франц защитил диссертацию "Динамическая кодогенерация - ключ к переносимому программному обеспечению". Его идея - распространять приложения в промежуточном коде, который прямо перед выполнением преобразуется в машинный, как это делает сегодня .NET. Франц реализовал систему Juice Интернет-апплетов на Обероне на базе своей технологии. В 1993 г. SUN выписывает из ETH диссертацию Франца, приобретает копию OS Oberon - а в 1994 г. появляется Ява (только использовать кодогенерацию по Францу они не рискнули, поставили древний P-код и интерпретатор). Не будем преувеличивать, что Ява "содрана" с Оберона - нет, на нее оказали влияние и Smalltalk, и Objective C, но влияние и "первенство" идей очевидно.
А что же на родине Оберона, в Швейцарии? Цюрихский технлогоический университет - это одна из сильнейших в мире научная школа системного программирования (
http://www.jg.inf.ethz.ch), кузница идей и кадров для мировой ИТ-индустрии. Сегодня Оберон - это 6 оригинальных языков программирования, ориентированных на системные и прикладные задачи (Oberon, Oberon-2, Component Pascal, Active Oberon, Zonnon, только недавно опубликованный Composita). Это - более 10 операционных систем, используемых в европейской науке и промышленности ("университетские" Oberon, Oberon System 3, ETH Oberon, Oberon V4. Между прочим, все - полноценные интерактивные графические. Самая современная с ориентацией на многопроцессорные системы и векторным GUI - OS BlueBottle. Промышленные ОС жесткого реального времени, применяемые в европейской промышленности, робототехнике и т.п. - XOberon, XO/2, JBed). Microsoft, чуя куда ветер дует, вкладывает в ETH немалые гранты, а сама параллельно делает в своей Research Group экспериментальную OS Singularity по мотивам обероновских идей.
В европейской науке и образовании Оберон-системы очень распространены. В частности, в швейцарских университетах, наряду с Linux, настольная система - ETH Oberon (надо ли говорить, что Windows в Европе сегодня, мягко говоря, не приветствуется). Оберон используют австрийские и немецкие университеты. Свою реализацию Оберона, используемую в качестве
второго языка для обучения программмированию (первый у них - функциональный Хаскель), имеет Oxford (
http://spivey.oriel.ox.ac.uk/mike/obc/).
Цитата:
второе преимущество, за счет которого появились и весьма успешно живут Java и C# состоит в грамотной модульности, в классах и прочей такой мишуре, которая позволяет эффективно разрабатывать и править большие проекты.
...
и вряд-ли Оберон или Паскаль когда-нибудь достигнут такого уровня. они не сильно отличаются от C своей производительностью, копируют грамотные идеи с C-подобных языков с отставанием в несколько лет и поломкой старого синтаксиса
По поводу модульности, если читали текст выше и ходили по ссылке, уже, я думаю, все ясно. По поводу "копирования" - то же самое. Увы, Вы совершенно правы относительно Object Pascal & Delphi в этом смысле. Но теперь уже, надеюсь, ясно, что Delphi - это совершенно другая басня, нежели действительно современные Паскали в лице Оберонов.
В целом, наблюдается скорее обратное - неряшливое заимствование в Java & C# идей из Оберона. При этом, хотя языки перенасыщены второстепенными возможностями и на порядок более громоздкие, некоторых Оберона средств там нет - и нет возможности использовать целый ряд мощных архитектурных приемов.
При этом упорно оставляется за бортом поддержка модульности. В Оберонах класс - это всего лишь тип данных. Вся архитектура построена на модулях и их коммутации (статической и динамической). В Яве и Сях модулей нет, и их приходится эмулировать за счет тех же классов. В результате понятие класса там разительно отличается от классического ООП (Smalltalk Алана Кея), оно перегружено множеством дополнительных семантических оттенков. Преподавая программирование в ВУЗе на Яве или Шарпе, вы не сможете наглядно показать ни правильную модульность, ни правильное ООП, там "смешались в кучу кони-люди".
Цитата:
Я думаю, перспективы Oberon, как промышленного языка программирования из этой статистики очевидны.
...
и вряд-ли Оберон или Паскаль когда-нибудь достигнут такого уровня.
...
а профессионалы в большинстве своем будут разрабатывать продукты на C-подобных языках как в области бизнес-приложений, так и в научных программах типа моделирования процессов, где нет места не то что оберону
Паскалям не нужно "достигать такого уровня", он уже используется в таких задач, в которых С-семейству места просто нет. Опять же, под Паскалями я понимаю современные ветки этого языка - Оберон, Модула-2, Ада.
Это не бухучеты и не офисы. Это совершенно иная область - критичные системы реального времени (слышали про такие?). В ряде западных стран в этой области
С и его производные законодательно запрещены к использованию.
Ада уже более 20 лет - основной язык оборонных и космических проектов США. (Правда, ПО для плачевно прославившегося марсохода попробовали писать на Яве - результаты всем очевидны).
Оберон в 2006 г. принят Европейским консорциумом безопасности гражданской авиации как основной язык для задач авиации.
Ряд европейских систем управления автомобильным и железнодорождным движением написан на Обероне либо Аде.
3/4 российских спутников разрабатываются НПО им. Решетнева (
http://www.npopm.ru/), и весь софт - на Модуле-2 (
http://www.inr.ac.ru/~info21/texts/aakmodula2.htm).
Основной язык для совместных ядерных проектов Института ядерных исследований РАН и Европейского центра ядерных исследований CERN - это Оберон (в варианте Компонентного Паскаля и среды BlackBox, см.
http://oberoncore.ru/index.php?option=c ... &Itemid=26).
Российские беспилотные разведывательные комплексы (ГРАНТ, БРАТ), известные по антитеррористическим операциям, управляются софтом, написанным на Паскале (сейчас они переводятся на Оберон, см.
http://oberoncore.ru/index.php?option=c ... &Itemid=26).
Я думаю, больше примеров не надо, картина ясна.
Основная особенность области критичных встроенных систем - там сбой в ПО невозможно помыслить. Это полностью ставит крест на С и его производных. Вы много рассуждали о "современности и применимости", теперь уйдите от "тепличных условий" своей персоналки к реальной жизни программ, живущих в реальном времени и пространстве в рамках реальной железной техники - и тут же станет очевидной непригодность mainstream-языков для таково вот "реального программирования". Паскаль-системы в этих жестких условиях чувствуют себя как рыба в воде. Явы, Си, Бейсики и Питоны - нет.
Далее. Что касается обычного, привычного нам программирования.
Вы можете себе представить, что рабочие программные системы в сотни тысяч строк кода объемом могут быть созданы с трудозатратами порядка 10-15 человеко-лет? Мы, те, кто профессионально работает на Обероне, можем. Это наши будни. (Тут вон на форумах по поводу перспектив разработки отечественной ОС идёт истерия, что "это десятки тысяч человеко-лет, нам нереально догнать Запад".. На американских же модных технлогиях нереально. На мощных и простых идеях - вполне).
Более того, вы можете представить себе, что эти сотни тысяч строк написаны и отлажены
без использования пошаговой отладки, которой в Оберонах нет как факта?
Просто потому, что 95% ошибок, которые сегодня делаются в индустрии, вообще не должны доживать до первогг запуска программы. Они должны отсеиваться на этапе грамотного кодирования (с формальным синтезом, а при необходимости - и формальной верификацией алгоритмов) - и, что самое главное применительно к мелким ошибкам уровня опечаток, - на этапе компиляции компилятором.
Именно затем и именно для того формализм. Именно затем и именно для того такие концепции, как, к примеру, строгая типизация (которая является одним из "китов" современного системного программирования).
Сегодня-завтра российское высокотехнологичное ИТ начнет выбираться из аутсайдеров. И нужны кадры, нужны грамотные программисты с правильно поставленными мозгами, которые способны работать на порядок быстрее и качественнее сегодняшних самоучек-лабухов "с бубнами". А вы здесь, как в пещерном веке, воюете против строгой типизации, которая уже давно аксиома для серьезного программирования. И предлагаете учить детей на языке типа Visual Basic, который позволяет ребенку легко доказать, что корень из четырех - это пять:
Цитата:
Private Sub CommandButton1_Click()
Dim z As Double, n As Integer
x = TextBox1.Value
y = TextBox2.Value
z = Math.Sqr(x + y)
n = z
MsgBox (n)
End Sub
С самых первых шагов в программировании инструмент (язык, среда и т.п.) должны рассматриваться не как волшебный сундук с уймой фич, свисточков и звоночков, а как средство борьбы со сложностью задач. Вы же предлагаете добавлять еще и рукотворных сложностей, приучать детей к собственным, внутренним уродствам массового ИТ... Массовое ИТ сегодня - это постоянный компромисс с совестью - т.е. с качеством, с концептуальной простотой и т.п. - в угоду бешеной скачке за сверхприбылью. Для серьезной индустрии и ответственных задач характерна такая же строгость и формализм, как и для столь нелюбимой вами "академии". Другой вопрос, что программисту-слесарю "сопромат" не нужен...
Но слесарей и так предостаточно, зато острая нехватка грамотных системщиков и прикладников экстра-класса.
Не из "бурной фантазии", а из конкретных сображений подготовки кадров для российской науки и стратегических отраслей и родился проект Информатика-21 (
http://www.inr.ac.ru/~info21), с его "базовой системой обучения программированию на основе Компонентного Паскаля". (См. доклад "Система образования как фактор национального суверенитета в сфере ИТ",
http://oberoncore.ru/index.php?option=c ... &Itemid=11, см. там же мою статью "Проблема подготовки ИТ-профессионалов. Спецкурс программное конструирование").