А вот и мнение иностранного специалиста о том, что 6502 плохо годится для компиляторов ЯВУ:
The 6502 is not very compiler friendly: lack of 16 bit registers, hardware stack with 8 bit stackpointer.
High level, block structured based, recursion able, languages require lots of memory, stacks, heaps, stack frames, variables on the stack. That means on the 6502 a software stack with zero page based stack pointer, and quite some code. Storing data stored on the stack also requires quite some code. A solution often used on small machines with the 6502 is to generate compact code for virtual machine and the virtual machine implements an interpreteer for a stack machine. It works but is slow. Trying to generate 6502 code leads to lots of code alas and memory is filled up quickly.
SAA wrote:А не могли бы Вы как-то охарактеризовать PL65 ? Я понимаю, что Вам не довелось на нём пописать, но по спецификации смогли бы сказать насколько он прогрессивен относительно PL/M 8080?
PL65 это развитый язык похожий на Паскаль. По первому впечатлению не имеющий ничего общего с PL/M. По плотности выходного кода, он вряд-ли лучше, чем PL/M для 8080 или 6502, но по всем остальным параметрам, он, естественно, намного мощнее и удобнее для программиста, чем PL/M. Трудно ожидать иного, ведь 8-ми разрядный PL/M официально из 1973 (хотя была и ранняя 4-х разрядная версия уже в 1972), а PL65 для Атари из 1987, разница в 15 лет. Интересно бы сравнить объём кодов компиляторов.
Оригинальный PL/M был кросс-компилятором для майн-фрейма PDP-10 (написанный на фортране-IV), потому сравнивать можно лишь производные от него версии для "родных" платформ (т.е не кросс). Это PL/M для ОС ISIS от фирмы Intel из конца 70-тых с размеров в ~130 кб и компилятор PLMX для CP/M, который был написан в 1979 г. программистом по имени Roger Carlson размером в ~100 кб. Компилятор PL/M для ISIS фирмы Intel написан на самом PL/M, может даже на нём самом (первая версия конечно была странслирована кросс-средством).
Возможно PL/M от Intel более эффективный, чем PLMX от Roger Carlson, т.к он всё-таки создан солидной фирмой с кучей программистов и опытом поддержки PL/M в течение многих лет (в Intel всё писали на PL/M, даже их ОС ISIS написана на PL/M), в то время как PLMX написан одним индивидуальным предпринимателем. PLMX по возможностям самого языка это несущественно усечённая версия PL/M стандарта 1976, но зато он для CP/M и имеет библиотеки для CP/M (хотя мне они не нужны, я предпочитаю на ассемблере написать своё). Ну и немаловажно, что PLMX запускается под TSR-эмулятором CP/M, т.е прямо из Windows XP (не более поздних). PL/M от ISIS вообще не использовать. А написанный на фортране PL/M наконец недавно (конвертировали на Си) и
научились использовать, - он может и чуть эффективней, но в использовании очень неудобный.
Возможно PL/M и не единственный пригодный инструмент для 8080, т.к судя по имеющейся информации, есть подозрение, что PL/I от Digital Research окажется не хуже, чем PLMX и PL/M. Но я уже потратил энергию на освоение PL/M и не хочу пока тратить силы и время на изучение другого, к тому же более сложного ЯВУ.
SAA wrote:И вот ещё вопрос, который меня уже давно подмывает задать, а что скажете по поводу макро средств ассемблера. На C64 очень интересный в этом плане макроассемблер, напоминает нечто подобное PL/M.
C64 это компьютер Cоmmodore-64?
Как макроассемблер может напоминать что-то из PL/M? Там нет макро. Макро-ассемблер позволяет определить макрокоманду, т.е задать цепочку команд ассемблера, которой передаются параметры и есть куча хитростей с макроподстановкой. Это, кстати, позволяет на ассемблере реализовывать даже некоторые операторы из ЯВУ, например, WHILE-ENDW, IF-THEN-ELSE.
Ничего сравнимого по возможностям с макро средствами в PL/M нет. Там с помощью LITERALLY можно лишь задать замену одного любого слова на другое слово или цифру или несколько слов и цифр. Это аналог ассемблерного псевдооператора EQU и аналог define в Си. До макро-команд этому "фичу" далеко.
SAA wrote:были относительно недолго популярны зарезанные Си, C--... Не приходилось?
Не видел, этого в СССР не было, лишь читал в Интернете. Ещё и Паскаль-0 был, упрощённый. Есть ли от подобного польза? Хоть что-то это улучшает, кроме экономии трудозатрат разработчика компилятора? Можно думать, что это ради упрощения компилятора, когда на полноценный компилятор, либо ОЗУ, либо энтузиазма, либо ума не хватило.
SAA wrote:Но библиотеки-то он позволяет, можно расширить и fixed point и даже float?
Естественно, как и у всех линкующих компиляторов, можно писать модули на ассемблере или любом ЯВУ, если они используют линковку и их REL-формат совместим с Microsoft и Digital Research (а это не у всех компиляторов так). Как раз, когда я пишу на PL/M, всё что легко сделать на ассемблере, я делаю на нём и только в текстовом редакторе, который специально стал писать, чтобы оценить эффективность кода от PL/M, я всё делал только на самом PL/M.
Этим-то все линкующие ЯВУ лучше, чем Турбо-Паскаль. Его по сути следует считать игрушкой. Он конечно позволяет ассемблерные вставки, но намного более утомительным способом. Кстати, с наличием Паскалей для 6502 дело обстоит похоже на порядок хуже, чем с Си для него же.
SAA wrote:Мне не приходилось работать на PL/M и Ваше мнение особенно ценно
В PL/M я пока не особо компетентен, хотя сейчас, похоже, в России кроме меня только
Kakos-nonos имел дело с PL/M (он написал игру для Апогея). Я только пару месяцев, как этим озадачился, причём дважды за это время все написанные программы на PL/M утрачивались. А вообще в 80-тые PL/M-у учили на курсах программистов и инженеров конструкторов контроллеров (на 8085 и 8048/51), и PL/M был основным ЯВУ в дистрибутиве СМ-1800.
Долго привыкать, после Паскаля и Си раздражает (приводит к ошибкам) CALL перед процедурами, когда они вызываются, как процедуры. Постоянно забываешь вставить CALL. Даже подумывал написать препроцессор, что будет находить в тексте процедуры и вставлять, где надо CALL. Сначала вообще получалось не в 5 раз быстрее, чем на ассемблере, а раз в 15 медленнее. Спустя время более-менее привык, но всё-равно получается никак не быстрее, чем на ассемблере. Видимо надо набраться больше опыта, тогда получится польза от ЯВУ. Но в принципе писать на любом ЯВУ намного легче и приятнее, чем на ассемблере. Чтобы оценить PL/M, я хотел бы написать CP/M-нортон.
А вообще, если объём кода позволяет, то лучше писать на Паскале, получается намного быстрее и возможности выше. Особенно, если Паскаль не Турбо от Borland, а нормальный с линковкой (за счёт чего всё что удобно можно переписать на ассемблер). Или писать на Си. Но увы, на этих ЯВУ не написать программы даже средней сложности. Объём кода быстро нарастает за 32 кб. Например, более-менее полноценный Нортон получается в 40 кб, а ведь для него ещё нужен буфер копирования (чем он меньше, тем медленннее скорость копирования), а главное, совсем не остаётся места для реализациии "глЮкала": для графической машины нет места для буфера сохранения окон, только для текстовой. Потому и приходится использовать PL/M, несмотря на то, что он и не самый удобный ЯВУ.
SAA wrote:Есть ли действительно непреодолимые трудности написания в нём ПО?
Нет, по сути это тот-же ассемблер, только синтаксис другой. Потому можно сделать всё то же, что и на ассемблере, т.е можно написать любую программу для которой хватает объёма ОЗУ (а если и появится что-то непреодолимое, то ассемблер в помощь). Но сложную по алгоритму программу лучше писать на Си или Паскале. Ещё Аду и Драко можно попытать. Они написаны позже, может быть эффективнее.
SAA wrote:Стив Возняк, как бы возражает своими 4К Integer Basic
Целочисленный бейсик и от Билла Гейтса занимает те же 4 кб. Там речь шла о полноценном бейсике. Ну и был упомянут TINY-бейсик. Не интересовался объёмом
TINY-бейсика в кодах 6502, но уверен, что он больше, чем 768 байт.
Любопытно, что Возняк писал ROM-BIOS-ы Apple и целочисленный бейсик в машинных кодах. У него не было дисковода и транслятора. Лишь мини-отладчик. А Билл Гейтс с компаньонами в работе использовали майн-фрейм PDP-10 и
вот здесь написано, что у них благодаря этому был хоть и убогий, но транслятор ассемблера (реализованный в виде макро). Странно, что они поленились написать свой, ведь ассемблер без макрокоманд для 6502 (или 8080) пишется опытным программистом за 3-4 дня.