Тест 8-ферзей на Ардуино-BASIC недокомпьютере

Сделал тест бенчмарка 8-Ферзей на ардуино-шилде:
basic

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

Комментарии

По даташиту, микроконтроллер МК-161 выполняет машинный цикл за четыре такта, то есть его быстродействие при 22МГц порядка 5,5 млн. оп./с а микроконтроллер ардуины выполняет машинный цикл за один такт и на тактовой частоте 16МГц его быстродействие как раз 16 млн. оп./с. Итого 16/5,5=2,91, теоретически твой микрокомпьютер должен быть быстрее МК-161 почти втрое. Поскольку прошивка МК-161 написана на чистом ассемблере, а микрокомпьютера на gcc(?), то получается, эффективность кода на уровне 75% от ассемблерного при на порядок меньшей трудоёмкости написания. Однозначно респект!

Хотя сравнение не совсем честное - все-таки в МК161 двоично-десятичная арифметика, а тут обычный Float.
Но, тем не менее, компилятор против ассемблера :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

например такой кристалл Nuvoton https://direct.nuvoton.com/ru/n76e003at20
(бывший Winbond)

N76E003 – a 1T-8051 based series MCU, offers 18 KB Flash ROM, configurable Data Flash and 1 KB SRAM

Почти в 2 раза меньше флеша и в 2 раза - оперативки (по сравнению с atmega368p).
Бэйсик этот не влезет

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Ядро Каллисто должно влезть. Шитый код, конечно, должен считываться из внешней памяти.

Бейсик не самый лучший язык для карманной машинки. МК-85 позволял писать программы, и я это делал, но такого энтузиазма не вызывал. Слишком уж расточительно расходуют длинные ключевые слова Бейсика крохотный экранчик ПМК. Логика программы видна только на настольном мониторе, это не компактный язык.

Сам язык МК и даже Форт имеют компактные слова, но низкий уровень абстракции не позволяет компактно записывать алгоритмы. Например Бейсик имеет спец. синтаксис и вообще понятие массивов, в том числе многомерных. Насколько дольше париться на низкоуровневом языке!

В Форте массивы есть. Уровень Форта меняется — начиная от уровня Бейсика и подстраиваясь под задачу. Бейсик же деревянный. Как начал с уровня массивов, так и сиди на нём до конца решения задачи.

Для тех, кто умеет программировать (в том числе меня) это значительное преимущество. Де факто задачи решаются за логарифм времени — выразительность используемых языковых конструкций растёт экспоненциально.

BASIC - это "тёплый ламповый" аспект карманного 8-битного компьютера на батарейке. Тёплость и ламповость тут ключевые слова. Входной порог Бэйсика на уровне плинтуса, по сравнению с Фортом.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

В конце концов практически все простые вычислительные устройства вроде 8-битных бытовых компов или калькуляторов снабжались в первую очередь Барсиком. Другой вопрос, если за клавиатурой не тупой непрограммирующий юзер, а человек умеющий строить уровни абстракций, ему то в рамках Барсика будет тесновато.

Другой вопрос, если за клавиатурой не тупой непрограммирующий юзер, а человек умеющий строить уровни абстракций, ему то в рамках Барсика будет тесновато.

Несомненно! И тогда такой продвинутый человек сделает новый шилд на основе esp32 или stm32 и запортирует туда что угодно :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Повторюсь. Новичкам Бейсик хорош по двум причинам. 1. Много литературы и старших товарищей. 2. 20-25 строчек экрана, позволяющих видеть несложные алгоритмы без утомительного для новичков скроллинга.

Второй пункт на экранчике в 1-2 строчки не получается. И даже 128x64 не позволяет новичку так удобно программировать на Бейсике, как десктоп.

Каллисто специально разработана так, чтобы полноценное определение слова размещалось на одном экране полностью. А то и несколько таких определений! Храним заветы Трохименко. Слова тоже короткие. Например, точка (одно нажатие) вместо PRINT (пять нажатий, а кнопки ещё искать надо).

