Они сделали дерьмо опять
От: Шахтер Интернет  
Дата: 18.05.20 20:33
Оценка: -5 :)))
Комитет по стандартизации пора расстрелять. Такое ощущение, что эти дебилы никогда не писали софт сложнее hello world.


  std::strong_ordering cmp = .... ;

  if( cmp ) // error
    {
    }
  else
    {
     Printf(Con,"equal\n");
    }

  switch( cmp ) // error
    {
     case std::strong_ordering::less : break; // error

     case std::strong_ordering::greater : break; // error

     case std::strong_ordering::equal : break; // error
    }


Кстати, обратите внимание, какие замечательные короткие имена нам предлагают использовать для констант. На пол-экрана. А чо такова, мониторы-то теперь широкие?

Вылечить можно так. Хакаем заголовок <compare>.

  много букв
  class strong_ordering
  {
    __cmp_cat::type _M_value;

    ....

  public:

    ....

    constexpr operator int() const { return _M_value; }   

#if 1

    friend constexpr bool
    operator==(strong_ordering __v, int t) noexcept
    { return __v._M_value == t; }

    friend constexpr bool
    operator!=(strong_ordering __v, int t) noexcept
    { return __v._M_value != t; }

    friend constexpr bool
    operator< (strong_ordering __v, int t) noexcept
    { return __v._M_value < t; }

    friend constexpr bool
    operator> (strong_ordering __v, int t) noexcept
    { return __v._M_value > t; }

    friend constexpr bool
    operator<=(strong_ordering __v, int t) noexcept
    { return __v._M_value <= t; }

    friend constexpr bool
    operator>=(strong_ordering __v, int t) noexcept
    { return __v._M_value >= t; }

    friend constexpr bool
    operator< (int t, strong_ordering __v) noexcept
    { return t < __v._M_value; }

    friend constexpr bool
    operator> (int t, strong_ordering __v) noexcept
    { return t > __v._M_value; }

    friend constexpr bool
    operator<=(int t, strong_ordering __v) noexcept
    { return t <= __v._M_value; }

    friend constexpr bool
    operator>=(int t, strong_ordering __v) noexcept
    { return t >= __v._M_value; }

    friend constexpr strong_ordering
    operator<=>(strong_ordering __v, int /*zero*/) noexcept
    { return __v; }

    friend constexpr strong_ordering
    operator<=>(int /*zero*/, strong_ordering __v) noexcept
    { return strong_ordering(__cmp_cat::_Ord(-__v._M_value)); }

#endif

    ....

    // comparisons

    friend constexpr bool
    operator==(strong_ordering, strong_ordering) noexcept = default;

#if 0

    friend constexpr bool
    operator==(strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v._M_value == 0; }

    friend constexpr bool
    operator< (strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v._M_value < 0; }

    friend constexpr bool
    operator> (strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v._M_value > 0; }

    friend constexpr bool
    operator<=(strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v._M_value <= 0; }

    friend constexpr bool
    operator>=(strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v._M_value >= 0; }

    friend constexpr bool
    operator< (__cmp_cat::__unspec, strong_ordering __v) noexcept
    { return 0 < __v._M_value; }

    friend constexpr bool
    operator> (__cmp_cat::__unspec, strong_ordering __v) noexcept
    { return 0 > __v._M_value; }

    friend constexpr bool
    operator<=(__cmp_cat::__unspec, strong_ordering __v) noexcept
    { return 0 <= __v._M_value; }

    friend constexpr bool
    operator>=(__cmp_cat::__unspec, strong_ordering __v) noexcept
    { return 0 >= __v._M_value; }

    friend constexpr strong_ordering
    operator<=>(strong_ordering __v, __cmp_cat::__unspec) noexcept
    { return __v; }

    friend constexpr strong_ordering
    operator<=>(__cmp_cat::__unspec, strong_ordering __v) noexcept
    { return strong_ordering(__cmp_cat::_Ord(-__v._M_value)); }

#endif
  };

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


inline constexpr int CmpLess = std::strong_ordering::less ;

