Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 23 ноя 2017, 18:52

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 12 авг 2012, 14:04 
Не в сети
Аватара пользователя

Сообщения: 843
Откуда: Днепропетровская обл.
Тема перенесена с форума http://zx.pk.ru/showthread.php?t=18387.

Начитавшись в дружественной ветке http://zx.pk.ru/showthread.php?t=18336 пожеланий иметь хороший компилятор Оберона с качественной кодогенерацией в Z80, к коим сердечно присоединяюсь, а также советов “лучше напиши компилятор”, хочется сказать что-нибудь полезное по теме вопроса. Даже выбирал имя субдомена http://zx.oberon2.ru с тайной надеждой, что когда-нибудь такой компилятор Оберона для Z80 появится. Это делалось отчасти и для популяризации этой идеи среди спектрумистов. Как и для популяризации Оберонов вцелом. Ибо они того заслуживают.

Всё выше- и нижесказанное есть абсолютное ИМХО и по задумке не должно вызывать гневных выкриков и желания меня задушить. Здесь я не буду касаться узкоспецифичных для ZX вопросов типа кодогенерации не только для плоской модели памяти, ограниченной объёмом 48 кб (с учётом ПЗУ), но и страничной, с переключением банков. Это само по себе нетривиальная задача, но она уже вторичная, первично же следующее.

1. Желание делать всё с нуля своими руками при реализации проектов такого масштаба и сложности как компилятор, включающий высококачественный генератор машинного кода, можно объяснить девелоперским эгоцентризмом, не приводящим обычно к желаемым результатам, либо же попросту трёпу, коий мы рассматривать также не будем. Отчётливо помню этап когда искренне считал, что смогу всё закодить более качественно, чем имеющиеся решения из других рук. Это типичная ошибка незрелых умов. Умение достигать результатов в разумные сроки — это талант приподняться над своим эгоизмом и воспользоваться чужими наработками. Талант поднять паруса и воспользоваться ветром, а не гребля одним веслом против течения. Вроде очевидно, а для многих спектрумистов (я долго читал этот форум и фидоэху ZX.SPECTRUM) вроде и нет. Проблема имеет и противоположную ярко выраженную крайность в виде стремления делать всё на готовых компонентах, но это не про Спектрум.

Поэтому заявление на разработку компилятора, включая фронт и бэк, с нуля, самостоятельно, ещё и одним лицом, извините, считаю блажью. Если же это лицо ещё и не обладает умением доводить проекты до законченного вида, а также не имеет хорошего понимания Оберон-технологий и предоставляемых ими преимуществ, то проект вообще ничем не закончится. Такое будет мнение. Посему пункт 1 ориентирован не на результат (получение хорошего компилятора), а, скорее, на процесс собственного кодерского становления. Это не плохо, но малоинтересно для всех, кроме адепта.

2. Взять готовый фронт и сосредоточить усилия на бэке. Разработку собственного фронта для Оберонов считаю нецелесообразной. В мире Оберон-технологий уже есть много готовых решений, облегчающих и автоматизирующих построение фронт-эндов. Это и COCO/R, и Babel [гуглите]. Практически любой компилятор Оберона довольно чётко разделён на фронт и бэк, и фронт вполне можно взять готовый, если не имеет места блажь из пункта 1.

Разработку бэка для Z80 к готовому фронту я бы посоветовал начать с изучения проектов OPCL (Oberon, Oberon-2, Active Oberon) и BlackBox Component Builder (Component Pascal). В принципе, оцениваю создание плохонького малокачественного генератора кода для Z80 (если не касаться поддержки страничной организации памяти, специфичной для ZX) довольно возможным даже одной особой за разумное время. Наличие огромного количества особ с блажью из пункта 1 подразумевает, что развивать плохонький кодогенератор, сделанный особой из пункта 2, никто не захочет, ибо адепты получению и распространению практических результатов, полезных для нас с вами, предпочитают следование своему пути, коий суть тёмен и неисповедим.

