Берем программу на бейсике, компилируем и она ускоряется ... в несколько раз. А почему так сильно ускорается, в несколько раз? Часто пишут, что интерпретатору сначала надо проанализировать программу. Но он (наверное) программу, выполняет по строчкам, как разные источники пишут. То есть берет из строки по одной команде, анализирует что за команда и переводит в машинный код. И вот вопрос - неужели интерпретатор самую большую часть времени тратит просто на анализ текста, может еще какие технические причины есть для ускорения?
Например по операторам, в спектруме ключевые слова это же токены, а не строки букв. Значит надо проанализировать не всю строку до пробела, а всего 1 байт и понятно будет что за оператор - для ABS и CLS 1 байт вместо 3 букв, а для PAUSE 5 и RANDOMIZE 9 букв. И кроме того сразу можно сделать таблицу соответствия токен -- адрес его обработки, тогда переход к подпрограмме обработки оператора должен будет выполняться за время о(1), т.е. независимо от числа возможных токенов. Ну ладно, я не знаю как внутри обработка в ROM устроено, может даже не сделали таблицу и выполняют сравнение токенов по цепочке if 200 else if 201 else if 202 итд. Ну все равно, проверка менее 128 вариантов должна выполняться не очень долго.
Потом подумал, что еще другие моменты есть. Например, интерпретатор все время опрашивает клавиатуру на предмет нажатия BREAK, а компилированный код не опрашивает - или тоже опрашивает?
И при выполнении операторов GOTO адрес для строки перехода скорее всего неизвестен интерпретатору, поэтому он начинает анализировать каждую строку программы, выискивая нужную.
Какие еще мысли есть по поводу того, где интерпретатор тормозит, а компилированный бейсик ускоряется?
P.S.
Есть похожая тема
Почему Спектрум-бейсик такой медленный?
https://zx-pk.ru/threads/27831-poche...medlennyj.html
наиболее понятные объяснения в ответах 3,12,25,35,45,53