LINUX.ORG.RU

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

 , , ,


0

2

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

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

Скачать:

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

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

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

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

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



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

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

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

Не остаются. Компилятор все уберет, я уже давал ссылки на godbolt, перестаньте!

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

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

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

И, теперь, самое важное. Всякая там скриптуха бездарная с ворованными llvm пытается кукарекать, что она статическая и там какого-либо динамического диспатча. На самом деле - он там есть. А даже если его там нет - это не важно. Фокус заключается в следующим. Условно где-то под языком существует какой-либо оптимизатор/трансформатор, который каким-то образом убирает(в каких-то случаях) динамический диспатч. Но.

УБИРАНИЕ ДИНАМИЧЕСКОГО ДИСПАТЧА ГДЕ-ЛИБО – НИКОИМ ОБРАЗОМ НЕ УБИРАЕТ ЕГО НА УРОВНЕ ЯЗЫКА. Это фундаментальное правило, которое игнорируют бездарные запартные сектанты. Ведь, если вы внимательно слушали, проблема заключается не в том, что есть какой-то там диспатч в ратайме -нет. Проблема заключается в том, что типы затираются. Т.е. если на уровне языка мы имеем A|B - и каким-то чудом мы это свели до B - на уровне языка ничего не поменялась. В рамках системы типов тип как был не определён - таким и остался. Система типов так же остаётся описательной.

То есть, царь явно написал, что «Компилятор всё уберёт» не спасает от клейма скриптухи. Основной критерий качества метапрога - чтобы ТСу было удобно работать.

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

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

Думаю каждый ищет и найдет то, что ему по душе.

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

Угодить царю практически невозможно, более оправданно «идти по намеченному пути».

Согласен.

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

царь явно написал, что «Компилятор всё уберёт» не спасает от клейма скриптухи

И при этом лезут пруфать сырцами clang, когда Им говорят, что в стандарте определение нечёткое, ну-ну.

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

Вот только зачем, если проще верить в выдуманного Царя (особенно забавно выглядит на фоне утверждений @metaprog о своём атеизме), который уважает и поддерживает @metaprog, в то время как настоящий Царь из крови и плоти гадит в штаны и швыряется их содержимым во всех подряд, включая @metaprog?

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

Либо показывай пример где компилятор ломается на СУВТ и не убирает лишний код с проверками.

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

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

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

Воспитание метапрога продолжается и сегодня у нас на очереди кнут?

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

Второе. Просто мертвопрог опять иудушку подрубает.

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

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

Это же комплекс мессии. Вопрос не в том статическая или динамическая типизация - понимание сложившегося факта не поменяет ровным счётом ничего. Ну будут называть её динамической, программы больше жрать не станут.

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

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

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

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

Второй рассказывает про то как копать граблями быстро, классно и удобно, но по факту оказывается что он копает в несколько раз меньше. Для землекопов есть стандартная отмаза про «Это прототип граблей»

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

Вот только разные «мессии» по идее должны ненавидеть друг друга сильнее, ведь остальные «не мессии» не претендуют на звание носителя истины, а другие «месии» - как раз продвигают свою - другую «правду».

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

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

Разность их в сферах, но не в принципах.

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

Я не обожествляю царя, но разделяю его отношение к недоязыкам типа питона, джавы, джаваскрипта итд, только и всего.

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

Человек, не умеющий программировать

На Лабвью умею. И на текстовых ЯП, если нет другого выхода, тоже умею (например, ардуины). Другое дело, что я текстовыми ЯП в общем случае брезгую, особенно скриптухой типа питона.

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

В старом посте на блоге он смешал меня с говном за вопрос «что не так с Qt Creator?».

Можешь найти ссылку, если не трудно?

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

Но не надо путать лицензии на ПО (политический ход) и техническое качество программ.

Которое тоже идет ко дну. Как та же винда. Или Лабвью - идиоты из NI вместо того, чтобы наконец-то переделать Лабвью «на самом себе» в последние годы принялись... писать LabVIEW NXG на дотнете! Старое Лабвью хоть на плюсах было, но вместо него они говнякают новое на убогой скриптухе от M$. Кстати, NXG еще намного более ограниченное и кривое.

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

Для царя он нигде не нужен на практике