3. Если не имеет место блажь из пунктов 1 и 2, то есть смысл взять самый лучший из доступных имеющихся генераторов Z80-кода — SDCC — и пристроить к нему фронт-энд с какого-либо диалекта Оберона. При этом фронт можно взять готовый и допилить до бэка SDCC.

Данный вариант — совсем не для средних умов, ибо он подразумевает разбор и понимание чужих идей и кода, интеграцию в сформированную команду и принятие сложившихся там принципов разработки. Прибавим желание заниматься явно устаревшим процессором Z80, и большой опыт, и широкий кругозор, и ещё хорошее понимание Оберон-технологий. Наличие способностей, терпения, умения заниматься черновой малоинтересной работой, взаимодействовать с другими людьми, решать возникающие социальные проблемы. А чтобы проект стал общественным достоянием, ещё и заинтересованности в продвижении. И всё это на одной лишь внутренней мотивации. Обладание такими качествами будет свидетельствовать о высоком профессионализме и ориентации на готовый результат. Что-то уже совсем фантастика получается. О трудности и неприемлемости для многих такого пути говорит a) отсутствие качественного кодогенератора Z80, разработанного хотя бы и для Си русскоязычными спектрумистами; b) неприсутствие многих из умников-кодеров c форума http://zx.pk.ru хотя бы в роли баг-репортеров в команде, занимающейся в настоящее время развитием Z80-кодогенератора SDCC. Будем реалистами. Видимо, это проект не того масштаба и сложности, чтобы делать его на мотивации старой ностальгии месяц на коленке, в перерывах между работой и женой.

Вопрос же появления хорошего компилятора не Си, а Оберона для Z80 — это отчасти вопрос популярности Оберона вообще. А вы слышали сколько помоев вылито на Оберон в инете? А ведь их в 99% случаев искренне льют люди, которые не написали на нём ни строчки. Тут вдруг появляется оберонщик и начинает что-то говорить, подкреплять ссылками. Куда там. Давят массой. Принцип ”а нас всё равно больше” никто не отменял. Но это разговор а ля “я Битлз не люблю, правда, я их не слышал, но мне вчера их песню Мойше по телефону напел”.

А если говорить о человеке с уникальными способностями, то поелику я не вижу себя в этой роли, а попробовать разрабатывать программы на Обероне для Спека хотелось сейчас, посему я пошёл по пути наименьшего сопротивления. Взял самый удачный из известных мне фронтов Оберона — Ofront. А также самый качественный по кодогенерации в Z80 из бэков — SDCC (я не буду называть его архиидеальным, но назовите готовый кодогенератор получше).

https://sourceforge.net/apps/trac/sdcc/wiki/z80%20code%20size
http://www.z88dk.org/forum/viewtopic.php?id=4178

Соединил их и посмотрел что получится. Получается хорошо. Неидеально, но идеала можно ждать десятки лет, и так и не дождаться.

Извините за излишне выраженный пессимизм. Чудеса случаются. Например, Philipp Klaus Krause. Серьёзный, трудолюбивый и обстоятельный немец из Франкфурта, к тому же отзывчивый, отвечал на все мои письма и баг-репорты. По сей день активный мэйнтейнер SDCC-кодогенератора для Z80. Не спектрумист. Почитатель платформы ColecoVision.

Ещё аргумент в пользу пункта 3: кодогенератор SDCC для Z80 совершенствуется и по сей день. И ещё один плюс: в довесок, кроме Z80, там есть ещё бэки и для других микропроцессоров.

Теперь о неизбежных минусах. Должен заметить, что мне не попадалась ни одна безглючная версия SDCC. Это к вопросу о сложности реализации языка Си или сложности разработки качественного кодогенератора. Это вовсе не простое дело, я вас уверяю. Оно может казаться простым лишь на первый неприкаянный взгляд.

