LINUX.ORG.RU

Метапрог-прототип 34 + СУВТ по логическому типу

 , , ,


0

3

Следующая тема:

Метапрог-прототип 42

Подпишусь в поддержку Столлмана Bitcoin-кошельком из первой темы про Метапрог:

Metaprog Project supports Richard Matthew Stallman. Shame to SJW, Big Tech and Big Media. We need to get rid of them or Big Money will enslave us. It is do or die! Stay straight, RMS!

Подпись:

H/3cqHl7HGdAQd9K/io474IbLYlIKi/8R6pw1Vbpz0oTN4kihI5YO4dIdZo2VRdJbSp8kWmtWgC5TRTs0MkBIAo=

Подробности:

Движение отмены Столлмана (комментарий)

Следующая версия:

www.linux.org.ru/forum/development/16219448

Скачать:

https://mega.nz/file/6VJCEboQ#N3pu86bqI31Jp15aHWt6l-FIkY_RUws0CZK9aMcvxZo

В версии 34 исправлен тот же баг что и в 33, но другим способом, так как багфикс из версии 33 вызывал другие баги.

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

К выпуску версии 32 неожиданно обнаружилось, что СУВТ может иметь переключатель логического типа. То есть, можно задавать типы на значения «да» и «нет». Никаких изменений для этого вносить с 31 версии не пришлось, надо лишь задавать в определении СУВТ типы по значению СУВТ 0 на «нет» и 1 на «да». Из изменений - некоторые исправления багов (например, с кодогенерацией структур и операций над структурами под указателями), а также экспериментальная фича отрисовки канваса через dll-вызов окошка на SDL, за подробностями обращаться к MOPKOBKA или kote4ka в Метапрог онлайн.

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

В версии 30 - исправление бага с сишной трансляцией циклов с регистрами. Теперь их значение берется на сишном уровне не напрямую, а через промежуточную переменную. Это позволило реализовать алгоритм вычисления чисел Фибоначчи, где есть непосредственная передача данных между разными регистрами. Метапрог-схема находится в меню обучение - примеры - Фибоначчи, выглядит она так:

https://i.postimg.cc/D0W8v7XZ/image.png

Для сравнения - тот же алгоритм на LabVIEW:

https://i.postimg.cc/CLqz9L0r/image.png

Сишная трансляция:

https://pastebin.com/Z8rzvZpQ

Сравнение с тем же алгоритмом на «аналоге» Метапрога с бекендом на python говорит само за себя:

Metaprog здорового человека (комментарий)

В версии 29 - крупные изменения системы типов. «Встроенных» типов, вытягиваемых через меню «структуры», больше нет, все они теперь представлены в стандартной библиотеке. В особенности изменения коснулись числовых типов: теперь такие типы как число, дробь, целое, знаковое и беззнаковое представлены как многотиповые из соответствующих типов. Например, беззнаковое - многотиповой из 8, 16, 32, 64 и 128-разрядных беззнаковых, целое - многотиповой из знакового и беззнакового, число - многотиповой из целого и дробного. Теперь такие типы можно обрабатывать как многотиповые, поступая с числами разных типов по-разному.

В версии 28 переключатель (аналог сишного switch) работает с многотиповым типом. Выполнение схемы происходит только на ветке, соответствующей поданному на переключатель типу. Ветвление происходит не в рантайме (как в случае СУВТ), а при кодогенерации - не соответствующие поданному типу ветки не генерируются. Теперь осталось сделать цикл по структуре.

В версии 27 добавлена удобная возможность создать новую подфункцию, не останавливая весь прототип. Кнопка блоки - новая подфункция.

Также обнаружилась (но пока не исправлена) проблема с терминалом счетчика повторений цикла в цикле по условию - пока что не используйте его!

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

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

В версии 25 исправлена трансляция сложных рекурсивных структур с СУВТ.

В версии 24 был исправлен баг транслятора, проявившийся в версии 23: на некоторых схемах (например, отправки данных по TCP) код, отвечающий за поток данных, «вливающийся» в ветки с условиями, мог сгенерироваться после кода самого условия.

В версии 23 исправлен еще один баг с упаковкой проектов, а также баг трансляции условных схождений.

В версии 22 исправлен баг с упаковкой проектов, из-за которого не паковались зависимости из локальных форков. При этом удалось существенно ускорить упаковку проектов.

В версии 21 наконец-то добавлена корректная трансляция схем, содержащих рекурсии. Как пример можно привести схемы из репозитория «разработка интерфейса на нуклеар+» (можно скачать через Метапрог онлайн). В этой схеме отрисовка элементов интерфейса основана на СУВТ (структура условного выбра типа). В этой СУВТ возможны такие элементы интерфейса, как текстовый лейбл, текстовое поле, кнопка и (самое интересное) - линия из элементов интерфейса. В последнем случае происходит рекурсивный вызов функции, обрабатывающей массив из тех же СУВТ элементов интерфейса.

Предыдущая версия:

Метапрог-прототип 19 + API на СУВТ + ускорение трансляции



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

Да он сам понимает, что не нужен ему никакой метапрог. Что он делать-то на нем будет? Сувт 3.0? Сувт 4.0? Какие ему ядро и драйвера, какой прикладной софт (кроме будильника), о чем речь вообще.

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

Может, уже с этой и начнется. Хотя еще не хватает циклов по структуре.

Слушай, что б взять из SDL или еще чего, чтобы заставить один поток в нужном месте ждать сигнала с другого? И так в цикле, чтоб каждый раз ждало. Допустим, есть кнопка и при клике на нее (отлавливается потоком, рисующим графику) надо оживить поток, реагирующий на клик.

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