Когда у меня в свое время появилась МК85, то ПМК был задвинут в очень дальний ящик сразу. Одна строчка Бейсика была удобнее, чем ассемблерный индикатор ПМК.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Индикатор удобней, не спорю. А программы писать для МК-85 мне в своё время не понравилось. Слишком пресно и скучно. Я искал развитие языка в сторону Форта, ещё в то время. Чтобы можно было определять новые слова — и тут же их использовать.

Тогда компромиссом будет однокнопочный ввод команд как в Спектруме:
ZX-spectrum

удастся прикрутить SPI SRAM для нужд бейсика (освободится как минимум полкило оперативки)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Меня клавиатура Спектрума бесила. После Ямахи счёл её крайне неудобной. Хотя и написал с её помощью достаточно сложную программу.

Множество клавиш с четырьмя-пятью смыслами это плохое решение. У нас и так на клавишах висят русские и английские буквы двух размеров, а в случае калькулятора ещё и цифры. При подходе Спектрума и МК-85 появляются ключевые слова FOR LIST PRINT — в Каллисто же написано на клавише «:», и она вводит слово «:». Разгружает клавиатуру и голову. Главное же, что PRINT занимает на скромном индикаторе ПМК больше места, чем точка — как его не вводи.

BASIC имеет право на существование, особенно для привлечения новичков. Им кажется, что на Бейсике будет просто программировать. Но на Каллисто вводить новый код и просматривать уже существующий быстрей и удобней, язык специально разрабатывался под калькулятор.

Ватник тут настойчиво впиаривает, что Форт это якобы «низкий уровень». Но это лишь от поверхностного знакомства с Фортом. Логика «что для меня сложно, то низкий уровень». На деле же сложно всё, что не изучал. Форт требует меньше времени на изучение, чем Бейсик, и проще в использовании. А когда вкладываешь больше сил в изучение Форта — он предоставляет больше возможностей, чем другие языки программирования.

Форт мне нравится потому что он является метаязыком, который можно надстраивать. Но сам по себе он ОБЪЕКТИВНО является языком низкого уровня, причём довести его до уровня большей части высокоуровневых языков без существенной мутации его среды выполнения не получится (вряд ли на галимой реализации Форта вы сделаете полноценный Хаскель :-)

Как правило языки низкого уровня в умелых руках предоставляют "больше возможностей", чем другие языки программирования, потому что на языке низкого уровня вы как правило можете сделать ЧТО УГОДНО, но не на каждом высокоуровневом языке можно написать DOOM или СУБД. К сожалению вопрос применения метаязыков с выращиванием необходимых абстракций за >40 лет существования Форта и других расширяемых языков остаётся уделом горстки энтузиастов.
В этом для ПМК мечты как бы шанс на некую новизну и самобытность :-) Только юзеру и даже программисту из коробки хотелось бы уже дать выращенный уровень повыше базового Форта. Чтоб ему не пришлось самому изобретать: строки, массивы, матрицы, структуры, динамические сложные древообразные структуры (управление памятью и удобное представление) и т.д.

Язык не обязан быть низкоуровневым, чтобы быть метаязыком. Бейсик (классический) конечно же дубовое гамно, но может хорошо пригодиться как уровень какого то метаязыка, который к тому же можно нарастить.

и где та грань отнесения языка к низкоуровневым или нет :)

http://my-cellar-door.blogspot.ru/2005/08/forth.html Кратко о плюсах языкового Форт подхода.

P.S. И как тогда понимать "мета" свойства для Бейсик языка?

Все языковые конструкции и семантика жёстко вмонтированы в Бейсик, никаких мета свойств у него нет. То есть у него нет языковых конструкций позволяющих изменять или дополнять сам язык. Метаязык, это язык, позволяющий перепрограммировать его синтаксис и семантику - например реализовать встроенный Пролог или добавить новую конструкцию организации цикла, специальную объектную систему и т.д. и т.п.

