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)

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

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

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

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

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

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

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

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

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

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

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

Еще немного, и ты изобретешь GIL

метапрог = убогая скриптуха

liksys ★★★★
()

@metaprog, когда наконец твой транслятор научится не высирать все в мейн? Как валгриндом-то пользоваться?

liksys ★★★★
()

Гы-гы-гы, котечка на что-то обиделся, опять самозабанился.

cluge
()

Фибоначчи, выглядит она так: https://i.postimg.cc/D0W8v7XZ/image.png

Господа, вот даже не соц. опрос, а просто опрос. Ответьте, если можете.

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

Циклом:

proc fib n {
    lassign {0 1} a b
    while {$n > 0} {
        lassign [list $b [expr {$a + $b}]] a b
        incr n -1
    }
    return $a
}

puts [fib [gets stdin]]

Простая рекурсия:

proc fib n {
    expr {$n < 2 ? $n : [fib [expr {$n - 1}]] + [fib [expr {$n - 2}]]}
}

puts [fib [gets stdin]]

Хвостовая рекурсия:

proc fib n {
    proc fibt {a b n} {
        expr {$n <= 0 ? $b : [tailcall fibt [expr {$a + $b}] $a [incr n -1]]}
    }
    fibt 1 0 $n
}

puts [fib [gets stdin]]

ЗЫ: Метапрог, почему у тебя на входе схем всегда константы? З0 версия метапрога, а до сих пор не осилил ввод с консоли?

ЗЫЫ: Метапрог, давай посчитай с помощью метапрога милллионное число Фибоначчи, моя убогая скриптуха посчитала за приемлемое время. Печатать его сюда не буду, потому что оно настолько огромно, что столько атомов в видимой вселенной нет.

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

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

Но если так удобно конкретно ему, то абсолютно непонятно зачем позиционировать среду как среду для домохозяек

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

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

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

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

Кстати за сколько подсчиталось милионное число? На третьем питоне за примерно 13 секунд на моей древней машинке

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

На третьем питоне за примерно 13 секунд на моей древней машинке

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

def fib(n):
    a, b = 0, 1
    while n > 0:
        a, b = b, a + b
        n -= 1
    return a

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

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

На C тоже есть «biginteger»: gmp

Для Visual Studio C есть форк: https://github.com/BrianGladman/mpir , так что это не только для gcc решение…

https://wandbox.org/permlink/cTAgfBWejfhFPHi7

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

Спасибо. Я другие реализации встречал, даже сам писал. Но тут немного в другом идея: в скриптовом по сути языке сделано так, чтобы пользователь не задумывался о максимально допустимом значении. С точки зрения производительности конечно не фонтан, но с точки зрения неподготовленного человека - само то

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

На C тоже есть «biginteger»: gmp

Вон же Метапрогр утверждает, что в метапроге легко и просто использовать Сишные библиотеки. Пусть покажет, насколько это легко и просто.

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

Ты на Си написал, а не на метапроге, как просили.

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

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

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

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

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

должно быть не так сложно

Так ведь и редактор графов сделать должно быть не так сложно. И кодогенерация из графа тоже не должна быть сложной.

i-rinat ★★★★★
()

Давно меня не было. Ну что там у нас, ага, многотиповый тип, переключатель,СУВТ.

Собственно за пол года ничего не изменилось, когда там метапрог на самом себе?

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

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

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

А вы таки горите желанием на нем что нибудь пособирать?)))

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

Собственно за пол года ничего не изменилось, когда там метапрог на самом себе?

С дивана, конечно, легко судить как все медленно. Это ж ведь не делать самому, со стороны всегда виднее, так ведь?

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

На лабвью я вот сделал, но это не так уж и просто как кажется с дивана.

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

Где метапрог сам на себе-то? Когда революции ждать? Где хоть один разработчик на этом поделии, кроме тебя? Твой клоун не в счёт.

liksys ★★★★
()
Ответ на: Версия 31 от metaprog

Версия 31

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

доработка транслятора для трансляции циклов, включающих в себя жесткие последовательности

Т.е трансляция циклов, включающих в себя «мягкие последовательности» до этого нормально работала?

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

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

Ты просто вдумайся. Это поделие пилится уже ДВА года, а в нем до сих пор глюки с элементарными циклами.

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

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

Лучше сначала видео мне запишите

Чем картинки не устраивают? Так и трансляцию можно не понять. На вход подается struct { size_t len; T *p; }; без преувеличений, я думаю это все что нужно понимать.

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

Ничего заменять не нужно будет, метапрог гибкий. Мат.Операторы это функции принимающий на вход std::variant<short,int,float,...>, можно просто добавить в этот variant новый тип mpq_t из gmp, и в диаграммах Мат.Операторов добавить ветку в switch которая новый тип будет обрабатывать. В итоге можно будет сменить только тип входных чисел ака констант.

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

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

По сути есть тот же DOM, состоит он из СУВТ, при этом кастомные компоненты описываются двумя способами:

  • С помощью компоновки СУВТ
  • С помощью immediate отрисовки через nuklear, этот способ более гибкий, но в скорости разработки совсем не уступает первому, плюс удобно биндить данные
AdonisSexyBoy
()
Ответ на: комментарий от AdonisSexyBoy

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

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

@metaprog, ты опять прячешься от неудобных вопросов? Повторюсь: почему у тебя спустя два года разработки до сих пор глючат циклы?

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

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

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

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

Трансляции как раз таки более понятные, но вы почему-то на этот раз не приложили их.

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

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

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

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

В метапроге появилась лучшая концепция построения gui,

которая

позволит

Я это уже годы слышу, начиная с appimage, версии под линукс, метапрог сам на себе, понятные схемы и тд. Всё когда-то что-то позволит, какие-то неведомые дали в которые стремится метапрог, но так их и не достигает.

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

С дивана, конечно, легко судить как все медленно. Это ж ведь не делать самому, со стороны всегда виднее, так ведь?

Так ты выложил свой продукт в открытый доступ, открыл тему в открытом доступе. Следовательно - имею право.

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

Я это уже годы слышу

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

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

Она уже существует и позволяет.

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

Это было бы визуальное построение интерфейсов. В метапроге этого нет, и не будет.

Только нужно еще приложения сделать для демонстрации

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

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

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

Сейчас посмотрите эту схемку по ссылке и посмотрите код на тикле. Во что вы быстрее сможете вьехать?

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

Даже не имея представления о том, что есть «Числа Фибоначчи», приложив усилия можно разобраться в логике того, что написано.

В логике кубиков с стрелками я разобраться лично не могу. Потому что я не знаю что они значат.

Ему бы для начала таблицу сделать «Иконка квадратная» - это, «Иконка треугольная» - это.

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

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

Лучшая концепция построения гуя - это всякие дизайнеры

Нет, плюс сложности с динамикой - Современные погроммисты (комментарий)

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

А то я не знал, преимущества я уже называл, скорость разработки и простота. Qt, Gtk, wxWidgets не дадут тебе так просто описывать интерфейс, опциональную реактивность, и удобную привязку данных к шаблону который можно запустить в foreach каком нибудь.

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

Нет, плюс сложности с динамикой - Современные погроммисты (комментарий)

Частный опыт и мнение, имеет право. Но выдавать за пруфы, чей-то личный опыт в виде комента на лоре, это конечно обсёр.

скорость разработки и простота.

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

За 2 года имеет недочат, сам кривой метапрог который глючит и лагает, будильник. Даже представить сложно как вы добились такой выдающиеся скорости, простоты и эффективности (нет).

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

Частный опыт и мнение, имеет право. Но выдавать за пруфы, чей-то личный опыт в виде комента на лоре, это конечно обсёр.

Ты просто нулевый и не понимаешь очевидных вещей, зачем ты вообще пытаешься спорить? Как ты например будешь через редактор форм привязывать компоненты к данным? А даже если привяжешь (как именно не представляю) то все равно редактор будет бесполезен если компонент активно меняется в зависимости от данных, и ты все равно не сможешь увидеть как он себя поведет.

Собственно что твоё утверждение, что моё - практикой не подтверждается.

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

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