а нафига ошибки искать, если их не править?
во-первых, я ее специально не искал, а наткнулся случайно, когда экспериментировал с бейсиком. Хотел получить сообщение "I FOR without NEXT", закомментировал оператор NEXT, а желаемого сообщения об ошибке не получил. Потом уже стал исследовать, нашел причину ошибки и то, что она относится не только к NEXT, а еще и к DATA и DEF FN.
Во-вторых, зачем теперь исправлять ошибку, если она сильно не мешает, а людей сейчас пользуются бейсиком мало? Я вон сделал Bogobasic, в нем много расширений и ошибок исправлено - а толку? Стал кто-то применять улучшенную работу с каналами и потоками? Улучшенный CIRCLE? Помогли кому-то исправленные баги? Скорее наоборот. Некоторые защиты вызывают подпрограммы из ПЗУ. Например, в одной защите, помнится, вызывалась подпрограмма "LINE". В Bogobasic изменена процедура рисования точки, поэтому процедура LINE выполняется за другое число тактов - это влияет на содержимое регистра R, и защита не работает.
В Bogobasic были другие, очень полезные функции, типа @LOAD"file" и расш. драйвер клавиатуры - поэтому я все-таки предпочел иметь его в ПЗУ. Однако я не по наслышке знаю, Black_Cat, чем чреваты изменения бейсика.
Практически не существует "безопасных" мест в ПЗУ, которые можно безнаказанно менять. Всегда найдется программа, которая перестанет из-за этого работать.
это понятно, для этого обычно делают теневой исправленный ROM, в котором исправлены все ошибки найденные когда-либов ПЗУ. Т.к. такое ПЗУ уже существует, то почему бы не исправить ещё один баг. А что касательно Bogobasic, то тут вопрос больше в рекламе продукта и его соответствии современным требованиям
Вообще это нельзя считать в полной мере багом, так как после REM подразумевается использовать литеры, зачем туда лепить операторы или, допустим, вперед ставить ":"? Зачем провоцировать интерпретатор на ошибку? Ну не может программист учесть все глупости, которые захотят сделать извращенцы...
Можно возразить только тем, что за ремом иногда код вставляют, и он теоретически может быть таким, как привел примеры Бармалей. Но и здесь я вам скажу: "Нафиг это делать?" Код в бейсик программу можно вставить и более корректными способами. Такими извратами можно любой интерпретатор за яйца схватить. Вот только надо ли это делать?
Последний раз редактировалось GriV; 24.01.2009 в 08:41. Причина: Добавлено сообщение
Клон, я не совсем пойму твою мотивацию к этому спору, конечно... Вопрос выеденного яйца не стоит, а такую дискуссию развели.
Я считаю, что это баг, потому что:
1. Во всех документациях к бейсикам, которые я в жизни встречал, всегда остаток строки после REM игнорируется независимо от наличия в нем двоеточий.
2. Синклер-бейсик ведет себя непоследовательно. В одном случае (при обычных обстоятельствах) он игнорирует все, что после рем, а в другом (NEXT, DATA, DEF FN) - нет.
3. В случае, когда бейсик не игнорирует операторы после REM (NEXT), то неправильно отрабатываются числовые константы.
4. Операторы после REM - это вполне нормальная ситуация, когда программист хочет "закомментировать" часть программы. Именно так я наткнулся на этот баг в первую очередь. Я не баги в бейсике искал, а рассчитывал, что бейсик проигнорирует закомментированный NEXT. Между прочим, это заняло некоторое время - чтобы разобраться, что происходит.
5. В бейсике-128 токены после REM могут быть, если загрузить программу, набранную в бейсике-48. И при выполнении такой программы эффекты будут те же.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я уже объяснял (пост №21, п.4), как именно у меня возникла ситуация, что после REM оказались токены, двоеточия и NEXT. Это вполне нормальный сценарий использования бейсика: закомментировать строку с помощью REM. Двоеточие перед NEXT там возникло из-за того, что NEXT не был первым в последовательности закомментированных операторов. Перед первым я двоеточия не ставил.
Очень странная и нелогичная мысль. Я создавал эту тему для того, чтобы сообщить людям о новом баге в бейсике. Ты, ведя дискуссию в этой ветке, о новых багах бейсика не сообщал, следовательно у тебя совершенно иная мотивация, чем у меня.
Последний раз редактировалось GriV; 24.01.2009 в 08:42.
Почему неправильно? Я могу комментировать программу как угодно, не так ли? Любым текстом, который можно ввести с клавиатуры, не применяя оператор POKE. В том числе я могу использовать токены. Или это где-то запрещено?
И если заявлено, что бейсик, для того, чтобы реализовать назначение оператора REM, игнорирует любой текст после него - а на самом деле этого не делает - то что это, как не баг?
Для проявления бага достаточно наличия последовательности ":NEXT" после REM. Если программист специально не стремится получить осмысленную демонстрацию бага, а наткнется на него случайно, то скорее всего получит сообщение "C Nonsense in BASIC", но даже это является ненормальным, особенно если после такого комментария стоит "законный" оператор NEXT.
И использования комментариев (в любом языке программирования) с целью временного отключения кусков кода - это настолько давно возникшая практика, что предусматривается при разработке интерпретаторов и компиляторов.
наверняка этот текст поможет разобраться. ftp://ftp.worldofspectrum.org/pub/si...ssemblyThe.txt
обработка REM с #1BB2
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)