Тест 8-ферзей на Ардуино-BASIC недокомпьютере
Сделал тест бенчмарка 8-Ферзей на ардуино-шилде:
1 A=8 2 B=0 3 C=0 4 DIM Q(9) 5 C=C+1 6 Q(C)=A 7 B=B+1 8 D=C 9 IF (D-1)<=0 THEN GOTO 24 10 D=D-1 11 R=Q(C)-Q(D) 12 IF R>=0 THEN GOTO 15 13 T=-R 14 GOTO 16 15 T=R 16 Y=C-D 17 IF R<>0 AND Y<>T THEN GOTO 9 18 B=0 19 Q(C)=Q(C)-1 20 IF Q(C)<>0 THEN GOTO 9 21 C=C-1 22 Q(C)=Q(C)-1 23 GOTO 20 24 IF B<>1 THEN GOTO 7 25 IF C<>A THEN GOTO 5 26 PRINT Q(1);Q(2);Q(3);Q(4) 27 PRINT Q(5);Q(6);Q(7);Q(8)
Результат: 3.4 секунды.
Это означает, что Ардуино-недокомпьютер примерно в 2.2 раза быстрее МК161 и находится между TI-NSpire и HP-48GX (последний под кросс-компилятором GCC... WHAT?!!):
- 4.20 TI-Nspire CAS Formula / List / OS 1.3
-
- 4.18 DM-42 Keystroke / RPN
-
- 3.90 TI-Nspire Formula / List / OS 1.3
-
- 3.37 HP-48GX HP48XGCC / Structured / Cross Compiler
-
- 3.30 HP-200LX QBasic 1.1 / DEFINT / Bytecode
- Vitasam's blog
- Log in or register to post comments
- 11829 просмотров
Комментарии
Ардуино-бейсик против МК-161
Permalink
По даташиту, микроконтроллер МК-161 выполняет машинный цикл за четыре такта, то есть его быстродействие при 22МГц порядка 5,5 млн. оп./с а микроконтроллер ардуины выполняет машинный цикл за один такт и на тактовой частоте 16МГц его быстродействие как раз 16 млн. оп./с. Итого 16/5,5=2,91, теоретически твой микрокомпьютер должен быть быстрее МК-161 почти втрое. Поскольку прошивка МК-161 написана на чистом ассемблере, а микрокомпьютера на gcc(?), то получается, эффективность кода на уровне 75% от ассемблерного при на порядок меньшей трудоёмкости написания. Однозначно респект!
Сайт
Бэйсик на GCC, да
Permalink
Хотя сравнение не совсем честное - все-таки в МК161 двоично-десятичная арифметика, а тут обычный Float.
Но, тем не менее, компилятор против ассемблера :)
Есть и одноцикловая массовка 8051
Permalink
например такой кристалл Nuvoton https://direct.nuvoton.com/ru/n76e003at20
(бывший Winbond)
8051
Permalink
Почти в 2 раза меньше флеша и в 2 раза - оперативки (по сравнению с atmega368p).
Бэйсик этот не влезет
BASIC не влезет, Каллисто поместится
Permalink
Ядро Каллисто должно влезть. Шитый код, конечно, должен считываться из внешней памяти.
Бейсик не самый лучший язык для карманной машинки. МК-85 позволял писать программы, и я это делал, но такого энтузиазма не вызывал. Слишком уж расточительно расходуют длинные ключевые слова Бейсика крохотный экранчик ПМК. Логика программы видна только на настольном мониторе, это не компактный язык.
Компактный не значит ... компактный
Permalink
Сам язык МК и даже Форт имеют компактные слова, но низкий уровень абстракции не позволяет компактно записывать алгоритмы. Например Бейсик имеет спец. синтаксис и вообще понятие массивов, в том числе многомерных. Насколько дольше париться на низкоуровневом языке!
Уровни строятся
Permalink
В Форте массивы есть. Уровень Форта меняется — начиная от уровня Бейсика и подстраиваясь под задачу. Бейсик же деревянный. Как начал с уровня массивов, так и сиди на нём до конца решения задачи.
Для тех, кто умеет программировать (в том числе меня) это значительное преимущество. Де факто задачи решаются за логарифм времени — выразительность используемых языковых конструкций растёт экспоненциально.
В данном случае(+)
Permalink
BASIC - это "тёплый ламповый" аспект карманного 8-битного компьютера на батарейке. Тёплость и ламповость тут ключевые слова. Входной порог Бэйсика на уровне плинтуса, по сравнению с Фортом.
С этим никто не спорит, Барсик для юзеров лопоухих - вещь!
Permalink
В конце концов практически все простые вычислительные устройства вроде 8-битных бытовых компов или калькуляторов снабжались в первую очередь Барсиком. Другой вопрос, если за клавиатурой не тупой непрограммирующий юзер, а человек умеющий строить уровни абстракций, ему то в рамках Барсика будет тесновато.
Васик
Permalink
Несомненно! И тогда такой продвинутый человек сделает новый шилд на основе esp32 или stm32 и запортирует туда что угодно :)
Только для настольных ПК
Permalink
Повторюсь. Новичкам Бейсик хорош по двум причинам. 1. Много литературы и старших товарищей. 2. 20-25 строчек экрана, позволяющих видеть несложные алгоритмы без утомительного для новичков скроллинга.
Второй пункт на экранчике в 1-2 строчки не получается. И даже 128x64 не позволяет новичку так удобно программировать на Бейсике, как десктоп.
Каллисто специально разработана так, чтобы полноценное определение слова размещалось на одном экране полностью. А то и несколько таких определений! Храним заветы Трохименко. Слова тоже короткие. Например, точка (одно нажатие) вместо PRINT (пять нажатий, а кнопки ещё искать надо).
Смотря с чем сравнивать
Permalink
Когда у меня в свое время появилась МК85, то ПМК был задвинут в очень дальний ящик сразу. Одна строчка Бейсика была удобнее, чем ассемблерный индикатор ПМК.
Индикатор
Permalink
Индикатор удобней, не спорю. А программы писать для МК-85 мне в своё время не понравилось. Слишком пресно и скучно. Я искал развитие языка в сторону Форта, ещё в то время. Чтобы можно было определять новые слова — и тут же их использовать.
Однокнопочный ввод команд :)
Permalink
Тогда компромиссом будет однокнопочный ввод команд как в Спектруме:

Сайт
Это в планах, если (+)
Permalink
удастся прикрутить SPI SRAM для нужд бейсика (освободится как минимум полкило оперативки)
Спектрум
Permalink
Меня клавиатура Спектрума бесила. После Ямахи счёл её крайне неудобной. Хотя и написал с её помощью достаточно сложную программу.
Множество клавиш с четырьмя-пятью смыслами это плохое решение. У нас и так на клавишах висят русские и английские буквы двух размеров, а в случае калькулятора ещё и цифры. При подходе Спектрума и МК-85 появляются ключевые слова FOR LIST PRINT — в Каллисто же написано на клавише «:», и она вводит слово «:». Разгружает клавиатуру и голову. Главное же, что PRINT занимает на скромном индикаторе ПМК больше места, чем точка — как его не вводи.
BASIC имеет право на существование, особенно для привлечения новичков. Им кажется, что на Бейсике будет просто программировать. Но на Каллисто вводить новый код и просматривать уже существующий быстрей и удобней, язык специально разрабатывался под калькулятор.
Ватник тут настойчиво впиаривает, что Форт это якобы «низкий уровень». Но это лишь от поверхностного знакомства с Фортом. Логика «что для меня сложно, то низкий уровень». На деле же сложно всё, что не изучал. Форт требует меньше времени на изучение, чем Бейсик, и проще в использовании. А когда вкладываешь больше сил в изучение Форта — он предоставляет больше возможностей, чем другие языки программирования.
Я не "впиариваю", это так и есть
Permalink
Форт мне нравится потому что он является метаязыком, который можно надстраивать. Но сам по себе он ОБЪЕКТИВНО является языком низкого уровня, причём довести его до уровня большей части высокоуровневых языков без существенной мутации его среды выполнения не получится (вряд ли на галимой реализации Форта вы сделаете полноценный Хаскель :-)
Как правило языки низкого уровня в умелых руках предоставляют "больше возможностей", чем другие языки программирования, потому что на языке низкого уровня вы как правило можете сделать ЧТО УГОДНО, но не на каждом высокоуровневом языке можно написать DOOM или СУБД. К сожалению вопрос применения метаязыков с выращиванием необходимых абстракций за >40 лет существования Форта и других расширяемых языков остаётся уделом горстки энтузиастов.
В этом для ПМК мечты как бы шанс на некую новизну и самобытность :-) Только юзеру и даже программисту из коробки хотелось бы уже дать выращенный уровень повыше базового Форта. Чтоб ему не пришлось самому изобретать: строки, массивы, матрицы, структуры, динамические сложные древообразные структуры (управление памятью и удобное представление) и т.д.
это ортогональное свойство
Permalink
Язык не обязан быть низкоуровневым, чтобы быть метаязыком. Бейсик (классический) конечно же дубовое гамно, но может хорошо пригодиться как уровень какого то метаязыка, который к тому же можно нарастить.
Конечно нет
Permalink
и где та грань отнесения языка к низкоуровневым или нет :)
http://my-cellar-door.blogspot.ru/2005/08/forth.html Кратко о плюсах языкового Форт подхода.
P.S. И как тогда понимать "мета" свойства для Бейсик языка?
У классического Бейсик языка нет мета свойств
Permalink
Все языковые конструкции и семантика жёстко вмонтированы в Бейсик, никаких мета свойств у него нет. То есть у него нет языковых конструкций позволяющих изменять или дополнять сам язык. Метаязык, это язык, позволяющий перепрограммировать его синтаксис и семантику - например реализовать встроенный Пролог или добавить новую конструкцию организации цикла, специальную объектную систему и т.д. и т.п.
Я знаю только два хорошо известных языка, способных на это в полной мере - Forth и Lisp (может быть Nemerle и другие языки с процедурными макрами могут ???).
Даже JavaScript и Lua не смотря на крайнюю гибкость не позволяют внести встроенный язык внутрь своего синтаксиса.
Зачем тогда себе же противоречить?
Permalink
И даже смещивать понятия гибкости языка с низкоуровневостью.
По поводу "высокоуровневых" элементов языка, как строки, массивы, ООП и.т.д.
В Форт достаточно шаблонно и просто это всё можно добавить,
хотя не уверен, что ООП нужна в калькуляторном вычислителие и системы контекстов словарей будет недостаточно.
P.S. Большие проекты (подобные Wn32Forth и др. Форт системам), а также всевозможный полезный код на них
не характеризует Форт язык, как только для чтения. Даже на ассемблере с его макросистемой создают и поддерживают сложный код.
И где тут противоречие ?
Permalink
высоко(низко)уровневость языка и его гибкость - вообще не связанные (ортогональные) категории.
"Всё можно добавить" - это не то же самое "поставляется стандартно из коробки в отлаженном виде". Вот вам машкод и мучайтесь с ним для написания современной версии DOOM, может быть вам повезёт и слепите пол компилятора Си (или даже С++) и на нём допишете свою нетленку раньше чем вас разобьёт старость. :-)
Большие проекты на Форте ??? Это наверное в той всленной где R2D2 и C3PO (недаром Йода говорит как фортер :-) Но в нашей вселенной больших проектов на Форте ещё никто не смог сделать. "Wn32Forth" - это сама среда Форта ? :-)
Никто и не говорит, что Форт это язык только для чтения, но по объективным причинам он к нему стремится со страшной силой :-) На ассемблере СОЗДАВАЛИ когда то и поддерживали относительно сложный код, но скорее всего небольшой по функционалу и объёму, ибо экономически не обоснованно тратить время больше чем на 20% кода программы, который представляет собой главный затык по производительности. Сегодня вообще не понятно зачем это кому то может понадобиться ??? Нормальный человек и ядро ОС не станет писать на ассемблере. Это означает, что писать всю систему на Форте будет только маньяк, для того чтобы он стал пригодным для больших проектов надо его нарастить до более высокоуровневого языка, будет ли он по сути Фортом - это большой вопрос !
А если подчеркнуть суть, то камень вовсе не в огород Форта и вообще не о холиварах. Вопрос в том, как должен выглядеть некий идеальный язык для ПМК(ЭКВМ), который бы сходился и для низкоуровневых вещей и мог быть наращен до пользовательского уровня ? Такой пример есть, очень близкий к Форту - это SysRPL -> UserRPL, но там из-за нехватки ресурсов и другим причинам сделали слишком специфические языки со страшными тараканами в голове :-)
Хотелось бы подъёма плавнее типа: Форт -> Форт помощнее с батарейками -> Почти уже не Форт для программистов платформы (смахивающий на Лисп и др.) -> Могучий числодробильный юзерский язык аля Matlab -> Созданный юзером DSL
Что есть строки?
Permalink
в Форте можно, например, записать и так "частный" случай сравнения двух строк вместо использования стандартного слова compare.
\ ( adr len - adr len flag ) исходная строка остаётся для последующего сравнения.
over @ [ s" xxxx" drop @ lit, ] =
те 4-е байта сравнимой строки извлекаются как число и сравниватся с четыремя байтами-литералом шаблона.
P.S. Сколько ещё "хаков" можно изобразить с помощью Форт? :)
Полезна к прочтению "Способ мышления - Форт язык и философия для решения задач" Добавил к книгам о Форт в Web архив хранилище https://archive.org/details/Broudie2 по Форт языку.
Строки есть - маст хэв конструкция, которая должна быть
Permalink
...встроена в язык с чётко понятной библиотекой операций над ними. В идеале язык должен иметь понятие "последовательности" и обобщённые конструкции итераций по ним, куда должны входить и строки. Речь не идёт о языках, предназначенных для чётко заточенных операций, например если язык только для числодробления, там строки конечно не нужны.
Здорово получилось.
Permalink
Удивительно быстро.
Особенно клавиатура классная.
www.avl.by
Спасибо! Клавиатура
Permalink
не самая удобная, но допустимый компромисс между бюджетностью и удобством. Хотя кнопки надежные.
А скорость Бэйсика угу, порадовала.
ArduinoBASIC, издание 2е, исправленное и дополненное
Permalink
Несмотря на успешность портирования Ардуино-Бейсика на STM32 восьмибитность AVR-ок всё-таки притягивает. Вдобавок в мусоре нашлась вполне рабочая PS2 клавиатура маленького формата (что-то индустриальное от приборов). Уровень тёплой ламповости от набора Бейсика на такой клавиатуре (по сравнению с кнопками на вышеупомянутой stm32 самоделке) зашкаливает :)
В общем, возвращаюсь к истокам:

