LINUX.ORG.RU

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

 , , ,


0

2

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

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

Скачать:

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

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

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

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

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



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

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

Ну это как говорить что СУВТ это ООП. Я в общем против, и меня не переубедить! Но я и не выбираю названия в общем то.

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

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

А было так:

Рано или поздно тут переизобретут ООП к каком-то его виде.

ООП уже заменяют СУВТ, но это не его переизобретение, это альтернатива.

и так:

СУВТ это его эрзац, ООП само по себе лишь подход и СУВТ до какой-то степени ему соответствует.

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

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

Как дела вообще, зачем вы убили стасолога?

abcq ★★
()

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

Ещё не плохо было бы осмотритель текста, сжиматель папок и редактор пикселей.

Похоже СУВТ ещё недостаточно мощный, жду дальнейшего развития.

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

призывает нежить

Нежить (укр.) — насморк

@metaprog вызывает насморк

@metaprog — КОРОНАВИРУС!

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

Дурацкий совет. Git плохо подходит для больших бинарных файлов.

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

Ключевым требованием для графической библиотеки является наличие виджета блоков диаграмм. Кроме Nuklear+ его нет почти нигде, в том числе в Tk.

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

Тогда это уже не КУВТ, а КНОТ (Комплект Навчальної Обчислювальної Техніки).

Вот СУВТ на обоих языках одинаково — наверняка умышленно.

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

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

А как же параолимпийцы, вот это всё?

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

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

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

Gtk/Cairo это ужасно, на Nuklear тоже можно сделать канвас, так рисовать и будем скорее всего.

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

Это пост не осилит львиная доля настоящих сишников, куда уж ТСу кроме как надёргать фраз в свою защиту в таком комплексном посте.

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

Короче, он пытается родить свою, особую «труъ» статическую типизацию. А всё за её рамками называет скриптухой. Учтите: это поверхностный взгляд.

@metaprog, расскажи маленькую историю. Вот ты хотел решить какую-то задачу, тужился и бац - тебя осенило: для её решения нужно запилить СУВТ. Что это за задача? Почему в метапрог добавляется динамическая типизация под видом СУВТ под лозунги «динамическая типизация не нужна»???

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

Возможно. Но нужно читать оригинал, а то гарантирован «испорченный телефон».

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

И здесь так же можно понять - почему я всегда хейтил и хейчу C++. Си с классами - это чистая скриптуха. Уже полиморфная. А вот C++ как мета-язык не состоятелен. Что мы хотим от мета-языка? Мы хотим, чтобы он производил то, что мы можем произвести руками(с теми же, либо лучшими свойствами). Но он не производил. И вот только с gnu++2a - язык стал в какой-то мере полноценным и позволяет заменить си.

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

Последние три абзаца. Я хз как передать это кратко, не исказив ничего.

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

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

но он нам не подходит. И в следующей части я расскажу почему.

а это уже совсем какой-то вилли вонка.

Опять же про мономорфное ручную кодогенерацию. Ее можно заменить на не ручную, привидением типов для полиморфности можно заниматься и без void в теории, да и скорее всего на практике, как-то же это делали до того момента как его придумали в С++ и ввели С. Опять же в теории учитывая архитектуру фон неймана, она вообще по сути полиморфная в пределах своих ограничений на базовые абстракции которыми оперирует сама, просто придется устраивать игрища с битами и нырять на самое дно. Вся типовая шелуха и соответственно механизмы полиморфности, это как раз таки абстракции уровня ЯВУ, но мы то прекрасно знаем что ничего этого не существует на самом деле. Кстати в этом месте можно понять что то что описано ранее имеет не прямую, а косвенную связь с тем, что описано позже (статическая типизация), а следовательно это опять каша получается.

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

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

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

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

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

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

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

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

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

Вот ты хотел решить какую-то задачу, тужился и бац - тебя осенило: для её решения нужно запилить СУВТ. Что это за задача?

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

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

