Для интересующихся родословной языков программирования вот весьма любопытная ссылка
http://hopl.murdoch.edu.au/findlangu...2&which=byyear
Для интересующихся родословной языков программирования вот весьма любопытная ссылка
http://hopl.murdoch.edu.au/findlangu...2&which=byyear
Ага! А вот и более точные сведения об этом языке...правильное название PLZ на этом же сайте ( прошу прощения что несколькими минутами раньше высказывал мое давнее заблуждение...многолетний туман загадочности рассеялся для меня только сейчас)
Итак, знакомьтесь PLZ!
http://hopl.murdoch.edu.au/showlangu...5&language=PLZ
Вот нашлась такая вещь:
http://archive.computerhistory.org/r...es/text/Zilog/
Это сканированные рекламные брошюры 70-х годов.
Цитата из самой последней:
PLZ
PLZ is Zilog's own family of system implementation languages. Designed specifically with the system programmer in mind, PLZ provides an extremely sophisticated structured programming environment. Implemented at two separate language levels and distinct translator packages, PLZ offers a complete solution to microcomputer system programming problems.
In its highest level, PLZ is a fully block structured language with an IF-THEN-ELSE clause, a case selector (actually implemented in the syntax of the IF statement), block REPEAT and EXIT statements, procedure references and, of course, RETURN's. Data types include BYTE, WORD, INTEGER, SHORT INTEGER and POINTER as well as ARRAYS of any type and RECORD's composed of groupings of the various basic types, arrays, or even other records.
At this language level, both an Interpreter and a Compiler are available. The interpreter provides a fast and convenient means of program development and debugging, while the highly efficient Compiler generates Z80 Object code.
For applications requiring total control of hardware resources, a second level of PLZ provides all the block structuring and control conventions of the full compiler, but uses assembly language statements rather than compiler level expressions and assignments. Thus, it acts as PLZ compatible structured assembler and produces code which can be linked directly to modules translated by the compiler.
Regardless of the scope or complexity of a system programming problem, PLZ will provide a simple, elegant, and complete environment for its solution.
Комиксы это конечно здорово, но похоже это как раз пример того, что когда был сам язык, не было еще инета, а теперь нет уже языкаПравда остался патент и к нему описание, но доступ туда только тем, кто является членом, т.е. платит бабки. Так что конкурс на лучшего языкаВУ-кандидата для z80 остается пока что без претендентов.
Решил протестить компиляторы z80 на dhryston'е.
Вот такие результаты на 10000 запусков:
z88dk - 3852 ticks ~ 130 dps (c register тоже самое)
sdcc - 2613 ticks ~ 191 dps (с register тоже самое)
hitech - 2621 ticks ~ 191 dps
hitech register - 2607 ticks ~ 192 dps
Почему hitech без register оказался хуже sdcc я пока не понял.
Дополнительные замечания. Тестирование проводилось под эмулятором unreal, в исходный текст dhrystone 2.1 были внесены изменения для подстройки под компилятор, так как некоторые фишки не поддерживаются.
Время измерялось чтением переменной SOS FRAMES.
Из библиотечных функций внутри теста вызываются только strcpy и strcmp. Оные использованы из собственных библиотек компилятора. Написаны они по-разному, но все на асме, так что тут вроде условия более менее равные.
Комментарии по возможностям компиляторов:
hitech откомпилил все с минимальными изменениями.
sdcc умеет почти все, но не умеет присваивать структуры по значению. Написал для него memcpy на асме через LDIR (hitech LDIR встраивает в сам код).
z88dk не умеет ряд очень важных вещей, а именно:
* не поддерживает многомерные массивы. Работу с многомерными массивам в тексте заменил на работу с одномерным через arr[y*width+x]
* какие-то косяки с typedef. Массивы определять не умеет, тип typedef, являющийся указателем на структуру тоже, не поддерживает.
* не поддерживает(!) указатели на функции. Это я уже узнал потом, а в тесте эта фича не заюзана, хотя ой как нужна!
sdcc и z88dk никак не прореагировали на register. Видимо они и так работают на пределе своих сил. А вот для hitech register не пустой звук.
Исходя также из анализа проведенного Vitamin'ом могу сказать, что Hitech, конечно, лучший. Но вот sdcc отстает от него совсем чуть-чуть. Видимо Hitech просто лучше справляется с подковырками из теста на compiler features, но в реальных программах такое не так уж и требуется.
Что такое Dhrystone и почему стоит обратить на него внимание:
http://en.wikipedia.org/wiki/Dhrystone
гм. я ожидал худшего результата в связи с любовью этого компилятора к индексному регистру.Сообщение от maximk
Попробуй скомпилять тест с вот этим вот файлом peephole-оптимизатора (как подключать написано в хелпе компилера)
Код:replace restart { ld iy,%1 ld 0(iy),#0x%2 ld 1(iy),#0x%3 ld 2(iy),#0x%4 ld 3(iy),#0x%5 } by { ld de,#0x%3%2 ld (%1),de ld de,#0x%5%4 ld (%1+2),de } replace restart { ld iy,%1 ld 0(iy),#0x%2 ld 1(iy),#0x%3 } by { ld de,#0x%3%2 ld (%1),de } replace restart { ld iy,%1 ld 0(iy),l ld 1(iy),h } by { ld (%1),hl } replace { ld iy,%1 ld 0(iy),c ld 1(iy),b ld 2(iy),e ld 3(iy),d } by { ld (%1),bc ld (%1+2),de } replace { ld iy,%1 ld 0(iy),c ld 1(iy),b } by { ld (%1),bc } replace { jp %5 } by { ret } if labelIsReturnOnly replace { jp %1,%5 } by { ret %1 } if labelIsReturnOnly replace { jp %5 } by { jr %5 } if labelInRange replace { jp z,%5 } by { jr z,%5 } if labelInRange replace { jp nz,%5 } by { jr nz,%5 } if labelInRange replace { jp c,%5 } by { jr c,%5 } if labelInRange replace { jp nc,%5 } by { jr nc,%5 } if labelInRange replace { ld iy,%1 ld a,0(iy) ld iy,%2 sub a,0(iy) ld iy,%1 ld a,1(iy) ld iy,%2 sbc a,1(iy) } by { and a,a ld hl,(%1) ld de,(%2) sbc hl,de } replace { ld iy,%1 ld a,0(iy) sub a,#0x%2 ld a,1(iy) sbc a,#0x%3 } by { ld hl,(%1) ld de,#0x%3%2 and a,a sbc hl,de }
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ну, получилось как у Hitech с register - 2607 ticks.Сообщение от Vitamin
)
Итого два лидера в командеСообщение от maximk
Посмотри полученный код и попробуй подправить файл оптимизатора. Я его писал в расчете на свой тест, у тебя могли другие конструкции использоваться.
Последний раз редактировалось Vitamin; 30.11.2006 в 00:10.
А есть у кого исходники-патчи для гнутых утилит под z80 ? gcc и binutils, которые ?
Если есть - киньте ссылку, хочу глянуть, что это такое.
GCC для Z80 - миф =)
Довольно много людей пробовало сделать порт.
http://gcc.gnu.org/ml/gcc-patches/2001-06/msg01546.html тут даже патч есть.
http://gcc.gnu.org/ml/gcc/2003-05/msg02369.html а вот тут даже московский телефон.
http://gcc.gnu.org/ml/gcc/2003-03/msg01402.html почему gcc плох/хорош для разных процов.
Последний раз редактировалось NovaStorm; 30.11.2006 в 09:03.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)