Если влезет в atmega328p, то хотелось бы еще SD-карточку. И батарейный отсек на две "АА" батарейки. И напечатать корпус на 3д принтере. Вот только нет никаких идей о возможном форм-факторе.

Клавиатура
Permalink
О, у меня тоже подобная клавиатура есть, только бытовая, мини-фактор.
PS2 клавиатура
Permalink
С PS2 клавиатурами удобно работать из Ардуины - всю "черную" работу делает контроллер самой клавиатуры. Ардуина получает скан-код. Библиотека не очень большая. Работать с ней легко:
В ардуину идет два провода (не считая +5V, GND)
Клавиатура через RS-232
Permalink
А через последовательный порт МК-161 удобно будет? Каллисто полноразмерная клавиатура не помешает.
Не уверен, но (+)
Permalink
Не уверен. К Raspberry Pi, к порту Rx, клавиатуру цепляли:
https://sites.google.com/site/mincepi/m2pi
Но там linux kernel module модифицирован для поддержки - PS2 протокол не UART протокол, стандартное UART железо, может, не сможет принимать.
Увы, поддержка SD не влезает
Permalink
Попробую уйти от Ардуино IDE в чистый avr-gcc. Из спортивного интереса не хочется переползать на stm32
UPDATE: полный комплект хотелок (этот Бейсик с плавающей точкой и полноценная SD-карточка) не влезают в ардуину и в avr-gcc.
Подфорум по калькуляторам на zx.pk
Permalink
https://zx-pk.ru/forums/95-programmiruemye-kalkulyatory.html
P.S. Литература по ZX-Spectrum https://vtrd.in/book.php