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

Я уже говорил, что на каждое заявление про стектрейсы буду требовать конкретики. О каких ошибках идёт речь? Что тебе вылетало?

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

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

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

И выбразываются они значительно реже, чем стектрейсы в питонософте

Сам считал? А количество сегфолтов в тырпрайзном софте, который люди вынуждены писать на С++03? Просто подумай, что вообще лучше: segmentation fault, core dumped или информативный стектрейс питона?

А давай, ты ещё заодно наконец объяснишь, что же такого плохого в ООП?

какие-то ошибки в классах и методах.

Я так понял, ошибки в них бывают только из-за того, что ООП, ведь да?

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

«сделанная, когда не было»

Принято.

трудно догадаться?

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

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

ты хоть понимаешь, что такое вообще стектрейс и кордамп?

Вот! Правильный вопрос. @metaprog, расскажи нам, что это?

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

Видно нравится людям стектрейсы ловить там, где Си не скомпилируется

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

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

ТС у нас пока что не знает таких страшных слов как «строгая типизация» и «слабая типизация», у него в голове пока что есть только «статическая типизация», а раз статика, значит 400% защита от ошибок.

Unicode4all ★★★★★
()

Теперь будильником можно пользоваться

test@debian-test:/home/test/mmmm$ ./test 
будильник на 156:230
^C
test@debian-test:/home/test/mmmm$ ./test 
будильник на 16:80
^C
test@debian-test:/home/test/mmmm$ ./test 
будильник на 131:0
^C
test@debian-test:/home/test/mmmm$ ./test 
будильник на 144:131
^C
test@debian-test:/home/test/mmmm$ ./test 
будильник на 96:96

б-будильник

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

на мертвопроге

Ну всё, теперь ТС ответит, что к МЕРТВОпрогу он отношения не имеет, а мысль про «все в одну функцию» пролетит мимо его сознания.

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

А помимо типизации там еще отлов ошибок через errno. И система типов C никак тебе даже не намекнет, в каком месте нужно этот errno проверять…

Вот, например,

FILE* fptr;
 fptr = fopen("non-existent-file.txt","r");
 fscanf(fptr,"%d", &num);

Сишный компилятор даже с -Wall не увидит тут ничего преступного. А в результате получается много хуже чем питоновский стектрейс, который был бы брошен в аналогичном коде:

./a.out                                                                                                    [1]    11558 segmentation fault (core dumped)  ./a.out

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

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

Это как с проверкой на пустоту блоков в генерируемом коде. Похоже, в метапроге/labview тупо тяжело добавить лишнее условие для проверки, хотя в текстовых ЯП это занимает полминуты…

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

даже в прототипе можно было хотя бы пробелы у строк откусить с обоих сторон :) Это, кстати, про вопрос ошибок и их обработку.

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

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

Сперва донат, потом откусывание пробелов. На такую ерунду бесплатного времени у светоча нет.

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

Дык это надо маны по нуклеару курить, для метапргеров это зашквар

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

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

Есть? Какие?

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

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

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

Как ты будешь обрабатывать непредвиденные ошибки

Ошибки должны обрабатываться в условиях, как тут с выделением памяти: https://postimg.cc/hQVLBcHp

а стектрейсов в рантайме нет

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

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

мне за тебя демку нуклера посмотреть?

Скачать Метапрог и вкрутить в будильник проверку на вводимые числа.

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

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

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

В чистой сишке писать сложно. Задача Метапрога - сделать программирование на уровне Си простым.

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

Непредвиденная ошибка это как раз такая, которую программист внезапно не обработал, то бишь не предвидел. Тогда процессор уже кидает аппаратное исключение, которое обрабатывается ОС (сегфолт и кор дамп). Также это исключение можно обработать в рантайме языка (как это делает, например, рантайм С++ в Windows) А как собираешься такое обрабатывать ты? Переложить это на программиста? Тогда получается такая же хрень, что и с Цэ, твои жгутики и квадратики не делают это проще.

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

В функцию деления можно вставить проверку на ноль.

Кто то тут ЕМНИП скулил про быстродействие и про тчо С выбран потому что он самый быстрый…

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

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

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

в функцию деления можно вставить проверку на ноль.

У тебя же там поддержка текстовых мат. выражений планировалась. Ну вот я написал что-то вроде (x1+x2)/(y1+y2) в метапрог-диаграмме текстом, метапрог прямо это выражение вставил в код сишки, и никакой проверки на 0 нету

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

Есть хорошие абстракции и плохие. Хорошие это всякие врапперы, для использования которых почти не требуется мозг. А плохие это все эти ваши дурацкие деревья и прочий заумный МАТАН, и ООП.

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

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

И почти не требуются вычислительные ресурсы.

А плохие это все эти ваши дурацкие деревья и прочий заумный МАТАН, и ООП.

За деревья не скажу, так как не шарю в них, а вот ООП и тем более динамическая типизация (PyObject) - это зло, и усложняющее програмирование, и замедляющее все в рантайме.

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

Я планирую не текстовые выражения, а что-то наподобие маткада, и они будут транслироваться в метапроговские функции, содержащие проверки.

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

А как собираешься такое обрабатывать ты? Переложить это на программиста? Тогда получается такая же хрень, что и с Цэ, твои жгутики и квадратики не делают это проще.

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

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

ты изобрел абстракции :D

Ты не понимаешь! сувт это не абстракции! они в ассемблере всего в 1 строчку!!11

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

А давай, ты ещё заодно наконец объяснишь, что же такого плохого в ООП?

Ведет к раздутию и замедлению софта, при этом требует дополнительных знаний, по которым пишут целые талмуды. В Лабвью есть ООП с классами, но я его не использую.

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

Для начала надо осилить Метапрог «сам на себе», а дальше уже приложится.

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

Только проверки на ифах

Такие проверки медленнее исключений в Си++, потому что в случае, когда исключения не бросаются, никаких накладных расходов нет. Нет никаких скрытых возвращаемых значений со статусом, нет проверок после каждого вызова. Всё довольно хитро и изящно сделано. А тебе придётся на всех уровнях вставлять проверки, причём явно.

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

Ты же только что сказал, что

Только проверки на ифах

Какие ещё тогда исключения? Ты собрался взять худшее из обоих подходов, что ли?

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

Твоя фраза — бред. По крайней мере, в рамках устоявшейся общеупотребляемой терминологии.

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

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

Про клей (я дозвонился, спасибо тебе за повод:-))

Как правило они не любят неразьемных соединений, ставят на смазку + мехзажим. Смазки разные, зависит от вакуума, на средний вакуум Apezon N и Томфлон.

Клей тоже есть CrystalBond, типа термоклея - если прогреть до 180 то можно разобрать, а потом ацетоном оттереть начисто.

Сейчас товарищ не в Москве, вернётся в начале марта, если чего он готов проконсультировать более детально.

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

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

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

Понял-принял, спасибо. Чиркну, когда нужна будет подробная инфа.

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