User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 27

Тема: ACK (Amsterdam Compiler Kit) для Вектора и 8080 вообще

  1. #11

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PL/M компилер точно сгенерит код эффективней, чем Си. А насчёт PL/1 я не уверен. Не тестил.

    Цитата Сообщение от PPC Посмотреть сообщение
    Это очень простая для оптимизатора ситуация, почему Manx её не сделал, мне до конца не ясно.
    Это может быть связано с однопроходностью компилятора. В момент разбора синтаксиса по строкам и генерации кода для входа в процедуру у компилятора может ещё не быть информации, вызывается ли эта функция рекурсивно, или нет.

    Ну, в общем, только тестировать, а не радоваться заранее.

    Кстати, Ofront+ (Оберон в Си) умеет генерить на выходе K&R, если что. Ну и ANSI конечно тоже.

    Цитата Сообщение от PPC Посмотреть сообщение
    Язык C-это наше всё - самое то быстро писать CP/M-совместимые утилиты.
    Есть ещё Cowgol.

    - - - Добавлено - - -

    Мне больше всего интересно в этой теме:

    a) применение ACK в качестве компилятора для разработки восьмибитных игр на Паскале и Модуле-2 для Вектора-06Ц, Специалиста, Апогея и др. платформ на КР580;

    b) применение ACK в качестве бэк-энда при разработке игр на Обероне под эти же платформы.

    На эти темы буду рад пообщаться.

  2. #12

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    PL/M компилер точно сгенерит код эффективней, чем Си. А насчёт PL/1 я не уверен. Не тестил.

    Это может быть связано с однопроходностью компилятора. В момент разбора синтаксиса по строкам и генерации кода для входа в процедуру у компилятора может ещё не быть информации, вызывается ли эта функция рекурсивно, или нет.
    Не совсем ясно, при чём тут многопроходность компилятора и возможность рекурcивного входа в функцию. Если нет локальных переменных, не нужен и фрейм под них. И stack adjust тоже не нужен, можно самого себя хоть до упомрачения вызывать, параметры просто лягут в стек вызова друг за другом .
    А Manx такой оптимизации не делает.

    Я, конечно, имел ввиду PL/M (не 1) Килдалла

  3. #13

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,392
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    хочу надеяться на наличие у ACK оптимизатора, который сможет эффекивно выбрасывать ненужное в определённых ситуациях
    При очень поверхностном проглядывании исходников ack я видел только оптимизацию на уровне последовательностей команд 8080. Но кодогенерацию я смотрел только для 8080 и возможно есть и оптимизации на более высоком (более абстрактном) уровне

  4. #14

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Не совсем ясно, при чём тут многопроходность компилятора и возможность рекурcивного входа в функцию.
    Смотрите: если компилятор однопроходный и простой - не строит семантическое дерево и его потом не обходит, а генерит код прямо в процессе синтаксического разбора - то в момент разбора функции и её параметров компилятор ещё не знает, рекурсивна ли эта функция. Кстати, рекурсия может быть ещё и косвенная ( Func() вызывает P(), а P() вызывает Func()) , такую отследить ещё сложнее.

    Цитата Сообщение от PPC Посмотреть сообщение
    Я, конечно, имел ввиду PL/M (не 1) Килдалла
    А я имел в виду Си. В PL/M нет рекурсии.
    Последний раз редактировалось Oleg N. Cher; 06.01.2021 в 14:41.

  5. #15

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    такую отследить ещё сложнее.
    А я имел в виду Си. В PL/M нет рекурсии.
    Вот вам код. Регистр <BC> содержит значение регистровой переменной. Я намеренно зарезервировал 3 байта под локальные данные чтоб было яснее.
    Размер буфера под локальные переменные компилятор знает сразу же, на первом проходе, не даром C требует объявления всех локальных переменных в начале тела функции. При отсутствии локальных переменных, Manx тем не менее генерит
    LXI D,0
    call csave
    ret

    Разберитесь как это работает, и вам всё станет ясно, надеюсь.

    Код:
    foo() { char locals[3]; }
    
    ;Сгенерённый компилятором код
    
    	PUBLIC foo_
    foo_:	lxi d,.8
    	call csave
    ;	char	locals[3];
    ;}
    	RET
    .8 EQU -3
    
    Библиотечный код:
    cret:
    	XCHG
    	POP	H
    	SPHL
    	POP	B
    	XCHG
    	MOV	A,H
    	ORA	L
    	RET
    ;
    	public csave,cret
    csave:POP H
    	PUSH	B
    	MOV	B,H
    	MOV	C,L
    	LXI	H,0
    	DAD	SP
    	XCHG
    	DAD	SP
    	SPHL
    	PUSH	D
    	lxi	h,cret
    	push	h
    	mov	h,b
    	mov	l,c
    	pchl
    PS. Дико извиняюсь за hijack треда.

  6. #16

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разобрался: csave резервирует указанное количество байтов на стеке. А при чём тут рекурсия? :-D

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Разобрался: csave резервирует указанное количество байтов на стеке. А при чём тут рекурсия? :-D
    Я рад, что вы задали себе этот вопрос.

  9. #18

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да не себе, а лично Вам, PPC. Вы упомянули рекурсию, рассуждали о том, что в однопроходном компиляторе как-то можно определить является ли функция рекурсивной, а закончили постом хардкорного машкода, который вообще про локальные переменные. А в итоге пришли к тому, что я разговариваю сам с собой? Ну да ладно. Но мысли излагаете как-то запутанно.

    aot: Так всё-таки найдётся джигит покодить на Паскале или Модуле-2 под i8080?

  10. #19

    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    336
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Да не себе, а лично Вам, PPC. Вы упомянули рекурсию, рассуждали о том, что в однопроходном компиляторе как-то можно определить является ли функция рекурсивной, а закончили постом хардкорного машкода, который вообще про локальные переменные. А в итоге пришли к тому, что я разговариваю сам с собой? Ну да ладно. Но мысли излагаете как-то запутанно.

    aot: Так всё-таки найдётся джигит покодить на Паскале или Модуле-2 под i8080?
    Укажите, где это я рассуждал о рекурсии и однопроходных компиляторах до того как вы такие слова мудрёные использовали?
    Я и слово то такое "рекурсия" первый раз "упомянул" вам в ответ, тем более "однопроходность" :

    Давайте учиться читать. Ваше творчество:
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Это может быть связано с однопроходностью компилятора. В момент разбора синтаксиса по строкам и генерации кода для входа в процедуру у компилятора может ещё не быть информации, вызывается ли эта функция рекурсивно, или нет.
    Мой ответ на это - где я первый раз "упомянул" (как вы это называете), рекурсию и "проходность":
    Цитата Сообщение от PPC Посмотреть сообщение
    Не совсем ясно, при чём тут многопроходность компилятора и возможность рекурcивного входа в функцию. Если нет локальных переменных, не нужен и фрейм под них. И stack adjust тоже не нужен, можно самого себя хоть до упомрачения вызывать, параметры просто лягут в стек вызова друг за другом .
    Прочтите ещё раз мои посты 04.01 и 05.01:
    Один из частных примеров (отсутствие локальных данных, когда стек можно пихать навалом на фрейм вызова) я уже привёл.

    Какой хардкор, я привёл вам часть стандартной библиотеки компилятора и пример функции foo() { char locals[3]; }
    Похоже, с вами рекурсивная диффамация приключилась. Бывает.

  11. #20

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PPC, я не хотел бы замусоривать тему, а Вы, похоже, смакуете. Остаюсь при своём мнении: Вы приплели к рекурсии и невозможности её выявить на первом проходе какой-то кусок кода и какие-то локальные переменные. Это было не к месту. Dixi.

    - - - Добавлено - - -

    P.S. Насколько я понял: в сухом остатке у нас - ACK по качеству кода ну может чуть получше, чем BDS-C. Это печально.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 10
    Последнее: 15.02.2020, 12:36
  2. Форк SDCC для процессора 8080
    от Oleg N. Cher в разделе Вектор
    Ответов: 49
    Последнее: 25.09.2019, 15:20
  3. Ответов: 3
    Последнее: 21.09.2018, 18:28
  4. Ассемблер для 8080
    от shoorick в разделе Разное
    Ответов: 26
    Последнее: 13.02.2016, 14:30
  5. An 8080/Z80 C Compiler
    от breeze в разделе Программирование
    Ответов: 1
    Последнее: 18.08.2005, 06:54

Ваши права

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