LINUX.ORG.RU

Метапрог-прототип, версия 7 + графические диалоги на Метапроге

 , ,


0

3

Скачать (перед запуском читайте !Русский.txt или !Українська.txt):

https://www71.zippyshare.com/v/dNcHIgzD/file.html

Новая версия принесла несколько новых фич интерфейса пользователя. Добавлено выделение прямоугольником для вырезания и копирования части диаграммы (в прошлой версии было только копирование и вставка одного блока по щелчку колесом мыши). После копирования куска диаграммы (с проводками с данными и жесткими последовательностями) его можно вставить кликом колесом мыши на пустом месте диаграммы. Есть план реализовать в будущий версиях также создание подфункций из выделенного куска - аналог Create SubVI из LabVIEW (так была сделана немалая часть функций в прототипе Метапрога).

Однако самая интересная фича новой версии - сериализация в base64 координат блока на диаграмме с цепочкой функций. Этому есть как минимум два возможных применения. Можно «ткнуть пальцем» на нужный блок (меню блоки - ткнуть пальцем на блок). Будет сгенерирована строка такого вида:

metaprog_debug:AAAAAAAAAAAAAAAHAAAAAFBUSDAAAAAEAAAAAAAAAAAAAAAAAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAU4fPk6Ov87ejqIO3gIOfg7+jy4PUAAAAK0+rw4L/t8fzq4AAAABXh8+To6/zt6Oog7eAg5+Dv8O7x4PUAAAAH0PPx8ero6VBUSDEAAAAxcmVsIAAr0LHRg9C00LjQu9GM0L3QuNC6INC90LAg0LfQsNC/0LjRgtCw0YUubXBiZBNiCtNfkRABAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAT9rPr7vfo8evu4ujpIOSz4Ovu4wAAAArT6vDgv+3x/OrgAAAAFPbl6+736PHr5e3t++kg5Ojg6+7jAAAAB9Dz8fHq6OlQVEgxAAAANXJlbCAAA25rYwAq0YbRltC70L7Rh9C40YHQu9C+0LLQuNC5INC00ZbQsNC70L7Qsy5tcGJkP/rfBI32qgEAAAADAAAAB01QTCAyLjAAAAAHTElDRU5TRQAAABDy5erx8u7i6Okg5LPg6+7jAAAACtPq8OC/7fH86uAAAAAQ8uXq8fLu4vvpIOTo4Ovu4wAAAAfQ8/Hx6ujpUFRIMQAAAC9yZWwgAANua2MAJNGC0LXQutGB0YLQvtCy0LjQuSDQtNGW0LDQu9C+0LMubXBiZFbEp7cIT2gBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAV5+Dv8/HqIOKz6u3gIE51a2xlYXIrAAAACtPq8OC/7fH86uAAAAAU5+Dv8/HqIO7q7eAgTnVrbGVhcisAAAAH0PPx8ero6VBUSDAAAAAWAAEAAgNua2MNbmtjIGluaXQubXBiZFQc/+kgVZgBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAO+PDo9PIg7fPq6+Xg8CsAAAAK0+rw4L/t8fzq4AAAAA748Oj08iDt8+rr5eDwKwAAAAfQ8/Hx6ujpUFRIMQAAADpyZWwgAANua2MAL9GW0L3RltGG0ZbQsNC70ZbQt9Cw0YbRltGPINC90YPQutC70LXQsNGAKy5tcGJkaxMcpv873AEAAAAAUFRIMAAAAAQAAAAAdcftGC2ZsAE=:metaprog_debug

Если в буфере обмена есть строка, содержащая корректную строку такого вида, то клик колесом мыши по пустому месту на любой диаграмме откроет новое окно Метапрога с первой сохраненной в файл функцией из сериализированной цепочки экземпляров функций.

Вместо тысячи слов:

https://i.postimg.cc/gd7RZD9Q/image.png

Там будет явно показан конечный блок, на который «ткнули пальцем», либо подфункция, по которой до него следует добираться.

Таким же образом можно и отлавливать баги. В новой версии реализован блок дебага, возвращающий строку, указывающую на сам этот блок. Строка с координатами блока хардкодится при кодогенерации. Эту строку можно вывести в консоль или, например, в графическом окошке с просьбой обратиться к разработчику. Пример функции, печатающей в консоль координаты места ошибки при ошибке аллокации памяти:

