Content-Type: multipart/related; start=; boundary=----------BeavnFV9WtoTji7MoLr6eY Content-Location: http://alexcheremkhin.boom.ru/oberon.htm Subject: =?utf-8?Q?=D0=9E=D0=B1=D0=B5=D1=80=D0=BE=D0=BD?= MIME-Version: 1.0 ------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=oberon.htm Content-Type: text/html; charset=windows-1251; name=oberon.htm Content-ID: Content-Location: http://alexcheremkhin.boom.ru/oberon.htm Content-Transfer-Encoding: 8bit Оберон

Я давно обещал рассказать, почему мне нравится Оберон. Начинаю исполнять обещанное.

(Если мои соображения не слишком интересны, то можно сразу перейти к разделу ссылок, связанных с Обероном.
Лучше всего начать с описания языка Оберон-2 на русском языке.)

Почему мне нравится Оберон?

Представьте себе язык, в котором есть указатели, но среди них нет ни одного "висячего" (dangling).
  • простота языка
  • безопасность типов (type safety)
  • сборка мусора
  • модульность
  • простота компонентного программирования
  • эффективность кода
  • высокая скорость компиляции
В котором невозможно обойти контроль типов (если только не пользоваться низкоуровневыми средствами), и потому в принципе излишня защита памяти (memory protection).

Язык, настолько простой, что его можно выучить за день (я лично выучил его за день), а компилятор в принципе может уместиться в 50K (как оригинальный компилятор Вирта), оставаясь при этом настолько эффективным, что может успешно соревноваться с лучшими компиляторами Си++, и даже превосходить их (как, например, компилятор XDS).

Скорость компиляции для которого на порядок превосходит скорость компиляции для Си++.

Благодаря этим качествам языка, можно создавать значительно более сложные программы, чем на Си++.

Не думайте, что это — только мое мнение. Ведь, в конце концов, весь современный mainstream — от Java до .NET — вышел из подражания этому языку.

Почему-то этот факт принять скрывать. Например, меня всегда удивляло, когда Java объявляли "диалектом Си++" (например, Эккель или Элджер). Давайте не поверим им на слово и просто обратимся к конструкциям Си++, Java и Оберона.

C++ Java Oberon
Модульность и раздельная компиляция Нет Да Да
Шаблоны Да Нет Нет
Сборка мусора Нет Да Да
Деструкторы Да Нет Нет
Объединения (union) Да Нет Нет
Многомерные открытые массивы Нет Да Да
Наследование Множественное Одиночное Одиночное
Оператор goto Да Нет Нет

Конечно, эта таблица далеко еще не полна, но и так видно, что Java во всех существенных чертах наследует Оберону, а не Си++. Этот факт лишь слегка прикрыт флером Си-подобного синтаксиса.

Возможно, Вы решите, что это не более, чем мое субъективное мнение. Прочтите, пожалуйста, статью "Гадание на кофейной гуще", опубликованную в журнале "Мир ПК", и... подумайте еще раз.

Почему не Си++?

Здесь надо сказать, что по сравнению с другими языками C++ имеет много недостатков, которые затрудняют разработку сложных научных программ. В частности, у него слабая поддержка одномерных и многомерных массивов, нет локальных процедур, неудачная концепция модуля, не поддерживается проверка индексов массивов, а также выполняется неконтролируемое преобразование типов.

Монтенбрук, Пфлегер. Астрономия на персональном компьютере. “Питер”, 2002, стр.19

Очевидно, продуманный минимализм средств является ключевым требованием, если мы хотим, чтобы язык программирования мирно «уживался» в мозгу исследователей со всей необходимой физикой, математикой и проч. знаниями.

Ф.В.Ткачев. Обучение программированию: российская перспектива. Доклад на JMLC'2003.

Я пишу программы 19 лет. Большую часть кода я написал на Си и Си++.
Си был моим первым языком программирования (если не считать учебных программ).
С начала 90-х и до самого последнего времени я писал почти исключительно на Си++.
Поэтому я могу судить об этом языке не с чужих слов, а по собственному опыту.