inline constexpr int CmpGreater = std::strong_ordering::greater ;

inline constexpr int CmpEqual = std::strong_ordering::equal ;


Теперь можно спокойно работать.

  auto cmp = .... ; // вместо std::strong_ordering

  if( cmp ) // ok
    {
    }
  else
    {
     Printf(Con,"equal\n");
    }

  switch( cmp ) // ok
    {
     case CmpLess : break; // ok

     case CmpGreater : break; // ok

     case CmpEqual : break; // ok
    }
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Отредактировано 19.05.2020 7:39 Шахтер . Предыдущая версия . Еще …
Отредактировано 18.05.2020 20:40 Шахтер . Предыдущая версия .
Re: Они сделали дерьмо опять
От: RedApe Беларусь  
Дата: 19.05.20 06:03
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Вылечить можно так. Хакаем заголовок <compare>.


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


Или можно так
  std::strong_ordering cmp = .... ;

  if( cmp != 0 ) // ok
    {
    }
  else
    {
    }

  if (cmp < 0) { // ok
  } else if (cmp > 0) { // ok
  } else { // ok
  }
--
RedApe
Re[2]: Они сделали дерьмо опять
От: Шахтер Интернет  
Дата: 19.05.20 07:41
Оценка:
Здравствуйте, RedApe, Вы писали:

RA>Здравствуйте, Шахтер, Вы писали:


Ш>>Вылечить можно так. Хакаем заголовок <compare>.


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


Против лома нет приёма.

RA>Или можно так

RA>
RA>  std::strong_ordering cmp = .... ;

RA>  if( cmp != 0 ) // ok
RA>    {
RA>    }
RA>  else
RA>    {
RA>    }

RA>  if (cmp < 0) { // ok
RA>  } else if (cmp > 0) { // ok
RA>  } else { // ok
RA>  }
RA>


Можно. А можно облегчить себе жизнь.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 08:58
Оценка:
Здравствуйте, Шахтер, Вы писали:

Можно просто не юзать всё, что они там насовали в std, начиная от упомянутых свистоперделок и заканчивая всякими vector и прочими unordered_map.
Re[2]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 19.05.20 09:11
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, Шахтер, Вы писали:


S>Можно просто не юзать всё, что они там насовали в std


В ++03 можно. В ++20 нет.
Re[3]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 09:29
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>В ++03 можно. В ++20 нет.


Почему это?
Re[4]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 19.05.20 09:59
Оценка: :))
Здравствуйте, smeeld, Вы писали:

S>Здравствуйте, T4r4sB, Вы писали:


TB>>В ++03 можно. В ++20 нет.


S>Почему это?


Килограммы говна типа std::move, std::forward, std::trivially_constructible, без которых ты не напишешь даже сраный вектор без UB который бы ПРАВИЛЬНО учитывал все возможные случаи T
Re[5]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 10:34
Оценка: +2
Здравствуйте, T4r4sB, Вы писали:


TB>Килограммы говна типа std::move, std::forward, std::trivially_constructible, без которых ты не напишешь даже сраный вектор без UB который бы ПРАВИЛЬНО учитывал все возможные случаи T


И как же в крупных проектах на Си и Си c классами обходятся без этих понтов и заклинаний aka std::move, std::swap и прочих trivially_constructable? И при этом, там вся move семантика объектов представлена в полный рост.
Отредактировано 19.05.2020 10:34 smeeld . Предыдущая версия .
Re[6]: Они сделали дерьмо опять
От: T4r4sB Россия  
Дата: 19.05.20 11:07
Оценка: :)
Здравствуйте, smeeld, Вы писали:

S>И как же в крупных проектах на Си и Си c классами обходятся без этих понтов и заклинаний aka std::move, std::swap и прочих trivially_constructable? И при этом, там вся move семантика объектов представлена в полный рост.


Крупных проектах на Си? Не, я к вам не пойду.
Re[6]: Они сделали дерьмо опять
От: so5team https://stiffstream.com
Дата: 19.05.20 11:38
Оценка: +14 :))) :))
Здравствуйте, smeeld, Вы писали:

S>И как же в крупных проектах на Си и Си c классами обходятся без этих понтов и заклинаний aka std::move, std::swap и прочих trivially_constructable?


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

Ну и с кучей понтов и гонору, как в вашем случае.

Как-то так. Ваш К.О.
Re[7]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 13:53
Оценка: +2 -1
Здравствуйте, so5team, Вы писали:

S>С большим трудом. С опасностью подорваться на говнокоде на каждом шагу.


Пока вот это всё справедливо для распоследних C++, особенно про большой труд и опасность подорваться, только подорваться не на говнокоде, а просто на C++20 коде.

S> С древней кодобазой, на 80% состоящей из велосипедов в которых уже никто не разбирается.


99% всех промышленных программных систем, обсуживающих мир, представлено именно этим кодом. А всякие хеллоуворлды даром никому не нужны, на каком бы распрекрасном C++ они не были написаны.
Отредактировано 19.05.2020 13:56 smeeld . Предыдущая версия .
Re[8]: Они сделали дерьмо опять
От: so5team https://stiffstream.com
Дата: 19.05.20 14:36
Оценка: +2
Здравствуйте, smeeld, Вы писали:

S>>С большим трудом. С опасностью подорваться на говнокоде на каждом шагу.


S>Пока вот это всё справедливо для распоследних C++, особенно про большой труд и опасность подорваться,


Не знаю. На сопровождение пока разработок на распоследних C++ не попадало. А вот то, что приходится видеть в чужом легаси на чистом C или "Си с классами" -- это тихий ужас.

Вы вот, помнится, свой код когда-то показывали. Из той же категории.

Так что позвольте усомнится.

S>только подорваться не на говнокоде, а просто на C++20 коде.


Видите ли какое дело: C++20 рано или поздно будет освоен. Даже старперами вроде меня. Не говоря уже о молодежи, которая может начинать прямо с C++17. И количество подрывов будет сокращаться с каждым месяцем опыта с новым C++.

А вот древний говнокод производства зацикленных на старом добром "Си с классами" персонажей, вроде вас, так и останется говнокодом.

S>99% всех промышленных программных систем, обсуживающих мир, представлено именно этим кодом. А всякие хеллоуворлды даром никому не нужны, на каком бы распрекрасном C++ они не были написаны.


Пользователям Envoy это расскажите, к примеру. А то они так страдают от того, что не выбрали многократно помянутый вами Apache TrafficServer, что прямо спать не могут.
Re[9]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 15:40
Оценка: +4 -1
Здравствуйте, so5team, Вы писали:

S>Видите ли какое дело: C++20 рано или поздно будет освоен. Не говоря уже о молодежи, которая может начинать прямо с C++17. И количество подрывов будет сокращаться с каждым месяцем опыта с новым C++.


Молодёжь принудительно подсаживают на Go, python, rust, JS и прочую хипстоту. Зачем городить что-то на C++, когда можно модно и молодёжно сваять на JS+Electron? Так рассуждают везде, кроме серверов, железок и тырпрайза. С С++ играют только задроты, которым делать нечего и которых на работу не берут. С++ всё больше и с ускорением скатывается к туда же, где прозябает Haskel. На серверах и железках доминирует чистый Cи, и будет, пока линуксы и прочие оракелы на Cи написаны, а замены им не видно. А в тырпрайзе C++ и не было никогда, там java балом правит.
Re[9]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 15:46
Оценка: +1 :)
Здравствуйте, so5team, Вы писали:

S>Пользователям Envoy это расскажите, к примеру. А то они так страдают от того, что не выбрали многократно помянутый вами Apache TrafficServer, что прямо спать не могут.


Что это? Кто это? А, очередной хеллоуворлд с гатхаба. Неинтересно (уходит писать плагин для nginx)
Re[10]: Они сделали дерьмо опять
От: Cyberax Марс  
Дата: 19.05.20 16:22
Оценка:
Здравствуйте, smeeld, Вы писали:

