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

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

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

Пройди по комментариям нити обсуждения.

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

Щелкать енумы с булеанами

Я же говорю — в данном случае. Там нет переключателя вкл-выкл, там строка с текстом. Ну будет у тебя не текстовый файл, а графическая форма, где всё равно нужно вводить строки. А ты не знаешь, что и в какие поля вводить.

чем читать мануалы

Думаешь, какое-то волшебство графики обеспечит тебе понимание области, в которой у тебя никаких знаний?

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

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

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

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

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

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

Там разве не type AmbientCapabilities = set of Capabilities; ? Вообще настройки по хорошему должны быть переработаны, и стать более структурированными, тогда можно и о конкретных возможных значения почитать подробнее например.

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

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

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

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

Мы с вами уже это обсуждали, дайте нативную версию под онтопик и мы договоримся.

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

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

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

чтобы что-то щелкать, нужно понимать семантику того, что щелкаешь, представление в «енумах с булеанами» ничего не даст для понимания


enum P { k, l, c, d }


Сильно понятно что это такое?

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

Енумам можно придать многоязычные названия элементов. И каждому элементу конфига дать понятное название.

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

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

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

Не поверите - в любых языках самым обычным переменным стараются дать логичные имена

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

Вот что сделал ОП:

// Число
template <class T>
concept Integral = std::is_integral<T>::value;

// Знаковое
template <class T>
concept SignedIntegral = Integral<T> && std::is_signed<T>::value;
Зачем это нужно в С++? Как это выглядит в ассемблере?

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

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

Все еще предлагаю показать код сгенерированный метапрогом для многотипового типа.

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

в метапроге нет ни шаблонов

Есть.

ни концептов

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

СУВТv1 похож на многотиповый, но это уже рантайм структура.

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

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

typedef enum { ST_UNKNOWN=0, ST_SAT=10, ST_UNSAT=20 } sat_state;

тут автору очевидно что такое sat мне лишь очевидно что это какие-то состояния непонятно чего. Понятие «понятное название» растяжимо. Читать мануалы все равно придется, пусть даже в виде комментариев к коду, а может придется и вообще сначала теорию разбирать перед тем как вообще понять в чем смысл кода и какую идею в нем пытались реализовать программно.

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

Ну раз есть, расскажите как они устроены, как происходит семантический анализ «шаблонов метапрога», ведь он же есть, не так ли?

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

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

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

Общая импотенция автора и его приспешников в скилах программирования: на хрен текстовые ЯП, щас я все на лабвью все сварганю. Вон котечка сам признался, что пытался какой-то графический «сварог» сделать, но у него не вышло. Итог очевиден: затягивание и без того затянутой разработки.

ЗЫ: автор конечно упорный и возможно у него выйдет «каменный цветок». Но когда это будет, неизвестно.

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

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

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

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

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

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

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

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

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

вы мне донатьте, а я вам щас сделаю, кто не донатит, пусть идет в жопу

Вы путаете Метапрог с МЕРТВОПРОГом. Метапрог и без донатов успешно развивался и развивается. МЕРТВОПРОГ — нет.

Общая импотенция автора и его приспешников в скилах программирования

Которая соответствует импотенции целевой аудитории, что не так? Свободные инструменты для a11y, например, инвалидами же и пилятся в основном. И естественно, с помощью существующих a11y-инструментов, в том числе проприетарных и платных.

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

прочтите первые темы. именно про донаты речь в первую очередь и пошла. и про то, что все будет на метапроге в его варианте будующего

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

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

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

Отказы разрабатывать без донатов и заметные паузы в работе были?

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

Не знаю как они устроены, но применять умею.

Вот пример шаблонной функции: https://ibb.co/j8xFRgV

рис1 вызывается шаблонная функция, входной аргумент int со значением 311, выходное значение шаблонной функции печатается в консоль.

рис2 печатается размер T, после чего T переводится в массив байтов, и обратно, и выходит return из функции.

Вывод такой:

4 // размер T
311 // значение T

Транслируется вот в это: https://pastebin.com/NdLj1FSt

Так же можно задавать аргументы у функции в виде структур, у которых какой нибудь элемент будет шаблонным.

void fn(struct { T values[]; int length; } argument_a, int argument_b);
Возвращаемое значение тоже можно так задать.

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

