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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И?

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

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

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

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

Google it

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

Razk ★
()
Ответ на: комментарий от 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 ☆
() автор топика
Ответ на: комментарий от 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 ★
()
Ответ на: комментарий от saibogo

Я своим сименсом ме45 кнопки в стенд забивал.

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

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

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

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

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

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

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

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

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

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

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