Re: Есть ли плюсы у Оберона?
От: AVC Россия  
Дата: 08.11.04 19:29
Оценка: 21 (4) -1 :)
Для того, чтобы оценить язык программирования, я знаю только один способ: понять, какую потребность пытается удовлетворить язык программирования, и как разработчик языка справляется с возникающими при этом проблемами.
Насколько я понимаю, цель разработки Оберона — создание простого и надежного языка системного программирования, поддерживающего объектно-ориентированное и компонентное программирование.
Для реализации этих целей Вирт в частности использовал раздельную компиляцию, сборку мусора и даже отказался от обычного понимания программы.
Эти и другие интересные решения я и предполагал обсудить, вовсе не ставя себе целью «сделать Оберону PR». Хотелось только объективно разобраться в его «плюсах» и «минусах». Ведь никто не думает, что Оберон «потеснит» другие языки на PC. У него другая «ниша». Поэтому и тему я сформулировал, на мой взгляд, скромно: «Есть ли плюсы у Оберона».
К сожалению, некоторые участники данного форума (и некоторых других форумов) набросились на Оберон с огульной критикой, не желая, как видно, ни на минуту вообразить, что существуют разные задачи и разные способы их решения. При этом «критика» не слишком разнообразна, постоянно делаются одни и те же утверждения.
Попытаюсь ответить на подобные критические замечания в одном посте.
Получается что-то вроде маленького опуса «Мифы и правда об Обероне».
Для удобства критику выделяю жирным шрифтом.

Оберон – это реинкарнация Паскаля.
Это не так. Паскаль и Оберон были созданы для совершенно разных целей.
Паскаль был задуман как язык обучения структурному программированию.
Оберон – язык системного программирования, его разработка была частью проекта по созданию рабочей станции Ceres. Так что Оберон наследует не Паскалю, а Модуле-2.
При этом Модула-2 была радикально переработа.
Меня именно и заинтересовало, как это было сделано.

В Обероне нет шаблонов. Какой ужас!
В Обероне действительно нет шаблонов и исключений.
Давайте разберемся.
Исключений нет, но ведь нет и утечки ресурсов. Вспомните, в каждом учебнике по Си++ пишут: не забудьте переопределить оператор копирования, если в классе есть члены-указатели. Это называется «глубокое копирование». А в Обероне – любое копирование «глубокое».
Шаблонов тоже нет. А для чего, кстати, они используются? Для реализации обобщенных (параметризованных) контейнеров и алгоритмов.
Можно ли реализовать их без шаблонов? Можно. Всякий помнит функции qsort и bsearch из стандартной библиотеки языка Си и потомков TCollection из популярного в районе 1990г. TurboVision. Подобные обобщенные контейнеры без шаблонов поставлялись в то же время практически со всеми коммерческими компиляторами Си++.
Есть ли в Обероне средства для их реализации, согласующиеся с его принципами безопасности? Есть. Хочу, например, обратить внимание на языковые конструкции IS и WITH. (Это называется type test и type guard.) В Компонентном Паскале (популярной версии Оберона) интересны с этой точки зрения родовые типы ANYREC и ANYPTR.
Какой основной аргумент выдвигается в пользу того, что без шаблонов «жить нельзя»? Их выразительность. Допустим. (Хотя для меня еще выразительнее неспособность компилятора Си++ выдать мало-мальски читабельное диагностическое сообщение о синтаксической ошибке при разборе шаблонов.) Но употребление шаблонов ведет к двум неприятным последствиям.
Во-первых, многократное дублирование кода, т.к. шаблоны каждый раз компилируются в отдельный код.
Во-вторых, ненадежность применения шаблонов. Допустим, мы нашли ошибку в реализации популярного шаблона. Казалось бы, «делов то»! Исправил ошибку и все, благо шаблон описан в одном месте. Да не все так просто. Надо перекомпилировать все программы, пользующиеся этим шаблоном. И как это обеспечить?
А в Обероне импортирующий модуль перекомпилировать не надо. Это называется раздельная компиляция. Именно этого и нет в языках с шаблонами. (Возможно, какие-то зачатки появились в C# 2.0; но там требуется «компиляция на лету», что не всегда приемлимо.)
Я, конечно, вовсе не противник шаблонов. Они хороши для своих целей и на своем месте (не в Обероне). Но надо помнить, что у каждой языковой конструкции есть своя цена.

Нужно быть профессиональной машинисткой, что бы вводить все эти BEGIN, END, PROCEDURE!
Неужели трудно настроить свой Vim так, чтобы все эти конструкции вводились одновременным нажатием пары клавиш?

Оберон – не язык промышленного программирования.
Утверждают, что популярные ныне языки программирования (C++, C#, Java) – языки промышленного программирования, а вот Оберон – нет.
Интересно получается. На Обероне – ПО для атомных станций, на Java – игрушки для мобильников. Вывод: Java – язык промышленного программирования, а Оберон – академическая игрушка.
Загадочное оно, это промышленное программирование!
Почему то вспоминается реплика из к/ф «В бой идут одни старики»:
«Первая эскадрилья у нас молодцы! Вот как «мессер» завалить, так это вторая. А как чего достать, так это первая!»

Оберон – «отстой», Вирт – “looser”.
«Критика – это когда глупый человек пишет об умном». (Л.Н.Толстой)

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.