LINUX.ORG.RU

Метапрог-прототип 16 + СУВТ по енумам

 , , ,


0

2

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

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

Скачать:

https://mega.nz/file/nFBCGKDL#93jJc0bxyq6fc0bKpfPV3sv753dbyP9qfkvbvfK_uBE

Выпуск этой версии подзадержался, так как пришлось отвлечься от разработки. Но изменений тут много. В основном они касаются СУВТ и переключателей (свичей) по ним. СУВТ теперь можно задавать тип-переключатель в виде енума. Также можно задать несколько значений переключателя на один тип. А в блоке условного разветвления по числу/енуму/СУВТ можно задать несколько значений числа на один случай. Также в операции над СУВТ можно задавать нестандартные значения переключателя (не привязанные к определенному типу), а в разветвлении - выставлять реакцию на разные нестандартные значения.

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

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

Метапрог-прототип 15 + модернизация СУВТ



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

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

вот тебе 2 идеи для послежующих демок накидали

@metaprog, если будешь делать, вот тебе скриншот https://imgur.com/MESohnF тетриса «здорового человека». А то, боюсь, выйдет та же хрень, что и с «будильником метапрога».

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

Что такое СУВТ?

Структура условного выбора типа. Местный вариант Variant с накручиванием логики. Более подробно я и сам бы почитал (если б было что) или даже видос посмотрел (если б было где), а то пока что это действительно больше баззворд от авторов.

Владимир

Вот это поворот!

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

Что такое СУВТ? баззворд от авторов.

Гугл на запрос «Структура условного выбора типа» выдает первой ссылкой ЛОР, тему метапрога. Это успех я считаю :)

Владимир

Да он шутит я думаю. Владимир без анонима это неправильный Владимир.

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

Спасибо, теперь я вкурсе как выглядит Джон Малкович. Надо бы и фильм глянуть, может пойму тайну Владимира и тонкой сути данной картинки.

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

Надо бы и фильм глянуть…

Не трать время зря, какая-то херотень для эстетствующих педрил. 15 минут посмотрел и выключил.

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

А я думал, что это Жан Луи Трентиньян, хотя я видел его всего в 2 фильмах. Но если налысо побрить — то очень похож. Наверно.

Владимир

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

какая-то херотень для эстетствующих педрил.

При прочтении сюжета на википедии такие же мысли посетили.

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

Гугл на запрос «Структура условного выбора типа» выдает первой ссылкой ЛОР, тему метапрога. Это успех я считаю :)

По запросу «гуглопеды» тоже ЛОР. Очевидно, что Гугл пиариться по чёрному.

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

Гугл на запрос «Структура условного выбора типа» выдает первой ссылкой ЛОР, тему метапрога. Это успех я считаю :)

Если выдумывать свою терминологию для давно изобретенных вещей, то естественно гугл на это будет реагировать. И это не успех.

Хотя, тут котечка писал:

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

Но никаких реальных примеров использования пресловутых СУВТ приведено не было.

Полезных примеров, решающих какую-нибудь задачу.

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

Если выдумывать свою терминологию для давно изобретенных вещей, то естественно гугл на это будет реагировать. И это не успех.

Да я согласен. Про успех с иронией написал.

Но никаких реальных примеров использования пресловутых СУВТ приведено не было.

Да ТС толи стеснителен, толи шпион по натуре. :) Показывать ничего не спешит. А потом обижается что над ним потешаются. Либо очередная порция троллинга как вариант.

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

Но никаких реальных примеров использования пресловутых СУВТ приведено не было.

Были примеры вроде, но только демки. Ща еще чуток багов побороть и можно будет на СУВТ сделать реализацию протокола Метапрог онлайн на Метапроге. Только времени катастрофически не хватает даже на то чтобы писать на ЛОРе.

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

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

paramon
()

ТС, а зачем свои термины изобретать, когда СУВТ – это АДТ (Алгебраический Тип Данных)?

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

Звучит понятнее на самом деле, да и ОП не знал про АДТ когда придумывал название. Но можно ли считать что СУВТ == АДТ? СУВТ оно шире же, например есть возможность подключения разных имен к одному типу, и можно настраивать тип переключателя, в будущем возможно еще что нибудь добавится.

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

Ну как по мне АДТ вообще не СУВТ, хотя есть сходства в том, что это тип-суммы. В том же haskell

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

через newtype

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

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

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

Я тоже не знаю.

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

СУВТ оно шире же

Нет

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

В абсолютно всех современных языках есть такая возможность, даже в тех, где нет АДТ

можно настраивать тип переключателя

Какое отношение гуй имеет к системе типов?

ОП не знал про АДТ когда придумывал название

Да ладно, лол. Его реализация это один в один Tagged Union, прямо по книжке.

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

В абсолютно всех современных языках есть такая возможность, даже в тех, где нет АДТ

Хм. Ну покажи на расте работающий аналог вот этого:

enum Messages {
  Connect(id: uint32),
  Disocnnect(id: uint32),
  Kick(id: uint32), <--+
                       |
  ForceDisconnect -----+
}
Заполнили Kick, и можно обработать его так же как и ForceDisconnect, и наоборот.

Какое отношение гуй имеет к системе типов?

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

Да ладно, лол.

Да.

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

Переключатель можно сделать enum'ом, и передать сам enum потом в другую переменную, а не целый СУВТ.

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

Хм. Ну покажи на расте работающий аналог вот этого:

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

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018

Я говорил про возможность смены типа переключателя

Какой переключатель, о чем ты?

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

Что держать? Ты код забыл.

Какой переключатель, о чем ты?

СУВТ это:

struct SUVT {
  int perekluchatel; // обрати внимание
  union {
     struct {uint32_t id;} connect;
     struct {uint32_t id;} disconnect;
     ...
  } data;
};

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

Дак это и есть тэг. Это реализация Tagged Union по учебнику, лол)

Тэг может быть интеджером любого размера, и в расте и в си, и даже в го (тэг это обычно простой си-стайл enum).

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

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

То что в метапроге можно менять тип тэга – ну круто, конечно, но совершенно бесссмысленно

Я уже написал как это можно применить. К тому же тэг можно сделать uint8_t, и упаковать.

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

Я уже написал как это можно применить

Где?

Метапрог-прототип 16 + СУВТ по енумам (комментарий)

К тому же тэг можно сделать uint8_t

Удивительно. То есть точно так же как по дефолту в си, расте и го. Инновации!

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

Tagged Union обычно и делают с тегом в виде енама, а по дефолту енамы представлены как раз с помощью типа-алиаса к uint8_t.

В расте тэг тоже по дефолту – u8, пока количество вариантов меньше 2^8

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

Зачем ты просишь пример на расте, если ты не знаешь раст?

У раста нет глобального неймспейса, держу в курсе.

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

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

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

И мне всё еще не яcно зачем эта фича может вообще понадобиться как часть определения енама.

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

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

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

конфликт все равно возникнет в одном модуле.

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

/* тут я пытался привести ироничный пример в котором я страдаю от такого ограничение, но я даже придумать подобный сцуко не могу, настолько проблема надуманная */

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

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

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

Мне вообще непонятно, зачем тип переключателя больше, чем uint8_t, если там надо больше вариантов в union, то это какой-то очень странный код.

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

man type theory

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

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