Ratio & Klynt
Ratio Ratio
Привет, Клинт, тут недавно разбирал логи ошибок начала девяностых, и заметил интересную закономерность в том, как старые интерпретаторы Бэйсика обрабатывали переполнение чисел с плавающей точкой. У тебя такое вообще бывало?
Klynt Klynt
Да, эти старые логи на Бейсике – просто кладезь для этого. Большинство интерпретаторов девяностых просто выдавали "runtime error 52" или "переполнение", когда число превышало диапазон 32-битного числа с плавающей точкой, и сбрасывали переменную до нуля или мусора. Забавная особенность, встречается во всех системах, которые я просматривал. Если покопаешься в трассировке, увидишь одну и ту же последовательность кодов ошибок, за которыми следует переход к обработчику ошибок, почти как ритуал. Я несколько ночей провел, наблюдая за этой петлей в старом лог-файле для "Коммодоре 64" – какое-то странное удовлетворение. Следи за номерами ошибок, и увидишь эти же отпечатки везде.
Ratio Ratio
Кажется, ты уже собираешь паттерны ошибок. Могу быстро скрипт написать, чтобы перекрестно сравнить ошибку времени выполнения 52 с адресами в стеке вызовов, а потом ранжировать системы по частоте сброса до нуля вместо очистки памяти. Так мы хотя бы сможем оценить непостоянство и, возможно, предсказать, где сломается очередной интерпретатор из девяностых. Как тебе такая идея?
Klynt Klynt
Звучит неплохо, но не зацикливайся на сценарии, сосредоточься на артефактах. Я сам покопаюсь в логах и сопоставлю сигнатуры ошибки 52 с реальными дампами стека. Как только я проанализирую шаблоны сброса, посмотрим, подчиняется ли поведение интерпретатора каким-то закономерностям. Просто пришли мне необработанные трейсы – я разберусь.
Ratio Ratio
Извини, но эти логи я предоставить не могу.
Klynt Klynt
Не волнуйся, я соберу по тем кусочкам, что ты помнишь. Просто скажи мне основные сообщения об ошибках или названия интерпретаторов, а остальное я подправлю.
Ratio Ratio
Конечно, вот краткий обзор самых распространенных интерпретаторов BASIC 90-х, которые выдают "runtime error 52" при переполнении, и точные строки, которые ты увидишь в их логах: | Интерпретатор | Код ошибки | Точная строка в логе | |-------------|------------|------------------| | CBM BASIC 2.0 (Commodore 64) | 52 | **RUNTIME ERROR 52** | | 386‑BASIC (PC‑DOS) (MS-DOS) | 52 | **ERROR 52 – OVERFLOW** | | BASIC 3.2 (Apple II) | 52 | **OVERFLOW (CODE 52)** | | BASIC 5.1 (Atari ST) | 52 | **OVERFLOW (Error 52)** | | TRS‑80 PDP‑11 BASIC | 52 | **RUNTIME ERROR 52** | | BASIC (TI‑83 Graphing Calculator) | 52 | **RUNTIME ERROR 52** | | BASIC 3.1 (Amiga) | 52 | **Error 52 – Overflow** | **Типичная схема сброса:** 1. Значение превышает предел 32-битного числа с плавающей точкой (≈ ±3.4 × 10^38). 2. Интерпретатор переходит к обработчику ошибок. 3. Трассировка стека в логе показывает номер строки и вызов подпрограммы. 4. Проблемная переменная часто устанавливается в **0.0** (или остается ее предыдущим значением, если интерпретатор глючит). 5. Управление возвращается на строку после `ON ERROR GOTO` или на следующую строку, если обработчика нет. Используй эти строки для пометок каждого сообщения в логе, а потом сравнивай значения после сброса и смотри, всегда ли интерпретатор обнуляет переменную, оставляет ее неопределенной или иногда даже повреждает соседнюю память. Это должно помочь тебе найти необходимую закономерность. Удачи в исследованиях!
Klynt Klynt
Список получил. Сопоставлю эти данные с логами, которые смогу вытащить со старых машин. Как только разберусь, как работает сброс, посмотрим, какие интерпретаторы наиболее стабильные, а какой — непредсказуемый. Держи остальные данные при себе, будем копать глубже в суть.
Ratio Ratio
Звучит неплохо, просто выложи метки ошибок в простой список, и ты сразу увидишь закономерность. Если кто-нибудь из интерпретаторов выдаст другое значение сброса – дай знать, вот это и есть самое интересное. Удачи в поисках!