Re[16]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: student__  
Дата: 19.09.25 07:45
Оценка: +2 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>и радикальных перемен не случится.


Слава богу! И слава богу, что не Евгений Музыченко решает, быть революции в C++ или нет.
Re[19]: Наследие Си
От: so5team https://stiffstream.com
Дата: 19.09.25 08:55
Оценка: +1 :))
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>>>привести указатель на float к указателю на unsigned int, чтоб извлечь внутреннее представление плавающего числа?


S>>С++ это и не позволяет.


ЕМ>Как, и с каких пор?


Со времен C++98. Здесь можете посмотреть раздел 3.10.15.

S>>>>Или вы про type punning через Си-шный union?

ЕМ>>>Это уже частность.

S>>Эта частность под запретом.


ЕМ>Как, с каких пор?


ЕМНИП, всю жизнь.
За подробностями сюда: https://stackoverflow.com/a/11996970

S>>>>К возможностям языка это вообще не относится.

ЕМ>>>Это относится к его применению.

S>>Мы говорим о языке.


ЕМ>А для чего создается язык — для составления на нем текстов программ с целью любования ими, или таки для практического применения?


За 30 лет практического применения C++ я написал туеву хучу кода, который работал на самых разных платформах и компиляторах. И тема ABI передо мной вообще никогда не вставала. В отличии от вопросов о соответствии стандарту и поведению одного и того же кода в разных условиях.

S>>https://en.wikipedia.org/wiki/General-purpose_macro_processor

S>>

A general-purpose macro processor or general purpose preprocessor is a macro processor that is not tied to or integrated with a particular language or piece of software.


ЕМ>Приставка general-purpose Вас, стало быть, совершенно не смущает. Как и непоколебимая уверенность в том, что любой макро/препроцессор непременно обязан быть general-purpose, иначе основы мироздания рухнут.


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

Причем, это не мое определение, я его не формулировал.

ЕМ>Ну и ради бога, бывает.


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

S>>Пойдите и сделайте.


ЕМ>Надо будет — пойду и сделаю.


Звиздеть не мешки ворочать.

ЕМ>Квалификации мне для этого хватает более чем


"Ну и вы, батенька, говорите, говорите" (с)
Re[9]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 19.09.25 09:24
Оценка: +1 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Именно — парни совершенно безосновательно, но крайне отчаянно, уперлись в идею о том, что компилятор C++ якобы по умолчанию обязан правильно обрабатывать любую программу, которая удовлетворяет синтаксису C, хотя в этом не было ни малейшей необходимости. Никаких аргументов за это, которые не выглядели бы наивно, я не встречал ни у Страуструпа, ни у его комментаторов.


И это рядом с другим:
ЕМ>Чтоб реально убить C++, язык для начала должен быть полностью с ним совместим, как C++ сперва был полностью совместим с C, и сохранять эту совместимость какое-то время.

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

Тот факт, что Страуструп так бережно и скурпулёзно поддерживал совместимость, это огромнейший именно что практичный плюс языка, вот не надо недооценивать.
Re[15]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: B0FEE664  
Дата: 19.09.25 14:29
Оценка:
Здравствуйте, so5team, Вы писали:

BFE>>Вы за подобный подход?

S>Как я понимаю -- нет. Он хочет полноценного метапрограммирования на этапе компиляции.

Хочет метапрограммирования, а пишет о макросах...

S>Как раз того, что сейчас завозят в C++26 в виде compile-time рефлексии.

Как я понимаю, это безумие уже не остановить.
Безумие состоит в том, что в комитете выбрали совершенно уродский синтаксис. А ещё они занимаются тем, что никому не нужно. Как вообще могла прийти в голову, что программисту может понадобится категория выражения? Такое только в профдеформированном мозге писателя компилятора могло произойти.
А синтаксис ? Вы видели это убожество? Нафига эти префиксы '^'. Что это за порнография?

Не, давайте сравним:
Вот безумие комитета:
using MyType = [:sizeof(int)<sizeof(long)? ^^long : ^^int:];  // Implicit "typename" prefix.

а вот идеальный вариант:
using MyType = int.size < long.size ? long.type : int.type;

И тут всё просто и понятно: если после типа стоит точка, то далее идёт работа с метоинформацией об этом типе. Кратко. Чётко. По делу. А не вот это вот всё...