И подобных ситуаций хватит в практически любой сложной программе.

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

Почему в метапрог добавляется динамическая типизация под видом СУВТ под лозунги «динамическая типизация не нужна»???

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

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

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

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

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

Нет, ты потерял очень много контекста из-за пропуска статьи.

Вы даже не знаете читал я ее или нет, а уже делаете выводы.

(вы пытаетесь меня в чем-то убедить без доказательств - раз)

Прочитать эту статью - не дольше, чем написать этот твой комментарий.

Вы не замеряли этого времени, но сделали очередной вывод без доказательств.

(вы пытаетесь меня в чем-то убедить без доказательств - два)

А ведь все посты царя (кроме «кукаретинг блеять падаль») очень сильно зависят от его специфичного контекста

Меня не интересует «его специфичный контекст», да и что вы под этим понимаете, где там специфика?

(вы пытаетесь меня в чем-то убедить без доказательств - три)

Завтра я разберу подробнее.

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

(вы пытаетесь меня в чем-то убедить без доказательств - четыре)

Ты уже сделал несколько неверных выводов.

Вы выдвигаете тезис, не говоря в чем я якобы делаю неверные выводы.

(вы пытаетесь меня в чем-то убедить без доказательств - пять)

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

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

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

Как и писали здесь, СУВТ - это другая реализация части ООП (причём уровня Си с классами). В данном случае - «виртуальные методы наоборот». А версионированные форматы - вроде как самое первое использование СУВТ.

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

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

Ночь, торопился, все доказательства оставил на «завтра» - сегодня.

Перепосщивать меня автору статьи в личной переписке или блоге не надо

На такое он реагировал в духе «портянка на экран-два почему он сектант и ничего не понимает в теме». Я не собирался это делать. Ща разберу тезисы.

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

привидением типов для полиморфности можно заниматься и без void в теории

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

Т.е. используя сишку - мы просто в 90% времени делаем обезьянью работу.

Отсюда и скорость реализации фич на голом си. Хотя лично я не уверен насчёт const_cast из крестов.

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

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

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

Он минимум один раз утверждал, что хочет строгого разделения «легаси си и си с классами» и «совершенно новые кресты». Увы, его посты на ЛОРе часто сносят модераторы, пруфы вряд ли приведу. Зато можно у него прямо спросить и он подтвердит, что писал это.

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

Оооооо. Недавно на ЛОРе читал тему, Lzzz спрашивала про разницу между std::move и std::forward. Царь тоже принял участие в «вечеринке». Кто-то писал, что после move состояние объекта вроде как не определено, а царь - «нет, мразь, состояние всегда определено, цитатами из стандарта я жопу вытирал, семантика определяется именно реализацией, именно реализация - источник правды». И дал ссылку на гитхаб, на стдлиб шланга, конкретный файл, конкретную строку кода, где std::string устанавливается в «пустую строку». Вот этот тред, смотреть удалённые, царь там под ником mamos3.

Вот если бы там были конкретные примеры реализации тех вещей которые монаршая особа лора считает «истинно статическими»

Лично мне тоже не хватает примеров, хотя constexpr точно является таким.

Я ещё не закончил.

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

«истинно статическими»

Уже вбрасывали?

2009-й год. В плюсах этот ваш модный паттернматчинг в компайлтайме был уже тогда, когда Rust даже пешком под стол ещё не ходил.

Вообще, основной посыл Их Величества, насколько Мы понимаем, в том, что все абстрактные типы должны выводиться в примитивные машинные типы на этапе компиляции, и не должны существовать в рантайме. То есть не как в TS, Go, Python, даже Java, где есть приведение типов в рантайме как явление, и избежать его в общем случае нетривиально. Шаблоны, дженерики — допустимо, пусть компилятор хоть стопицот машинных вариантов одной функции с абстрактным типом нагенерирует (вот вам и метапрограммирование). Важно, чтобы переход к конкретному машинному варианту был чётко детерминирован во всей дальнейшей цепочке вызовов, чтобы переменные выделялись на стеке (что по сути своей невозможно, если в рантайме допустимо, что они слишком разные и не запихиваются в один условный C-шный union).

