LINUX.ORG.RU

Metaprog: универсальная графическая среда программирования [в разработке] часть 7

 , , ,


1

3

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

Чего нет в этой части - есть в прошлых. Для того, чтобы понять идею Метарпога, не обязательно читать тысячи комментариев из всех тем. Необходимый минимум собран в заголовках тем. Читайте заголовки и ссылки в них. Кстати, обновляется только заголовок последней темы, если эта тема уже не последняя - она не обновляется. В более новых темах пункты FAQ могут обновляться и в случае расхождения действительна более новая версия.

10. Примеры выдают варнинги при компиляции (у кое-кого еще и сегфолтятся)

Решено вводом неанонимных структур, если идет обращение к данным из сишных инклюдов.

12. Зачем ты пытаешься сделать «графический C» (используя подходы к разработке, структуры данных и прочее из C, но в виде блоксхем)?

Потому что я хочу программировать именно в графике и мне нравится Лабвью, но не нравятся ограничения его бекенда, обусловленные в основном копирастией. Хочется иметь возможность программировать не только на высоком, но даже на самом низком уровне (драйвера, ядра ОС, микроконтроллеры итп) и оперировать указателями, как в Си, но делать это в графике, а не в тексте.

13. Есть же first order logic, лямбда исчисление и т.д. Ты бы изучил для начала альтернативы, может для данного вида представления имеются лучшие подходы?

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

Примеры

Предыдущие см. в прошлых темах

Metaprog: универсальная графическая среда программирования [в разработке]

Metaprog: универсальная графическая среда программирования [в разработке] часть 2

Metaprog: универсальная графическая среда программирования [в разработке] часть 3

Metaprog: универсальная графическая среда программирования [в разработке] часть 4

Metaprog: универсальная графическая среда программирования [в разработке] часть 5

Metaprog: универсальная графическая среда программирования [в разработке] часть 6

Неанонимные структуры

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

Главная функция:

https://i.postimg.cc/8kJdT96h/image.png

Открытие нового окна:

https://postimg.cc/kBX6rB0P

Та же диаграмма в видео:

https://streamable.com/jqng1

Видно всплывающие подсказки, в конце удаляется и снова проводится один из проводков.

Начало рисования SDL, то что должно делаться каждый цикл в нуклеаре:

https://postimg.cc/tYS199bZ

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

Кстати, что мешает мне сейчас сделать главный нуклеаровский цикл, ведь циклы ж уже готовы? Смотрите на этот скрин:

https://i.postimg.cc/65N2KMQz/image.png

Почти такой же пример, только есть цикл и нету sleep (чтобы можно было полюболваться на окошко 10 секунд). Что тут не так? Схема правильная, но надо еще научить транслятор ставить «тупиковые» ветки, берущие начало в цикле, в пределах цикла по-умолчанию. Сейчас код nk_end и малювання SDL оказываются за пределами тела цикла, буду это исправлять. Где-то там же находится ключ к полному налаживанию ветвления через if и switch.

Сам код:

https://pastebin.com/f5PDfi77

Использовать сишные имена типов и структур удалось благодаря многоязычным строкам, которые внедрялись для русских, англичан и прочей не понимающей украинский публики. Если в названии типа есть строка на языке «С», вместо примитивного типа (или тела структуры из примитивных типов) ставится сишный идентификатор типа из инклюда.



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

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

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

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

Именно! А еще любопытно, что часть этого примера, похоже, опять собрана из копипасты. Что-то никак не выходит у графики стать самостоятельным инструментом, ты смотри. Беда-беда.

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

собрана из копипасты

не выходит у графики стать самостоятельным инструментом

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

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

Если бы макаки настолько бы испоганили линукс, то существующая инфраструктура на линуксе (андроид, все облака, даже от мс, всякое ембеддед) начала бы «ломаться» и ВСЕ корпорации (даже M$) выгнали бы этих макак ссаными тряпками. Ибо десктопный линукс бы не так пострадал как сервера и arm железо.