И если взять это за основу тогда:
decltype(a + b).type — тип результата сложения.

Вот конвертация в строку перечисления предложенное комитетом:
template <typename E>
  requires std::is_enum_v<E>
constexpr std::string enum_to_string(E value) {
  template for (constexpr auto e : std::meta::members_of(^E)) {
    if (value == [:e:]) {
      return std::string(std::meta::name_of(e));
    }
  }

  return "<unnamed>";
}

enum Color { red, green, blue };
static_assert(enum_to_string(Color::red) == "red");
static_assert(enum_to_string(Color(42)) == "<unnamed>");


Вот как оно должно быть:
template <typename E>
  requires std::is_enum_v<E>
consteval const char* enum_to_string(E value) 
{
  for(constexpr auto e : E.members ) 
  {
    if ( value == e.value)
      return e.name;
  }
  return "<unnamed>";
}
using namespace std::literals;
static_assert(enum_to_string(Color::red) == "red"sv);
static_assert(enum_to_string(Color(42)) == "<unnamed>"sv);
И каждый день — без права на ошибку...
Re[16]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: so5team https://stiffstream.com
Дата: 19.09.25 16:21
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>А синтаксис ? Вы видели это убожество? Нафига эти префиксы '^'. Что это за порнография?


Меня больше вымораживает оператор баян:
[: ||| :]

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

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

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

BFE>Вот безумие комитета:


К любому синтаксису можно привыкнуть.
Мне вот, к примеру, синтаксис С++ных шаблонов не особо нравился. А теперь нахожусь при мнении, что он очень удачный.

Главная проблема, на самом деле, не в том как это будет выглядеть и как много хейтеров и ниасиляторов будут испражняться ослоумием в Интернетах. А в том, когда это будет доступно для массового применения. Если затянется как с поддержкой С++ных модулей, то печально.
Re[10]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.09.25 19:08
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>И это рядом с другим:


Словосочетание "по умолчанию" Вы тоже благополучно пропустили?
Re[20]: Наследие Си
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.25 08:21
Оценка: :)
Здравствуйте, so5team, Вы писали:

ЕМ>>>>привести указатель на float к указателю на unsigned int, чтоб извлечь внутреннее представление плавающего числа?

S>>>С++ это и не позволяет.
ЕМ>>Как, и с каких пор?
S>Со времен C++98. Здесь можете посмотреть раздел 3.10.15.

Во-первых, там речь об lvalue, а для того, о чем писал я, достаточно rvalue.

Во-вторых, не вижу там характерных слов, вроде "impossible", "unsupported", "not implemented" и подобных. Возможно, недостаточно знаю английский.

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

S>>>Эта частность под запретом.

ЕМ>>Как, с каких пор?
S>ЕМНИП, всю жизнь.
S>За подробностями сюда: https://stackoverflow.com/a/11996970

Опять же не вижу в стандартах и документации характерных слов, вроде "prohibuted", "not allowed" , "disabled", "illegal" и т.п.

S>За 30 лет практического применения C++ я написал туеву хучу кода, который работал на самых разных платформах и компиляторах. И тема ABI передо мной вообще никогда не вставала. В отличии от вопросов о соответствии стандарту и поведению одного и того же кода в разных условиях.


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

S>Вы хотели определение -- вы его получили.


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

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

S>Если это определение (соответствующие действительности для тех же C и C++) рвет вам шаблоны и рушит картину мира


Не, препроцессоры C/C++ у меня вызывают лишь чувства брезгливости и стыда за разработчиков языков. Если убожество препроцессора C еще можно понять (малые машины, ограниченные ресурсы, непонятные перспективы языка и т.п.), то его точное копирование в C++ уже за пределами моего понимания. Что ж, они хотели избежать ада макросов — получилп ад шаблонов, и до сих пор делают вид, будто это случилось внезапно.

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

S>Дайте ссылку на какое-либо другое определение макро-процессора


Ну вот Вам от Алисы, по запросу "определение встроенного макропроцессора":

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

Re[16]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.25 08:27
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Хочет метапрограммирования, а пишет о макросах...


И с каких пор макросы перестали быть средством метапрограммирования? Или нам следует сосредоточиться на сугубо философской стороне?

