Давайте проясним некоторые моменты, чтобы меня тут не упрекали в Оберон-фанатизме. Да, я считаю, что многие люди (и здесь в том числе) не понимают преимуществ Оберона, как когда-то не понимал их я.
У меня с ним было несколько озарений по ходу использования (не изучения). До этого я уже считал себя опытным программером и много писал на Си++, Дельфи (а ещё до этого на Турбо Паскале/Турбо Си, ассемблере 80x86, а ещё до этого для Спектрума на ассемблере Z80 и т.п.), интересовался и Лиспом, Фортом, Прологом и другими не императивными языками. Подробнее о том, чем доводилось заниматься, можно глянуть здесь и здесь.
Ознакомился. Ну, что я могу сказать? Могу сказать, что вы, судя по портфолио, на С++ не писали совсем. (да, у меня есть опыт работы с Borland C++ Builder
6.0, и могу сказать что даже шестерка это не С++, увы) И тем более у вас нет опыта работы с современным С++. Тем более нет опыта работы с другими современными языками.
Решил как-то для освоения переписать с Си++ на Оберон универсальный парсер. Сперва очень сильно не хватало беззнаковых типов и адресной арифметики, даже начал думать, что в Обероне чего-то не хватает для моего парсера.
Использование адресной арифметики уже намекает, что там был использован не С++, а вариация Сей с классами.
И да, на таком уровне использования С++ (Си с классами в чистом виде), для этой задачи (парсер рукописный) действительно Оберон даст скорее всего выигрыш.
Но по мере переноса сишного кода в абстракции Оберона я с удивлением увидел, что код стал яснее, чище, понятнее. Выделились предпосылки для расширения. Позже, переписывая с Оберона на Дельфи, я понял, что так (как на Обероне) можно было писать с самого начала и на Си++, и на Дельфи, только вот почему-то на них так не получается.
Тут еще нюанс - программа переписывалась. То есть это была по сути N+1 (возможно вторая) версия программы. В процессе переписывания на другой язык задачу еще раз осмысливаешь, причем это происходит на более глубоком уровне чем при переписывании на том же языке. В основном именно поэтому эта N+1 версия оказалась лучше, осмысленней и чище. По моему опыту программа на самом деле становится красивой, стройной и осмысленной примерно на 4-5 итерации переписывания (впрочем, это в условиях когда на итерацию очень мало времени, нужно быстро результат, если времени на осмысливание достаточно, то вполне возможно что приемлемый результат будет уже на 2-3 итерации).
Но самое большее потрясение меня ожидало когда я запустил программку на парсере. Она заработала с первого запуска. Ошибки нашлись, но мелкие.
Так ошибки нашлись, или заработала? Или заработала - это в смысле запустилась?
Часто, чтобы их выявить, я на ночь, а потом утром за чашечкой кофе/чая внимательно просматриваю ещё раз свежим взглядом листинг. С этой целью распечатываю обычно листинги, и смотреть на них приятно. Даже смотреть. Мне нравится кодить на Обероне — понял я. Это эстетично.
Мне лично много на чем приятно кодить. Скажем правильно написаный код на С++ крайне эстетичен (ой, чую я прилетит сейчас тухлое яйцо :-) ), код на haskell'e - тоже красив. Ада - прелесть. Оберон - вполне себе. Да и erlang тоже очень даже ничего.
Менее эстетичен код на Go (там почему-то дико мешаеются фигурные скобочки, уж не знаю почему. Они там как-то совсем ни к селу ни к городу, постоянно хочется их выбросить, а отступы оставить).
А вот от кода на js меня откровенно тошнит. И по синтаксису, и по семантике. И вообще по всему. Ничего не могу с собой поделать, прям хоть бери, и на каком-нибудь kotlin'e пиши...
Второе открытие — Ofront (транслятор из Оберона-2 в Си). Пиши себе на Обероне и транслируй через Си в любой таргет. Начал я со слабого таргета — Спектрума.
Да, это ценно.
Пишу код, транслирую, а он работает. Ещё пишу, а он снова работает. Ошибки исправляются легко и сразу. Я понял, что на Си больше писать не буду. Прощай, пошаговый отладчик.
Привет, пошаговый отладчик :-) Необходимость пошагового отладчика в последнюю очередь зависит от ЯП, и в основном зависит все же от окружения (enviroment) с которым приложение взаимодействует. У меня отладчик пошаговый служит в первую очередь для изучения поведения этой самой среды.
А приложения которые мало взаимодействуют со средой пишутся мною на С++ без пошагового отладчика вообще. С первого раза. Вот пример который был написан именно так, c первого раза:
http://oberspace.dyndns.org/index.php/topic,392.0.htmlА вот как без пошагового отладчика, и не имея на руках полные исходники я нашел две ошибки (помог человеку, так сказать, удаленно, онлайн):
http://subtroj.info/oberon@conference.jabber.ru/2013/01/09.htmlИсходный посыл: [00:20:23]...[00:23:09]
Постановка и описание проблемы: [01:23:42]
Выявление последней проблемы (их было несколько): [02:26:34]
Окончание решение проблемы и окончательный переход к болтавне :-) : [02:47:11]
Тогда я начинаю понимать, что дядюшка Вирт в чём-то прав — у Оберона действительно есть преимущества перед мэйнстримом. Нас просто заставляют переходить на всё новые языки, хотя они часто являются всего лишь вариациями старых возможностей, нанизанных на тот же уродливый и неудобный сишный синтаксис.
Вирт действительно в чем-то прав, а именно: у Оберона действительно есть преимущество перед мейнстримом 25ти летней давности (в основном за счет заточенности под сборщик мусора). :-) Для ряда задач и применений у Оберона и сейчас есть преимущество, за счет его минималистичности, но при этом не игрушечности. Но это не для подавляющего класса задач.
2. Базовые принципы, заложенные в него, позволяют надеяться, что какие бы процессоры и архитектуры не подсовывала нам промышленность, он туда ляжет. И наши алгоритмы и наработки не пропадут зря. Пример — мои попытки кодить мидлеты на GPCP. Там вроде всё настолько явошное, что фиг протолпишься. Ан нет. Можно ставить во главу угла сами алгоритмы, а не местное апи, главное сделать правильные привязки.
Нет. В том смысле, что с портабельностью у Оберонов плохо. А на яву КП отлично ложится ровно потому, что КП изначально так и задумывался (все типы данных изначально под явовские подстроены). Попробуйте ка какой-нибудь алгоритм (например вычислительный) писаный для ББ на КП, перенести на 16ти битную платформу где целое число это 16ть бит и не больше. Радости будет МНОГО.
3. Ну просто магия. Код пишется быстрее, чем на Си, и практически не требует отладки. Посмертная не в счёт.
Для некоторых Оберонов для некоторых задач - возможно. Но не всегда.
И, кстати, почему постоянно сравниваем с Си? Это как бы давно не основной язык прикладного программирования. Может сравнивать с чем-то современным? Ну не знаю, с С++ хотя бы, ну или с Адой, или с Java и C#. С питоном, будь он не ладен, наконец. С js (отличный повод еще раз пнуть js случится, я всегда за это!). С Go. С Haskell'ем наконец.
Я мог бы продолжать, но скромно надеюсь, что теперь здешний люд во мне увидит не Оберон-фанатика, кидающегося на всё что движется как бык на тряпку и кричащего обо всех углах что надо всё заменить Обероном. А человека разборчивого и даже в чём-то привередливого, который не станет хавать всё подряд.
Ну, на счет того, кто на что кидается, посмотрим :-) Но на фанатика вы действительно пока не слишком похожи в плане Оберонов.