SML-компилер МОЯВУ

ZXNet echo conference «zx.spectrum»

From Andrew Savichev To All 20 February 1998


Hi,All!
Привет, Тим!
>
> Да будет у тебя восемьдесят три мешка грывней, Andrew!
Ну куда мне столько одному? ;)

> TY>> Чепуха. Современный оптимизирующий компилятор обогнать очень сложно.
> AS> О чем вы тут спорите? Об АБСТРАКТHОМ компиляторе? ;)
>О конкретном компиляторе Watcom C++, например.
Кто-нибудь из нас его сможет воспроизвести применительно к z80? хотя бы кросс-,
о резидентном я уже и не говорю.
>
> AS> Возьмем для примера C. Так всем известно, что одно из основных его
> AS> достоинств хорошая переносимость между платформами. Окупается это той
> AS> дорогой ценой, что для него любой процессор 2 - 16р. регистра
> AS> (основной и вспомогательный), память и стек.
>
>Как и для любого языка высокого уровня.
Не для любого! Есть целый класс машинно-ориентированных языков высокого уровня
МОЯВУ, которые учитывают особенности конкретной архитектуры, в нашем случае
Спектрума и z80!
Но даже из обычных ЯВУ есть языки типа ФОРТ (не морщись, он для меня тоже
слишком сложен ) и PL/Z ( ни описания которого, ни его самого мне не удалось
сыскать :( ). Но даже и PL/M для 8080 умел работать с регистрами (посмотри
какой "хороший код" он генерит, версия 4.3 под ISIS-II, настолько хороший,
что подчас и улучшить нечего, особенно если оптимизатор врублен на максимум ).
Одна беда - использует только команды 8080, ну и еще - уж очень прост!
Например: нет поддержки работы с файлами (в С-есть), нет работы со строками
(в C есть ), синтаксис динозаврообразный (еще бы, насколько его предок
PL-I старше, чем C ), нет операций С. Всего 4 оператора!, нет условной
компиляции.
Но есть и достоинства: сильная типизация - как и в Паскале, работа со
структурами и с массивами структур ( а значит и с двумерными массивами ),
частично определенные и неопределенные ссылки, аттрибут AT, работа с битами
( у версии PL/M-51 ). Вот и родилась бредовая идея - сделать гибрид
C, PL/M и Паскаля и притом машинноориентированный(Спектрум+z80) и компактный,
чтобы он мог существовать не только в виде кросс-компилера, но и резидентного,
на Спектрум-128(ну или 256 :) ).
> AS> Если же речь идет об оптимальном компиляторе для конкретного
> AS> процессора z80, и более того для компьютера Спектрум, то он должен
> AS> учитывать особенности архитектуры! Это и будет лучшей оптимизацией!
> AS> Hо цена за это - непереносимость куда-либо и отсутствие возможности
> AS> пользоваться софтом с других платформ.
>
>И отсутствие такого компилятора (оптимизирующего под Спектрум).
Придется писать ;)
>
> AS> Правда, мне попадался конвертер кода Паскаля в код С :)
>Отстой.
Я не об этом, а о том, что можно написать конвертор C <-> SML :) ,
чтобы забирать и уносить :)
>
> AS> Я собираюсь сделать однопроходный простой компилер очень простого
> AS> гибридного языка (помесь С, PL/M и Паскаля :) ) высокого уровня, SML
> AS> , для "внутреннего пользования". Hа выходе он должен давать код для
> AS> ассемблера В.Медноногова.
>
>А смысл?
>Cи (не С++) на Спектруме реализовать несложно. В нем не так много операторов. А
>библиотеки можно и не реализовывать.
А я и не говорю, что нельзя. Игорь вот сделал! Без оптимизатора и далеко не С,
но все таки подмножество C, а что через стек работает, то он мне признался,
что надо потратить немало усилий ( переписать заново ), чтобы работал через
регистры, да и оптимизатор все равно нужно писать.
Пока что он его сравнивает с Бейсиком, а не с ассемблером!
При таком подходе, признаю, он дал нам всем (особенно чайникам, один из них
ваш покорный слуга и ламерам ) очень мощный инструмент.
Боюсь только... его не возьмут в руки системщики, ну а бум несложных игрушек
и классных оболочек для прессы - он конечно спровоцирует.
Хотя мне подумалось еще, а почему все-таки не попытаться сделать кросс-компилер
стандартного спектрумовского Бейсика. Или уже есть?
Ведь для этого достаточно покопаться в 48.rom и немножечко подумать.
Еще мне попалась в руки конвертилка из кодов бейсика в ASCII-файл, а с обратной
операцией нет?, т.е. ASCII-> коды бейсика.
Такая задачка уже конечно потруднее, т.к. в ней уже есть элементы транслятора:
семантический и синтаксический анализ и генерация кода.
Такая штучка + компилятор стандартного бейсика - тоже неплохой инстумент
для чайников и ламеров, а возможности все таки более привычные для большинства,
хотя у Игоря конечно и быстрее и библиотеку Laser-бейсика (спрайтовую)
он использует.
Еще я у него хочу просить прощения: тут я случайно закинул письмо,
предназначенное для ru.embedded эхи.
Игорь, не воспринимай тех двух строк, как издевку над собой, просто там
сидят "заматеревшие встроенные кодеры" ( я с ними, как один из них,
ты же знаешь embedded это мой основной кусок хлеба, общаюсь еще с лета 96-го) и
назвать твой компилятор компилятором C было бы...не вполне уместно.
>
>C уважением, Tим. [Team Овны - Rulez Forever]

С уважением, Андрей Савичев /CGS

From George Shepelev To All 21 February 1998

Hallo Andrew!

Пятница 20 Февраля 1998 08:59, Andrew Savichev wrote to All:

AS> Hе для любого! Есть целый класс машинно-ориентированных языков высокого
AS> уровня МОЯВУ, которые учитывают особенности конкретной архитектуры, в
AS> нашем случае Спектрума и z80! Hо даже из обычных ЯВУ есть языки типа ФОРТ
AS> (не морщись, он для меня тоже слишком сложен ) и PL/Z ( ни описания
AS> которого, ни его самого мне не удалось сыскать :( ).

Жаль что в то время, когда основным компом у меня был Спектрум, мне не
попалось описание Форта. Очень простой (по внутренней архитектуре) и бога-
тый по возможностям язык. Дока мне попалась, когда уже купил IBM'ку, посему
свою версию (Modest FORTH) сделал для неё. Ядро заняло около 3 килобайт, в
полном "исследовательском" комплекте система занимает меньше 10 килобайт,
позволяя из 16-разрядного кода адресоваться к линейному 4-гигабайтному
адресному пространству...
Форт наиболее машиннонезависим из языков программирования, поскольку по
сути эмулирует виртуальную Форт-машину. Чтобы переписать версию системы для
Спектрума нужно около недели ;)
Более удобного средства для программистских экспериментов я не знаю...
Так что чем лепить "монстров" с оптимизирующей компиляцией, может лучше
изучить возможности компилирующего интерпретатора? ;)

AS> Вот и родилась бредовая идея - сделать гибрид C, PL/M и Паскаля и
AS> притом машинноориентированный(Спектрум+z80) и компактный, чтобы
AS> он мог существовать не только в виде кросс-компилера, но и
AS> резидентного, на Спектрум-128(ну или 256 :) ).

А отладится получится? ;) По опыту - Форт система отлаживается за счи-
таные дни, настолько сильно в ней всё взаимосвязано, любой баг моментельно
вылазит... И изменения очень легко вносить, по мере разработки я сделал
три принципиально разных системы, без особого напряга...
Если же делать оптимизирующий компилятор для z80, лучше писать его
на ЯВУ в виде кросс-системы. Глупо пытаться обогнать Пентиум на Спектруме...

AS> Хотя мне подумалось еще, а почему все-таки не попытаться сделать
AS> кросс-компилер стандартного спектрумовского Бейсика. Или уже есть?

Было уже. Самый большой отстой из всего "системного" софта, который
попадался на Спектруме... ;)

AS> Еще мне попалась в руки конвертилка из кодов бейсика в ASCII-файл,

Hе моя случаем? ;)

AS> а с обратной операцией нет?, т.е. ASCII-> коды бейсика. Такая задачка
AS> уже конечно потруднее, т.к. в ней уже есть элементы транслятора:
AS> семантический и синтаксический анализ и генерация кода.

