
Сообщение от
Alex Rider
Выкидывать или ветвить по значению некоторой константы определения идентификаторов нельзя.
Не совсем верно. Вот есть "Дубовые требования" ("Oakwood guidelines" – http://smalllinux.sourceforge.net/oberon/oakwood.htm), которые предлагают реализовать макропроцессор. Выглядит это примерно так:
Код:
<* SelectorName+ *> — включить
<* SelectorName- *> — выключить
<* IF условие THEN *>
строки вашей программы
<* ELSIF условие THEN *>
строки вашей программы
<* ELSE *>
строки вашей программы
<* END *>
Небольшой пример. Допустим, вам надо вычислять по формуле x = x * 2. Вы знаете, что на процессоре А быстрее выполняется вариант INC(x,x), а на процессоре Б — x:=ASH(x,1). Идти на компромисс вы не хотите, и иметь два разных файла для одной программы тоже. Выход такой:
Код:
<* IF ProcA THEN *>
INC(x,x);
<* ELSE *>
x:=ASH(x,1);
<* END *>
Подобные требования были реализованы в продукте XDS (http://www.excelsior-usa.com/xds.html) (Бесплатный оптимизирующий компилятор Модулы-2 и Оберона-2 для платформ Windows и Linux. Windows-версия имеет собственную среду разработки).
Никто, наконец, не мешает нам реализовать для Спека диалект Оберона, в котором будут даже алиасы регистров и системные расширения SYSTEM.EI, SYSTEM.DI, SYSTEM.IM2 и так далее. Обероны – это конструктор. А мы ленивы. Потому что Спектрум и творчество это раньше были синонимы. А теперь синонимы это потребительское отношение ко всему, включая экологию, и "делаю то, за что получаю бабки". Целое такое поколение взросло на наших глазах. Поколение скриптописателей. Они уже никогда не будут спектрумистами, не в смысле юзки 8-битной железяки с телевизором, а отношения того не будет. Ни к чему.
Ситуация с пересечением имен идентификаторов тоже понятна - вместо неймспейсов используются префиксы модулей, что примерно то же самое, и проблему использования модулей с конфликтами имен не исключает.
Гм, а Вы хотели бы иметь несколько разных модулей ("библиотек"), названных одинаковыми именами и юзать их одномоментно? И называете это неразрешённым конфликтом имён?
Давайте всё-таки делать разницу между конфликтами имён в именах модулей и в идентификаторах внутри этих модулей. Ещё раз повторяю: эта проблема в Оберонах решена блестяще. Ссылки я дал выше.
а для простых смертных, которые для Спеки писали только на asm и Basic. Для всех, то бишь. Вот это дело будет!
Примерно такая статья по задумке и готовится на http://zx.oberon2.ru/zx-dev.htm. Но пока что-то нету вдохновения. В форумах флеймить это вам не статьи умные писать. Со временем, что-то сделаю, надо думать.
Сначала программировать на Обероне не нравится. Плюёшься на всё и вся, но вот почему.
Принятые в Оберон-технологиях ограничения специально жёстко регламентируют огульное и повальное использование каких попало средств платформы (что только способствует переносимости целевого продукта) и языка, который обычно построен по принципу супермаркета (от предоставленных средств глаза разбегаются). Изначально исходник Dash был на Си (Turbo C 2.0, DOS) и был вообще так спаян с DOS, что развод представлялся чем-то невозможным. Теперешний исходник Dash на Си, полученный транслятором Ofront с Оберона выглядит намного более наглядно и платформенно-независимо по сравнению с изначальным вариантом, который писал, кстати, вовсе не ламер. А вы видели исходники Moggy или Phantomas Saga – Infinity? Да, они на Си, но попробуйте переписать их для чего-нибудь ещё. Это надо всё делать заново. Разумеется, на Си тоже можно писать иначе, но почему-то не пишут. А цель портирования Dash была в том, чтобы получить на Обероне исходник главного модуля игры отдельно от машинно-зависимых частей. Это хорошо получается на Обероне, в котором средства отделения мух от котлет достаточно выразительны. Причём эффективность данной языковой платформы – достаточна для разворачивания даже на Спеке. Я это увидел, и этого мне хватило чтобы почувствовать значительную мощь Оберонов. Теперь, подумал я, если бы игру Dash изначально разрабатывали на Обероне со следованием принципов, принятых в Оберон-технологиях (это не только язык или часть языка, это соглашения, конвенции, правила хорошего тона и ещё масса всего, что облегчает жизнь), то сейчас мы бы имели скелет программы настолько хорошо абстрагированной от платформы, что заменить платформенно-зависимые модули, тем самым перенося игру на другую платформу, было бы уже гораздо более простая работа, чем отделять мух от котлет в Дураке, Фантомасе или Могги. В последних эта работа не проделана, и практически даже не начата. Подчеркну, что в основном модуле Dash, где всё бегает, не применяются ifdef’ы или что-либо подобное. При следовании принятым концепциям это попросту не нужно. Да, я изобрёл способ делать не очень динамические игры для Спека, используя языковую Оберон-платформу таким образом, чтобы их можно было более легко развернуть на другую аппаратную платформу. Практически любую. Эффективность полученного Оберон-представления алгоритма – высокая. Достаточная для разворачивания на Спеке. Плюс в этом. Не в самом использовании Спека, его роль здесь не более чем лакмусовой бумажки, показателя высокого качества Оберон-технологий. Вот в чём сила Оберонов. Их красота – в минимальном использовании языковых средств для получаемого представления алгоритмов. Но этому умению надо долго учиться, это подразумевает пересмотр и изменение устоявшихся языковых стереотипов и прижившихся привычек, а этот путь не для тех, кто уже и так всё знает о виртуальных методах, обработке исключений и шаблонах, а также о регистровых парах и флагах со стеком. Надо думать, опять же, что многое из того, что я говорю об Обероне справедливо и для Си, но Си не настолько выразителен. Но если бы к Си++ программисту приставить жандарма, который бил бы по рукам за неправильное использование языковых средств, то это был бы почти идеальный вариант, если закрыть глаза на уродский синтаксис и навесное излишне сложное и перегруженное ООП. Но, заметьте, трудность освоения Си++ радует тех, кто к нему сопричастен, льстит самолюбие и даёт им повод, задрав нос, поучать неофитов: “какой-де мощный язык, понимаешь, целых пять лет учил, и до сих пор ещё учу”. Это же касается и синдрома линукса. Линуксоида просто превозносит тот объём ругательств командной строки, которые он постиг прежде чем ЭТО просто перестало раздражать. А чего плеваться, раз все вокруг твердят как это круто. Если сказать одним выражением, убирая все технические и психологические тонкости, то будет “стадо гонят пастухи”. Вот что обидно.
НАЧАЛО светлое весны...
Лесов зеленые МАССИВЫ
Цветут. И липы, И осины,
И ели помыслы ясны.
Себе ПРИСВОИЛ этот май
Права одеть листвою ветки,
И целый месяц в душах МЕТКИ
Он расставляет невзначай...
И пишется легко СТРОКА,
И на этюдник рвутся кисти,
Уходит ЛОЖЬ в обличье ИСТИН,
И говорю я ей: ПОКА!
С.А. Маркин.