Откопали тут тему семилетней давности, где Нас целым форумом уговаривали даже не думать мучать родственников линуксом и тупо накатить им пиратскую винду ;D Как форум-то изменился… Что характерно, того народу здесь уже почти нет, а кто остались — те в Метапрог-темы не заглядывают.

Купили тогда, кстати, планшет таки в итоге. Ноут парой лет позже другие родственники проспонсировали, сразу с пиратской 8.1 и целероном вместо процессора. Игры худо-бедно тянет, даже эмулятор с ведроидом. Но SuperTuxKart и Minetest дитю таки зашли, пока не начали активно контактировать со сверстниками, рекламой в зомбоящике, а позже и тытрубом, переключившись на модные игры и забыв про эти ;D

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

вызывается шаблонная функция, входной аргумент int со значением 311

В каком месте она шаблонная, давайте не int передадим.

печатается размер T, после чего T переводится в массив байтов, и обратно, и выходит return из функции.

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

Транслируется вот в это:

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

у которых какой нибудь элемент будет шаблонным.

А если я хочу пару аргументов «шаблонными»?

Что вообще в данном контексте понимается под «шаблонным», по каким критериям он шаблонный?

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

@metaprog

abcq ★★
()

Версия 30

Подробности в заголовке.

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

целочисленный тип с проверкой границ от нуля до пяти

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

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

Переключатель (свич) и конверсия в строки, какие проблемы?

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

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

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

В каком месте она шаблонная, давайте не int передадим.

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

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

Пример на С++ можно?

А если я хочу пару аргументов «шаблонными»?

Можно.

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

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

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

То это что? На уровне каких таких алгоритмов? Разверните мысль пожалуйста.

Переключатель (свич) и конверсия в строки, какие проблемы?

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

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

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

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

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

а передали int, и передали один раз, наглядно.

А если я хочу пару аргументов «шаблонными»?

Можно.

Пример на С++ можно?

Можно.

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

а передали int, и передали один раз, наглядно.

Ну кто же знал что ты такой недоверчивый, и нужно два примера с разными типами %)

Можно.

Ну так покажи, а то я ничего не понял.

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

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

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

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

То это что? На уровне каких таких алгоритмов? Разверните мысль пожалуйста.

Есть константы и проводки с данными, есть операции над ними, с ними можно вести статический анализ какие значения возможны на том или ином проводке.

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

ну вот и я покажу, когда будет видно что метапрог умеет в параметризованный код и какие-то механизмы схожие на механизмы шаблонов, пока по тому что вы показываете такого вывода я сделать не могу, и дело тут не в доверии, а просто в том что вы говорите что они есть, а потом показываете квадратик и трансляцию с двумя структурами утилитарного толка для выделения памяти в куче. Может сейчас еще @metaprog расскажет что-то, UPDATE но кажется нет.

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

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

Интересное дельце…

Есть константы и проводки с данными, есть операции над ними, с ними можно вести статический анализ какие значения возможны на том или ином проводке.

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

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

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

abcq ★★
()

Метапрог-прототип 30 + многотиповые числовые типы

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

...
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <math.h>
#include <limits.h>
#include <string.h>
 
 
 
 
#include <stdint.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <math.h>
#include <limits.h>
#include <unistd.h>
...

А почему заголовочные файлы стандартной библиотеки всего два раза подключены? Почему не три раза или 10?

Ты специально все типы заменил на __int128? Чтобы твои программы «быстрее» работали? Или это временный костыль?

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

Ты специально все типы заменил на __int128? Чтобы твои программы «быстрее» работали? Или это временный костыль?

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

paramon
()

А почему заголовочные файлы стандартной библиотеки всего два раза подключены? Почему не три раза или 10?

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

Ты специально все типы заменил на __int128? Чтобы твои программы «быстрее» работали? Или это временный костыль?

А __int128 быстрее или медленнее чем 64-битное? В данном случае это чтоб работали факториалы и числа Фибоначчи на как можно больших числах.

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

А __int128 быстрее или медленнее чем 64-битное?

Сложные вычисления (со всякими косинусами и другими штуками) быстрее на float. Простые вычисления на int быстрее всего, в long чуть медленнее, __int128 сильно медленнее.

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

Замедлится ли код, если все переменные сделать atomic? Нужно чтоб параллельные треды не конфликтовали при, скажем, перезаписи указателя или структуры.

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