Здесь нужно уточнить - смотря какие возможности предоставляет язык. На простом Форте можно написать такое, что убицагалавойапстенку. Оберон строг и надёжен. Он даёт хорошие абстракции, которыми оперирует программист. Массив это точно массив. А не адрес, к которому можно по ссылке обращаться. И т.д.
Зато внутренне выглядеть это будет статически скомпилированным. А не тянущим за собой бог весть какой рантайм. Недостаток этого подхода в том, что программист часто даже не представляет себе сколько слоёв будет задействовано и насколько эффективным будет код. Это просто бич больших систем. Программист не представляет что в них происходит. Нас это конечно устраивает, но только до тех пор пока не появляется ошибка, которую можно искать месяцами. А некоторые ошибки вообще никогда не будут исправлены, просто будут проявляться очень редко у кого.
Я бы сказал, что Оберон - это наиболее простая из современных прослоек между машинными кодами и человеческим мышлением. Притом в сторону человека. Спорить об этом можно, но мы исходим из разных позиций. Тебе надо абы быстро домой, а я занимаюсь свободным творчеством. Вообще очень сложно сравнивать Оберон и C#. Потому что я беру Оберон как нотацию для записи алгоритмов. А ты берёшь C# как готовое и очень проработанное средство для коммерческого программирования. Мы говорим абсолютно на разных языках. И исходя из абсолютно различных потребностей.
Ceres, на котором была запущена первая Оберон-система (ETH Oberon), если я не запамятовал, имел 1 Мб ОЗУ. JVM или .NET в таком объёме вообще не выстрелят. Но плюс не только в экономности. Плюс в простоте и скорости переориентировки. Я упомянул 3 000 строк кода. Допустим, замысел .NET как многоязыковой платформы не вполне удался, а микрософту это и не было особенно нужно. Это действительно так - все используют преимущественно C#. Да, можно писать для .NET и на Компонентном Паскале, но кто это делает? Фактически .NET моноязычен. И C# - язык одной платформы - .NET. Допустим, платформа провалилась. Все в массовом порядке ломанулись переписывать свой код, если он, разумеется, ещё актуален. На язык, который пропихивает какая-то новая фирма, например, гугле. Вместе с тем, появилась новая архитектура, допустим, мобильная, со своим другим языком. Оберонщик со своим кодом просто перепишет свой компилятор Оберона на другую архитектуру. И его код будет актуален. Возможно, это достоинство не покажется тебе таким уж существенным. Но это повышает ценность нашей работы. Она не нивелируется с провалом того слоя, на котором целиком она была выстроена. А слой, на который мы сделали ставку, весьма мал и подъёмен. И даже относительно независим от нижележащей архитектуры.
Я бы подчеркнул, что средства в духе XDev, Haxe и Monkey-X, о которых я упоминал, - это реакция программистов на множество языков, платформ и архитектур. И на их бурную, но недолгую жизнь. Это реакция не огромных фирм, которым надо запустить свою машину, чтобы все потом пришли к ним и работали на их средствах. А они просто определяли дальнейшую стратегию их развития. И пожинали плоды (кто девушку гуляет - тот её и танцует; также и юзверей имеет).
Философия Оберона - ничего лишнего. Если тебе это по вкусу, то это для тебя. Мне это не совсем по вкусу, я не такой большой минималист и очень болезненно воспринимаю урезанность такого диалекта как Оберон-07. Мне он кажется очень сильно минималистичным. Поэтому я взял Оберон-2 и Компонентный Паскаль за основу своего диалекта. И наращиваю его возможностями, которые мне кажутся необходимыми.
Alex'у G, если он хочет слезть с Си, вероятно, лучше подойдёт Modula-2, в которой есть тип BITSET и объединения. Хотя я забыл упомянуть о низкоуровневых возможностях Оберон-реализаций, которые даже не стандартизированы. Всё перечисленное может быть реализовано с их помощью. В первую очередь это конечно возможности низкоуровневого псевдомодуля SYSTEM - SYSTEM.PUT(adr, value), позволяющая заслать по любому адресу простую переменную любого типа. Так что, получив адрес записи с помощью SYSTEM.ADR(rec), мы можем спокойно записывать по любому смещению от него любое значение. Но Оберон не очень поощряет такой стиль. Мне особенно нравится, что низкоуровневые моменты в Обероне обычно очень изолированы от остального кода. И проще отслеживать ошибки в них. А вспомним, основные претензии сишников к Оберону "а тут низя по этому адресу поместить вот этот массив байтов". Конечно низя! Но если очень надо, то мона.Зато когда будешь переписывать это - увидишь что все низкоуровневые приблуды у тебя в одном модуле как-то сами сконцентрировались. И не очень этот модуль и большой. Переписал его - и порядок. А высокоуровневый слой настолько хорошо проработан, что его мало колышет даже разрядность ОС.
Для вкуривания в философию Оберона предлагаю пробежать глазками статьи на сайте compact-programming.narod.ru. Если вставляет - значит тема, иначе не стоит Оберон юзать.
Я, слава богу, не занимаюсь сейчас коммерческим программированием. Так что могу позволить себе делать то, что мне нравится. В отличие от большинства коммерческих программистов-невольников.





Зато когда будешь переписывать это - увидишь что все низкоуровневые приблуды у тебя в одном модуле как-то сами сконцентрировались. И не очень этот модуль и большой. Переписал его - и порядок. А высокоуровневый слой настолько хорошо проработан, что его мало колышет даже разрядность ОС.
Ответить с цитированием