А так корпорации всё пытаются пихать зонды в ядро и понимающие люди (не от лица Линуса, а от лица других) сопротивляются.

А вообще, Линус на заре линукса, и Линус сейчас - небо и земля.

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

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

Я бы собирал для тестирования всякие алгоритмы сортировки и прочие вещи, а не эту лабуду. Заодно и обошелся бы без копипасты.

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

всякие алгоритмы сортировки

В графическом виде? Представил. Ужаснулся. Подумал. Улыбнулся.

Эй, @metaprog, запили нам Quick Sort на графике. Не библиотеки вызывай, а саму реализацию сделай.

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

Я и не скрываю, что в моих примерах есть копипаста кусков текстового кода. Это одна из возможностей Метапрога.

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

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

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

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

Вставки - это скорее следствие проблем с чтением и пониманием текстового кода и способ ускорить процесс, если есть ГОТОВЫЙ код. В своих диаграммах можно и нужно обходиться без вставок.

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

запили нам Quick Sort на графике

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

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

А вообще, Линус на заре линукса, и Линус сейчас - небо и земля.

Испортился?

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

Квиксорта и переворачивалки строк нет в основном по причине ввода-вывода

А в удаленных комментариях выяснилось, что не ввод-вывод виноват, а не работающие условия и циклы.

откуда брать

Да прямо в схеме задай. Без всякого ввода.

и куда выбрасывать результат

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

С сетью, как видишь, проблемы.

Зачем тебе сейчас сеть? Если с трансляцией в Си элементарных конструкций проблемы.

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

В графическом виде? Представил. Ужаснулся.

Я уже ужаснулся, от того, как будет в графическом виде выглядеть вызов библиотечного квиксорта https://ru.cppreference.com/w/c/algorithm/qsort

Там аргументы и указатель на массив, и на размер массива, и на размер элемента, и что самое главное, указатель на функцию, сравнивающую элементы массива.

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

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

metaprog_instance_0_2145381393622298625__5496740119302128641_junction_6175081156503390209 = socket(metaprog_instance_0_2145381393622298625__5496740119302128641__variable_3008249301238120961,metaprog_instance_0_2145381393622298625__5496740119302128641__variable_8708425725887798273,metaprog_instance_0_2145381393622298625__5496740119302128641__variable_6498593599873409025);
.....   
bind(metaprog_instance_0_2145381393622298625__5496740119302128641_junction_6175081156503390209,metaprog_instance_0_2145381393622298625__5496740119302128641__variable_8023724218202243073,sizeof(metaprog_instance_0_3919427819432921089__7158408156748161025__structure_constant_6033721645320783873));
listen(metaprog_instance_0_2145381393622298625__5496740119302128641_junction_6175081156503390209,metaprog_instance_0_variable_4360400896740470785);

отличная проверка ошибок! Удачи в отлове багов.

Компилируется, но почему-то выдает ошибку при соединении:

И неудивительно.

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

А в удаленных комментариях выяснилось, что не ввод-вывод виноват, а не работающие условия и циклы.

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

metaprog
() автор топика
Ответ на: комментарий от i-rinat
setsockopt(metaprog_instance_0_2145381393622298625_junction_5473044971994957825, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on,
sizeof(reuseaddr_on) == -1);

бездумная копипаста, она такая.

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

Подозреваю, что это была копипаста из примера, где просто проверялся результат вызова. Но так как «я тут не думать, а программы писать рисовать», то скобку потерял, и '== -1' ушел туда, где он есть сейчас. Кстати отличный пример того, как графическое программирование «проще в понимании» и «позволяет избежать таких элементарных ошибок».

ossa ★★
()
Ответ на: комментарий от cluge
setsockopt(metaprog_instance_0_2145381393622298625_junction_5473044971994957825, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on, 
sizeof(reuseaddr_on));

Все равно выдает то самое

[err] evmap.c:358: Assertion fd == ev->ev_fd failed in evmap_io_del_

Где еще искать ошибки?

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

Без копипасты ошибки б не было.

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

