User Tag List

Показано с 21 по 30 из 180

Тема: Почему компилированный Бейсик выполняется быстро?

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Я, с высоты теперешнего опыта, понимаю, что Спектрум-бейсик, очень неэффективен.
    Где-то неэффекттивен, но улучшения предлагать надо с осторожностью. Вот я как-то думал, с высоты опыта, что могу улучшить кассетный формат без потери его устойчивости к искажениям сигнала. Казалось, что вся теория была "за". Однако практика показала, что формат FM по каким-то неведомым мне пока причинам обладает исключительной стойкостью к искажениям, достичь которой другим способом не удалось. И действительно, сегодня подобное кодирование применяется в радио-стандарте LoRa, где важна не скорость, а дальность передачи.

    И таких примеров много.
    Цитата Сообщение от SfS Посмотреть сообщение
    Реализация кучи была бы куда более быстрой.
    Быстрой - до момента достижения критической фрагментации памяти.

    Текущую реализацию можно улучшить. Но с кучами на 8-битных архитектурах надо осторожнее. На них в свое время применялись другие, хорошо забытые, трюки - например, Gap Buffer. По сути тот же стек, но 2шт. Можно сделать и больше стеков, динамически их уплотнять и разуплотнять и т.д. В общем, не кучей единой, особенно, когда памяти мало. А еще все эти красивые вещи надо разработать на ассемблере и уместить в 16К ПЗУ.
    Цитата Сообщение от SfS Посмотреть сообщение
    Алгоритмы вывода на экран линий и окружностей - тоже совсем не быстрые.
    Тут да, вероятнее всего, сказывается отсутствие интернета, соответствующей литературы, или банально времени у авторов.
    Цитата Сообщение от SfS Посмотреть сообщение
    Я не хочу нисколько умалять заслуг создателей спектрум бейсика. У них куда хуже условия были для работы, чем у меня. И технически. И сроки. И не было тогда такого обилия информации по тому, "как писать языки" и "как организовывать системы".
    Да. И при всем при этом они создали вполне неплохой бейсик. Они смогли. А мы не смогли, хотя и литературы валом, и знаний, и опыта. Мне приходит иногда идея: "А не запилить ли бейсик на современных технологиях для Спектрума?" Но дальше идеи дело не идет. А ты бы хотел запилить хороший, правильный бейсик?

    - - - Добавлено - - -

    Цитата Сообщение от SfS Посмотреть сообщение
    Изначальной проработки архитектуры ПО, позволяющей подключать например новые устройства - вообще не было.
    Кое-какая проработка была, например, нереализованные команды MOVE, ERASE, CAT, FORMAT, и едва реализованная OPEN#. Тут причина только в том, что времени не хватило. Где-то пробегало даже интервью, где Синклер или разработчики его бейсика прямо говорили, почему не закончили подсистему ввода-вывода. Как есть - так есть.
    Цитата Сообщение от SfS Посмотреть сообщение
    А как бы помогла возможность без извращений, например, добавлять новые команды в бейсик. Появилось новое устройство - бамс, добавило свою команду со своим обработчиком. Всё. Не надо перехватывать адреса обработчика ошибок и писать костыль.
    Перехват обработчика - не такой уж и костыль. Если имеешь книгу Логана и О-Хары - то написать обработчик, добавляющий в бейсик новые команды, не так уж и сложно. С API было бы не проще, разве что только "стандартнее". Я как-то развлекался добавлением в бейсик новых команд, внося изменения в ПЗУ. Удалось органично встроиться в соответствующие процедуры, но каких-то больших преимуществ, по сравнению с написанием обрабочика, этот способ не имеет.

    Более того, расширяемость некоторых библиотек на том и построена, что следует добавить в обработчик неизвестных библиотеке ситуаций свою часть для добавления функционала. Далеко ходить не надо - оконная система Windows использует этот способ.
    Цитата Сообщение от SfS Посмотреть сообщение
    Или стандартизированное API для вызова подпрограмм ПЗУ - как его не хватало.
    Не знаю, кому не хватало. Неизменность ПЗУ за все время жизни компьютера - чем не стандартизированное API? Вызывай когда хочешь и что хочешь, а не нравится - не вызывай, пиши своё. С другой стороны, любое API всегда ломается при переходе на новую версию - даже в тех проектах (напр. Windows), где обратная совместимость возведена в ранг высших ценностей.
    Цитата Сообщение от SfS Посмотреть сообщение
    Но вместо этого приходилось наворачивать костыли типа "а вот по такому адресу есть такая подпрограмма, надо сбросить эти флаги, выставить вот эти, в регистры DE надо записать нуль, а в DE' надо записать FF, иначе оно не работает" и после этих манипуляций вызывайте.
    А в чем проблема выставить регистры? Параметры надо как-то передавать, и регистры - самый быстрый способ это сделать. Большинство подпрограмм ПЗУ (LOAD, SAVE, BEEP, PLOT, DRAW, калькулятор и мн. др.) были вполне себе изолированы и не требовали предстартовой подготовки.
    Цитата Сообщение от SfS Посмотреть сообщение
    Следствие этого - ошибки не исправлялись никогда практически (например, в "калькуляторе" их немало). Ибо Клайв очканул, что будет "несовместимость".
    Не факт, что именно из-за этого. В Spectrum +2 и Spectrum-128 в прошивку было внесено немало изменений, и никто не очканул. Возможно, дело было просто в деньгах. Зачем вкладывать деньги в исправление ошибок, если эти ошибки незначительны по своим последствиям и не влияют на популярность продукта и его продажи?
    Цитата Сообщение от SfS Посмотреть сообщение
    Другое следствие - миллион велосипедов, чтобы обойти ограничения бейсика. Наверное каждый писал свой ПРИНТ и свой ИНПУТ.
    А универсальный принт, одинаково полезный для всех, не сделаешь. Одному покажется, что в принте мало функций; другому покажется, что он медленно работает; третьему хочется перетереть системные переменные, а без них принт не работает. Писали своё либо тогда, когда имеющееся не подходило, либо просто для развития.
    Цитата Сообщение от SfS Посмотреть сообщение
    А ведь такое гениальное решение, как аналог sprintf() в языке C позволило бы избавиться от кучи разных "принтов".
    Не позволило бы. Даже sprintf подходит не всегда и не всем, особенно, если нужно выжать последние крохи по быстродействию.
    Цитата Сообщение от SfS Посмотреть сообщение
    В некоторых местах - вообще ни логики ни смысла. Например, если мы рисуем круг или линию, часть которой выходит за экран - то "Out of Range". А ПОЧЕМУ?!
    А потому, что идеология бейсика (не только на Спектруме) всегда была в том, чтобы останавливать программу при малейшей ошибке, а не продолжать ее выполнение, как к тому привыкли Сишники.

    Кому-то это неудобно, зато обеспечивается полная проверка корректности программы во время исполнения. Я бы с удовольствием имел интерпретатор Си, который валится при любом Undefined Behavior. Для отладки и тестов бы использовал. Но такового нету.

    Помню, что мои бейсик-программы тех времен были достаточно надежные, чтобы не вылетать по ошибкам. Неудобства доставляло только нажатие пользователем клавиши Break и ошибки ввода-вывода. Но для их перехвата были специальные средства. Кто хотел - тот имел.
    Цитата Сообщение от SfS Посмотреть сообщение
    Что мешает нарисовать часть линии, которая видна? Безо всяких ошибок? В чём именно ОШИБКА, если часть круга вылазит за экран?
    Ошибка в том, что поступившая от пользователя команда - нарисовать нечто за пределами экрана - не может быть исполнена. Классический отказ. Падать в случае его возникновения допустимо. Особенно учитывая роль бейсика как обучающего языка. В мои времена все бейсики вели себя так.
    Цитата Сообщение от SfS Посмотреть сообщение
    Об ошибках бейсика. Нет вообще средств их перехвата и обработки.
    Стандартных средств нет, но наколхозить свои было чрезвычайно легко, учитывая легкость перехвата RST 8. В журналах и других источниках была куча маленьких подпрограмм в кодах "ON ERROR GOTO", позволявшие обрабатывать ошибки. Но поверь, не нужно это было так уж сильно. Если программа написана надежно - в ней не будет возникать ошибок, она не будет падать. Не надо делить на нуль - и все будет в порядке. А написание обработчиков ошибок - что для новичков, что для профессионалов - трудная задача. Слишком многое надо предусматривать. И отлаживать программу с обработчиком ошибок тяжело. Вот зациклился твой обработчик - что делать? Жать ресет, а потом грузить все заново с кассеты? Такое себе удовольствие.

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

    Не надо это. Я не встречал в серьезной литературе ни одного описания или реализации численного алгоритма, который бы полагался при нормальной работе всякие Inf и NaN.

    Не всякая бесконечность равна другой. Это только на первый взгяд заманчиво вычесть из Inf 1000 и убедиться, что остается Inf. А если умножить ее на нуль? А если прибавить -Inf? Не все аспекты математической бесконечности удается реализовать с помощью значения "Inf". Поэтому на него и не полагаются.

    Если при работе численного алгоритма возникают Inf, NaN, или просто очень большие числа - то это не означает ничего хорошего. Либо в реализации ошибка, либо недопустимые исходные данные. В таком случае, чем раньше ошибка будет обнаружена, а программа - остановлена, тем легче ее наладить. А не разбираться потом, на каком этапе вычислений произошло переполнение, и почему массив выходных данных заполнен NaN.

    А отлаживать численные методы - поверь, трудная задача. Этому нельзя научиться по книжкам, обучающим просто программированию. Мне пришлось на опыте выработать ряд специальных приемов для такой отладки. Может быть, кто-то уже написал соответствующую книжку, но я таковых пока не встречал.
    Цитата Сообщение от SfS Посмотреть сообщение
    Если пытаются сложить число и строку - то правила наподобие тех, как в javascript.
    Как раз с неделю назад смотрел видео с критикой различных языков программирования, там отдельный раздел был посвящен "интуитивным" правилам сложения различных несовместимых типов в Javascript. Как то некоммутативность такого сложения и неочевидность, почему получился тот или иной результат. На мой взгяд, такие вещи не способствуют обучению начинающих.
    Цитата Сообщение от SfS Посмотреть сообщение
    Недаром, всё это вошло потом в мега- бета- бейсики. Ибо очень надо было многим.
    Или казалось, что надо. Я как-то не встречал больших и красивых проектов на этих бейсиках. Правда, не искал специально.

    Большие и красивые проекты создавались на ассемблере. А там нет проблем с остановом программ по ошибке. Есть только проблемы с перепахиванием памяти и наступлении сбоев, которые потом трудно отследить. Благо только, что не было Undefined Behavior, а то бы многие программисты были доведены до белой горячки.
    Цитата Сообщение от SfS Посмотреть сообщение
    В общем, с высоты теперешнего опыта (более четверти века микроконтроллеров и линукс-систем) я понимаю, как примитивно и неказисто выглядит бейсик спектурма. И дело не в том, что "памяти мало, а проц на 3.5мгц", а в том, что делалось быстро и лишь бы сделать. Увы, это так.
    Так, да не так. Во-первых, я привел выше возражения. Во-вторых, этот бейсик вполне неплохо работал. А в-третьих - что мешает сделать свой, хороший бейсик, с блекджеком и шл.?

    Этот пользователь поблагодарил Barmaley_m за это полезное сообщение:

    vlad-kras(16.11.2023)

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

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

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

Похожие темы

  1. Ответов: 47
    Последнее: 02.02.2021, 14:06
  2. Как быстро летит время.
    от Mick в разделе Новости
    Ответов: 18
    Последнее: 25.02.2020, 08:43
  3. Почему Спектрум-бейсик такой медленный?
    от mmxdmv в разделе ZX Концепции
    Ответов: 53
    Последнее: 07.07.2018, 19:39
  4. Как быстро добраться до мыши?
    от TomCaT в разделе Для начинающих
    Ответов: 38
    Последнее: 02.03.2010, 11:00
  5. Быстро переместить 384b
    от Aprisobal в разделе Программирование
    Ответов: 6
    Последнее: 23.01.2005, 15:23

Ваши права

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