У Си++ много недостатков.
Чтобы не превращать эту страничку в трактат, я назову лишь несколько наиболее очевидных, а затем расскажу несколько историй "из личной жизни".
Прежде всего, Си++ — слишком большой и сложный язык. Я лично не знаком ни с кем, кто знал бы его полностью. А можно ли доверять инструменту, который не знаешь досконально?
Страуструп утверждает, что Си++ можно изучать "по частям".
Но возникают вопросы.
За какое время его можно изучить? (По статистике — 3 года. И все равно останутся пробелы. А стандарт в очередной раз изменится и опять станет сложнее.)
Кто нам даст столько времени на изучение?
И зачем это нужно т.н. непрофессиональным программистам — физикам, математикам и т.д.?
Во-вторых, Си++ — ненадежный язык. Что особенно приятно, если вспомнить о его сложности.
Когда я говорю о ненадежности Си++, я имею в виду, что в языке много "дыр", не контролируемых компилятором. Большинство из них унаследованы от Си, но некоторые появились только в Си++.
Главной "дырой" в Си++ является унаследованная от Си адресная арифметика в сочетании с особенностями передачи параметров.
Вы передаете в функцию указатель, и компилятор не знает, то ли это массив, то ли адрес скалярной переменной. Он также не знает, находится эта память в сегменте данных, стеке или куче. А может переданный указатель просто является случайным значением (т.е. не инициализован)?
Поэтому компилятор разрешит делать с этим указателем что угодно.
Как говорится — здравствуй, дебаггер!
В противоположность этому, в Обероне массив всегда массив, а указатели могут указывать только на объекты кучи.
Многие недостатки Си++ якобы объясняются стремлением сохранить совместимость с Си.
Опять же, здесь какая-то загадка. Вот я могу написать на Обероне DLL, которую можно использовать в программе на любом языке. В том числе, на Си и Си++. Точно также я могу использовать код, написанный на Си и Си++.
Зачем же все-таки было потрачено столько усилий на создание языка, совместимого с Си на уровне исходников, но которым очень трудно и небезопасно пользоваться?

Несколько непридуманных историй о Си++

В начале 90-х (кажется, в 1992 году) я приобрел компилятор Си++. Это был Zortech C++ — один из первых компиляторов Си++ для IBM PC.

В основном, Zortech C++ создан усилиями Уолтера Брайта (Walter Bright), очень хорошего программиста, впоследствии — автора языка D. Несмотря на это, я сразу столкнулся с некоторыми странностями компилятора.

В то время я принимал участие в написании программы, моделирующей механизмы русского словообразования. Первое время работа над программой продвигалась вполне успешно. Код я писал на Турбо Паскале. Учитывая, что иногда для работы использовался старенький Robotron без винчестера, это был единственно разумный выбор.

Однако, вскоре ограничения такого рода перестали быть проблемой. К тому же стали доступны компиляторы Си++. И я решил, что стоит сменить инструмент. Возможно, это было ошибкой.

Прежде всего выяснилось, что то, что не представляло никакой проблемы в Паскале, может стать проблемой в Си++. Например, сравнение символа в строке с символьной константой. Вот такой код (схематично):


{
	char *p = "ф";
	if (*p == 'ф') {
		...
	}
}

работал неправильно.

Были ошибки и в библиотеках. Особенно запомнилась следующая.
При использовании функции fseek обнулялся указатель на буфер. Как следствие, при следующем чтении из файла память под буфер выделялась снова. После чего все повторялось. И так до тех пор, пока динамическая память не кончалась вовсе.
Я был несколько избалован надежностью Паскаля, и не сразу приноровился искать ошибки в компиляторе Си++ и библиотеках.
Конечно, со временем я разобрался со всеми основными "багами" Zortech C++ и пользовался этим компилятором вполне успешно до конца 90-х.

На основании этого опыта я даже вывел для себя следующее правило:
Не торопись менять компилятор Си++!
100% корректных среди них не бывает, а ошибки в старом компиляторе ты уже знаешь.
Я следую этому правилу до сих пор. Сейчас я использую в работе компиляторы примерно пятилетней давности.

(Конечно, иногда правила не надо понимать так буквально. Например, Visual C++ 6.0 испортит Вам стиль программирования на Си++.)