BFE>Как я понимаю, это безумие уже не остановить.


Да, я тоже сомневаюсь, что разум возобладает.

BFE>в комитете выбрали совершенно уродский синтаксис.


А куда им деваться, ежли они стремятся любой ценой сохранить выбранную парадигму? То ли еще будет...
Re[17]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.25 08:31
Оценка:
Здравствуйте, so5team, Вы писали:

S>К любому синтаксису можно привыкнуть.

S>Мне вот, к примеру, синтаксис С++ных шаблонов не особо нравился. А теперь нахожусь при мнении, что он очень удачный.

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

S>когда это будет доступно для массового применения.


С таким подходом это будет становиться все менее доступным для масс, и в итоге выродится во что-то вроде тайного ордена, требующего испытаний, посвящения и воспитания достойной смены.
Re[21]: Наследие Си
От: so5team https://stiffstream.com
Дата: 20.09.25 10:44
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Во-вторых, не вижу там характерных слов, вроде "impossible", "unsupported", "not implemented" и подобных. Возможно, недостаточно знаю английский.


Может недостаточное знание английского так же сказывается, но больший вклад нежелание принимать реальность как она есть. Когда 30 лет не высовываешь нос за пределы уютного мирка VC++, то сложно поверить в то, что читать содержимое float-а через указатель на int запрещено.

S>>Вы хотели определение -- вы его получили.


ЕМ>Во-первых, я хотел определения макропроцессора вообще, а получил определение такового общего назначения.


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

ЕМ>Ну вот Вам от Алисы, по запросу "определение встроенного макропроцессора":


ЕМ>

ЕМ>Встроенный макропроцессор — это программа, которая встроена в другую программу (например, компилятор, ассемблер) и выполняет систематическую замену текста на основе макросов. Макрос — это средство замены строки на другую, полученную из исходной по заранее заданным правилам.


Сравните с определением из Wikipedia, ссылку я вам давал:

A macro processor is a program that copies a stream of text from one place to another, making a systematic set of replacements as it does so. Macro processors are often embedded in other programs, such as assemblers and compilers.

Не вижу противоречий.

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

a macro processor that is not tied to or integrated with a particular language


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

Когда же мы работаем с фрагментом кода с анализом его семантики, т.е. когда на вход идут не фрагменты текста, а код как данные над которыми можно делать какие-то преобразования, то это уже не макро-программирование, а мета-программирование.
Re[22]: Наследие Си
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.25 14:42
Оценка:
Здравствуйте, so5team, Вы писали:

S>Когда 30 лет не высовываешь нос за пределы уютного мирка VC++


Да я, как бы, иногда высовываю в разные линуксы и на МК. Нечасто, но бывает.

S>сложно поверить в то, что читать содержимое float-а через указатель на int запрещено.


Повторю: я не вижу в стандарте запрета. VC++ и gcc такие операции компилируют. Подозреваю, что Вы неправильно называете явление.

S>Сложно объяснить как "вообще" противопоставляется "общему назначению" кроме как скудоумием.


Ну давайте я попробую. Здесь нет противопоставления, но есть подчинение. Когда речь идет о неком устройстве "общего назначения", подразумевается, что целевое назначение этого устройства не определено, и оно или специально разработано, или просто оказалось пригодным, для выполнения максимально широкого круга задач. А когда говорят об "устройстве вообще", то подразумевается любая сущность, к которой применимо понятие "устройство".

То есть, "процессор общего назначения" является "процессором вообще", но обратное неверно. Так понятно?

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

S>Не вижу противоречий.


Противоречие создаете Вы, когда привычно толкуете "...copies a stream of text from one place to another...". Вам почему-то кажется, что любой макропроцессор непременно должен быть препроцессором, и непременно обрабатывать весь текстовый поток в одно лицо, допуская до него другие средства (в нашем случае — компилятор) лишь после полного завершения работы.

S>Ключевой момент в том, что макросы работают с текстом и не заботятся о семантике, которая с текстом связана.


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

S>Именно поэтому в первой части определения из Wikipedia сказано вот это:

S>

a macro processor that is not tied to or integrated with a particular language


Это сказано только для "general-purpose macro processor or general purpose preprocessor".

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


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

