А такой GOTO/GOSUB работает быстрее? Можно использовать для ускорения основного цикла, например?
А такой GOTO/GOSUB работает быстрее? Можно использовать для ускорения основного цикла, например?
Больше игр нет
Да, это быстрее, но использовать для ускорения цикла с IF не очень удобно, т.к. обычно запускают по RUN и выполнение программы начнется с 0й строки. Если добавить там проверку условия (первый запуск или нет), то это съест выигрыш. Еще можно делать самомодификацию программы, но на мой взгляд оно того не стоит.
В 2.97 помимо прошибания лбом стены за счет ускорения преобразования номеров строк в числа и собственно поиска строк добавил еще элементарное "кеширование" - запоминается последняя строка для GOTO и отдельно для GOSUB. Это дает заметный эффект не только в маленьких тестиках, но и в больших программах.
svofski (12.07.2023)
Идея с кешом замечательная. Вот бы вообще все строки хранить в заранее переваренном виде.
Больше игр нет
Известный факт, что продвинутые интерпретаторы (в т.ч. 4.51 и 5.29) и полукомпиляторы вместо номеров строк хранят адреса перехода, что конечно намного удобнее и быстрее при выполнении. Но для этого надо менять формат хранения программы, может когда-нибудь до этого дойдет. А пока приходится как в анекдоте про советские дороги и автомобили - "чего только не придумают эти русские, чтобы не строить хорошие дороги". Анонс - в новой версии среди прочего удалось добиться существенного прогресса по второму связанному с интенсивным поиском в рантайме фронту - поиск переменных, и продвинутый формат программы не спасет 4.51 и 5.29 от тотального поражения.
Не знал и не видел в векторовской документации, что 2.5 унаследовал от микрона функцию @ преобразующую dec->hex. Правда это не "настоящая" функция (как и TAB, SPC), ее результат нельзя присвоить символьной переменной, можно только напечатать через PRINT.
Еще одна скрытая возможность PRINT - поддержка Esc-последовательности
1Вh, 59h, 20+Y, 20+Х
для изменения координат курсора. Через нее реализованы CUR и AT, а можно использовать и напрямую, хотя это и неудобно.
svofski (19.07.2023)
Очередная вещь, про которую возможно знали все кроме меня - размер "точки" в LINE BS. Аргументы LINE BS задают во сколько раз увеличить символы по горизонтали и вертикали, тут вопросов нет. Но меня с детства удивляло, что "точки" (кроме случая LINE 1,1,BS) "внахлест". Оказывается сами они в 1.5 раза больше, чем расстояние между ними. Например при LINE 2,2,BS "точка" 3x3.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
2.891 - версия с быстрым набором. Исправлены ошибки и недоработки, подробности в readme.
2.98 - очень быстрый интерпретатор.
Результаты тестов: RFBM, старт ANTIGRAV, пробежка в PROVERKA и взлет ракеты, пустой цикл, решето, Мандельброт.
Ошибки и недоработки тоже исправлены и есть уникальные особенности (как положительные так и отрицательные), подробности в readme.
Новые бейсики в картотеке: 2.891, 2.99x
Последний раз редактировалось ivagor; 13.04.2024 в 12:09. Причина: ссылки на картотеку
Improver (05.08.2023), parallelno (05.08.2023), PPC (28.09.2023), Ramiros (05.08.2023), Stl75 (05.08.2023)
в 2.98 заметил баг - после выхода из программы в интерактивный режим, PLAY продолжает играть.
Здесь можно скачать актуальные версии Virtual Vector (VV)
ivagor (05.08.2023)
Ramiros, спасибо, пофиксил.
Оказалось, что комодорщики, у которых тоже MS бейсик, знали про фишку с номером GOTO.
А еще они знали про "быстрый 0". Уже писал, что в 2.5 вместо 0 быстрее &, но это чисто векторовская фича, и в оригинальном 2.5 есть ограничения на места использования &. Но есть общемикрософтовский ноль - . (точка). В 2.5 точка быстрее всего, потом &, потом 0. В 2.98fix парсинг чисел очень сильно переделан, поэтому там 0 и . одинаково быстрые, а & чуть медленнее (и все эти варианты намного быстрее, чем в 2.5).
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)