В начале 1997 года я перешел на работу в одну Зеленоградскую фирму.
То, что я увидел в свой первый рабочий день, запомнилось мне навсегда.
Вхожу я в комнату и вижу: все программисты сидят в отладчиках.
Представьте себе картину: не меньше 5 человек, и каждый уткнулся носом в Watcom Debugger.
Не подумайте, что это какие-нибудь новички. Все они — грамотные ребята (и мои добрые приятели).

Однажды мне пришлось столкнуться с задачей определения координат подвижного объекта с помощью спутниковой навигации.
Координаты, выдаваемые непосредственно приемником GPS, были недостаточно точны. Поэтому пришлось производить расчеты самостоятельно.
Так как координаты должны были определяться в реальном времени для большого числа объектов, требовалось эффективное решение.
Один из моих коллег (Юрий Колесов) предложил свести задачу к системе линейных уравнений.
Эта идея оказалась удачной. Координаты вычислялись быстро, а неточности, внесенные упрощением модели, были несущественными (для наших целей).
Так что ядром алгоритма в итоге оказался простой метод решения системы линейных уравнений, предложенный еще Гауссом. Он позволял сразу вычислять кроме вектора искомых величин, еще обратную матрицу и определитель. А мне как раз требовалось и первое, и второе, и третье.
Реализовав данный метод для конкретной задачи, я, по старой доброй привычке, хотел обобщить его для произвольных размерностей и поместить в библиотеку. Когда-нибудь пригодится.
Однако меня ожидало некоторое разочарование. В Си++ нет поддержки открытых многомерных массивов.
Конечно, можно найти обходной путь, написав пару классов. Но это уже чрезмерные и неестественные "навороты" для такой простой задачи.
Короче, я не стал этого делать.
Затем мне случайно встретился язык, где задача решалась тривиально:


PROCEDURE Solve(VAR a: ARRAY OF ARRAY OF REAL; VAR x: ARRAY OF REAL; VAR det: REAL);
(** Вход: a - исходная матрица, x - столбец свободных членов.
    Выход: a - обратная матрица, x - решение системы, det - определитель *)

Так я впервые познакомился с Обероном.

Один мой добрый знакомый рассказал мне о том, как он начинал программировать.
Первые программы он написал еще на Бейсике для своей школы, и не испытывал особых проблем даже при написании достаточно сложных программ.
Затем он пытался изучать Паскаль по книге, но некоторые вещи оставались ему непонятными.
Например, он никак не мог понять, что же такое указатель? (Сами знаете, как иногда у нас пишутся учебники.)

С тех пор он не любит Паскаль.

Затем он познакомился с Си, и в голове все прояснилось: указатели — это просто адреса памяти.

Казалось бы — счастливый финал?
Но вспомним, что указатель в Си может выражать слишком многое (см. выше о недостатках Си++).
Короче говоря, мой знакомый — один из тех, кто всем коллективом сидел в отладчике.
А вот "непонятный" указатель в Паскале со временем сделал возможным использовать сборщик мусора в Обероне, Java и C#.
Что, кстати, до сих пор остается проблемой для Си++.

Недавно я спросил у уважаемого мной физика, самостоятельно пишущего программы на Си++, как он относится к этому языку.
"О, это замечательный язык!" — ответил мой знакомый с прямо-таки юношеским энтузиазмом.
И тут же посетовал, что никак не может разобраться, почему перегруженный им оператор работает не так, как ожидалось.
А я погрузился в размышления: неужели нашим специалистам (не профессиональным программистам) нечего больше делать, кроме как разбираться в запутанных механизмах перегрузки в Си++?

Вот другой (и свежий) пример.
При разработке нового процессора потребовалось промоделировать работу блока вычислений с плавающей точкой (FPU).
Для этой цели был написан специальный класс Float.
Однако, при выдаче на печать переменных этого класса, печаталось одно и то же значение.
Причина ошибки - простая опечатка. Случайно был закомментирован оператор приведения типа float().
Однако отсутствие такого оператора не смутило компилятор. Для получения float он воспользовался оператором bool(), не выдав даже предупреждения.
Вот как это произошло (схематично, конечно).

#include <stdio.h>

class Float {
	float _float;
public:
	Float(float x) : _float(x) { }

	// следующая строка была закомментирована по ошибке (просто опечатка)
	//operator float() { return _float; }

