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)
Ответ на: комментарий от AntonI

ну судя по тому что этот идрис с первых предложений своего мануала упоминает хаскель, это скорее какой-то его вариант, но такой чтобы это было похоже на языки условного энтерпрайза, поправьте меня если я ошибаюсь. Думаю тут понятия n и m как контекста куда более объемные чем просто размерность векторов, думаю это просто как пример частного значения этого контекста.

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

Дык не так много есть актуальных параметров типа, что бы делать из этого какую то сложную науку… ща буду уподобляться ТС-у с Дианой;-)

Не, может это все как то очень круто и глубоко, и я просто в силу своей безграмотности не могу оценить;-(

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

Ну мне тоже сложно сказать, надо прочитать мануал. Но по беглому взгляду синтаксис очень напоминает хаскель, про хаскель говорят в самом начале… а я ведь еще та уточка, как по мне это какая-то вариация на хаскель, но со своим блекджеком :)

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

Да фик бы с ним с синтаксисом, меня идеология волнует;-)

Вот как это выглядит на плюсах у меня (неск лет назад включил поддержку разных типов ячейки)

    template <int D1, int D2, class T1, class T2> 
	inline Vec<D1+D2,  decltype(T1()+T2())> operator | (const Vec<D1,T1> &a, const Vec<D2, T2> &b){ 
		Vec<D1+D2,  decltype(T1()+T2())> r; 
		for(int i=0; i<D1; i++) r.p[i] = a.p[i]; 
		for(int i=0; i<D2; i++) r.p[D1+i] = b.p[i]; 
		return r; 
    }

А оказывается это модно, молодежно…

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

Ну суть понятия контекста она в общем плане более широкая насколько я помню хаскель ) Но понятно что все это можно расписать в виде императивного кода, иначе бы все это дело вообще не могло работать на императивном железе )

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

похоже на языки условного энтерпрайза

Нет, это research language. Т.е. язык для обкатки новых концептов из «матана» без претензий на широкое практическое применение.

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

Ну надо посмотреть, согласен мои догадки особо не имеют под собой почвы. Вижу что это какое-то хаскелеподобное нечто с ghc и gmp наперевес. С хаскелеподобным синтаксисом.

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

ну есть образчики кто на нем пишет вполне себе около энтерпрайзный бэкенд для веба. Но да тут еще популяризировать и популяризировать :)

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

Дык не так много есть актуальных параметров типа, что бы делать из этого какую то сложную науку… ща буду уподобляться ТС-у с Дианой;-)

Походу ты кое-что начинаешь понимать. Еще не поздно покаяться и стать метапрогером.

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