Ответ на твой вопрос есть здесь: https://wiki.libsdl.org/CategoryMutex

@hobbit, не подсказывай ему, пожалуйста. Не надо разжевывать и класть в рот, не в коня корм. Я дал исчерпывающую ссылку, пусть учится сам получать информацию.

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

Ответ на твой вопрос есть здесь

Там тоже нет конкретного ответа. Мьютексы работают черт пойми как.

@hobbit, не подсказывай ему, пожалуйста. Не надо разжевывать и класть в рот, не в коня корм. Я дал исчерпывающую ссылку, пусть учится сам получать информацию.

Да пошел ты.

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

Там тоже нет конкретного ответа. Мьютексы работают черт пойми как.

Прочитай остальные ссылки.

Да пошел ты.

То есть я нашел тебе конкретную документацию, а ты меня опять послал, хамло неблагодарное?

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

Мьютексы работают черт пойми как.

как мьютексы точней.

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

Не ври, там всё есть. Я смотрел ее перед тем, как отправить тебе. Проходишься по ссылкам и находишь нужный тебе примитив. Разбираешься, как он работает. Говоришь «спасибо» в тему и извиняешься за хамство.

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

Скажу спасибо и даже извинюсь, если объяснишь доступнее как вообще работают мьютексы и то ли это что надо.

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

Чтобы ты не делал, никогда не ожидай в главном GUI потоке, а то всё приложение может лагать.

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

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

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

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

Гуй выносится в отдельный поток, а ждать должен главный поток в цикле после старта гуйного потока.

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

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

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

Попробуй переписать вот этот пример с С++ на С + SDL:

А я думал, что ты из лагеря сочувствующих и помогающих ТС’у. А ты с ним так жестоко.

За что? Что он тебе плохого сделал?

i-rinat ★★★★★
()

как-то пропустил всю эту тему с метапрогом

решил вот скачать...

а там exe

как использовать-то?

-_-

reprimand ★★★★★
()

@i-rinat, у тебя случайно нет опыта работы с блютузовым стеком в линуксах? А то я столкнулся с проблемой, что не могу послушать порты 17 и 19 на BDADDR_ANY (да и вообще на любом адресе) не от рута. Выдача капабилити CAP_NET_BIND_SERVICE, кажется, не помогает. Это я дурак, или лыжи не едут? Порт пытаюсь слушать в подпроцессе, может, капабилити не наследуется? Сервис запускается через systemd с капом, надетым через AmbientCapability. Дальше он спаунит подпроцесс для работы блютуза.

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

опыта работы с блютузовым стеком в линуксах

Нет, ни разу не сталкивался. Но я погуглил. :)

Судя по тому, что тебе дают слушать по рутом, ты используешь L2CAP сокеты. А там вроде как нижние 4096 портов (psm?) зарезервированы. Ты уверен, что тебе нужно слушать именно на них? В какой-то PDF’ке от 2001 года вообще указано, что ниже 0x1000 определены только 0x0001 (Service Discovery Protocol), 0x0003 (RFCOMM) и 0x0005 (Telephony Control Protocol).

Тем не менее, тестовая программа у меня успешно слушает, если на неё повесить CAP_NET_BIND_SERVICE. Так что у тебя, скорее всего, привилегии не наследуются при fork/execve.

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

О, шикарно. Значит круг поиска проблемы сузился. Спасибо!

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

Я это как-то не так понимаю?

Note that adding capabilities to ambient capability set adds them to the process’s inherited capability set.

Речь идет не о дочерних процессах? Я как-то должен явным образом указать, что хочу сохранить кап перед спауном процесса? Используется multiprocessing в питоне, если что.

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

Автор рекомендует WinXP, Котечка рекомендует wine, и кто-то вроде бы действительно запускал это под реактосом.

Но вообще это прототип, который по авторским замыслам должен быть выброшен, поскольку нужен только для раскрутки (bootstrap) настоящего Метапрога, а настоящий Метапрог (по наполеоновским планам автора) будет уже нативно под линукс. Вопрос «что это тогда делает на форуме про линукс», если что, не ко мне, а к автору. :)

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

В capabilities(7) сказано: «The ambient capability set obeys the invariant that no capability can ever be ambient if it is not both permitted and inheritable.» Но при этом в доке на systemd.exec не говорится, что AmbientCapabilities= устанавливает что-то ещё кроме ambient set. В юните для systemd-resolved.service вместе с AmbientCapabilities= тот же самый список полномочий устанавливается ещё и в CapabilityBoundingSet=. Похоже, тебе тоже так нужно делать, иначе ambient set у тебя сбросится.

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

Так по факту то ничего не поменялось, кодогенерация будет выплевывать С код с соответствующей семантикой и поведением, или новые типы например помогают избегать ошибок переполнения типа и генерируют безопасный С с баундами? В общем-то, в чем профит?

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

В особенности изменения коснулись числовых типов: теперь такие типы как число, дробь, целое, знаковое и беззнаковое представлены как многотиповые из соответствующих типов. Например, беззнаковое - многотиповой из 8, 16, 32, 64 и 128-разрядных беззнаковых, целое - многотиповой из знакового и беззнакового, число - многотиповой из целого и дробного. Теперь такие типы можно обрабатывать как многотиповые, поступая с числами разных типов по-разному.

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

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

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

Черт, как же не хватает нормальных графических утилит и версионированных бинарных форматов, вот уж эти чертовы текстовые конфиги!

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

разве что ТС просто так удобней по какой-то странной причине

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

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

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

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

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

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

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

А почему сразу графическом?

Чем это тебе поможет

Много чем, преимущества уже обсуждались. Чего тебя так именно capabilities интересуют?

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