	// в реальной программе bool() проверяет отличие Float от нуля
	// чтобы обеспечить корректную работу конструкции if (F) ...
	operator bool() { return true; }
};

int main()
{
	Float F = 3.1415926536f; // Кто и шутя, и скоро пожелаетъ Пи узнать число, ужъ знаетъ.
	float x = F;
	printf("%f\n", x); // Что напечаталось? Правильно, 1.000000
	return 0;
}
Можно ли считать неявное приведение bool к float хоть сколько-нибудь осмысленным?
Я в этом сильно сомневаюсь.

Считаете ли Вы Си++ читабельным языком, в особенности, с использованием STL?
Если да, то у Вас есть возможность это проверить.

Быстро, особо не задумываясь, скажите, что это такое?

	list<int> data(istream_iterator<int>(dataFile), istream_iterator<int>());

Ответ можно найти в книге Майерса "Эффективное использование STL".

Если Вы сразу ответили правильно — пять баллов. Не всем это удается.

Кстати, Вам никогда не приходилось разбираться в сообщении об ошибках при использовании кода STL?

Продолжение следует...

Сейчас я дам несколько интересных, как мне кажется, ссылок.

ETH Oberon Home Page.
Можно скачать WinOberon — версию первоначальной Оберон-системы для Microsoft Windows™, а также электронную книгу Никлауса Вирта "Программирование на Обероне".
Компилятор XDS — на сегодняшний день лучший оптимизирующий компилятор Оберона-2 для IBM PC.
Здесь можно ознакомиться с презентациями, представленными на дне Оберона в ЦЕРН.

Русскоязычные сайты

Проект ИНФОРМАТИКА-21

Оберон-центр

Проект OberonCore

Вологодский Университет

Рейтинг@Mail.ru

Вернуться на главную страницу.


