Здравствуйте, уважаемые спектрумисты.
Хочу поведать вам об одной интересной возможности – разработке для Спека на императивном языке высокого уровня Оберон-2.
Я занимаюсь Оберон-технологиями уже много лет, и довольно долго варился в собственном соку, тем интереснее будет найти здесь единомышленников, которых заинтересует связка “Оберон + ZX”. Язык ведь очень заслуживающий внимания. Он – собрание здравых и эффективных языковых решений, не мотивированных коммерческими выгодами и сиюминутными платформами. Абстракция от платформы там весьма чувствуется. Я не буду утверждать, что надо всё разрабатывать на Обероне. Нет. Но в качестве минимальной языковой базы, чтобы прочувствовать какие возможности языка незаменимы, а какие от лукавого (хотя мы к ним и привыкли), Оберон чудесно подходит. Он не идеален. Его можно и нужно совершенствовать. Но он уже лучше Си более правильной модульностью (хотя, строго говоря, в Си модульности нет) и автоматической генерацией интерфейсных файлов (аналог *.h). И лучше Паскаля отсутствием лишних BEGIN и более серьёзной кроссплатформенностью (в Обероне системо-зависимые низкоуровневые модули должны быть помечены импортом модуля SYSTEM, предоставляющего набор низкоуровневых возможностей, о модулях на Паскале такого сходу не скажешь). И лучше Delphi отсутствием необходимости дублировать в интерфейсе заголовки процедур. Лучше C++ и Modula-2 наличием сборки мусора и компактной концепцией ООП – расширяемыми записями, защитой динамических типов. Лучше Явы более продуманной модульностью, не ставящей во главу угла классы, а оставляя модули модулями. И лучше C#/Java отсутствием привязки к виртуальной среде с жирными рантаймами и более высокой наглядностью текстов программ. Оберон унаследовал наглядность Паскаля, текст программы на нём очень понятен и не засорён не слишком явными сокращениями.
Я не собираюсь спорить с теми, кто не согласен с данными определениями и готов развязать священную войну за любимый язык, мне давно это неинтересно. Можете принять моё мнение как субъективное. Существование языков Оберон-семейства и почитателей их достоинств никак не мешает продолжать решать свои задачи на своих любимых языках и средствах разработки. Хотелось бы увидеть обсуждение по теме вопроса, а не похвалы другим языкам, вовсе не обиженным недостатком внимания.
Оберон – современный язык. Поддерживает такие парадигмы программирования как процедурное, модульное, расширяющее (extensible), объектно-ориентированное, компонентное, системное и рефлективное (reflective programming). Крайне прост в изучении и освоении. Легко воспринимается теми, кто знаком с Паскалем (Информация взята из статьи Р.Богатырёва "Язык Оберон. Краткий путеводитель" http://www.oberon2005.oberoncore.ru/paper/obe_exp.pdf).
Оберон – это самый маленький и простой язык высокого уровня из всех имеющихся. Уже поэтому он интересен. Но разработка на нём не выглядит такой уж ущербной или извратной, как это можно было бы подумать. Правда, переход с Дельфи или Си на Оберон не столь гладок и предполагает определённую ломку мышления. Это не всегда безболезненно и приятно. Но я, пройдя через этот этап, оцениваю изменения моих качеств, как разработчика, в положительную сторону.
Судите сами. Полное описание диалекта Оберон-2, например, занимает приблизительно от 16 до 30 страниц (с примерами). (Java – 200 страниц, C# – 1500 страниц; за точность цифр не ручаюсь – только что нагуглил). Он очень хорош для обучения, ибо платформенно и корпоративно нейтрален. Малоизвестность Оберона вызвана не его недостатками, а скорее тем, что классический подход при разработке на Обероне – это не привычная IDE с раскраской синтаксиса + компилятор/линкер, а Оберон-система, которая не вписывается в устоявшиеся стереотипы и которой надо научиться пользоваться, а поскольку выглядит это не так уж и просто и явно, то это серьёзная для многих преграда. Сейчас же такой проблемы нет. Хотя есть много Оберон-систем, работающих как на голом железе, так и поверх других ОС, можно найти компиляторы для различных платформ. Если интересно, расскажу подробнее о средах разработки и компиляторах, с которых стоит начать.
Упомяну об интересной возможности получить из Оберон-2 программы текст программы на Си или Ява автоматически. Т.е. работая на Си будут трудности с переносом на Яву. Работая на Яве – те же трудности с переносом на Си. Работая на Обероне, мы можем или остановиться на трансляции в компактный нативный код для Win32/Linux, или в текст на Ява/Си, или в .NET CLR. Это тоже возможно. Как видите, современная линия развития ЯВУ это не сверхоптимальная кодогенерация в натив, а наслоение оптимизиторов поверх байт-кода внутри толстых виртуальных машин. Оберон не требует VM, но и может работать поверх неё. Такую кроссплатформенность я считаю настоящей, в отличии от поддельной кроссплатформенности дотнета и явы. Дотнет и Ява для Спека безполезны. Оберон же очень возможен.
Я знаю, что здесь полно хакеров, которые обожают работу с битами и портами. Что ж, это тоже хорошо, но Оберон силён не этим. Также я предчувствую выкрики, что правильные Z80-кодеры всё делают на асме. Тут тоже не поспоришь. Я не против использовать Оберон в качестве клея к подпрограммам на асме. Это направление тоже интересует. Но больше интересует разработка ровно как алгоритмов, так и приложений независимых, междуплатформенных. Но которые удастся развернуть и на Спеке с его скромными ресурсами.
Оберон в мире языков высокого уровня напоминает мне Спек в мире компьютеров. Такой же небольшой и малоизвестный для широких масс, но конструктор из него просто замечательный. А языки Оберон-семейства – как клоны Спектрума. Каждый из них чем-то интересен.
Итак, интересует разработка на Обероне любых вещей, связанных со Спеком. Может кому-то будет интересно разработать на языке из Оберон-семейства эмулятор? Или что-то для самого Спека? Я готов консультировать по Оберон-технологиям. Можете попробовать предложить мне совместный проект (для Спека, или нет) на Обероне. Например, кроссплатформенную игру (включая реализацию для ZX). Если меня это заинтересует, поучаствую.
О недостатках Оберон-языков. Нету накатанных дорожек, мало готовых решений, средств и главное – массового коммьюнити. Инструментарий для Оберон-разработки не такой проработанный и обжитый, часто приходится допиливать. Если не настроены на это дело и обожаете Visual Studio или Eclipse, видимо, Обероны лучше не пробовать. В применении Оберона к Z80 первым делом может показаться неудобным отсутствие беззнаковых типов. Это верно, их нету. Но это не мешает ими пользоваться. Могу потом рассказать подробнее об этом. Есть множества – это удобное средство для работы с отдельными битами. Рантаймы Оберона? Не нужны и не используются. Динамическая загрузка-выгрузка модулей? Полагаю, это решаемо, хотя часто попросту не нужно. Сборка мусора в пределах 48-64 кб? Нет, в Оберонах её непременное использование не является обязательным. Чаще динамическую память можно не использовать. Если же нужна, построение собственного менеджера памяти с явным выделением и освобождением памяти кажется разумным. Минимальная программа на Обероне для ZX? Можно собрать в несколько сотен байтов размером. Идеально, почти без накладных расходов подходит в качестве структурно-модульного клея между ассемблерными вставками и каркаса для наработки удобных библиотек (вплоть до кроссплатформенных между ZX и другими платформами).
Чтобы подогреть интерес и показать на что способны Оберон-технологии в применении к ZX предлагаю посмотреть скриншот игры Dash, порта с версии DOS/CGA (Си) на язык Оберон для платформ MS-DOS, Win32, Linux и ZX Spectrum. Также есть ещё идеи и наработки в данной области.
http://zx.oberon2.ru/dash.htm