LINUX.ORG.RU

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

 , , ,


0

2

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

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

Скачать:

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

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

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

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

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



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

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

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

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

Так беда в том, что приведения типов в рантайме ни разу не эффективны.

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

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

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

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

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

Речь не о конкретно отношении Царя к Haskell, а о том, что программировать в рамках строгой парадигмы в принципе реально. Парадигма здесь другая.

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

Никто не будет против альтернативы, проблема в том, что альтернативщиков то вроде не так и много.

То есть претензия та же, что к Метапрогу — #спервадобейся, ясно.

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

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

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

Царь неявно назвал тебя «тупым дошколёнком, который сожрёт любую херню». Это же оскорбление. Понимаю, что царь может прикольно и весело оскорблять, но всё же.

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

Почему когда царь оскорбляет - соглашаешься, а когда остальные клеймят «необучаемым дворником» (менее острое оскорбление) - обижаешься?

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

Если что, по такой логике ты, я, @liksys и все-все-все (Яндекс, Фаанги тоже) – тупые дошколята

Насчет тебя не знаю (на тебя еще надежда есть), насчет liksys и корпорастов - самое оно. Корпорастов я довольно часто критикую и большую их часть (особенно в ИТ) считаю идиотами, ничего кроме маркетинга не умеющими. Кстати, что за Фаанги?

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

Это же как раз про СУВТ.

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

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

Это не претензия это факт который нельзя игнорировать. Чтобы что-то поливать грязью, нужно давать альтернативу, рабочую и не хуже того что уже есть.

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

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

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

Я б не прочь с ним подискутировать, если б его не банили на ЛОРе.

Ну дак дуйте к нему в блог, в чём проблема-то?

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

СУВТ вводит жестко ограниченный рантайм-полиморфизм только там, где он конкретно нужен на практике

У Царя нет таких полумер. Если рантайм-полиморфизм есть — значит, скриптуха. Не пытайтесь оправдаться и улизнуть от статуса пыли запартной.

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

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

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

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

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

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

У царя две проблемы.

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

Вторая – ему бы надо к психиатру сходить, ну или хотя бы к психологу.

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

Я б с ним поговорил, если б он мог тут писать

У Вас опять на ЛОРе свет клином сошёлся?

Даже те же СУВТ - это всего лишь статически определенный юнион с селектором.

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

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

Это так умилительно. Человек, не умеющий программировать, имеет мнение, разделяет отношение и спорит за бинарные форматы. Шариков, натуральный Шариков. Отнять и поделить.

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

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

Не надо. ШУЕ! ППШ! ШПШ!

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

Думаю, он бы понял отличие Метапрога от скриптухи

Вот только для царя «скриптуха» — это необъятное понятие, в которое вмещается всё, что царю не нравится.

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

А всё, что нравится, называется плюсами.

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

мне не интересны ни царь, ни остальные лоровские шизики

Я же не предлагаю читать Шекспира царя в оригинале. Лишь весьма краткую выжимку.

Мне не интересно дрочево на C++. Мне не интересно дрочево на скриптуху.

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

Мне хочется ехать, а не абстрактные теоретические шашечки.

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

Я знаю плюсы статической типизации и ее ограничения

Основной посыл статьи - то, что принято называть статической типизацией, на самом деле - динамическая типизация (в понятиях царя). А «настоящую» статическую типизацию - царь как раз пытается родить.

Хотя надо бы детальнее проанализировать твой сишный код с гитхаба. Заранее - сколько там жонлирования указателями на функции?

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

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

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

Корпорастов я довольно часто критикую и большую их часть (особенно в ИТ) считаю идиотами, ничего кроме маркетинга не умеющими

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

Кстати, что за Фаанги?

FAANG - Facebook, Amazon, Apple, Netflix, Google.

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

Лишь весьма краткую выжимку.

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

Там весьма фундаментальные тезисы

С фундаментальными принципами ЯП я знаком. Фундаментальные тезисы царя мне не интересны.

ТС тоже хочет «ехать»

Неуместное сравнение.

в понятиях царя

Я уже писал об интересах.

сколько там жонлирования указателями на функции?

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

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

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

Для царя он нигде не нужен на практике, значит - динамическая типизация.

Никаких придурей типа ООП.

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

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

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

Царь - исключение. Правда, его идеи ценны не для всех.

сколько там жонлирования указателями на функции?

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

Тогда этот код должен быть вполне в духе идеалов царя. Кроме «где используемые либы требуют каллбеки».

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