Интересно, что он использует вместо СУВТ.

Во всех фп-срачах он пишет, что в ооп люди гораздо умнее фп-сектантов, их не так просто поиметь.

В сравнении с ФП ООП, наверное, лучше. Но еще лучше как я в Лабвью - ни ООП, ни ФП и жизнь прекрасна.

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

_Generic

Только начиная с С11. И там свои мудрености и сложности. Кстати, я все еще думаю стоит ли использовать потоки из С11 или остановиться на потоках из SDL?

Угодить царю практически невозможно

Он для меня не абсолютный авторитет. Но побеседовать с ним при случае я был бы не прочь.

более оправданно «идти по намеченному пути».

Разумеется.

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

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

Типизация – это гораздо сложнее, чем «проводок правильного цвета».

Каким образом?

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

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

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

Интересно, что он использует вместо СУВТ

У него С++ шаблоны решают все задачи СУВТ и ещё 9000 других задач. Можно принимать любой тип, можно любой тип, который удовлетворяет определённым условиям (привет, концепты и не только), для одного, всех или некоторых типов можно определить специализацию (в простейшем случае «для этого типа делаем то-то»).

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

Но еще лучше как я в Лабвью - ни ООП, ни ФП и жизнь прекрасна.

Он активно применяет элементы и ООП, и приписываемые ФП. Для него неосилятор = поломой.

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

И там свои мудрености и сложности

Зато zero cost, а не свой велосипед типа PyObject*, но менее жручий.

Кстати, я все еще думаю стоит ли использовать потоки из С11 или остановиться на потоках из SDL

Имхо, api sdl проще, но С11 даёт больше гибкости - возможностей. Для более-менее свежих линуксов «из коробки», для старых - https://github.com/jtsiomb/c11threads

Мне достаточно того, что скриптуха:

Если бы ты изучил её на уровне царя, разговор был бы совсем другой. Даже liksys мог бы прислушаться и без надменности обсудить, если бы ты писал, исходя из серьёзного опыта, а не «потыкал палочкой».

Типизация – это гораздо сложнее, чем «проводок правильного цвета»

Каким образом?

Имхо, никто не «объяснит на пальцах» в достаточном объёме. Надо расширять сознание. Представь, что новые типы – это не struct mytype {...}, а template <...> struct mytype {...}, точнее тип - не ярлык на ящике с байтами, а тип - это функция (шаблонный класс), которая принимает другие типы и не только, и возвращает новый конкретный тип (инстанс шаблона). На уровне синтаксиса это можно свести до «разноцветных проводков» с помощью using mytype = very<complex<teemplate>,off<myown<custom<bricks>>>;

Имхо, если семантика (структура, свойства и поведение) типа описывается документацией, мануалами, описанием, интерактивными или не очень обучалками, то по царю это - описательная типизация. Сейчас она повсюду в программировании. Если же семантика обусловлена ТОЛЬКО типами, занесёнными через dependency injection времени компиляции (те же инстансы шаблонов), то для него это - статическая типизация. Имхо, он отрицает типы как «чёрный ящик» (обосновывает, что абстракции всегда протекают) и явно описывать - «этот кубик состоит из таких-то кубиков».

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

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

Я читал, эти короче и проще предыдущей.

В первой есть важный посыл

Тоже самое касательно предметной области. Многим кажется, что проблема решается её сужением. Что это позволяет занять тех, кто не может. Но это так же не так. Они не могут не потому, что область слишком широка - они не могут потому, что не могут. Выделить какую-то область в принципе невозможно - все друг с другом пересекаются. И никакие абстракции не помогают - это так же мифология. Абстракция протекает и её поведением обусловлено внешними процессами, которые ввиду сложности не могут быть описаны.

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

Вся суть статьи про то, как пацаны (по мнению царя) хотят писать весь код и интерфесы в стиле «шаблон на шаблоне сидит и шаблоном погоняет». Но перед ними ставят требования - «чтобы эту библиотеку можно было легко вызывать из других ЯП - питон, джава, какой угодно». Вся статья пропитана злостью «как скриптуха заставляет писать примитивные extern "C" api, не давая возможности раскрыться истинной мощи современных крестов.»

