Ты согласился бы со мной, что ifdef это частный случай if?
Господа.
Даже без наличия ifdef’ов в базовой поставке Оберона-2 “из коробки” мощности различных Оберон-диалектов хватает для написания ОС, компилятора, браузера (чему в инете много примеров, даже с исходниками), сетевых сервисов и динамических веб-сайтов, работы с БД, сяк-так GUI-приложений (хотя решений для традиционных ОС ощутимо меньше, чем для Оберон-ОС) и даже бортовой системы для управления безпилотным вертолётом. Я-то и занялся им чтобы понять пределы возможностей этой крохотульки. Но тут ещё невспаханное поле работы, есть к чему приложить усилия.
Мы пока ищем, исследуем. Как обходиться без препроцессора. Но заметьте, есть “Дубовые требования” для Oberon-2, в них предусматривается препроцессор и условная компиляция. Никто вобщем-то не мешает реализовать в нашем компиляторе Оберона даже столь любимый ifdef.
Я буду говорить о метасреде BlackBox Component Builder. В ней уже наблюдаются некоторые направления, позволяющие несколько отойти от чисто текстового представления программ. Вы наверное уже видели скриншоты процесса портирования Дурака на Спектрум? Там уже представление программы не чисто текстовое. И можно щас тут разтеять флейм, охаивая и поругивая недостатки такого подхода, но, как любое друге направление, облечающее софтостроение, оно имеет право на жизнь. Вообще тут наблюдается постепенное совершенствование подхода: сначала был просто текст программы, потом кто-то придумал его раскрасить. Не сразу придумал, но получилось красивше и более выразительно. Сейчас в моде фолдинг – сворачивание части кода внутри, так скажем, BEGIN и END. Тоже шаг. Далее, видимо, ещё что-нибудь придумают. Но в BlackBox кое-что уже есть. Но это сразу не видно, когда новоскачавший BlackBox Component Builder видит "Меню+лог". Это надо разбираться. Вникать. А зачем, если линукс всё равно мощнее. Примерно так думают.
Помимо механизма слотов, в которые могут включаться различные реализации одного модуля, есть механизм, называемый селекторы (DevSelector), это вкладки в тексте, куда можно помещать какой-либо другой текст (или внедряемые объекты, например, рисунки) с неограниченной вложенностью. Помимо этого, есть возможность пометить любую вкладку меткой, скажем, ZxSpec, Win32 или Linux, и открывать все нужные нам вкладки (или ветвь) с выбранной меткой одномоментно. Скажем, открыли вкладку ZxSpec и сделали реализацию процедуры для Спека, открыли Win32 – и сделали её же реализацию для Win32. В свете такого решения потребность в ifdef’ах значительно уменьшается, если не исчезает совсем. Но это мы коснулись только Оберон-системы BlackBox.
В далёких 90-х мне доставляло большое удовольствие писать на Hisoft Pascal. Компилятор, правда, занимал почти всю память, кодогенерация была ужасная, а строчный редактор – жутко неудобный. Но всё это затмевалось красотой языка. Чувствовалась мощь, солидность эдакая, уверенность что написанное заработает. И работало. Сегодня я уверенно утверждаю, что Оберон значительно красивее Паскаля, а уж если его усовершенствовать. Как сказал оберонщик Илья Ермаков: “Каркас идеального минимального императивного языка высокого уровня уже есть, можно спокойно сосредоточить все усилия на проблемах вышележащего уровня”. За точность цитаты не ручаюсь, но где-то так. C#-то чем берёт? Тем, что бухгалтерии клепать легко и быстро.
А почему Оберон такой минималистичный? Видите ли, мэтр Вирт считает, что добавить новые средства в язык всегда можно и никогда это не поздно, а вот добавленное изъять – нельзя уже никогда. Отсюда появление таких монстров как Delphi, Ada и C#. А куда движется вообще мэйнстрим? Ну не надо быть высоким профессионалом, чтобы узреть в Java кастрированный C++. А ведь сколькими эпитетами её восхваляли сие новейшее слово в девелоперском деле, да и продолжают это делать. А Java – это испоганенный Оберон с сишным синтаксисом.
Кстати, как правило, критики Си его как минимум использовали и хорошо знают, критики же Оберона все на одно лицо: “А, так в Обероне нельзя аггрегировать перегрузку шаблонов дружественного виртуального метода класса? Фтоппку! А ещё и нельзя написать a-=--(**c*(**a++)*--&b--)*(**c++)++ ? Фи, негибко получаецца. А ещё и ифдефов нет! Так это вообще капец! Так вы, наглецы, ещё и забыли, что такая серьёзная штука как ядро линукса написана не на вашем Обероне, так что выбросьте-ка его вы наффих и идите парить себе моск в универ и читать “Just for Fun”. Тьху, а тут ещё и устаревшие архаичные BEGIN и VAR? Это вообще плевок в лицо, ибо Паскаль умер миллион лет назад”. А вы разве не знали? Ага, мы тоже не знали. И умирал он долго и тяжело, и по сей день умирает. Сродни Спеку. А те, кто помогают его хоронить, могильщики от науки и искусства, сначала похоронив кроссплатформенное программирование (такого мощного разгула UNIX-подобных систем никакой майкрософт не предполагал), потом высчитывают сверхприбыли, не считая троллей, которые гнут ель, ибо тот, кто выбирает на чём и под что будут программировать, тот и имеет. Всех остальных. “Что у вас сегодня в меню, официант?” “Андроид, сэр!”
Ещё замечу чистого любопытства ради, что серьёзные разработчики, даже не зная Оберона, в отличии от неофитов вовсе не спешат его огульно хулить. “Этта сделано капустными академическими головами шобы парить моск и шобы было, а не шобы делать ядро линуха”. Примеры навскидку. Sam Lantinga, автор библиотеки libSDL. Andreas Schiffler, автор SDL_gfx, а также Philipp Klaus Krause, мэйнтенер SDCC-кодогенератора для Z80. Люди достаточно далёкие от Оберонов. Но они разрабатывали. Много и долго. Поэтому научились уважать чужие идеи и любые средства разработки. Ибо если их зачем-то разрабатывали, значит зачем-то они нужны. Это вопрос личностного и профессионального роста. Я не жду этого от всех, ибо наивно.
Если смущает факт разработки для Спека на чём-то ещё, кроме асма и Бейсика, то лично мне (как, надеюсь, и вам) никак не претит с удовольствием поиграть в ускоренного Дурака от CoppeFeet, Moggy или Phantomas Saga – Infinity или (вы удивитесь!) Cauldron. Мне кажется, отрицать пользу высокоуровневой разработки для Спека – это сознательно сужать область его применения. Для хорошо реализованных кросскомпиляторов с языков высокого уровня польза для Спека – для быстрого макетирования, в банальном облегчении трудоёмкости при создании утилит и кроссплатформенной (Спектрум в связи с другими платформами) разработки, создании обёрток с нижайшим оверхедом вокруг асм-библиотек, с последующей разработкой на них в качестве структурно-модульного клея. А может этот барьер умов в неприятии ЯВУ для Спектрум-разработки – хороший повод пойти покодить на асме, оставив высокоуровневое направление для тех, кому оно интересно? Всё же лучше, чем забить тем и другим на Спек вообще.
Ещё меня привлекает возможность, как и 15 лет назад (а помнишь, Alone, как ты меня упрекал в желании скрестить ПЦ и Спек?), разрабатывать на одном языке для Спектрума тако же, как и для других платформ. Уникальные алгоритмы, реализованные на Спеке, красивейшие по задумке и блестящие по реализации игры. Всё это можно и нужно использовать на других платформах. Но Бейсик и асм тут вряд ли годятся. А в эмуле кодить – это вы уж извольте. Да, на Си тоже можно, но Оберон лучше. Более высокий уровень. В связке Оберон + Си + асм, впрочем, можно получить лучшее от каждого из этих средств, то, в чём их сила. Асм – низкоуровневые подпрограммы для скорости и мощности, сама реализация, уровень “КАК это реализуется на Спеке”, Си – … гм, ну, применение найдётся. Например, в качестве связующего звена между Обероном и асмом. Ну и его величество – Оберон (уровень “ЧТО надо сделать”). Прошу любить и жаловать. Заметьте, уровень не подразумевает лишь только Спек. Мне удалось настолько хорошо абстрагировать Даш от платформы, что уши Спека из основного алгоритма, сердца и логики, не торчат аж вообще никак. Без ifdef'ов. Вот-с. Да вы можете это заметить хотя бы по исходнику процедуры Play.






Ответить с цитированием