Я знаю плюсы статической типизации и ее ограничения. Я знаю оные для динамической типизации.

Эффект фреди крюгера, наглядно.

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

С недавних пор «скриптуха» – вполне конкретное понятие в силу этого и:

Если какая-либо часть семантики языка не определяется типами, а определяется какой-либо реализованной в рантайме логикой - это описательная типизация. Очень хорошо это заметно на примере TS. Вся семантика там - это js, и типизация динамическая. Сверху поверх этого навешаны типы, но это не более чем аннотации для статического анализатора. Никак на логику исполнения программы - они не влияют, и ничего не определяют.

По сути все подобные языки - это динамическая скриптуха, но с прикрученным поверх статическим анализатором, для которого и пишутся типовые аннотации. Все подобные языки я называю скриптухой. И они ею по определению(даже сектантскому) являются.

Любой может запутаться после

сишка так же является скриптухой

хейтил и хейчу C++. Си с классами - это чистая скриптуха

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

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

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

В принципе да. Поэтому можно использовать субъективные критерии оценки ценности на основе вовлеченности масс и влияния на область знания.

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

Для царя он нигде не нужен на практике, значит - динамическая типизация.

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

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

И опять же тезис без доказательств. Да и каковы критерии этого ума? Все это бессмысленный срач на ровном месте.

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

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

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

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

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

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

Он почти всегда пишет что такое скриптуха. Метапрог будущего кстати очень похож на то что он собрался пилить, интересно у кого выйдет быстрее %)

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

У Терри Дэвиса во всём виноваты были «ниггеры»: «ниггеры из ЦРУ», «ниггеры из MIT». А у царя — «скриптуха».

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

В рамках «не скриптуха» по царю - не знаю. В рамках Си с классами - виртуальные методы и «наследование интерфейса». В рамках шаблонов С++:

template <typename T>
void draw(T* self) {
    static_assert(false, "Draw function wasn't implemented for type T");
}
...
struct Type1 { ... }

template <>
void draw<Type1>(Type1* self) { /*function body*/ }
...
struct Type2 { ... }

template <>
void draw<Type2>(Type2* self) { /*function body*/ }
...
void f() {
    draw(my_data); /* Для каждого типа вызовет свой
                      подходящий экземпляр draw или
                      стандартный, который не позволит
                      программе скомпилироваться */
}

Инклудить все template <> нужно строго до первого вызова draw.

Даже в контексте ВП сделает диаграммы, где вызывается draw, в разы компактнее и сильно упрощает рефакторинг вида «теперь можно draw ещё нескольких типов».

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

Зачем шаблоны, когда такого-же эффекта дает простая перегрузка.

struct Type1 {...};
void draw(Type1*) {...}
struct Type2 {...};
void draw(Type2*) {...}

void f() {
    draw(my_data); /* Для каждого типа вызовет свой
                      подходящий экземпляр draw, а если
                      такой не определён, программа не
                      скомпилируется */
}
rupert ★★★★★
()
Ответ на: комментарий от abcq

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

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

Тю блин, совсем забыл. Тем не менее, в случае Котечки и ТСа этих подходов нет «из коробки» в голом Си, вынуждены велосипедить такие фичи. И даже определение функции Type1_draw не даст автоматического разрешения «какую функцию выбирать для этого типа».

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

В рамках «не скриптуха» по царю - не знаю.

Альтернативы нету, метапрог не скриптуха. Существенных отличий от остальных вариантов тоже нету.

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

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

А вообще, в погоне за «скриптуха - не скриптуха» метапрог может перестать быть удобным для ТСа. Угодить царю практически невозможно, более оправданно «идти по намеченному пути».

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

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

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

Если тип совсем не известен

А должен быть известен. Максимум, где допустимы условные переходы — это собственно место выбора одного из типов. Дальше уже должна пойти чёткая цепочка вызовов. Попробуйте-ка цепочку из нескольких одинаковых СУВТ нагородить. А ещё лучше не одинаковых, а разных (например, в одной u8|MetaString, в другой — u8|i16|MetaString).

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

как человек назвал собеседника мразью

Поток оскорблений — это шум, постоянно сопровождающий изречения Святейшества. Его надо просто уметь фильтровать.

пить воду из унитаза - так себе утоление жажды

В «Идиократии» только в унитазах чистая вода и есть ;)

Альзо.

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

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

Скорее лишь ту, с которой доводилось пересекаться. Ну кроме Rust, возможно.

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

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

(прошу прощения, не удержался)

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