Важная информация

User Tag List

Страница 2 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 11 по 20 из 54

Тема: Почему Спектрум-бейсик такой медленный?

  1. #11
    Member
    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    бордер-то, может, и простая команда, но параметром может быть любое сложное выражение
    синтаксически разбирается и вычисляется которое универсальной медленной процедурой
    Нет. Я имел в виду немного другое.
    Интерпретатор тратит около 10 тыс. тактов просто на команду. Не на выражение, а на команду.
    А вот если сделать "сложное выражение" и прогнать через компилятор, то даже синусы-косинусы, которые вычисляются ТЕМИ ЖЕ процедурами ПЗУ будут работать быстрее "простых" команд.
    Тем более интерпретатору НЕ НАДО разбирать параметр, при вводе строки этот параметр уже преобразовался к 5 байтному значению - его просто надо загрузить и выполнить.

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

    Цитата Сообщение от weiv Посмотреть сообщение
    Полосок, соответствующих одной команде BORDER N, на бордюре укладывается примерно 10. Делим 69888 тактов на 10, получаем примерно 7000 тактов на одну команду BORDER.
    К сожалению я проверял в эмуляторе и из 128 режима, поэтому он мог мне приврать несколько процентов.
    Но в любом случае 7 и 10 команд - цифры одного порядка, всё равно это тысячи тактов.
    Это безумно много.

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

    Цитата Сообщение от weiv Посмотреть сообщение
    это ещё не было бы доказательством того, что разработчики специально замедлили бейсик
    Я утрировано так написал. Понятно что у них не было ни времени с этим разбираться ни больших объёмов ПЗУ чтобы всё это хранить.
    И даже бейсик-то они не с нуля присали а большую часть слизали из предыдущих проектов, где этот бейсик был ещё хуже.

    Перефразирую по-другому, что если бы в проект добавить спеца, увеличить ПЗУ и дать чуток больше времени на подготовку, то без проблем бейсик мог бы работать почти со скоростью компилятора

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    сегодня нет никаких причин разрабатывать на бейсике, кроме ностальгии.
    С этим никто не спорит. Это и 30 лет назад понятно было. Просто несправедливость-то вопиющая

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

    Цитата Сообщение от Бука Посмотреть сообщение
    Читал что многие процедуры брались практически без переделки из кода ПЗУ ZX81, в том числе и команда CIRCLE (не влезшая в тот ром и оставшаяся лишь в виде рекламы).

    А так как все процедуры были оптимизированы на минимальное использование ОЗУ под буфер, чтобы работать на 1кб, то были очень медленны.

    Разработчики из New Tiles предлагали доработать бейсик с учетом того что теперь не надо экономить память, но Синклер в приказном порядке это запретил.
    Как результат в 16к ПЗУ осталась минимум одна (емнип больше) процедура от ZX81, нафиг не нужная Спектруму.
    Дело как бы не в процедурах, которые рисуют на экране.
    Ну медленные там CIRCLE, DRAW, PRINT и всё иже с ними, ну и положить на это.
    Очень медленным получился сам интерпретатор.

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

    Цитата Сообщение от null_device Посмотреть сообщение
    Рекомендую, "перечитать" одну замечательную книжку. Во вступительной части про компилляторы, весьма доступным языком дается ответ на ваш вопрос.
    не помню, читал ли эту книжку в детстве. У меня не было свободного доступа к литературе. В любом случае, даже если листал её, то уже после изучения машинных кодов.

    но даже оттуда цитирую (с сокращениями):
    Наиболее простой способ трансляции - это немедленный "дословный" перевод, так называемая интерпретация.... Интерпретатор опознаёт ключевые слова языка и тут же подсовывает процессору соответствующую последовательность кодов.
    Компилятор... создаёт программу в кодах, независимую от каких либо трансляторов.

    Но ещё раз обращаю внимание (с BORDER это может быть и не показательно) что, и интерпретатор, и компилятор вызывают одни и те же процедуры ПЗУ: они оба в конечном итоге выполняют команду CALL ПЗУ
    Просто компилятор это может сделать сразу, а вот интерпретатору придётся "опознать ключевое слово". Но блин, ключевое слово - ОДИН БАЙТ. А на это тратится тысячи тактов

  2. #12
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,525
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    208
    Поблагодарили
    166 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    Интерпретатор тратит около 10 тыс. тактов просто на команду. Не на выражение, а на команду.
    Еще раз, внимательно, по слогам. Для интерпретатора не существует "просто команды". Даже для уже токенизированной строки он сперва определяет по одной таблице класс команд по типу и количеству операндов, потом парсит и вычисляет операнды, каждый из которых может оказаться (а может и не оказаться, но интерпретатор не помнит этого) выражением весьма сложным, потом только находит по второй таблице через токен и вызывает нужную процедуру. Тыщи тактов на ВСЁ это вместе всегда уходит. Код к тому же не оптимизированный по скорости.
    Прихожу без разрешения, сею смерть и разрушение...

  3. Этот пользователь поблагодарил Lethargeek за это полезное сообщение:

    vlad-kras (16.11.2023)

  4. #13
    Member
    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Нет. Программа на Spectrum BASIC ничего общего с пи-кодом не имеет. Читаем дизассемблер ПЗУ и ищем ответы на вопросы.
    Я знаю что ПЗУ спектрума не предназначено для пи-кода.
    Просто почему вы так категоричны что бейсик ничего общего с пи-кодом не имеет?
    Все команды - токенизированы в коды, все числа - переведены в удобоваримую форму... очень похоже на пи-код.

    Ну или по-другому сформулирую свою мысль.
    Вполне можно было бы сделать такой пи-код, который сравнительно просто поддавался редактированию (как 128 бейсик переводит обратно токены в буковки, а 5 байтное представление цифр скрывается даже в 48), но в то же время исполняется почти со скоростью компилятора (100-200-300 тактов для перехода к следующей команде).
    Т.е. интерпретация языка свелась бы к закидыванию чисел на стек калькулятора и косвенного вызова процедуры соответствующей токену...

  5. #14
    Master
    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    902
    Спасибо Благодарностей отдано 
    200
    Спасибо Благодарностей получено 
    141
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    Просто почему вы так категоричны что бейсик ничего общего с пи-кодом не имеет?
    Потому, что так и есть. А еще в программе могут быть ошибки, которые интерпретатор тоже вынужден отлавливать в процессе выполнения.

  6. #15
    Member
    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    Еще раз, внимательно, по слогам. Для интерпретатора не существует "просто команды". Даже для уже токенизированной строки он сперва определяет по одной таблице класс команд по типу и количеству операндов, потом парсит и вычисляет операнды, каждый из которых может оказаться (а может и не оказаться, но интерпретатор не помнит этого) выражением весьма сложным, потом только находит по второй таблице через токен и вызывает нужную процедуру. Тыщи тактов на ВСЁ это вместе всегда уходит.
    Я вам верю что спектрум-бейсик это делает именно так.
    Просто "определяет по одной таблице класс команд по типу и количеству операндов" - это звучит пугающе. А на самом-то деле раскидали по таблице токенов - первые 5 токенов = без операндов (cls, run), потом 10 с одним операндом (paper, border, peek), потом ещё 10 с двумя и т.п. - при грамотном порядке токенов "класс команды" определяется из её номера напрямую.

    "потом парсит... операнды"
    К сожалению у меня пробел в знаниях, поэтому я не знаю насколько это сложно. Но можно ж было как-то облегчить интерпретатору этот парсинг, чтобы он не тратил тыщи тактов на него.

    "вычисляет операнды, каждый из которых может оказаться (а может и не оказаться, но интерпретатор не помнит этого) выражением весьма сложным"
    в этом деле интерпретатор НЕ отличается от компилятора - и тот и другой считают выражения на встроенном калькуляторе. Ну и выражение сложное/простое - это ж одна проверка и один переход - ну два, ну три десятка тактов...

    "потом только находит по второй таблице через токен и вызывает нужную процедуру"
    ну и в чём проблема-то? LD A,код_токена: ADD A,A: LD H,адрес_таблицы: LD L,A: LD B,(HL): INC L : LD C,(HL): PUSH HL: RET = итого меньше 70 тактов получается
    Если код токена известен и таблица удобно размещена, то вообще можно за 50 тактов сделать


    Просто изначально непонятно ну зачем так тормозить ;(

  7. #16
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,832
    Спасибо Благодарностей отдано 
    479
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mmxdmv Посмотреть сообщение
    Но можно ж было как-то облегчить интерпретатору этот парсинг, чтобы он не тратил тыщи тактов на него.
    Цитата Сообщение от mmxdmv Посмотреть сообщение
    Просто изначально непонятно ну зачем так тормозить ;(
    блин 82 год был...

    найди что нибудь написанное в это время
    быстрое и качественное

    компы хоть какието(доступные) у людей появились за пару лет до этого
    Последний раз редактировалось NEO SPECTRUMAN; 29.06.2017 в 13:43.

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

  9. #17
    Member
    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Xrust Посмотреть сообщение
    А еще в программе могут быть ошибки, которые интерпретатор тоже вынужден отлавливать в процессе выполнения.
    А вот нифига.
    Ошибки бывают двух видов - ошибка синтаксиса и ошибки выполнения.
    Синтаксис прекрасно встроенный редактор правит, а вот ошибки выполнения вынужден и компилятор проверять.
    Вернее даже не компилятор проверяет, а сами процедуры в ПЗУ (Например если рисовать дугу DRAW так, чтобы загогулина вышла за конец экрана, то получим ошибку даже в компиляторе)
    Т.е. мы не ведём речь про злостного хакера, который сделал сотни poke и у него бейсик-программа стала мутантом которую принципиально нельзя с клавиатуры ввести.

  10. #18
    Veteran Аватар для skyther
    Регистрация
    24.06.2005
    Адрес
    Лысьва
    Сообщений
    1,205
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот: https://zx.itch.io/sebasic3 за 5 баксов обещают оптимизацию по скорости.

  11. #19
    Master
    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    714
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    31 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот вы в этой троль теме написали всего 11 байт кода и уже в них сделали ошибку. А тогда нужно было не разглагольствовать а сделать рабочую версию в короткий промежуток времени и не отлавливать глюки от всяких оптимизаторов. Спектрум бейсик идеальный!

  12. #20
    Member
    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Вот вы в этой троль теме написали всего 11 байт кода и уже в них сделали ошибку. А тогда нужно было не разглагольствовать а сделать рабочую версию в короткий промежуток времени и не отлавливать глюки от всяких оптимизаторов. Спектрум бейсик идеальный!
    90% сообщений про спектрум - это троллинг. В смысле я тролль, но тут половина таких.
    Про ошибку - возможно. Больше 20 лет не писал в ассемблере Z80, на бейсике и того больше.

    На счёт идеальности спектрумбейсика спорить не буду. То что запихнули в ПЗУ вышло довольно неплохое: со всякими там каналами и потоками, а также функциями пользователя можно нехило так извращатся.
    Бета-бейсик правда чуток получше был, но компиляторов к нему не было и ОЗУ жрал немилосердно.

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

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

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

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

Похожие темы

  1. Ответов: 100
    Последнее: 23.11.2022, 16:01
  2. Руссифицированный бейсик
    от Den1982 в разделе Программирование
    Ответов: 17
    Последнее: 23.02.2022, 22:58
  3. Схема ZX-Спектрум совместимого компьютера "Бейсик"
    от Gryphon в разделе Несортированное железо
    Ответов: 9
    Последнее: 07.08.2021, 08:37
  4. Ответов: 26
    Последнее: 23.07.2016, 01:38

Ваши права

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