Я знаю только два хорошо известных языка, способных на это в полной мере - Forth и Lisp (может быть Nemerle и другие языки с процедурными макрами могут ???).
Даже JavaScript и Lua не смотря на крайнюю гибкость не позволяют внести встроенный язык внутрь своего синтаксиса.

И даже смещивать понятия гибкости языка с низкоуровневостью.
По поводу "высокоуровневых" элементов языка, как строки, массивы, ООП и.т.д.
В Форт достаточно шаблонно и просто это всё можно добавить,
хотя не уверен, что ООП нужна в калькуляторном вычислителие и системы контекстов словарей будет недостаточно.

P.S. Большие проекты (подобные Wn32Forth и др. Форт системам), а также всевозможный полезный код на них
не характеризует Форт язык, как только для чтения. Даже на ассемблере с его макросистемой создают и поддерживают сложный код.

высоко(низко)уровневость языка и его гибкость - вообще не связанные (ортогональные) категории.
"Всё можно добавить" - это не то же самое "поставляется стандартно из коробки в отлаженном виде". Вот вам машкод и мучайтесь с ним для написания современной версии DOOM, может быть вам повезёт и слепите пол компилятора Си (или даже С++) и на нём допишете свою нетленку раньше чем вас разобьёт старость. :-)

Большие проекты на Форте ??? Это наверное в той всленной где R2D2 и C3PO (недаром Йода говорит как фортер :-) Но в нашей вселенной больших проектов на Форте ещё никто не смог сделать. "Wn32Forth" - это сама среда Форта ? :-)

Никто и не говорит, что Форт это язык только для чтения, но по объективным причинам он к нему стремится со страшной силой :-) На ассемблере СОЗДАВАЛИ когда то и поддерживали относительно сложный код, но скорее всего небольшой по функционалу и объёму, ибо экономически не обоснованно тратить время больше чем на 20% кода программы, который представляет собой главный затык по производительности. Сегодня вообще не понятно зачем это кому то может понадобиться ??? Нормальный человек и ядро ОС не станет писать на ассемблере. Это означает, что писать всю систему на Форте будет только маньяк, для того чтобы он стал пригодным для больших проектов надо его нарастить до более высокоуровневого языка, будет ли он по сути Фортом - это большой вопрос !

А если подчеркнуть суть, то камень вовсе не в огород Форта и вообще не о холиварах. Вопрос в том, как должен выглядеть некий идеальный язык для ПМК(ЭКВМ), который бы сходился и для низкоуровневых вещей и мог быть наращен до пользовательского уровня ? Такой пример есть, очень близкий к Форту - это SysRPL -> UserRPL, но там из-за нехватки ресурсов и другим причинам сделали слишком специфические языки со страшными тараканами в голове :-)
Хотелось бы подъёма плавнее типа: Форт -> Форт помощнее с батарейками -> Почти уже не Форт для программистов платформы (смахивающий на Лисп и др.) -> Могучий числодробильный юзерский язык аля Matlab -> Созданный юзером DSL

в Форте можно, например, записать и так "частный" случай сравнения двух строк вместо использования стандартного слова compare.
\ ( adr len - adr len flag ) исходная строка остаётся для последующего сравнения.
over @ [ s" xxxx" drop @ lit, ] =
те 4-е байта сравнимой строки извлекаются как число и сравниватся с четыремя байтами-литералом шаблона.

P.S. Сколько ещё "хаков" можно изобразить с помощью Форт? :)
Полезна к прочтению "Способ мышления - Форт язык и философия для решения задач" Добавил к книгам о Форт в Web архив хранилище https://archive.org/details/Broudie2 по Форт языку.

...встроена в язык с чётко понятной библиотекой операций над ними. В идеале язык должен иметь понятие "последовательности" и обобщённые конструкции итераций по ним, куда должны входить и строки. Речь не идёт о языках, предназначенных для чётко заточенных операций, например если язык только для числодробления, там строки конечно не нужны.

Удивительно быстро.
Особенно клавиатура классная.

не самая удобная, но допустимый компромисс между бюджетностью и удобством. Хотя кнопки надежные.
А скорость Бэйсика угу, порадовала.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/