Во-первых постараюсь ответить на наиболее часто задаваемый вопрос со стороны программистов — почему именно Оберон, а не Си/Си++ или более традиционный для платформы ZX Spectrum ассемблер. Я не собираюсь дискутировать на тему “асм круче Си” или “Настоящие перцы девелопят тока на асме”. После нешапочного знакомства с языком Оберон и разработки на нём некоторого количества программ разной сложности мне захотелось попробовать написать что-то на Обероне для той самой любимой и первой платформы, на которой я вырос. Дело осложняется тем, что компиляторов языка Оберон для процессора Z80 я не нашёл, и подозреваю, что в природе их нет вообще. Паскаль и Модула есть, хотя реализации оставляют желать лучшего, Си есть тем более, а вот Оберона нет. В результате и получилась технология, которой с удовольствием делюсь со всеми, кому это интересно.
Оберон вообще очень интересный язык. Начнём с того, что это самый простой императивный современный ЯВУ, полное описание языка занимает меньше 30 страниц (с примерами). Здесь налицо стремление профессора Никлауса Вирта, автора языков Паскаль, Модула и Оберон, к простоте. В принципе, к этому же движется и промышленное программирование. Никто не будет спорить, что Java намного проще Си++, хотя считается более модной и мощной. Понятие мощности языка стало спекуляцией в гонке вооружений, то есть, простите, в гонке промышленных языков.
В то же время в Обероне есть несколько уникальных возможностей, которые не проникли в Дельфи. Наиболее интересной из них конечно назову расширяемые записи — штука гораздо более простая и мощная, чем предоставляемые Дельфи и Модулой записи с вариантами.
Честно признаюсь, что, несмотря на простоту, язык Оберон требует времени на подстройку к нему мышления, что с лихвой окупается большей структуризацией проекта и, соответственно, экономией времени при отладке. Первое время при работе на Обероне крайне не хватает адресной арифметики, за которую так сильно хочется уцепиться даже при работе с массивами, также не хватает беззнаковых типов данных, к которыми мы привыкли в Паскале и Си. Впрочем, предлагаемая мною технология разработки программ для Z80 сохраняет возможность работать с беззнаковыми типами, что для этого процессора повышает эффективность кода.
Целью проекта, если можно так это назвать, является подтверждение, что мощности языка Оберон хватает не только для написания полновесных приложений для современных ОС и многоядерных процессоров, но и для очень скромных платформ, коей является Спекки. Минимальность языка, удобный и сбалансированный набор возможностей помогают достичь той оптимизации, до которой трудно додуматься, работая на Си или Паскале. Это тоже проверено. Набор встроенных типов в языке Оберон не велик, здесь принято по максимуму использовать тип INTEGER, соответствующий базовой разрядности платформы, а также SHORTINT — более усечённый вариант целого, и LONGINT — длинное целое. Все со знаком. Разумеется, такие типы лягут на внутреннюю архитектуру Z80 плохо, но предлагаемая технология разрешает использование типов:
SHORTCARD {0..255}
SHORTINT {-128..127}
CARDINAL {0..65535}
INTEGER {-32768..32767}
С вещественными типами я не экспериментировал, но, думаю, проблем здесь тоже не будет.