При этом, однако, в программах сложнее хэлллоуврота может возникнуть такой комбинаторный взрыв, что жирные бинари на выходе у компиляторов Haskell и Go покажутся миниатюрными. Даже при банальном парсинге какой-то переменчивой структуры типа JSON. Неплохо бы, чтобы Святейшество продемонстрировали, как сие сварганить хотя бы на плюсах ;)

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

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

abcq ★★
()

Итак, статья «Начнём, пожалуй».

Поэтому будет про путь, и почему текущие подходы/решения нам(жаждущим скилла) не подходят.

Начнём с базовых постулатов.

Начало статьи, сжатое описание «о чём статья».

динамическая типизация - не язык

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

И теперь он зажигает.

у нас нет статической типизации - сектанты всех обманули

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

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

Это одно из самых важных утверждений в статье. Следует перечитать несколько раз.

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

Для него типизация - это гораздо больше, чем автокомплит в ide.

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

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

Ничего особенного, а следующие тезисы - бомбы, что ломают привычное мышление.

Простой критерий для определения описательной типизации - наличие подтипов. Схема там следующая. Сектант при проектировании системы типов сталкивается с полиморфизмом. И, как он решается в скриптухе? За счёт any. Т.е. некоего типа, который объединяет в себе все возможные типы, позволяя самому себе являться любым из них.

Пока ничего особенного. Никто не спорит, что any и PyObject* - динамическая типизация.

И тут важно. Дошколята с хабра не могли этого осознать. В основном методичка учит дшколят тому, что вот если мы возьмём any усечём и превратим в заранее определённый набор типов - у нас появится тип. Нет, не появится. По определению определено может быть только то, что имеет один возможный вариант. Если вариантов более, чем один - состояние не определено и определённым быть не может.

Ещё раз.

По определению определено может быть только то, что имеет один возможный вариант.

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

Имхо, из этого следует, что все variant и даже optional - динамическая типизация.

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

Таким образом мы выходим к базовому свойству скриптухи. Скриптуха ВСЕГДА теряет типы. Потому как и в A|B и в C(где с подтип(базовый тип) для A и B). Ведь статическая типизация предполагает возможность определения типа, но эта возможность переносится в рантайм. И без подобного механизма - подобная типизация не может работать.

И тут можно делать необычные выводы. Рассмотрим код:

void func(ISomeInterface* object) {
    object->someVirtualMethod();
}

Это принято называть статической типизацией с полиморфизмом времени выполнения (в рантайме). По царю же это - динамическая типизация. Ведь «По определению определено может быть только то, что имеет один возможный вариант. Если вариантов более, чем один - состояние не определено и определённым быть не может.». Сколько угодно классов может реализовать ISomeInterface. Тот факт, что компилятор может вывести список всех классов-наследников, помогает только автокомплиту. Более того, в общем случае нельзя заранее знать все классы, что реализуют этот интерфейс. Добавляем в программу систему плагинов - бац, после компиляции программы может появиться 100500 плагинов со своими классами, что реализуют этот интерфейс.

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

Далее, пропускаю много абзацев.

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

Здесь сразу становится понятно - почему С++ развивается в сторону языка-кодогенератора. Статический язык - это язык высшего порядка - это мета-язык. Человек не должен писать код. В какой-то степени это понимают запартыши и какие-то потуги в этом направлении у них ведутся, но всё это бесполезно. Это примитивная, бездарная херня, которая никому не нужна. Как-нибудь я подробней об этом(о запарте и почему она обречена) расскажу.

Лично я не представляю как писать код полностью в такой парадигме для серьёзных задач.

Весь пост - моя интерпретация тезисов царя.

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

Статья интересная и классная. В точку.

