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

Есть libev-dev и libev-libevent-dev, файл event.h есть, непонятно лишь какие флаги компилятору давать.

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

Это не сработало:

clang test.c -std=c99 -pedantic -O2 -o test -lSDL2 -lGLESv2 -lm -levent

Гугл наврал. Сработало вот что:

clang test.c -std=c99 -pedantic -O2 -o test -lSDL2 -lGLESv2 -lm -lev

Я тупо наугад написал -lev. Сейчас посмотрим как работать будет.

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

Напомни плиз как вписывать pkg-config в командную строку

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

Самое прикольное, что оно компилируется, но работает с ошибками адресации.

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

А, так у меня не те библиотеки стояли. libev вместо libevent. Сейчас буду исправлять.

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

Скомпилить получилось и без ошибок адресации. Теперь другая проблема при вызове колбека на сетевые события:

[err] evmap.c:358: Assertion fd == ev->ev_fd failed in evmap_io_del_
Перервано

Попытаюсь решить.

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

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

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

И на какой стадии решение? На стадии созерцания ассерта и ожидания котечки?

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: комментарий от metaprog
evmap_io_del_(struct event_base *base, evutil_socket_t fd, struct event *ev) // параметры
{
......
	EVUTIL_ASSERT(fd == ev->ev_fd); // проверка параметров, которая фейлится
ossa ★★
()
Ответ на: комментарий от liksys

прежде всего анализировать :D Понимаю, идея так себе, ну а вдруг.

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

Кстати, необязательно прибегать к карандашу и бумаге.

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

губительной парадигмы " я д'Артаньян, все пидорасы"

ИМХО, это главная беда данного прожекта.

cluge
()

Какой там ник у чела что skyvis делал? Можешь его кастануть через {user}nick{/user}? Интересно узнать как продвинулась его работа.

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

Попробуй скомпилить

https://github.com/arturianec100/skyvis

Я пока попилю транслятор, чтобы уже нормально работали ветвления и тупиковые ветки оставались в теле цикла (помнишь окошко в нуклеаре и почему цикла там еще нет?).

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

Вижу там

Removed QTabsWidget - reason of crash

Предоставляя много готовенького (с которым надо еще и уметь работать), ООПнутые решения поставляют и странные баги. Я вот отказался от GTK из-за сложности.

Libevent и Nuklear с виду проще, теперь попробую заставить все это нормально работать. Если что, с гтк секса тоже хватало:)

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

Как сокет может оказаться «не тем», если подвязывается в колбеке? Или это на удаление? Типа закрыть надо было? Или наоборот он преждевременно закрылся?

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

Знаком, я на ней стрим-сервер написал. Могу, конечно.

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

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

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

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

Пустое окошко практически. Ничего не изменилось.

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

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

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

Как сокет может оказаться «не тем»

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

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

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

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

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

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

нужен кто-то посерьезнее

Эх, куда мне до великого видеопередователя, ахах.

я действительно знаю ответы на все твои вопросы

Ну это что то в стиле царского «я могу читать мысли всех» %)

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

У меня ужасный тайм-менеджмент. За все эти месяцы я потратил на skyvis меньше времени, чем ты потратил на метапрог в первом треде. Как только skyvis выйдет из состояния «нечего смотреть» я сразу напишу. Я много ковырялся над тем, что «под капотом». Я не торопился и делал несколько раз рефакторинг (да здравствует «я вижу свои ошибки»).

А QTabWidget - в одной библиотеке на одной из множества поддерживаемых платформ один из множества виджетов «сломан». Здесь ни парадигма ООП, ни ЯП, ни ТП/ВП ни при чём. Просто разработчики сломали то, что работало, а отдел тестирования не заметил. Это проблема менеджмента (управления), и «сколько ресурсов выделили на тестирование». Здесь «что, как, на чём разрабатываем» ни при чём. Только не надо разводить растосрач «если бы писали на расте, то „поломку“ бы сразу заметили». На любом ЯП можно накосячить и ломать то, что работало.

Этим летом у меня больше дел, чем весной. Но потихоньку пилю.

Вот забавно, hobbit написал «претензии в мягкой форме» тебе, а взял на заметку их я.

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

Учитывая сколько раз ТС оскорблял liksys - далеко не каждый даже скажет «извинись перед тем как просить помощи». Для многих это повод ещё сильнее издеваться над ТСом за предыдущие оскорбления. Хотя даже не ЛОРе многие добрее, чем «для многих».

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

