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

User Tag List

Показано с 1 по 10 из 54

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

Древовидный режим

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

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

    Для изучения скоростных характеристик бейсика накидал простенькую программу:

    1 pause 1: border 2: border 3: border 4: border 5: goto 1

    Она предсказуемо полосатит бордюр и практически не дрожит.
    Итак, 6 команд выполняются за 1/50 секунды. Положим, команда pause притянута за уши, значит одну команду примерно бейсика Z80 исполняет около 10 тыс тактов.
    Причём именно короткую команду с одним параметром. Если взять команды out 254,xx , то там время выполнения (ширина полоски на бордюре) побольше.

    Ну или начну с другой стороны. Бейсик - это интерпретатор. А если закомпилировать эту программу? Да, она будет исполнятся в сотни раз быстрее. А почему?
    Что такое компилятор применительно к спектруму? Команды бейсика - очень сложны. Компилятор не фигачит свои процедуры - он вызывает процедуры из ПЗУ. Ибо писать свою плавучку, переделывать стандартные функции дело не благодарное. да и совместимость при этом портится.

    Итак, получается, компилятор преобразует бейсик-программу в машинный код вида CALL ПЗУ_1: CALL ПЗУ_2: CALL ПЗУ_3.
    А что тогда делает интерпретатор?
    Интерпретатор выполняет текущий оператор. Но текущий оператор это токен. Взяли код этого токена, умножили на 2, слазили в ПЗУ по этому адресу - получили адрес процедуры (которая ПЗУ_1) и вызвали её (сделали аналог CALL ПЗУ_1).
    Да, скажете, ещё надо число-параметр кинуть на стек калькулятора и потом его заберёт процедура. Но постойте, число уже давно преобразовано к пятибайтному формату. Тысячи тактов тратить на то чтобы скопировать? Бред.
    По сути дела, токенизированный бейсик с пятибайтным представлением чисел - это практически пи-код. Такой же в паскале оочень бодро интерпретируется тысячами команд в секунду.
    Почему же бейсик такой медленный?

    В общем, моё мнение, что если бы в структуру строк бейсика добавить дополнительные штуки (как то переход по адресу строки - кроме номера строки хранить её адрес, длину параметров операторов - чтобы живее их на стек запихивать, адреса переменных и т.п.), то вполне можно получить пи-код, который бы интерпретировался по 200-500 тактов на команду (без учёта времени исполнения самой команды).
    И такие простые команды типа BORDER вполне себе могли исполнятся за 300-600 тактов (со стеком калькулятора), а при введении целочисленного типа может даже и за 200 тактов.

    В любом случае разработчики специально замедлили бейсик минимум в 20-30 раз.

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

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

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

Эту тему просматривают: 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

Ваши права

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