https://postimg.cc/hQVLBcHp

Дебаг-строку выводит оранжевый блок.

В новой версии прототипа Метапрога было исправлено множество багов. Теперь метапроговские массивы и СУВТ можно помещать под указатели и вставлять в структуры, не боясь багов. Это позволило добавить к будильнику, реализованному в прошлой версии, диалоги, запрашивающие час и минуту срабатывания будильника.

Для компиляции надо скачать https://sourceforge.net/projects/tinyfiledialogs/

Распаковать в папке с Си-файлом так, чтобы работал соответствующий инклюд.

Код:

https://pastebin.com/5NW30tQx

Введя нужное число, закрываете окошко. После ввода часа и минуты в консоль будет выведено время срабатывания. Теперь будильником можно пользоваться и для повседневных нужд (звук пронзительный, хорошо слышный, sound.wav больше не нужен), однако завершать его работу надо еще через диспетчер задач или Ctrl+C в консоли, когда не идет звук. Также нет проверки введенных чисел, если введете не то число - будильник никогда не сработает.

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

Предыдущая версия:

Метапрог-прототип, версия 6 + будильник на Метапроге



Последнее исправление: metaprog (всего исправлений: 2)

Ответ на: комментарий от abcq

поле dynamic

if (dynamic) { free() } else {}

Ооооу. Вот это технологии. Этим глупым мозилловцам с их системой владения в расте до них ещё копать и копать.

Unicode4all ★★★★★
()
Ответ на: комментарий от abcq

Ну что вы так все прямо… Это инновационная архитектура «куча говна и палок в форме шалаша» - модно, молодежно, СУВТово.

ТС искренне считает что небоскреб - это просто многоэтажный шалаш.

AntonI ★★★★
()
Ответ на: комментарий от Unicode4all

ну и еще немного о том почему ТС использует скорее всего конструкцию лабвью «если иначе», вместо простого «если» [смотреть тут] (https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P81mSAC) все в картинках, ну и спойлер, она просто менее громоздкая в плане отображения чем простая «если»

abcq ★★
()
Ответ на: комментарий от liksys

Так что мы тут наблюдаем тщательно вписанное в ландшафт помойки винтажное шале свободной планировки из биокомпозита, построенное альтернативно одаренным архитектором.

AntonI ★★★★
()
Ответ на: комментарий от saibogo

Так это даже не секрет, секрет пока посмотреть что из себя представляет остальная часть этого поделия, но ТС упорно не желает ее приводить в вид в котором никому не придется либо покупать убогий лабвью, либо его воровать.

abcq ★★
()
Ответ на: комментарий от abcq

Ну, пока что в принципе можно выехать на там, что мол это прототип, в «самом-на-себе» все будет не так. Да только сдается, что на «прототипе» сделать хотя бы компилятор вряд-ли представляется возможным. ТС, собсна, сам сомневается в такой возможности, а вот хотя бы на нормальном языке запилить не желает. Вот.

Да и в принципе даже на «текстовым» языке сделать язык без хотя бы малейшего представления о его будущей структуре вряд-ли получится. Всё-таки «базарная» модель разработки не очень подходит для такого.

Unicode4all ★★★★★
()
Ответ на: комментарий от Unicode4all

Так как он задумал свое поделие ему даже делать особо ничего не надо, лишь написать качественный транслятор из квадратов и линий в приемлемый код на С. @metaprog уже выше сам сказал что это не «язык», так что задача по сути резко упрощается, так как грамматику, синтаксис и семантику можно смело передрать с С, а там где она не устраивает нагородить небольшой фасад чтобы было удобнее пользоваться.

abcq ★★
()
Ответ на: комментарий от Unicode4all

Так то в расте тоже всегда есть else(пусть и не явный), и проверяется чтобы типы возвращаемые if и else были одинаковыми.

Если else отсутсвует, то неявно предполагается что он есть и возвращает юнит тип(по сишному - void, в расте есть сокращение для этого типа, две скобочки - «()»)