S>Когда же мы работаем с фрагментом кода с анализом его семантики, т.е. когда на вход идут не фрагменты текста, а код как данные над которыми можно делать какие-то преобразования, то это уже не макро-программирование, а мета-программирование.


И здесь тоже нет противоречия, а есть подчинение: макропрограммирование является частным случаем метапрограммирования.
Re[23]: Наследие Си
От: so5team https://stiffstream.com
Дата: 20.09.25 15:56
Оценка: :)
Здравствуйте, Евгений Музыченко, Вы писали:

S>>сложно поверить в то, что читать содержимое float-а через указатель на int запрещено.


ЕМ>Повторю: я не вижу в стандарте запрета. VC++ и gcc такие операции компилируют.


Да, уж, дураков учить -- только портить, а вы, Евгений, нужны RSDN-у в своей незамутненности.
Для таких как вы, которые думают, что если компилятор компилирует, то это разрешено, потом приходится целые книги
Автор: LaptevVV
Дата: 16.01.25
писать. Жаль только, что долбоящеры, кичащиеся своими воспоминаниями о PL/1, не способны учиться новому и таких полезных книг не читают.

S>>Когда же мы работаем с фрагментом кода с анализом его семантики, т.е. когда на вход идут не фрагменты текста, а код как данные над которыми можно делать какие-то преобразования, то это уже не макро-программирование, а мета-программирование.


ЕМ>И здесь тоже нет противоречия, а есть подчинение: макропрограммирование является частным случаем метапрограммирования.


Для метапрограммирования нужно, чтобы код (уже разобранный и обработанный с учетом семантики языка) поступал на вход в качестве параметра. В случае с макросами это в принципе не так, поскольку макросы работают либо на уровне сырого текста (как препроцессор Си), либо, в более продвинутых случаях, на уровне AST не подвергшегося еще семантическому анализу (например, процедурные макросы Rust-а, которые получают и возвращают TokenStream-ы).
Re[24]: Наследие Си
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.25 18:25
Оценка:
Здравствуйте, so5team, Вы писали:

S>макросы работают либо на уровне сырого текста (как препроцессор Си), либо, в более продвинутых случаях, на уровне AST не подвергшегося еще семантическому анализу


Это не макросы (как сущность/технология) так работают — так работают их отдельные реализации. Никакие объективные законы не мешают делать реализации, в которых они работают иначе.

Ваши любимые шаблоны тоже обладают рядом свойств макросов, и ни Вы, ни кто другой, не сумеете однозначно доказать, что шаблон не является макросом (не конкретно в терминах C++, а по своей сути). Просто потому, что не существует единого, всеобщего определения, обязательного для всех, и жесткого разделения на "макросредства" и "метасредства". Это всего лишь более-менее устоявшиеся разделение и терминология, позволяющие говорить, что вот это — "скорее макрос", а это — "скорее метасредство".

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

Не следует думать, что все выдающиеся люди, достигшие впечатляющих результатов, всегда "равномерно и однородно" образованы, сообразительны, лишены предрассудков и т.п. Наоборот, гениальность и плодовитость, как известно, часто сопровождается разного рода психическими отклонениями, а то и нарушениями.
Re[6]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Sharov Россия  
Дата: 20.09.25 19:44
Оценка:
Здравствуйте, Nuzhny, Вы писали:


N>До недавнего времени развитием стандарта Питона занимался почти единолично один добрый диктатор. И он ушёл со своего поста, когда принял на себя волну критики после непопулярного решения. Через время оказалось, что решение было верным. И это произошло в очень-очень-очень доброжелательном комьюнити. Роль личности не надо ни недооценивать, ни переоценивать. Когда на языке написаны тонны коммерческого кода, то развивать язык без оглядки на пользователей и обратную совместимость просто невозможно.


Что за история и о каком решении речь?
Кодом людям нужно помогать!
Re[2]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: σ  
Дата: 22.09.25 12:33
Оценка: 2 (1)
x>>...
x>>Смотрел несколько дней назад, уже всего точно не помню, но вот некоторые моменты:
x>>Инкапсуляцию придумали когда делали симуляцию поведения распределённых систем. В этом случае инкапсуляция — адекватная модель для предметной области. Но оопе-сектанты пропагандируют что для всех областей.
x>>...