------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=OberonC160.gif Content-Type: image/gif; name=OberonC160.gif Content-Location: http://alexcheremkhin.boom.ru/OberonC160.gif Content-Transfer-Encoding: Base64 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 3SotAG09sgYq6Ze0GpxiHsQsxBpQmSAAADs= ------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=xdslogo.jpg Content-Type: image/jpeg; name=xdslogo.jpg Content-Location: http://alexcheremkhin.boom.ru/xdslogo.jpg Content-Transfer-Encoding: Base64 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 wFPkJIzAEEARyMAFOAJcCXwF0gZT8Eov/9k= ------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=CERNLogo.png Content-Type: image/png; name=CERNLogo.png Content-Location: http://alexcheremkhin.boom.ru/CERNLogo.png Content-Transfer-Encoding: Base64 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 ------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=counter.gif Content-Type: text/html; name=counter.gif Content-Location: http://top.list.ru/counter?id=848784;t=130 Content-Transfer-Encoding: Base64 R0lGODdhWAAoAMYAANng/zNHmf///1ZqvA0SJmVsi5ymzRIZNR4qWs3P1JSYqdCO JW1tbSY1cqNxJNba6UtWiYqNnOfp8mRzsuubFOrq7JNzVDZFhlBQdEhLZis9gniF ut7h7VZnqkxFUGBGIRghSB8rXsTK4iYqPEdReyEuY3FjbKmy1A8UKo2YxCQybKKr 0eWYGK5/QLaDOzFEkph2ULi/2yMpSeeZF+aXGXJ1gJByVoVsXopnOvn5/O7v9TE1 V1xdek9hpxUdPy5AigAAAAAAAAAAAAAAvwAAAAAAAAAAAAAAAADAIACanADp6QC/ vwAAgAAAmwAA6QAAvwD0AQA/gAA3rQAA+wAg4ABYnQA36QAAvwDocAD/WQD/NwD/ AACo4ACanQDp6QC/vwCh4ADanQAq6QAAvwAgAQBYngA36QAAvwAR3wAAngAA6QAA vwDYWAAeWACrNwAAAAARIAAAWAAANwAAAAAseABYAQA3AAAAAAC0IAC5WAAqNwAA AAAYFAAAnAAA6QAAvywAAAAAWAAoAAAH/oABgoOEhYaHiImKi4yLA4+QkZKTlJWW l5iZlYIDjZ6foKGJnQGkooMTAh0BAganr6CkprABFwQCKwQhtLyIsgEcGw8SrikS DxOExhIiHQYnARsSgq0ECIcwCwsBCyaFJiy9o5ysAgI65ufmPBoBOeYc6RwhCgIQ B9W7hBAU/Q4HFGAcaDAIBoUGKMQZ+iVABAECCQTUIIAvBoF4G1A8rCAgAYEIAkjc MqCrEAsKGB6ioGDB2iALFBAQUFiIIUkQBgT4IKBCwAN8Jw4QIMjqwceQI0sO4kHB hsZ2LJUGgBlipiIBp2zqylm16AhVLgVx4HBUZD5CNyhkUNpUKtWZ/unKYcU6KC7d udTkag3BFe6DrxsItKPG4QBIsyekTqXgQbAgCguktqDQ9S5dVuXyYjaHeTO5UqxI 8hVQ2ai5EURj+Cx7S0BYQTAbD3ZB4cMBQRBmLAABl7NdvJ19ywXOMFeIFaThks1g ToGBeKtBQiCQwlyEHiZoLJY96KQDHJMp2Lp9uTxwy57Ta0WQUyYrsgd6SEinIEEF 1hqqC1CA4+AHCjs4Nght/Swgw0MvdCZXcJrdxSBdvwiiVFcS3hbAD0I9FIIPCZUg oIfWeBiACgQkWAhvD/lgIk2DRMjii+K4COOMr5BSAAA45qjjjjz26OOPP6Yj5JBE FjkkA4Lc/Ajkkkw22aORUEaZDpIBKOnklVg+KeWWRFJpZZZgYskll0FMmWSYaF45 ppRllimAl2nGueSaUbZpDpw6AqFnjnoCsaOfecq5I51Q2vnmmXwmCigAi+7J56KC AkCokYbiySOkjOLoZ6OZRorjpJSaWeWlmAJqqqaoeiopqFFa+meiqZ7aqaestoro palq2uemu6pa65BCiPolp5jCamykv6YTbLCHjpqno7tCWqqqqya77J23UitnsuZc 2+yX2qbJrQDeuhoumuOSK+y526a7Lrviuouts/CGKe+84Nar5r1eFuDvvwAHLPDA BBdcMAMIJ6zwwgw3nDCNEPcSCAA7 ------------BeavnFV9WtoTji7MoLr6eY Content-Disposition: inline; filename=logo_black.gif Content-Type: image/gif; name=logo_black.gif Content-Location: http://www.boom.ru/img/logo_black.gif Content-Transfer-Encoding: Base64 R0lGODlhugA8AJH/AO8AKsDAwAAAAAAAACH5BAEAAAEALAAAAAC6ADwAQAL/jI+p y+0Po5y02ouz3rz77wEiAJbmiWrjGLHpC8fquh7CLSz4juy547PxgENhMeC7yZaa JDKJ60GnUSl1mhhiDdqgsUoEU5nksvmMTqvX7Lb7naGJ4PQ6g/aYN+Qkux9+taUQ eJRFqMTwowP2t1ETdoj4JAn5FVGIdfUQWeU1SMnmZCFKQUpkqOjm2cja6voKGys7 S1tr+4F3q4vb5+Diq7crjMAXPFE8nNxWOMGsfMa5OsYFheop+JU6yfhc3Gt1aH3Z BZp4tIVtzl3Zupqt6G6dGg+u3ZnpXF/kFU8PHa4uECRNi+a5E3MtX0BJ/p45xNDw ocSJFCtavIgxo8aNxRw7evwIMqTIkUz4kKSY6+TER3lU1mF5x9iClC7XmNzzLYG3 mm1uSpDDsxXMoBUjbRJ4lOCFch6jMXNa0Ognpgo30qv2roG0hge7Vr3l7Rc1Suki jkVkdps9Ulgf+pwq9ey4e0zhGhSVLuqPaWq1xpC5EOA2CAnr1tOHb508Qme1yV2G qa2pd3cVtx3bmC7Dc1fhRf7KJJpdxqORWqEMLrNn0GpNqyE98LJWpVMPo0qdzUNa orJ28/4NPLjw4cSLGz+O3GIBADs= ------------BeavnFV9WtoTji7MoLr6eY--