Где еще искать ошибки?

Выводи значения этих переменных, смотри откуда они. И кто вообще сказал, что у тебя сокет, например, создался, bind или listen отработал правильно? (на самом деле, я думаю, именно bind у тебя и не отработал). Думаешь, не имея на руках твоё лего, какой-то телепат угадает, что там происходит? Кто сказал, что твои нарисованные sockaddr_in имеют такое же выравнивание, как те, что нужны?

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

Рандомно дергать всякие вызовы с рандомными параметрами

Это называется фаззинг, и это сейчас модное направление.

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

не, фаззинг это про тестирование уже готового, а не про попытку это готовое получить. Про «получить готовое пытаясь это готовое рандомно сгенерить» это генетические алгоритмы...ну или monkey sort

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

Что надо поменять?

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

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

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

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

откуда брать

stdin

и куда выбрасывать результат

stdout

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

копипаста кусков текстового кода. Это одна из возможностей Метапрога.

Генерирующая тонну ошибок. Не думаешь, что стоит как-то пересмотреть эту возможность?

Остальной интерфейс - винда и диалоги открытия файлов

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

Сборка - может как-то в другой раз покажу

Потому что она занимает много времени по сравнению с написанием текста с нуля?

если есть ГОТОВЫЙ код

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

Квиксорта и переворачивалки строк нет в основном по причине ввода-вывода

А в удаленных комментариях выяснилось, что не ввод-вывод виноват, а не работающие условия и циклы.

Не «не работающие», а не до конца допиленные... Доработка крупная, вряд ли получится быстро и сразу

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

Где еще искать ошибки?

В своей ДНК.

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

И так слишком вежливо для меня.

Тогда не удивляйся, что для кого-то помогать тебе слишком много чести.

традиционную вежливость Линуса

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

Линус в итоге понял, что это недостаток.

масимум - унылое посылание в жопу.

Единственная здравая мысль в комментарии. Оно действительно унылое.

Интересно на чем быстрее сделают что-то типа форума - Метапроге или skyvis?:)

Я, заметь, предлагал зарегать metaprog.org, пока он свободен был. Всё, увели.

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

Он в прошлом году аж в отпуск сходил, чтобы переосмыслить своё поведение

27 лет развивал ядро, не стесняясь в выражениях и тут такое... Состарился Линус, не тот уже. А еще и SJWшный КоК в ядре. Нехорошо все это.

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

Я вот слышал, что Патриция Торвальдс феминистка. Правда?

Не хотелось бы, чтобы опенсорсное сообщество выродилось в что-то подобное:

https://ebanoe.it/2019/03/10/silicon-valley-reality/

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

Я, заметь, предлагал зарегать metaprog.org, пока он свободен был. Всё, увели.

Если что, я планирую просто распространять Метапрог-клиент, а ему уже не нужны будут домены, только выход в интернет.

Тем не менее, от помощи в регистрации доменов не откажусь. Какие еще свободны?

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

Я вот слышал, что Патриция Торвальдс феминистка. Правда?

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

Сайт о СВОБОДНОМ ПО, *********** *************.

https://ebanoe.it/2019/03/10/silicon-valley-reality/

Я подозревал, что по ссылке увижу помойное ведро, но чтобы так сразу...

Силиконовая долина

Чисто для сведения доверчивых читателей: «Силиконовая долина» — это там, где порнуху снимают. А то, про что пытается толковать аффтар, на русский переводится как «Кремниевая долина».

Дальнейший шлак не читал.

Тем не менее, от помощи в регистрации доменов не откажусь. Какие еще свободны?

Этот по твоей тематике был бы лучшим. :( Некоммерческие проекты и всё такое. А так whois в помощь.

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

вместо того что бы писать свой github лучше бы написал свой DNS. там всё приличное давно уже занято. к счастью meta-prog.org вроде свободен.

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

Метапрог-клиент, а ему уже не нужны будут домены, только выход в интернет.

Ммм, сколько тебя открытий чудных ждет.

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