Необычная логика. Из цитаты из статьи

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

тип в рантайме хранит информацию о том, каким именно типом он является

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

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

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

Если что, по такой логике ты, я, @liksys и все-все-все (Яндекс, Фаанги тоже) – тупые дошколята. Поэтому надо воспринимать это как интересную точку зрения, а не источник истины.

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

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

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

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

Капитанство? Капитанство!

Что опять доказывает что мы говорим о каком то языке фантазий, таких языков нет.

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

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

Про позднее связывание тоже какое-то капитанство.

Он минимум один раз утверждал, что хочет строгого разделения «легаси си и си с классами» и «совершенно новые кресты». Увы, его посты на ЛОРе часто сносят модераторы, пруфы вряд ли приведу. Зато можно у него прямо спросить и он подтвердит, что писал это.

Это я тоже читал, ну хочет и хочет, а что эти «хотелки» должны доказать?

Оооооо. Недавно на ЛОРе читал тему, Lzzz спрашивала про разницу между std::move и std::forward. Царь тоже принял участие в «вечеринке». Кто-то писал, что после move состояние объекта вроде как не определено, а царь - «нет, мразь, состояние всегда определено, цитатами из стандарта я жопу вытирал, семантика определяется именно реализацией, именно реализация - источник правды». И дал ссылку на гитхаб, на стдлиб шланга, конкретный файл, конкретную строку кода, где std::string устанавливается в «пустую строку». Вот этот тред, смотреть удалённые, царь там под ником mamos3.

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

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

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

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

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

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

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

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

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

Лично я не представляю как писать код полностью в такой парадигме для серьёзных задач

Ну на Haskell же пишут как-то, при том, что он чисто функциональный без каких-либо поблажек. cast @unclechu

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Первая — он практически не может ничего излагать, не скатываясь на оскорбления. (Редчайшее исключение — он мне недавно начал отвечать в теме про скорость компиляции C++ и при всей своей узнаваемой лексике умудрился не скатиться на оскорбление. Я даже хотел сделать паузу и продолжить дискуссию, обдумав тему получше, но пока я её обдумывал, его таки забанили. Ну не судьба, значит.)

Вторая — «проблема Шалтай-Болтая»: «Когда я беру слово, оно означает то, что я хочу, не больше и не меньше». Человек начинает задвигать про «скриптуху», потом оказывается, что «скриптухой» у него называются буквально все ЯП, кроме C++. Ну и как с ним разговаривать?

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

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

Вычислителю по фон нейману в принципе плевать на типы, он ничего о них не знает. Поэтому и понятия каста для него тоже нет, все это ужимки ЯВУ.

Вроде как царь хочет это реализовать в рамках фон Неймана. К тому же «позволять много динамики» != «принуждать к ней».

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

Суть в том, что под С++ царь подразумевает не то, о чём думают. Когда условный @hobbit пишет «С++ то-то», он подразумевает, что в С++ есть такие-то модули, можно линковаться с библиотеками, можно то-сё. Когда царь пишет «С++ то-то», он подразумевает, что код компилируется только gnu++2a, в зависимостях только header only библиотеки (и даже стдлиб - ho, а то, что линкуется - «легаси-говно»), что платформа - гну/линукс, винда - «майздайка никому не нужна». И получается, вроде как говорят об одном и том же - С++, а по факту говорят о вещах, которые почти не пересекаются.

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

Царь вроде как понимает этот контекст.

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

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

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

  • он пообещал всё лето работать над тулингом для С++ чтобы писать как он считает правильным.
arturianec100
()
Ответ на: комментарий от abcq

надо использовать среду выполнения эффективно

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

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

зато

Ну дык у Святейшества зато есть фундаментальная система типов ;D

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

Особенно примечательно здесь то, что 7 лет назад Их Величество (если это тот же человек, конечно) топили за сишечку и поливали говном C++. А сейчас наоборот. Риторика же не изменилась.

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

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

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