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

User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 44

Тема: Нашел новый баг в бейсике

  1. #21
    Guru Аватар для Addison
    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    то что это, как не баг?
    По большому счету баг.

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    В том числе я могу использовать токены. Или это где-то запрещено?
    Если ты не будешь извращаться, то после REM ты по наставлению интерпретатора будешь вводить литеры. Чтобы его наколоть, ты ставишь разделитель ":", объясни зачем ты это делаешь?
    Если ты считаешь, что разрешено ремарить готовые строки, то вызывай строку на редактирование, ставь в начало курсор, жми rem, потом вводи, если не выдаст ошибку, то я рад за тебя, пользуйся, если интерпретатор выдаст ошибку, значит ремаринье строк штатно не было задумано.
    В 48к я не пробовал, в 128к ремаринье работает, тот пример, который я приводил ранее с DATA, я проверил, ввел сначала строку без рем, при этом набрал буквами data, затем при вводе «оно» исправилось на токен DATA, после чего я вызвал на редактирование и заремарил. Программа штатно работала, бага не было, можешь проверить.

    Добавлено через 1 минуту
    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    И использования комментариев (в любом языке программирования) с целью временного отключения кусков кода - это настолько давно возникшая практика, что предусматривается при разработке интерпретаторов и компиляторов.
    но бейсик 48к очень давно делался...

    Добавлено через 2 минуты
    Цитата Сообщение от goodboy Посмотреть сообщение
    я наглядно объяснил как можно напечатать - вот и всё
    Зачем, ведь понятно было, что речь идет о штатном наборе. Зачем флуд разводить?
    Эта поправка из разряда ненужных.
    Последний раз редактировалось Addison; 19.01.2009 в 20:35. Причина: Добавлено сообщение

  2. #22
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Клон Посмотреть сообщение
    ведь понятно было, что речь идет о штатном наборе.
    извини я не понимаю что такое штатный набор ??? какие критерии ???

  3. #23
    Guru Аватар для Addison
    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Бармалей Посмотреть сообщение
    с целью временного отключения кусков кода
    Куски кода всегда отключались при помощи введения дополнительной строки goto. Для интерпретатора - это логичнее, просто перескакиваешь. А так как ты написал обычно делают в компиляторах, там и оператора такого нет, просто в скобки фигурные берешь и всё...

    Добавлено через 1 минуту
    Цитата Сообщение от goodboy Посмотреть сообщение
    какие критерии ???
    хотя бы не набирать ненужные токены только ради того, чтобы сменить курсор.
    Курсор либо сам меняется, либо его меняют нажатием специальных клавишь, думаю ты знаешь, как это делается.

    Добавлено через 9 минут
    Цитата Сообщение от Клон Посмотреть сообщение
    В 48к я не пробовал
    Попробовал, спокойно все ремариться, не нужно просто лепить двоеточие.
    Бармалей, ты просто провоцируешь интерпритатор на ошибку, иногда бейсик это двоеточие кушает...
    Последний раз редактировалось Addison; 21.01.2009 в 21:12. Причина: Добавлено сообщение

  4. #24
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Клон - я тут заметил, что ты довольно причудливым образом меняешь свое мнение. Поначалу (при первом прочтении сообщения) ты говорил вот это:

    Цитата Сообщение от Клон Посмотреть сообщение
    Цитата:
    Сообщение от Barmaley_m
    И использования комментариев (в любом языке программирования) с целью временного отключения кусков кода - это настолько давно возникшая практика, что предусматривается при разработке интерпретаторов и компиляторов.

    но бейсик 48к очень давно делался...

    Цитата Сообщение от Клон Посмотреть сообщение
    Цитата:
    Сообщение от Barmaley_m
    то что это, как не баг?

    По большому счету баг.
    ---

    А потом (видимо, когда удалось "выжать" новые аргументы), ты сказал:

    Цитата Сообщение от Клон Посмотреть сообщение
    Куски кода всегда отключались при помощи введения дополнительной строки goto. Для интерпретатора - это логичнее, просто перескакиваешь. А так как ты написал обычно делают в компиляторах, там и оператора такого нет, просто в скобки фигурные берешь и всё...
    ---

    Это выдает, что твое внутреннее убеждение не сходится с той позицией, которую ты отстаиваешь ("что найденный мною баг - не баг"). А споришь ты, по-видимому, ради самого процесса. Ну-ну

  5. #25
    Guru Аватар для Addison
    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    что ты довольно причудливым образом меняешь свое мнение
    Правильно, потому что я разбираюсь в этой проблеме вместе с тобой.
    Я не являюсь большим знатоком бейсика, как например, ГудБой, он все знает.
    Я знаю только то, что прочитал когда-то в детстве в руководстве по бейсику и еще в некоторых книжка, да и еще поделенное это на забывчивость.
    Это форум, живое обсуждение. Цель здесь не показать, что я все знаю, а кто-то ничего не знает. Я лично не боюсь ошибиться, как некоторые тут...

    Я тебе писал одно, полагая, что возможно в Спековском бейсике REM ввели только для непосредственно ремарок. Но потом я попробовал и убедился, что строчку можно заремарить и немного изменил свой взгляд на эту проблему. Что тут плохого?
    Плохо когда люди деревянные и настаивают на своем, даже когда уже поняли, что сто раз неправы. Я к таким не отношусь, такие буратинки далеко не уходят. Я легко меняю свою точку зрения, если встречаю разумные, доходчивые аргументы.
    Последний раз редактировалось Addison; 19.01.2009 в 21:29.

  6. #26
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Посмотрев по ссылке на "полный дизассемблер ПЗУ", я могу вам сказать, где она находится. Вот в этой процедуре:

    THE 'LOOK-PROG' SUBROUTINE
    This subroutine is used to find occurrences of either DATA, DEF FN or NEXT. On entry the appropriate token code is in the E register and the HL register pair points to the start of the search area.

    1D86 LOOK-PROG

    Или, более детально, в процедуре 198B EACH-STMT, которая перебирает операторы в строке (разделенные двоеточием) и не учитывает, что если найден оператор REM, то надо возвращаться без анализа остатка строки.

    Все случаи вызова EACH-STMT, кроме тех, что в LOOK-PROG, не могут привести к "перескоку" за оператор REM потому, что номер искомого оператора берется не с потолка, а с текущей позиции выполнения (например, в случае CONTINUE и RETURN). Так что если управление изначально "не залетело за REM", то оно туда и не попадет (кроме LOOK-PROG) и еще двух случаев, описываемых ниже.

    Допустим, программа была прервана в середине строки. Если отредактировать эту строку, поставив первым в ней оператор REM, то вызов CONTINUE приведет к выполнению операторов, что стоят после REM, разделенных двоеточиями.

    Аналогичного эффекта можно добиться, если отредактировать строку, содержащую оператор GO SUB. Выполнение RETURN в этом случае может привести к выполнению кода после REM.

    Недаром во многих бейсиках ("АГАТ", "РК-86", "Специалист") оператор CONTINUE блокировался после редактирования программы. Также можно предположить (я не проверял), что принудительно очищался стек GO SUB.

  7. #27
    Guru Аватар для Addison
    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На счет бага понятно, что баг.
    Просто ты не задавался вопросом, почему его раньше никто не обнаружил.
    Просто никто так не изгалялся над REMом. Совсем не ясно, зачем было лепить двоеточие, я бы такое делать никогда бы не стал. Конечно, у всех своя психология, я люблю, чтобы все было штатно по накатанной колее, надежно по правилам. Некоторые наоборот любят поизвращаться, поэтому находят кучу багов и возятся с ним. Я оператором REM вообще никогда не пользуюсь, ибо пишу так, что все понятно без пояснений, бейсик достаточно простой язык и вполне читаем. А если уж ремарить, то делать это тоже по-человечески буквами. Если отключать строки, то вызывать на редактирование и ставить в начале оператор. В порядке залог успеха в любом деле.

  8. #28
    Banned Аватар для Black_Cat
    Регистрация
    15.06.2006
    Адрес
    S.Pb
    Сообщений
    5,791
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Barmaley_m, ну а патч-то придумаешь?

  9. #29
    Guru Аватар для Addison
    Регистрация
    07.01.2006
    Адрес
    г. Москва
    Сообщений
    3,442
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Допустим, программа была прервана в середине строки. Если отредактировать эту строку, поставив первым в ней оператор REM, то вызов CONTINUE приведет к выполнению операторов, что стоят после REM, разделенных двоеточиями.

    Аналогичного эффекта можно добиться, если отредактировать строку, содержащую оператор GO SUB. Выполнение RETURN в этом случае может привести к выполнению кода после REM.
    Это косвенно подтверждает предположение, что авторы бейсика не предполагали использовать оператор REM для заремариванья строк, чтобы их временно отключать. Этот оператор был сделан именно для написания пояснений к программе.
    Поэтому недокументированное использование оператора приводит к недокументированным эффектам.

  10. #30
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Black_Cat Посмотреть сообщение
    Barmaley_m, ну а патч-то придумаешь?
    Мне лень, да и не надо это никому. Кто сейчас пишет на синклер-бейсике?

    Если хочешь - сам сделай патч, я тебе очень точно указал на то место в ПЗУ, где находится баг. Который проявляется уже не в трех, как я изначально писал, а в пяти случаях (NEXT, DATA, DEF FN, CONTINUE, RETURN).

    Добавлено через 5 минут
    Цитата Сообщение от Клон Посмотреть сообщение
    Это косвенно подтверждает предположение, что авторы бейсика не предполагали использовать оператор REM для заремариванья строк, чтобы их временно отключать. Этот оператор был сделан именно для написания пояснений к программе.
    Я думаю, что по этим данным нельзя делать выводы о намерениях авторов. Ведь если оператор REM просто обнаруживается по ходу выполнения программы, то остаток строки игнорируется полностью, несмотря на наличие в нем двоеточий и токенов. Аналогично, после числовых констант не вставляются их двоичные "теневые копии". То есть в этих двух ситуациях оператор REM отрабатывается правильно независимо от того, поставлен ли он с целью закомментировать строку, или содержит просто текст.

    К тому же было бы нелогично для создателей бейсика как-то специально ограничивать область применения оператора REM, без всяких на то причин.
    Последний раз редактировалось Barmaley_m; 19.01.2009 в 22:07. Причина: Добавлено сообщение

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Небольшие программки на Бейсике.
    от new в разделе Для начинающих
    Ответов: 11
    Последнее: 17.07.2010, 15:45
  2. Ответов: 5
    Последнее: 03.09.2007, 02:34
  3. Border-эффект на Бейсике
    от jim в разделе Разный софт
    Ответов: 7
    Последнее: 18.04.2007, 21:50
  4. Багу нашёл!
    от fk0 в разделе Форум
    Ответов: 7
    Последнее: 15.04.2007, 07:45
  5. Ответов: 3
    Последнее: 06.09.2005, 14:08

Ваши права

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