Вот нажми тут run, и почитай текст ошибки:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0d1c5083594aff6029962ddc1846d9fe

Так же если бы тут кто-то был знаком с растом, хотя бы на уровне rust book, то знал бы что в растовской системе владения есть похожая концепция как и у метапрога с dynamic. Каждому объекту компилятор добавляет bool флаг live, который устанавливается в true в момент создания объекта, и устанавливается в false в момент move. И если объект у которого этот флаг false, пытаются использовать, то тогда возникает ошибка компиляции. Так же когда объект выходит за scope, то компилятор проверяет находится ли объект в состоянии live, и если да, то вызывается деструктор. То есть для перемещенных объектов деструктор не вызывается, в отличие от С++.

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0d1c5083594aff6029962ddc1846d9fe

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Tак же если бы тут кто-то был знаком с растом, хотя бы на уровне rust book, то знал бы что в растовской системе владения есть похожая концепция как и у метапрога с dynamic. Каждому объекту компилятор добавляет bool флаг live, который устанавливается в true в момент создания объекта, и устанавливается в false в момент move. И если объект у которого этот флаг false, пытаются использовать, то тогда возникает ошибка компиляции. Так же когда объект выходит за scope, то компилятор проверяет находится ли объект в состоянии live, и если да, то вызывается деструктор. То есть для перемещенных объектов деструктор не вызывается, в отличие от С++.

Ооооу. Вот это технологии. Этим глупым мозилловцам с их системой владения в расте до них ещё копать и копать.

Разве это не одно и то же?

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

А если уж говорить по делу, есть две большие разницы между растом на котором можно писать софт, и метапрогом на котором нельзя. И качеством кода в/на Расте и в/на метапроге. Да и волшебства не существует вроде, всем понятно что подобного рода проверки они в принципе будут и есть если вы задумали представлять массив через структуру таким вот образом, другой вопрос зачем генерировать бесполезный код который еще и никак не спасет ни от каких ошибок с той же памятью, зачем вообще показывать эти наивные реализации, может быть проще сначала нормально написать этот «массив» и показывать уже код к которому вопросов не будет?

Можно прятаться за «это прототип потом будет лучше». Прототип != говнокод.

abcq ★★
()
Ответ на: комментарий от abcq

Есть ещё нюанс о котором @fsb4000 решил умолчать. Все эти игрища с флагами в расте подразумевают что САМ Раст контролирует когда вызывать free. Метапрог же ничего подобного не делает, метапрог даёт возможность воткнуть free на диаграмму руками.

AntonI ★★★★
()
Ответ на: комментарий от fsb4000

ну вот это номикон, в растбуке такого не было :)

abcq ★★
()
Ответ на: комментарий от AntonI

Есть такое, ну может станет лучше когда-нибудь ведь @metaprog же утверждает что его то поделие будет лучше С. Но хотя с другой стороны говорит что нет ничего лучше чем руками аллоцировать и подчищать память, сложно судить что именно в нем возьмет верх.

abcq ★★
()
Ответ на: комментарий от abcq

сложно судить что именно в нем возьмет верх.

Да, для этого нужен кто то из сотрудников http://serbsky.ru/

AntonI ★★★★
()
Ответ на: комментарий от abcq

А если уж говорить по делу, есть две большие разницы между растом на котором можно писать софт, и метапрогом на котором нельзя

А раст же сольет метапрогу при разработке кросплатформенного gui-приложения. У него и gui библиотеки то нету.

stasolog
()
Ответ на: комментарий от AntonI

Есть ещё нюанс о котором @fsb4000 решил умолчать. Все эти игрища с флагами в расте подразумевают что САМ Раст контролирует когда вызывать free. Метапрог же ничего подобного не делает, метапрог даёт возможность воткнуть free на диаграмму руками.

Ты не поверишь, но в метапроге тоже не нужно руками освобождать эти массивы, ты видишь if(dynamic) free на диаграмме? Там этого нету.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от stasolog

Сейчас не вспомню там была какая-то вундервафля которая вроде как бакенд использовала гл, но вообще так-то да ни в каком языке нет вроде библиотек для гуя которые так или иначе не дергают старые библиотеки которые по очевидным причинам написаны либо на с либо на с++ потому что они как языки появились раньше. Но я кажется уже об этом тоже говорил, не переписывать же теперь все на каждый новый язычок.

хотя может быть джава…

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 1)
Ответ на: комментарий от abcq

Сейчас не вспомню

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

но вообще

Оно и понятно, но это не важно, я просто говорил что у rust'a нету кросплатформенной библиотеки для интерфейсов по функционалу сравнимой с метапрогерской. И биндов к подобной библиотеке я тоже не встречал.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от stasolog

нету кросплатформенной библиотеки для интерфейсов по функционалу сравнимой с метапрогерской.

А что, нуклеар уже на метапроге переписали? С чего это нуклеар стал метапроговским?

cluge
()
Ответ на: комментарий от cluge

Там же не чистый Nuklear, а блоки поверх него. Но Nuklear на С, и это плюс метапрога что он может использовать уже готовые библиотеки.

stasolog
()
Ответ на: комментарий от cluge
  1. все, к чему прикасается метапрог становится частью метапрога, см. лицензию метапрога же.

  2. основной плюс метапрога по сравнению со всякими питонами и растами в том что «он может использовать готовые библиотеки».

Альтернативная вселенная у клоунов весьма альтернативна.

AntonI ★★★★
()
Ответ на: комментарий от stasolog

может кстати и он, ну с кружков и прямоугольников все и начинается. А простите что там есть у метапрога есть кросплатформенная библиотека? )

abcq ★★
()
Ответ на: комментарий от stasolog

Там же не чистый Nuklear, а блоки поверх него.

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

по функционалу сравнимой с метапрогерской.

Ну да, метапрог уж постарался/облажался показать весь потрясающий функционал, на примере будильника.

а блоки поверх него.

Ты с метапрогом таки разберитесь в своей богодельне, он утверждает, что метапрога напрямую будет работать с сишными библиотеками, а ты говоришь, что есть какие-то «блоки поверх него».

cluge
()
Ответ на: комментарий от AntonI

основной плюс метапрога по сравнению со всякими питонами и растами в том что «он может использовать готовые библиотеки».

Это не основной. Но плюс. Ты с чем то не согласен? Ну покажи тогда как ты используешь nuklear из python'a, или rust'a.

stasolog
()
Ответ на: комментарий от cluge

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

Нельзя, из скриптоты не подключишь nuklear просто так, с макросами, с дефайнами, с полнотой возможностей.

Ну да, метапрог уж постарался/облажался показать весь потрясающий функционал, на примере будильника.

Зато виден графический интерфейс, с полями ввода, фильтрами, вывод звука даже есть!

Ты с метапрогом таки разберитесь в своей богодельне, он утверждает, что метапрога напрямую будет работать с сишными библиотеками, а ты говоришь, что есть какие-то «блоки поверх него».

Можно использовать напрямую. Но в будильнике и моем скриншоте с простым примером используются блоки собранные с использованием nuklear'a.

stasolog
()
Ответ на: комментарий от abcq

Не, вот это

Nuklear на С, и это плюс метапрога что он может использовать уже готовые библиотеки.

однозначно в мемориз. Я аж восхитился, какое гениальное поделие сотворили ТС с Дианой! Только не надо им рассказывать про SWIG и всякое такое.

AntonI ★★★★
()
Ответ на: комментарий от stasolog

Нельзя, из скриптоты не подключишь nuklear просто так, с макросами, с дефайнами, с полнотой возможностей.

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

cluge
()
Ответ на: комментарий от AntonI

Клоун, я знаю про SWIG. Если таким умным себя считаешь, иди на GitHub страницу Nuklear, переходи в секцию «Bindings» и пиши авторам репозиториев что они дворники необучаемые, так как биндинги у них не полные, а делаются они элементарно ведь. Да? Один я же не знаю как правильно. Скажешь потом что тебе они ответили.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от cluge

Вот метапрог от этой рутины и избавляет, заодно от чтения мануалов, все скучное выбрасывается нафиг. А ведь библиотека может быть большая, а не какой нибудь Nuklear, и макросов быть может много.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от stasolog

Вот метапрог от этой рутины и избавляет

А метапроговские блоки, использующие нуклеар, видимо, сами по себе появились.

cluge
()
Ответ на: комментарий от stasolog

Даже сайт запилили растовцы:

https://areweguiyet.com/#ecosystem

Лично мне там нравится: https://github.com/hecrj/iced

Функциональный UI, как в Elm и Fabulous…

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от stasolog

Не неси дичь

Какая разница для чего эти блоки. Не кипятись, ответь на вопрос.

для чего эти блоки

Эти блоки сами по себе появились? Или их кто-то сделал?

cluge
()
Последнее исправление: cluge (всего исправлений: 1)
Ответ на: комментарий от cluge

Они были сделаны метапрогом. Рассмотрим некоторые блоки, вот например nkc_init, он нужен для объединения nkc_init и nkc_set_main_loop в одну функцию, так как между ними обычно ничего вызывать все равно не надо. Есть еще числовой индикатор, там просто sprintf + nk_label. То есть все что есть - комбинирует уже готовое, самому добавлять макросы не нужно как в питоне, или расте, или другом язычке.

stasolog
()
Ответ на: комментарий от fsb4000

ну да, документируют все, сайты пишут, молодцы кстати.

abcq ★★
()
Ответ на: комментарий от fsb4000

Я уже смотрел, по готовым виджетам Nuklear всех обгоняет.

stasolog
()
Ответ на: комментарий от stasolog

Они были сделаны метапрогом.

То-то же. Ну и где избавление от рутины.

так как между ними обычно ничего вызывать все равно не надо

А если вдруг понадобится? Снова новый метаблок пилить?

он нужен для объединения nkc_init и nkc_set_main_loop в одну функцию

Ну охренеть аргумент. Условный ЯП: func nkc_run() { nkc_init(); nkc_set_main_loop(…); } – вот это фокус, это блин достижение, охренеть, сделать функцию, которая последовательно вызывает две функции.

Есть еще числовой индикатор, там просто sprintf + nk_label.

Как он смог, он же семейство функций printf вообще не признает?

То есть все что есть - комбинирует уже готовое…

В чем здесь новизна? В том, что это все проводками и квадратиками делается?

Как метапрога избавит условного метапрог-программиста от чтения мануалов по Сишной либе, когда ему понадобится использовать Сишную либу? Методом тыка? Ну да, можно конечно, но получится очередной «будильник метапрога».

cluge
()
Ответ на: комментарий от abcq

Были проблемы с открытием второго окна, после SDL_Quit события уже не словишь, даже после вызова SDL_Init. Решилось временным хаком, из за него и проблемы.

stasolog
()
Ответ на: комментарий от cluge

Возможно, появился новый локальный мем ЛОРа: будильник метапрога.

cluge
()
Ответ на: комментарий от cluge

То-то же. Ну и где избавление от рутины.

Я показал где. Эти блоки это новая библиотека считай, библиотека виджетов. В метапроге можно просто взять и подключить Nuklear, не нужно что то дописывать или переписывать. В %скриптоте% нужно было бы сначала обернуть все функции работающие с указателями и строками, потом реализовать самому заново все макросы, и только потом делать вот эти блоки, с числовым индикатором и так далее.

А если вдруг понадобится? Снова новый метаблок пилить?

Берешь nkc_set_main_loop и nkc_init, и делаешь как тебе надо. Их можно взять без всяких оберток.

Ну охренеть аргумент. Условный ЯП: func nkc_run() { nkc_init(); nkc_set_main_loop(…); } – вот это фокус, это блин достижение, охренеть, сделать функцию, которая последовательно вызывает две функции.

Да, жаль что питон в такое не может.

Как он смог, он же семейство функций printf вообще не признает?

Ее сделал я, хотя возможно он переделал этот блок без sprintf.

В чем здесь новизна? В том, что это все проводками и квадратиками делается?

Скачай да посмотри. Если не хочешь, то жди, я как нибудь распишу все, или ОП...

Как метапрога избавит условного метапрог-программиста от чтения мануалов по Сишной либе, когда ему понадобится использовать Сишную либу? Методом тыка? Ну да, можно конечно, но получится очередной «будильник метапрога».

Думаешь я много мануалов по nuklear'у прочел?

stasolog
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.