Так как же я решил проблему? А я пользуюсь такой версией SDCC, баги которой мне известны. Поэтому научился их обходить. Это вопрос тонкий, а значит опять перечитываем статью Алекса Черемхина и горько усмехаемся. Или тихо плачем. Правда, может там у них что-то и поменялось с бажностью, не знаю. Давно не качал новых билдов.

Нестыковка между обстоятельным герром Краузе и баговитым кодогенератором? Я бы объяснил это устаревшим принципом разработки [пробую, вроде работает, идём дальше]. В Оберон-кругах такой стиль не принят и более того — осуждаем. И в этом ещё один барьер в овладении Оберон-технологиями (заметьте, сюда включаем не только язык). Хотя и сам Оберон — язык, который помогает программисту обнаруживать узкие места в коде по возможности раньше. Это мало касается изобретённой мною технологии разработки через Ofront/SDCC, но и здесь можно значительно облегчить себе жизнь, пользуясь возможностями Офронта.


Вложения:
Черемхин Алексей-Почему мне нравится Оберон (2005).zip [25.81 КБ]
Скачиваний: 301
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 30 авг 2014, 01:00 
Не в сети
Аватара пользователя

Сообщения: 843
Откуда: Днепропетровская обл.
Размышлизмы или даже скорее крик души ;) на тему "Чем дольше живём, тем больше мы правы". ;) Дурной гуглоперевод викистатьи. Если есть возможность, читайте английский оригинал.

congdm писал(а):
AyaCompiler

Никлаус Вирт был прав в конце концов

После 1 года "взлома" на этом компилятор, я чувствую потребность поделиться своим опытом.

Задача компилятора письма действительно борется с драконом. Теперь я понимаю, почему они называют знаменитую книгу о строительстве компилятора как "Dragon Book".

При написании компилятора, можно быть соблазнить с идеей "всемогущ Супер оптимизирующий компилятор" (так же, как философский камень в алхимии), но если вы в одиночку программист и не супермен, то забудьте об этом. Что Никлаус Вирт, сделали, было именно так, не заботятся о достижении кажущееся оптимальным точку, просто сосредоточиться на главном и рассчитать компромисс тщательно. Конечно, конечный продукт будет не так оптимизированы, но она работает, тем не менее.

Большинство людей считают, метод Никлаус Вирт является слишком экстремальным. Я была такая же мысль тоже, но это было год назад. Теперь, он не отличается. Чем больше времени я потратил на написание этого компилятора, тем больше я ценил его метод. И каждый раз, когда я пошел против своих принципов, я создал беспорядок и тратить много времени очищать его.
Вот некоторые из моих ошибок:

Использование Паскаль вместо Оберон / Компонентный Паскаль: кто хочет использовать язык, который полон ALLCAPS !!! ??? Не нравится, что я использую Cee язык или Сии-Plus-Plus в любом случае. Паскаль является удивительным язык! Да здравствует Pascal lanaguage Результат:! Полный беспорядок неисправностей указателей. Не можете отслеживать происхождение модуль переменных и процедур => Переписывая все компилятор в Compenent Pascal.

Попытка все возможное, чтобы генерировать x86 CISC код: Оптимизация, оптимизировать, MOARR OPTIMIZEEE !! Результат: запутанным логику, неправильный генерацию кода, безумие обеспечения => Лечить x86 ISA как RISC одной, забыть о своих инструкций CISC.

Выход на ассемблере вместо машинный код: Я не хочу иметь дело с беспорядок x86 машинный код, так что лучше использовать чью-то ассемблер Результат:. Вздутие генератор с кодом обработки строки. Почти поворотом компилятор в текстовом процессоре => Переписывание снова.

Так, Никлаус Вирт был прав, в конце концов ...


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 30 авг 2014, 01:22 
Не в сети
Аватара пользователя