S>>Пользователям Envoy это расскажите, к примеру. А то они так страдают от того, что не выбрали многократно помянутый вами Apache TrafficServer, что прямо спать не могут.

S>Что это? Кто это? А, очередной хеллоуворлд с гатхаба. Неинтересно (уходит писать плагин для nginx)
LOL.

Envoy используется для коммутации трафика между сервисами, во многих компаниях из Top500.
Sapienti sat!
Re[11]: Они сделали дерьмо опять
От: Mystic Artifact  
Дата: 19.05.20 16:26
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Envoy используется для коммутации трафика между сервисами, во многих компаниях из Top500.

Топ500 использует еще 100500 всякой хрени в самых разных местах. Если им это надо — это не значит, что остальной части населения, которой >99.9% нужно вообще об этом знать. Какие выводы можно сделать из того что они используют? Да никаких.
Re[10]: Они сделали дерьмо опять
От: so5team https://stiffstream.com
Дата: 19.05.20 17:10
Оценка: -1
Здравствуйте, smeeld, Вы писали:

S>>Пользователям Envoy это расскажите, к примеру. А то они так страдают от того, что не выбрали многократно помянутый вами Apache TrafficServer, что прямо спать не могут.


S>Что это? Кто это? А, очередной хеллоуворлд с гатхаба.


Если исходить из того унылого кода, который вы приводили в пример, то возникает вполне обоснованный вопрос: а у вас-то квалификации хватает, чтобы отличить хеллоуворлд от не хеллоуворда? Чем докажите?
Re[12]: Они сделали дерьмо опять
От: so5team https://stiffstream.com
Дата: 19.05.20 17:17
Оценка: +3
Здравствуйте, Mystic Artifact, Вы писали:

MA> Топ500 использует еще 100500 всякой хрени в самых разных местах. Если им это надо — это не значит, что остальной части населения, которой >99.9% нужно вообще об этом знать. Какие выводы можно сделать из того что они используют? Да никаких.


Суть не в Топ500, а в том, что sleeld здесь регулярно высказывает свое мнение о том, что фичи современного C++ не нужны для разработки производительного кода. И в пример любит приводить древний Apache TrafficServer (бывший Yahoo TrafficServer, который получился из бывшего Inktomi Traffic Server, который начали разрабатывать хз когда), где типа нет следов ни STL, ни современного C++.

Envoy же является примером производительного решения, которое написано как раз на современном C++.

Ретроградов, типа вас с smeeld, это вряд ли в чем-то убедит. Но может быть кого-то заставит перестать брать слова smeeld на веру.
Re[11]: Они сделали дерьмо опять
От: smeeld  
Дата: 19.05.20 17:34
Оценка: :)
Здравствуйте, so5team, Вы писали:

S>а у вас-то квалификации хватает, чтобы отличить хеллоуворлд от не хеллоуворда?


Для меня критерий прост: linux юзается везде-это не говнокод, оракел юзается везде-это не говнокод, nginx юзается везде-это не говнокод. Тот примерчик, что Вы привели, юзает не индустрия, а полтора инвалида-это говнокод. Все остальные рассуждения про "красивость кода", "безопасность кода", "читаемость кода"-это рассуждения задротов, которым делать нечего. Код не может быть ни плохим, ни хорошим, он может быть юзаемым, как оракел, а может быть неюзаемым как Ваш пример. Неюзаемый код-это говнокод. Юзаемый код-это то, что выбрала индустрия, неюзаемый код-это код который выбрали полтора задрота, согласно своим личным взглядам и предпочтениям.

>Чем докажите?


Проходите мимо, тут не подают.
Re[13]: Они сделали дерьмо опять
От: Mystic Artifact  
Дата: 19.05.20 17:36
Оценка:
Здравствуйте, so5team, Вы писали:

S>Envoy же является примером производительного решения, которое написано как раз на современном C++.

Теперь, ясно. Ну,я в этом и не сомневался.

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

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

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