SaZ>Свежий пример из моей практики, про инкапсуляцию. На текущем проекте мы разрабатываем stateless ui фреймворк


Пардон, а это предметная область (domain)? Вроде UI — это к портам/адаптерам.

В видео критикуется мантра что предметная область обязана быть выражена как compile-time иерархия классов, где всё "состояние" должно инкапсулироваться, а публичным должно быть только "поведение".

К тому, что у PgSQLDBConnection : IDBConnection сокет подключения инкапсулирован — вопросов нет. Это не предметная область.
Отредактировано 22.09.2025 13:11 σ . Предыдущая версия .
Re[24]: Наследие Си
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.09.25 15:58
Оценка: 1 (1) +1
S>Для метапрограммирования нужно, чтобы код (уже разобранный и обработанный с учетом семантики языка) поступал на вход в качестве параметра. В случае с макросами это в принципе не так, поскольку макросы работают либо на уровне сырого текста (как препроцессор Си), либо, в более продвинутых случаях, на уровне AST не подвергшегося еще семантическому анализу (например, процедурные макросы Rust-а, которые получают и возвращают TokenStream-ы).
Макросы раста работают не с синтаксическим материалом, а лексическим. То есть ещё до построения AST.
Но это не единственный способ жить с макросами. К примеру, макросы лиспа получают не токены входного стрима, а вполне себе уже разобранное AST. То, что в нём не произведён семантический анализ, скорее связано с отсутствием такового в лиспе совсем, чем с какими-то фундаментальными ограничениями макросов.
Генераторы кода в C#, хоть и не являются макросами, но работают как раз с уже разобранным и типизированным AST (например, могут тащить из него информацию о методах класса, не задуряясь ручным разбором потока лексем в поисках отличий вложенных классов и конструкторов от методов экземпляра).
Макросы в D работают напрямую с метаданными. B дарте — тоже.


Вообще, ваш оппонент пытается изобрести Немерле
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: · Великобритания  
Дата: 22.09.25 16:07
Оценка:
Здравствуйте, σ, Вы писали:


σ>Пардон, а это предметная область (domain)? Вроде UI — это к портам/адаптерам.

σ>В видео критикуется мантра что предметная область обязана быть выражена как compile-time иерархия классов, где всё "состояние" должно инкапсулироваться, а публичным должно быть только "поведение".
Видео не смотрел, и честно говоря не тянет. Но вопрос возник.

σ>К тому, что у PgSQLDBConnection : IDBConnection сокет подключения инкапсулирован — вопросов нет. Это не предметная область.

А что это тогда? Как по мне — сокет подключения это предметная область PgSQLDBConnection.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[25]: Наследие Си
От: so5team https://stiffstream.com
Дата: 22.09.25 17:53
Оценка: +1
Здравствуйте, Sinclair, Вы писали:


S>Макросы в D работают напрямую с метаданными.


И где в D макросы?
Re[2]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: σ  
Дата: 22.09.25 20:28
Оценка:
σ>>В некоторых языках, которые лежат в основе C++, было что-то типа закрытого наследования (discriminated/tagged unions), и Строструп был с этим знаком. Но специально не включил это в C++ (наверное по вредительским соображениям).

D>А это что?


D>
class B : private A  {
    // ...
};

Приватное наследование
Re[15]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 22.09.25 21:28
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

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


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


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



Ты про каких-то неосиляторов


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


А что тебе сешает сделать свой компилятор своего "C++"? Если выкинуть шаблоны, то останется "C с классами", взять в качестве бэка ту же чистую сишечку, и такой коспилятор пишется за месяц, ну, окей, за три. А дальше сиди и наворачивай, как тебе нравится


ЕМ>>>Например, в ассемблере System/360.


S>>покажете пример как получить в качестве параметра класс


ЕМ>Как Вы представляете себе пример на макроязыке ассемблера System/360, получающий в качестве параметра класс? Для этого пришлось бы городить специальный псевдоязык. А в этом я не вижу ни малейшей надобности, ибо сама идея, на мой взгляд, предельно примитивна, и напрашивается интуитивно. Если для Вас это не так, то мы смотрим на устройство ЯП и процесс их компиляции под несовместимыми углами, и примеры здесь не помогут.


Примеры помогут, по-моему, мало кто понимает, как твои макросы должны работать
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.