Какой-такой семантический анализ? Пишется за 15 минут таблица перекоди-
ровки. Перекодирующий компилятор (я не ошибся) занимает около 800 байт. ;)
Правда сделан для IBM :(


С уважением George


From Marat Fayzullin To All 22 February 1998

Mozhno, no vse zhe medlennei, i pisat' na nem slozhnee - v tom smysle
chto na C/Pascale/C++/etc. algoritm eshe bolee/menee napominaet svoi
sobstvennyi psevdokod, a na Forthe - vse sovsem inache.

: Если же делать оптимизирующий компилятор для z80, лучше писать его

From George Shepelev To All 23 February 1998

Hallo Marat!

Воскресенье 22 Февраля 1998 17:37, Marat Fayzullin wrote to All:

MF> : Более удобного средства для программистских экспериментов я не знаю...
MF> : Так что чем лепить "монстров" с оптимизирующей компиляцией, может лучше
MF> : изучить возможности компилирующего интерпретатора? ;)
MF> Mozhno, no vse zhe medlennei, i pisat' na nem slozhnee - v tom smysle
MF> chto na C/Pascale/C++/etc. algoritm eshe bolee/menee napominaet svoi
MF> sobstvennyi psevdokod, a na Forthe - vse sovsem inache.

Да как тебе сказать. Hемного разобравшись с Фортом ты будешь придумывать
настолько интересные алгоритмы, которые тебе бы раньше и в голову не пришли.
И потом использовать их в других языках программирования...
Могу и конкретно - я сам использую некоторые идеи, навеянные Фортом, при
программировании на Ассемблере и Паскале IBM'ки и на Ассемблере PIC процес-
соров...
Hасчёт медленее - очень спорный вопрос. Грамотно написанная программа на
Форте работает в 2...3 раза медленее ассемблерной и примерно со скоростью
программы, скомпилированной C без оптимизации. Для сравнения, Паскаль строит
код, работающий несколько медленее. С Бейсиком сравнивать просто смешно...
И наконец - Форт является самым простым в реализации языком программиро-
вания. Hаписать хорошую версию Форта для Спектрума можно за неделю,
Паскаль или Си потребуют несколько месяцев.


С уважением George


From Ivan Mak To All 24 February 1998


Hello George.

Sat Feb 21 1998 16:54, George Shepelev wrote to Andrew Savichev:

GS> Hallo Andrew!

GS> Жаль что в то время, когда основным компом у меня был Спектрум, мне
GS> не попалось описание Форта. Очень простой (по внутренней архитектуре)
GS> и бога- тый по возможностям язык. Дока мне попалась, когда уже купил
GS> IBM'ку, посему свою версию (Modest FORTH) сделал для неё. Ядро заняло
GS> около 3 килобайт, в полном "исследовательском" комплекте система
GS> занимает меньше 10 килобайт, позволяя из 16-разрядного кода
GS> адресоваться к линейному 4-гигабайтному адресному пространству... Форт
GS> наиболее машиннонезависим из языков программирования, поскольку
GS> по сути эмулирует виртуальную Форт-машину. Чтобы переписать версию
GS> системы для Спектрума нужно около недели ;) Более удобного средства
GS> для программистских экспериментов я не знаю... Так что чем лепить
GS> "монстров" с оптимизирующей компиляцией, может лучше изучить
GS> возможности компилирующего интерпретатора? ;)
Я всеми pуками и ногами за FORTH !

Ivan


From Marat Fayzullin To All 25 February 1998


: MF> chto na C/Pascale/C++/etc. algoritm eshe bolee/menee napominaet svoi
: MF> sobstvennyi psevdokod, a na Forthe - vse sovsem inache.
: Да как тебе сказать. Hемного разобравшись с Фортом ты будешь придумывать
: настолько интересные алгоритмы, которые тебе бы раньше и в голову не пришли.
: И потом использовать их в других языках программирования...

From Dmitry Grigoryev To All 26 February 1998


Привет, Ivan!

Втоpник 24 Февpаля 1998 05:18, Ivan Mak wrote to George Shepelev:

IM> Я всеми pуками и ногами за FORTH !

Удивляюсь я... И чего тебя постоянно тянет делать не то, что нужно, а то, что
проще всего реализовать? Hа Спекки написано множество программ на асме и С и
вряд ли наберется десяток (юзаемых) прог на Форте. При этом, компиляторы форта
существовали едва ли не с рождения Спектрума.

IM> Ivan

С уважением, Дмитрий (OLDMAN).
ZXNet: 095/100.1
old...@i-connect.ru