liksys чсвэшная скотина, он же просто сам хочет этого спама в теме. Вот царю не понравилась тема и он ушел, усе.

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

Всякие «эффективные менеджеры», которые везде толкают электрон и прочее подобное - существуют потому, что умеют управлять людьми. ЭМ, если бы сильно ценил liksys, изящно бы извинился и сразу же смотивировал бы его на помощь НЕСКОЛЬКИМИ способами.

Украинский депутат, у которого есть минимум одна it компания (аутсорс, зато работает без серьёзных проблем) на своей лекции про разное (в том числе про it компании) говорил, что в таком бизнесе главное не инструменты разработки, не заоблачные тех. навыки, не «горячее сердце», основа такого бизнеса - ПРАВИЛЬНАЯ МОТИВАЦИЯ ВСЕХ ЛЮДЕЙ, которые принимают участие.

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

ТС, даже котечка посылает тебя в гугл. Сделаешь выводы?

Нет, котечка не «зажрался», посылая в гугл. Таким базовым вопросам самое там место (в поисковой строке). Это в гугле решается БЫСТРЕЕ, чем спрашивая на ЛОРе. Любой здесь это подтвердит.

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

Ты вроде бы и прав, но я и без него смогу обойтись, если ему недостаточно формулировки «прошу забыть старые обиды». И так слишком вежливо для меня. Кстати, вспомним традиционную вежливость Линуса:

Guys, this is not a dick-sucking contest. https://lkml.org/lkml/2013/2/21/228

Mauro, SHUT THE FUCK UP! https://lkml.org/lkml/2012/12/23/75

*YOU* are full of bullshit. http://harmful.cat-v.org/software/c /linus

Это я еще слишком вежливый, правила форума сильно урезают использование выразительных возможностей славянских языков, масимум - унылое посылание в жопу.

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

Линус как раз огрёб кучу проблем из-за своей прямолинейности. К тому же его считают самым компетентным разработчиком в своей области. Твою компетентность большинство ставят под вопрос. Люди не хотят терпеть ТРУЪ грубого гуру. Даже если бы весь ЛОР признал тебя самым топовым сишником ЛОРа - всё равно многие бы не сотрудничали с тобой из-за резких слов (Линус посылал матом и за меньшее).

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

слишком вежливо для меня

вежливость Линуса

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

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

Хочешь, чтобы тебе помогали - засунь в свою любимую жопу свой поганый язык и учись общаться вежливо. Либо плати. И учитывай, что за грубость со стороны заказчика многие исполнители делают ценнику x2, а то и x10.

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

Линус как раз огрёб кучу проблем из-за своей прямолинейности

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

Хотя вот SJW уже приперлись и навязали разрабам ядра свой КоК. Черт, даже их обсуждать по правилам ЛОРа нельзя. Обсудим политику уже на своих площадках. Интересно на чем быстрее сделают что-то типа форума - Метапроге или skyvis?:)

Линус посылал матом и за меньшее

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

Интересно как бы Линус на русском выражался))). Кстати, его отец, скорее всего, знает русский.

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

Что ж, покажу видео. Точнее, целый сериал.

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

Основная функция и подфункция, отвечающая за подвязку либевентовских колбеков:

https://streamable.com/zt966

Задание ІР-адреса и открытие слушающего сокета, на который будет подвязан колбек:

https://streamable.com/tfu2n

Сами колбеки на принятие соединения на сокет и на чтение из принятого через accept сокета. Ошибка, видимо, где-то здесь:

https://streamable.com/jhjbm

Строка передается так:

(длина, 64-битное число) + (строка известной длины)

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

Прочтение длины (64-битное число) и прочтение строки с составлением метапроговского массива:

https://streamable.com/oum10

Код примера:

https://pastebin.com/g87Hu7TK

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

[err] evmap.c:358: Assertion fd == ev->ev_fd failed in evmap_io_del_
Перервано
metaprog
() автор топика
Ответ на: комментарий от metaprog

Код примера:

setsockopt(metaprog_instance_0_2145381393622298625_junction_5473044971994957825, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on,
sizeof(reuseaddr_on) == -1);

ROFL

видео

Эх, и всё так же нет создания диаграмм по кусочкам. Только загружаются готовые.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.