Сообщения: 843
Откуда: Днепропетровская обл.
b2m писал(а):
Ну, кому друг, а кому и просто "курица со своим кривым яйцом". По-моему, у него раздвоение (а то и больше) личности. Сейчас он на зх.пк.ру под ником Oleg N. Cher продвигает "мощную" среду для разработки. И ничего, что пока его Оберон просто переводится в С, а потом используется всё тот-же SDCC, он это недостатком не считает. Вот только, пока не будет нормального кросскомпилятора С для i8080, всё это просто не применимо ко Львову.
http://lvovpc.ho.ua/forum/viewtopic.php?f=20&t=223#p3405

Пост выше я хотел бы посвятить всем противникам трансляции в Си типа вот этого твердолобого деятеля b2m. Речь не о том, что трансляция Оберона в Си лучше прямой генерации машкода. Просто нужно соразмерять силы. Ставить реальные цели и успешно достигать их, щадя время и умело пользуясь другими наработками (чай мы не в информационном вакууме обитаем?), а не забрасывать незаконченные проекты, ещё и притырив исходники и кинув/разочаровав всех юзеров проекта, если таковые конечно были.

Вот как быть, если я вообще не считаю себя настолько талантливым и трудолюбивым, чтобы достичь успехов на поприще написания оптимизирующих компиляторов? Но зато я неплохо разрабатываю библиотеки. И буде они появятся, эти компиляторы, библиотеки сии тоже можно будет на них использовать. Добился ли я результатов с этим подходом? Конечно. Достигнуто две удивительнейшие цели: a) возможность использовать код промышленного уровня (чем не могут похвалиться все компиляторы Оберона, пожалуй, кроме XDS); b) мультитаргетность. Сконцентрировался на библиотеках. У меня и так темп работы невысокий. А представим что было бы если бы я взялся за оптимизирующую кодогенерацию и разбор форматов PE и проч., т.е. за то, что предписывает мне делать добрейший b2m? Да был бы воз и ныне там.

Вместе с тем, нельзя отвергать подход генерации кода в натив, просто мне нужен был результат, а не многолетняя возня без особых успехов. Что демонстрирует XDev. И чего не демонстрирует компилятор vinxru, который на ура (в отличие от ZXDev) схавал пипл. При всём уважении к vinxru. Потому что взялся он за неподъёмное в одиночку дело.

Я позволю себе дать совет идейному продолжателю сего славного начинания. Советую не браться делать в одиночку ну прям всё-всё-всё. Человече! Скромней надо быть. :) Возьми исходники SDCC, посмотри как устроен генератор кода для Z80. И на его основе реализуй генерацию для 8080. Намного реальнее, чем пытаться прогибать под себя изменчивый мир... Намного. Если тебе конечно нужны результаты, а не кудахтанье.

Ну и, наконец, программист, который более или менее разбирается во внутреннем устройстве компиляторов наверно всё-таки понимает, что от исходника до машинного кода — несколько промежуточных представлений: древовидное, машинно-независимое (+ машинно-независимая оптимизация) и, наконец, машинно-зависимое (+ машинно-зависимая оптимизация). Эти все промежуточные представления не видны наружу, но они есть. Поэтому b2m и другие радетели за подход трансляции прямо в машкод опять попали в ловушку. Потому что для них прямая трансляция без посредников — это идея фикс сама по себе. А использование языка Си в качестве промежуточного представления имеет много профитов, в частности, наглядность самого вида и наличие целого зоопарка готовых отлаженных оптимизированных бэк-эндов — компиляторов под различные платформы. Сколько уже работы сделано за нас, а? С возможностью подключать готовые отлаженные библиотеки в том же промежуточном представлении. А результат — то, что мне нравится в этом подходе больше всего: удачный синтез достоинств Модулы-2, Дельфи и Си, быстродействие, присущее нативу, но надёжность/безопасность/мета-системность, присущую виртуальным машинам. Ну, в общем, мощь Оберона. Кто в теме — тот поймёт.

b2m писал(а):
Будем надеяться, что vinxru допилит свой компилятор С.
Угу, надейтесь. Блажен, кто верует.


Вложения:
tinyc.zip [15.42 КБ]
Скачиваний: 279
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB