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 + будильник на Метапроге

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

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

metaprog ()
Ответ на: комментарий от i-rinat

Круто! Думаю сделать реализацию на функции nk_murmur_hash, интересно будет сравнить.

Кстати, генерация случаных чисел на rand/rand_r дает всего лишь псевдослучайные значения. Получается 100к строк по 100 символов за 0,2 сек (кстати, у тебя как?). Быстро, но как-то «не так» - между разными итерациями бенчмарка получаются одинаковые числа при одинаковом сиде. Используя функцию randombytes_uniform из libsodium, можно получать более «случайные» числа, но занимает это у меня 2 секунды (в 100 раз дольше).

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

Забавно, что даже с хешами С++ медленнее, чем Си (в исполнении Рината).

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

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

Е-мае, куда пастебин его дел? Ладно, с 8 версией выпущу и новую версию будильника, кстати улучшенную.

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

Кстати, «вектор» в понимании С++ это массив динамических массивов?

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

Гораздо важнее чтобы телефон удобен был и звонил.

Разве телефон на распбери пи не может быть таким?

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

Когда будет «сам на себе».

Ладно. Хотя жаль, что у тебя не хватает энтузиазма пользоваться и прототипом.

Понятно, внятной документации не будет.

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

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

Некоторые игры очень даже серьезны по своей сложности.

Я вообще ничего не говорил про свои литературные вкусы. Это ты тут восхищаешься какой-то древней литературной порнографией.

Поскольку это - самый интересный пласт русской художественной литературы. Хоть что-то стоящее прочтения на фоне тонн скучной макулатуры, которой мучают несчастных школьников.

Послушал. Нет. Не интересно.

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

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

Если ты из Москвы, то за изобретательством в плохо смысле далеко ходить не надо: https://griphon.livejournal.com/405688.html

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

[sofa_psychiatrist_mode]Вашим чинушам (да и нашим тоже) надо провести лечение клептомании методом лоботомии.[/sofa_psychiatrist_mode] Кроме шуток, проблема - в ворах и ставленниках олигархов при власти и я хз как развитие Метапрога поможет решить эту проблему, особенно у вас.

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

А будь они как метапрог (человек и изобретатель) уже давно бы Плутон колонизировали.

Да, если б так было где-то с 1950 года.

metaprog ()

Когда ты там новый эпизод-то выпустишь?

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

Новую версию прототипа? Когда соберу хороший бенчмарк. Плохой уже собрал, но выкладывать пока не буду. А в самом прототипе желательно еще пофиксить несколько багов и вкрутить плюшку по построению массивов в цикле, кстати я задавал тут вопрос: Метапрог-прототип, версия 7 + графические диалоги на Метапроге (комментарий)

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

Или random_size должен быть только константой или constant expression?

VLA появились в С99, если мне память не изменяет.

делать массивы на выходе из него

Что это значит? Если ты объявляешь переменные, в т.ч. и массивы внутри цикла, то по окончанию цикла все эти переменные превращаются в тыкву. Не надо говорить «как в Лабвью», его все равно никто из подавляющего большинства присутствующих не знает. Приводи полный код на Си, того, что ты хочешь сделать.

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

Ждем-с. Надеюсь, ты собираешься писать на хабр? Все-таки знаменательный релиз.

кстати я задавал тут вопрос

И?

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

Представь в школьной программе вместо литературы темы

А мог бы просто написать что ты технофашист.

задавал тут вопрос

Google it

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

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

Да может быть. Вот только кто его без вливаний денег до ума доведет

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

Вектор в понимании крестов это динамический массив. Содержимое ячейки определяется при создании нового инстанса вектора и может быть в том числе и другим вектором. Ограничение - все элементы вектора должны быть одного типа

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

Так есть же Pure OS и смартфоны Librem (правда почему они не взяли распбери пи?).

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

VLA

О, интересно. Они не требуют malloc/free? Как управлять памятью с ними? Они просто уничтожаются после выхода из скоупа, где были объявлены?

делать массивы на выходе из него

Что это значит?

Как-то так: https://i.postimg.cc/q7QT02NC/image.png

В верхнем цикле мы заранее знаем количество итераций еще во время компиляции и знаем сколько нужно аллоцировать памяти под получаемый массив. Но в нижнем цикле все зависит от длины входящего массива (допустим, во время компиляции неизвестной) и мы собираем целых три массива результатов (в лабвью можем хоть тысячи). Хочется подобную вещь реализовать в Метапроге.

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

«Руслана и Людмилу» перечитай. Мата там нет, но тематика местами вполне себе игривая. Но это да, для тех, кто читает внимательно.

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

Е-мае, куда пастебин его дел?

Тебе уже говорили — пастебин не место для сколько-нибудь долговременного хранения. особенно если ты туда под анонимом постил. Вот то, что @balsoft на гитхабе схоронил, до сих пор благополучно там и лежит.

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

А мог бы просто написать что ты технофашист.

)))

Меня вот такие как Антонол считают необразованным потому что я, видите ли, не читал графоманию определенных пейсателей. А я считаю необразованными всех, кто не разбирается в технике и технологиях хотя бы на научно-популярном уровне. Школа в 21 веке обязана этот минимум давать, но вместо этого из-под палки (к счастью, не в прямом смысле, а когда-то было и в прямом) заставляют читать скучнейшую графоманию всяких Толстых. Смысл школьного образования, видимо, больше не в том, чтобы дать какие-то знания, а в том, чтобы приучить к скучной работе, которую скрипя зубами надо выполнять.

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

Выпускники школ в большинстве даже не знают, что у Солнца водорода осталось только на ~4 млрд лет и дальше оно раздуется до красного гиганта, после чего сдуется в белого карлика (если оставить все на самотек). Про Солнце только в 11 классе показывали фильм на астрономии (я это давно уже знал из энциклопедий), а надо в младших классах рассказывать, а про технику почти ничего в школе нет. Физика и химия - это общие законы, но история развития техники, конкретные устройства, механизмы и техпроцессы упоминаются там очень вскользь. В СССР вроде был «научный атеизм», но выпусники советских школ в 90х массово ринулись в церкви - вот оно, качество советского и постсоветского образования. Да и в США тоже где-то так: там более 60% населения верующие.

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

Уже описал комментом выше.

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

не надо так делать.

Во первых это будет работать на С, но не будет на С++.

В С есть поддержка VLA массивов, но они создаются на стеке.

Размер стека у процесса по умолчанию 1 мегабайт на виндовс, и 8 мегабайт на линуксе.

Но у gcc есть опция -fsplit-stack , тогда стек ограничен только памятью пользователя программы.

В общем, если не пугает отсутствие совместимости с С++ и завязка на gcc, то можно, но лучше не надо…

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

Они не требуют malloc/free? Как управлять памятью с ними?

Не требуют. Никак, какого размера объявил такой и будет.

Они просто уничтожаются после выхода из скоупа, где были объявлены?

Можно и так сказать. На стеке создаются.

Хочется подобную вещь реализовать в Метапроге.

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

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

если не пугает отсутствие совместимости с С++

Не пугает. В плюсы я и не собирался транслироваться. Если и использовать плюсовый код в Метапроге - то лучше уже автоконвертить его в метапроговские диагарммы и потом генерировать Си или LLVM IR.

завязка на gcc

Шланг VLA не поддерживает?

В С есть поддержка VLA массивов, но они создаются на стеке. Размер стека у процесса по умолчанию 1 мегабайт на виндовс, и 8 мегабайт на линуксе.

То есть, гигабайтный массив я так не соберу? И если соберу, как он освободится когда станет ненужным?

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

clang поддерживает VLA, но не поддерживает -fsplit-stack

Гигабайтный массив ты соберёшь на gcc c -fsplit-stack.

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

Никак, какого размера объявил такой и будет.

А если гигабайт? Потянет?

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

Вкрутить это в транслятор не проблема - и не такое делал.

На стеке создаются.

Стеке функции? Если я, скажем, соберу массив массивов (VLA из VLA) работать будет?

int size1;
char[size1][] VLA_of_VLA;
for (int i = 0; i < size; i++)
{
char inner_VLA[rand()];
//заполним inner_VLA
VLA_of_VLA[i] = inner_VLA;
}
metaprog ()
Ответ на: комментарий от fsb4000

Гигабайтный массив ты соберёшь на gcc c -fsplit-stack.

На шланге, значит, гигабайт не соберу? Ну ладно, на gcc соберу - а когда он освободится? Только при выходе из функции?

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

нет не будет. нельзя так создавать массивы

char[size1][] VLA_of_VLA;

и присваивать массивы друг другу тоже

//заполним inner_VLA
VLA_of_VLA[i] = inner_VLA;

а когда он освободится? Только при выходе из функции?

при выходе из скоупа, не функции, то есть раньше может. Вот alloca, там да, при выходе из функции.

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

О, интересно. Они не требуют malloc/free? Как управлять памятью с ними? Они просто уничтожаются после выхода из скоупа, где были объявлены?

Они создаются на стеке, и утянуть их из скоупа нельзя, и изменить размер тоже нельзя.

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

А мальчик продолжает фонтанировать «знаниями»…

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

телефон на распбери пи

Я бы сначала озадачился вопросом, от чего такой телефон будет питаться. Конструкторы малинки, ЕМНИП, её не на автономное питание затачивали, хотя по сравнению с десктопами энергопотребление поменьше, конечно.

Автор вот этого девайса, например, выламывал аккумулятор из ноутбука. И по габаритам у него явно не телефон получился. (Ну если только «панковский» телефон.) По ссылке русский перевод статьи, ссылка на оригинал — в конце перевода.

А современные малинки (опять-таки ЕМНИП) жрут побольше, чем этот артефакт из 2013 года…

P.S. Кстати, вот по той статье хотелось бы получить комментарий @liksys

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

Да ща просто телефоны хилые пошли. У друга была труба от одного из первых сотовых операторов в Москве (забыл название, какой то аналоговый формат ещё) - нормальный такой кирпич с антенной. От его АКБ шуруповёрт запитать можно было…

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

Да и формат документации надо сделать свой, чтоб удобнее было читать и писать.

То есть опять сферическое нечто, что нельзя будет читать за пределами Метапрога? Ойблиииин…

а всякие html и производные тоже полны своих заморочек.

Минимальный HTML (позволяющий тем не менее красиво форматировать текст и вставлять картинки и таблицы) очень прост, маркдаун (из которого можно генерить всё, что угодно) ещё проще.

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

Минимальный HTML

маркдаун

Да ты шо, это ж сраный текст! Прошлый век!

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

формат документации надо сделать свой

Так и до ядра операционной системы скоро доберемся.

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

Metaprog

все равно приобретет успех:-)

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

у меня у друга в свое время Эриксон был. Дак по нему Волга проехалась. У телефона только корпус треснул, но жив был еще очень долго

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

Ну тогда метод производства «До конца гарантийного срока выдержит» еще не был так распостранен. Отсюда и рассказы про неубивамые ноклы с Эриксонами. Скоро вырастет поколение которое в такое уже и не поверит.

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

Документация к Метапрогу должна быть в формате комиксов же! Без единой буквы.

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

Цветных хоть надеюсь? Или как манга у японцев? А ну и открываться комикс будет толькоо в Метапроге конечно же.

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

Интерактивных! Мышкой водишь а жгутики извиваются… как тентакли.

Делать ее надо на метапроге же.

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

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

как цифровая береста позволит.

Вот это было хорошо XD

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

Там есть опция «Paste Expiration». Ты выставил, скорее всего, чтобы она протухла. Вообще, по дефолту, она не протухает никогда :)

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

Давно пора делать так что бы это было осязаемым! А ВР это тема, диаграммы метапрога должны быть 3Д и в них надо бродить в очках ВР…

AntonI ()
Ограничение на отправку комментариев: