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)

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

Так автор уже и ответил — он ОТКАЗАЛСЯ от лазанья по приватным полям и перешёл на другую библиотеку, где это не нужно.

Да, я тоже, получается, «ответил за Метапрога», но я просто внимательно прочитал его ответ. Он как раз НЕ собирается лазить по приватным полям.

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

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

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

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

paramon
()

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

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

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

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

Так автор уже и ответил — он ОТКАЗАЛСЯ от лазанья по приватным полям и перешёл на другую библиотеку, где это не нужно.

Совершенно верно.

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

Автор не сможет переписать все и ему нужно будет использовать сторонние либы. Да он и сейчас их неявно использует

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

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

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

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

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

Да. Что-то типа константного СУВТ, тип которого определяется по время кодогенерации, а не в рантайме.

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

Почему без этого нельзя написать метапрог сам на себе?

Ну его вообще нереально написать на самом себе, так как на Метапроге схемы собирают, а не пишут. А если именно писать на текстовых ЯП, то это уже был бы не на самом себе.

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

Сколько можно оттягивать?

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

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

а может через годы

Батющки, неужто прозрел.

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

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

Батющки, неужто прозрел.

Расскажи мне, как сделать крупный проект за день, не имея армию кодеров на зарплате.

Теперь осталось только выбросить в помойку лабвью и начать писать на нормальных языках

Каких? Только не пиз рассказывай мне, что на питоне я все сделаю за день.

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

Расскажи мне, как сделать крупный проект за день…

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

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

Расскажи мне, как сделать крупный проект за день, не имея армию кодеров на зарплате.

А кто тебе говорит про день? Могу тебе рассказать, как сделать за пару лет (которые ты уже потратил впустую). Полагаю, мой опыт довольно показателен. Я уже даже свое железо начинаю выпускать.

Каких?

Любой язык с высокой выразительностью. Не нравится тебе питон (субъективно, потому что тебе всякие кловуны напели, а сам ты ни черта не знаешь) - возьми го. Он компилируемый, в нем нет ненавистного тебе ООП и не придется пердолиться с ручным управлением памятью и всякими словарями/списками, которые тебе однозначно понадобятся. Можешь валу взять. Можешь даже c# с моно использовать, всяко лучше лабвью.

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

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

Каких?

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

Да хотя бы даже Free Pascal, который местная школота считает языком для школоты, бгг. Стопудово мучений будет меньше, чем с лабвью, и 3D-ускорение для нормальной отрисовки квадратиков не нужно будет.

Я бы взял C++, но это потому, что это мой основной ЯП, мне на нём тупо привычнее.

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

Он и есть язык для школоты. Паскаль задумывался, как учебный язык, и писать на нем что-то серьезное, особенно сейчас - натуральное безумие. Смысл какой?

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

Хороший прикладной язык. С нормальными модулями (а не костылями на препроцессоре), человеческим синтаксисом (сишная традиция, по которой определение функции от определения переменной можно отличить, только дойдя до скобки со списком параметров, далеко не лучшая, и многие современные ЯП, тот же Go, например, от неё отходят) и др.

Не идеален (я на крестах давно уже отвык от привычки объявлять все переменные в начале блока, а инициализировать где-то в немножко совсем другом месте, более слабое ООП), но очень приятен.

Да, я сравниваю с крестами. Возможно, если сравнивать с тем же Go, сам паскаль как язык никаких преимуществ иметь уже не будет (но у него есть LCL, в Go есть на чём переносимый GUI рисовать?)

Паскаль задумывался, как учебный язык

Так я сразу и написал, что я про FPC, а не про виртовский Паскаль 197* года :)

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

У паскаля не менее уродливый синтаксис и семантика. Чего только стоят begin-end, индексы с единицы и прочий треш. По сравнению с си сразу видно, какой язык теоретик делал, а какой - практики.

FPC я считаю некрофилией, потому что смысла в нем вообще никакого нет.

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

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

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

Всё там нормально с begin и end. Да, это делалось для людей, не для роботов. Индексы с единицы — холиварная тема, где-то удобнее так, где-то этак. (Массивы, кстати, можно индексировать не только с единицы и нуля, но и с других целых чисел.)

Про «теоретика и практиков» это вообще толстота.

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

Ты же сам видишь, что практика в итоге порешала.

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

Ну во первых, проект у тебя не крупный, чтобы ты там не думал – это всего лишь транслятор диаграмм в Си

Ну так давай, делай, если все так просто. Что-то не вижу я альтернативных реализаций. Где же rebforce с его «Антиметапрогом» на реде?!

А воз и ныне там: никакого обещанного год назад метапрога на самом себе не предвидится в ближайшем будущем.

С диванчика-то виднее, хехе:)

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

А кто тебе говорит про день? Могу тебе рассказать, как сделать за пару лет (которые ты уже потратил впустую).

Ну так и я пару лет на месте не стоял. И что именно ты сделал? Сервер для торрентов (при этом топя за копирайт) или KVM?

Любой язык с высокой выразительностью. Не нравится тебе питон (субъективно, потому что тебе всякие кловуны напели, а сам ты ни черта не знаешь) - возьми го. Он компилируемый, в нем нет ненавистного тебе ООП и не придется пердолиться с ручным управлением памятью и всякими словарями/списками, которые тебе однозначно понадобятся.

Про го говорят, что там даже дженериков нет. А в Метапрог я вкрутил СУВТ и многотиповой (аналог СУВТ, где тип определяется во время кодогенерации, а не в рантайме).

Можешь валу взять. Можешь даже c# с моно использовать, всяко лучше лабвью.

А чем эта скриптуха лучше Лабвью?

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

Ох лол, где же альтернативные реализации, сделанные быстрее моей?

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

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

Для этого есть Си и прототип Метапрога его использует как бекенд.

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

Ну уж лучше чем Go (и остальной дичи что ты насоветовал) у которого нету нормального ffi и gui-библиотек.

А с сишным бекендом даже FFI особо и не нужно, по крайней мере сейчас. А графические библиотеки есть:)

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

У паскаля не менее уродливый синтаксис и семантика. Чего только стоят begin-end, индексы с единицы и прочий треш. По сравнению с си сразу видно, какой язык теоретик делал, а какой - практики.

А вот это плюсую, на делфи пописать чуток довелось.

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

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

В паскале тоже индексы с нуля. И числовые типы ещё чище чем в С(нету всяких _t)

Типы в FPC:

int8
int16
int32
int64

uint8
uint16
uint32
uint64

single (единственный тип, чуток не так называется)(это float, если не понятно)
double

boolean (вот ещё чуток отличается от С, но boolean тоже много в каких языках записывается полным словом...)

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

не разрушайте веру человека в уникальность Си

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

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

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

Ну так давай, делай, если все так просто. Что-то не вижу я альтернативных реализаций. Где же rebforce с его «Антиметапрогом» на реде?!

Тебе уже объясняли сто раз. Объясню сто первый. Люди не готовы тратить неделю своего времени на хероту, которая в итоге будет просто выброшена. Ребфорс банально плюнул на это дело. Нет смысла тебе доказывать, что тут работы действительно на неделю, понимаешь? Это очевидно всем, кроме тебя и твоих клоунов.

С диванчика-то виднее, хехе:)

Напомню, что год назад со своего диванчика я говорил, что нихрена ты не сделаешь. Помню, как ты петушился в ответ. Прошел год, я оказался прав. Вот буквально вчера ты сам признался, что понадобятся еще ГОДЫ. Итак, моя оценка была верной.

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

Ну да, я вижу. Что там сделано, текущий будильник? Глючащие циклы на второй год разработки средства программирования (позор)? Никому не нужные СУВТ?

Про го говорят, что там даже дженериков нет.

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

А чем эта скриптуха лучше Лабвью?

Выразительностью. Ты: 1) не знаешь, что такое скриптуха; 2) не имеешь опыта написания на этих языках. Ты судишь со слов всяких клоунов типа царя. Пока ты не обретешь опыт (то есть не напишешь проект средних размеров) на этих языках - твое мнение в этом вопросе является ничтожным.

Ох лол, где же альтернативные реализации, сделанные быстрее моей?

Кому это нужно-то? Даже не-альтернативная реализация за два года разработки НИКОМУ не нужна.

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

Что-то не вижу я альтернативных реализаций.

Не может быть альтернатив у чего-то, чего нет.

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

А время на собирание цитат, создание рсс каналов и метапрог.орг имеется, ага.

Напомню, что год назад со своего диванчика я говорил

Что вот вот и разработка прекратится.

Ты: 1) не знаешь, что такое скриптуха

Это ты не знаешь, ОП знает по нормальному определению от царя.

не имеешь опыта написания на этих языках

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

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

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

В С есть макросы, это вполне себе дженерики. В го есть макросы?

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

Это работает, но дженерики из них херовые. В гошке есть билд-теги, это кастрированная версия макросов. Еще есть костыли всякие.

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

Царь видел некоторую скриптуху

Побежал показывать

Косплеишь царя? И это, пусть дающий определение его истинность и доказывает. Шалтаев-Болтаев и так как собак нерезаных.

Дефолтное определение, конечно, размытое и неидеальное. Оно другим и не может быть, учитывая, что сегодня почти что угодно можно написать почти на чём угодно (и ТС тому яркий пример). А особенность жаваскрипта в том, что его как раз и пихают куда угодно.

В ветке, если что, речь шла про C#. К нему можно относиться как угодно, любить, ненавидеть, использовать, не использовать — но называть его «скриптухой», т.е. ставить в один ряд с башем и перлом — это абсурд.

P.S. Определение царя: «Скриптуха это всё то, что является бездарным дерьмом и паразитом на теле С/С++. Что не является самодостаточным». БГГ

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

А если GC есть, а виртуальной машины нет, код нативный (D)? Это скриптуха или нет?

Ну и FreePascal по этому определению, очевидно, НЕ скриптуха, а царь считает, что да.

hobbit ★★★★★
()
Ответ на: Царь видел некоторую скриптуху от hobbit

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

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

PS: царь громкий и нет ничего удивительного, что метаклоуны повелись на его крики. Когда мозгов нет - высокопримативность решает, ага.

liksys ★★★★
()
Последнее исправление: liksys (всего исправлений: 1)
Ответ на: Царь видел некоторую скриптуху от hobbit

Определение царя

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

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

Не в GC дело, нужны именно вещи которые выполняются в рантайме и язычек без них не может, например язык компилируется, но у него лишь один тип SUVT { int, string, double } и при любых операциях постоянно проверяется тип и в зависимости от него выполняется сложение, или конектация строк... + скриптуха детектится по убогости, всякие трейты, «int|string» типы...

i-rinat C++ и C не могут своровать С++ и C у себя, так как они ими и являются.

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

заявления о паразитировании на LLVM - это же натуральный бред, особенно учитывая, что LLVM и предназначен для создания компиляторов

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

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

C++ и C не могут своровать С++ и C у себя, так как они ими и являются.

Ты пытаешься использовать здравый смысл для толкования высказываний Царя? Самому не смешно?

i-rinat ★★★★★
()

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

@paramon, ради такого случая я даже снизойду до чтения твоего ответа. Ну-ка, почему метапрог не является скриптухой?

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

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

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