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)

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

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

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

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

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

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

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

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

C++ же и вовсе ущербен, поскольку обойти инкапсуляцию в нём некак и приходится копипастить внешние компоненты в свой проект. А если эти компоненты ещё и без исходников, то…

гусары, молчать!

Владимир.

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

Это не просто перегрузка, это уже аналог дженериков и абстрактных типов данных!

И ООП здесь ни при чём, вон в голанге интерфейсы и композиция есть, но ООП как такового нет.

Всё ещё будете кукарекать про «C в кружочках»? ;)

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

Каких каких типов это аналог? Абстрактных? Ну тут уж вы совсем загнули.

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

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

Молоток тоже вреден - сколько им голов пробили за всю историю!

Может быть все таки тут вопрос применимости какой то конкретной методики в рамках конкретной разработки?

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

Ну Они и ООП злом считали, но тут ведь утверждают, что что-то такое в итоге всё же получилось ;)

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

Без разницы, какая разработка; необходимость полезть в приватные кишки возникнуть может; предугадать это — нельзя, всё равно что пытаться предугадать длины текстовых строк.

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

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

Но для большинства практик достаточно и главное безопасно использование публичного API на мой взгляд

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

И скорее всего у прошаренного разработчика

А остальным страдать? Или передавать таску этим самым «прошаренным разработчикам»?

И для этого придуманы сорцы.

А если сырцов нет? При крайней необходимости можно, конечно, декомпильнуть, но это ж полный треш…

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

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

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

то как вы вообще в кишки чужого кода заглянуть хотите?

А зачем? Вместо этого хедеры поставляются для использования библиотек.

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

Так в этом и проблема.

Со стороны авторов библиотеки, которые топят за инкапсуляцию, это — «зачем?» Наэкспортировали публичных API, остальное попрятали. На своё усмотрение, они-то думают, что в приватные свойства и методы лезть резонно не нужно.

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

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

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

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

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

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

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

Теперь осталось сделать цикл по структуре.

Какое практическое применение этой хрени? Что она облегчает в программировании? Будут конкретные примеры?

ЗЫ: да, тут наезжаю. Год назад нам обещали «метапрог сам на себе», а вместо него нам анонсируют какие-то «циклы по структуре».

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

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

В кишки GTK можно влезь по самые помидоры, если нужно – это Сишка, а не плюсы или шарп. «навязчивой инкапсуляции» – сказал бы просто, что не осилил довольно простую либу.

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

Процитирую себя же.

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

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

Если разработка СУВТ является самоцелью, то тут можно усмотреть даже нечто метафизическое, философское, в этой попытке объять необъятное.

ТС так упорно отрицает ООП, что рано или поздно выпустит какой-нибудь СУВТ v42, в котором будет реализовано всё ООП (ну может, кроме инкапсуляции).

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

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

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

ТС так упорно отрицает ООП, что рано или поздно выпустит какой-нибудь СУВТ v42, в котором будет реализовано всё ООП (ну может, кроме инкапсуляции).

Если я вдруг реализую что-то из объекто-ориентированного, функционального, структурного, деревянного, обобщенного, вагинально-фаллического, аспекто-ориентированного, полиморфного, рефлексивного и прочего программирования - слава яйцам, что я это сделал, не заморачиваясь с тоннами макулатуры и гигабайтами талмудов сферической теории в вакууме. Как начинал читать википедию по всем этим парадигмам программирования (или как их там) - так тут же и заканчивал. Как же людям не скучно такое писать, если мне даже читать это влом? Чтоб чего-то достичь, надо просто брать и делать!

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

Цикл по структуре дает возможность пробежаться по полям структуры. Полезно для таких вещей как, например, сериализация.

Год назад нам обещали «метапрог сам на себе», а вместо него нам анонсируют какие-то «циклы по структуре».

Ну так планы по Метапрогу на самом себе никто и не отменял. Только что ТЫ лично для этого сделал, чтобы кидать мне какие-либо предъявы?

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

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

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

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

структура С {
  целое Ц;
  дробное Д;
  неведомая_хрень *НХ; // указатель на неведомую хрень.
};

С переменная_С; // объявили переменную с типом нашей структуры

... // здесь что-то с этой переменной поделали

цикл_по_структуре (элемент_структуры переменная_С) {
  Что здесь делать с "элемент_структуры" каждую итерацию имеющий разный тип? Как это поможет с сериализацией, десериализацией, особенно с указателем на "неведомую хрень"? От тебя ничего сверхестественного не требуют. Просто покажи, как это будет работать и в чем заключается преимущество такой языковой конструкции?
}

Ну так планы по Метапрогу на самом себе никто и не отменял.

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

Только что ТЫ лично для этого сделал, чтобы кидать мне какие-либо предъявы?

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

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

как сложилась судьба лоральмолога 35? Что слышно по нативному билду для онтопика.

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

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

Слитые копирастические исходники - это всего лишь одна из потенциальных возможностей

… Накуканить свой проект и накуканиться самому.

мне пока заниматься этим некогда

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

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

Какое практическое применение этой хрени?

for..in, не? В сишечке такого нет.

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

такой бредятиной как стили CSS

Надо было брать GTK+2 ;) Выше — говно.

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

каждую итерацию имеющий разный тип

И что? Их вполне можно засунуть в СУВТ(Ц,Д,*НХ). Причём среда вполне может сгенерировать её автоматически, типы полей структуры ведь известны. Весьма любопытная концепция.

А ещё в частных случаях (вектор, например), типы полей структуры одинаковы. Такие структуры, конечно, можно заменить массивами, но в коде удобнее указывать sqrt(vector.x ** 2 + vector.y ** 2), чем sqrt(vector[0] ** 2 + vector[1] ** 2).

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

А это мысля, можно вполне слепить локаль Win1251 на основе КОИ8-Р.

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

… Накуканить свой проект и накуканиться самому.

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

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

Не имеет смысла, наследование легко реализуется с помощью compile-time диаграмм.

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

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

saibogo ★★★★
()
Ответ на: комментарий от cluge
char *to_text(<T> obj) {
    char *str = NULL;
    
    append(str, "{");
    
    цикл_по_структуре(многотиповый_t поле, obj) {
        switch(поле) {
            case int -> v {
                append(str, "int(%d),", v);
            }
            case float -> v {
                append(str, "float(%f),", v);
            }
            case bool -> v {
                append(str, "bool(%s),", v ? "true" : "false");
            }
        }
    }
    
    append(str, "}");
}

int main() {
    struct { int a = 10; float b = 20.5; bool c = true; } st;
    printf(to_text(st));
    /* stdout:
     * {int(10),float(20.5),c(true),} 
     */
    
    // обратную функцию можно сделать так же
}

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

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

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

Достаточно того, что Вы думаете фигню.

Если программа перестала собираться с новой версией G{TK+|tk}, то разработчику как-то посрать, приватное поле там сломали или публичное. Один хрень лишняя работа выходит, а на отлов проблемы особо не влияет, приватное или публичное.

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

Потому что @metaprog некогда отвечать на дурацкие вопросы, посему работой с общественностью в основном занимаются другие.

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

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

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