Он хочет, чтобы библиотеки, написанные на С/С++, нельзя было вызывать из других ЯП. Если бы это случилось - остальные ЯП мигом бы слились по всем фронтам. Но, имхо, это нереально в мире, где курс прокладывают директора крупных компаний, а не простые разработчики. Тем более, что почти у каждой большой it компании есть свой любимый ЯП, который они продвигают.

В конце любопытные итоги:

Запарта всегда убеждает хомячков, что нужно жрать дерьмо. Мир убеждает, что нужно жрать дерьмо. Хозяин хочет, чтобы все жрали дерьмо. Если у тебя есть мозг - это твоя проблема, это твоя ноша. Ты либо будешь рабом, используя всё то и производя то, для чего мозг не нужен.

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

И цель проста - выкинуть всю ту сложность, что обусловлена только одним - бездарностью. Ведь это даже не сложность - это произвольный набор херни, понять который невозможно. Это позволит выкинуть 100%, заменив всё это на 10%(по объёму) сложностью реальной. И ключевая особенность реальной сложности заключается в том, как я уже говорил - она познаваема.

Вторая статья сводится к:

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

Резюмируя. Мало того, что ast шланга дерьмо. Его ещё и исправить невозможно. Оно ущербно by-design и это не изменить, даже полностью его переписав.

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

Только начиная с С11

Он у тебя и так использовался? Вроде приходилось выставлять стандарт.

Кстати, я все еще думаю стоит ли использовать потоки из С11 или остановиться на потоках из SDL?

SDL2 на старых версиях дистрибутивов есть, а C11 threads нету.

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

Зато zero cost, а не свой велосипед типа PyObject*, но менее жручий.

СУВТ тоже зерокост.

Имхо, никто не «объяснит на пальцах» в достаточном объёме.

Ну тогда полезность сомнительна. В метапроге шаблонные функции есть кстати.

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

Для реализации этого нужна критическая масса людей, которые могут и у которых нет хозяина.

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

Кстати, как там с письмом Столлману по GPLv4?

А ведь ещё хозяева могут натравить своих рабов на усиление пропаганды дерьма и на поливание дерьмом других подходов. То есть отсутствие хозяина - не гарант того, что не будут мешать.

Метапрог дерьмом поливают еще как. Как-то царь даже подмечал, что «адепты раста» ругают Метапрог за то, за что не ругают раст.

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

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

Сейчас я напоролся на серьезный баг в кодогенераторе: код, который готовит данные для того, что сидит в теле условия, может запаститься кодогенератором ПОСЛЕ тела условия. Когда решу этот баг - будет 17 версия и тогда, надеюсь, уже можно будет сделать чатик Метапрог онлайн.

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

Он у тебя и так использовался?

Не, компилю по дефолту, кажется, на С99.

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

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

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

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

Ну вот, мы есть. Правда у нас чуток разные подходы.

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

Простой тест - если человек не может прочитать весь код этой библиотеки (а не только «как использовать») и полностью понять его семантику (про время не говорим) а также сам писать в таком стиле, то для царя он «не может».

Кстати, как там с письмом Столлману по GPLv4?

Забыл, надо бы сделать.

Метапрог дерьмом поливают еще как

Потоки говна в сторону метапрога - это пыль по сравнению с потоками говна в сторону Си. А ведь может быть западло «специально препятствую этим devtools работать на моей платформе». Как с non jvm ЯП на андроиде если хочется использовать родную библиотеку гуя.

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

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

Для этого нужно понимать все use cases шаблонов (даже черезжопные). Осмелюсь предположить, что многие люди, которые коммитят в clang (компилятор!), не до конца понимают всей мощи шаблонов (особенно те, на которые делает упор царь). Особенно если они занимаются лютым low level, а не реализацией фич из стандарта и пропозалов.

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

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

Мне вроде как удалось побороть проблему очередности кодогенерации перед условиями (описанную выше), теперь осталось еще кое-что доделать и будет выпуск 17 версии. Кстати, думаю сделать еще и переключатель (свич) и СУВТ по логическому типу (да/нет).

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

Как же иначе из тебя сделать хоть сколько-нибудь приемлемого члена общества?

члена

По этой части у меня все в норме, поверь.

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