co_await c++20

Тема в разделе "LANGS.C", создана пользователем superakira, 13 мар 2018.

Статус темы:
Закрыта.
  1. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Ну, для начала это:
    ЗАЧЕМ?????????????77777 Только не надо мне тут втирать про экономию памяти и бла-бла-бла.
    Если надо как-то сериализовать строку, то для этого обычно пишутся необходимые алгоритмы конвертации, не более и не менее.

    Ну и ещё помимо std::string у нас есть: CString, wxString, QString, StrTk, BString, GString, AnsiString, UnicodeString и т.д., вплоть до специально оптимизированных структур для поиска по алгоритму Бойера-Мура.
    Different problems - different solutions - https://cellperformance.beyond3d.com/articles/2008/03/three-big-lies.html

    Нет единой реализации. Каждый C++-вендор городит свой огород. То есть, все стандартные библиотеки, по сути, - это стандартные лисапеды.

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

    Ну начнём с того, что вас штормит: вы из одной крайности в другую мечетесь. Почему вы считаете, что QString или UnicodeString - это колхозный рантайм? Они заточены как бы под определённые задачи и так же отлажены, и работают в своих тулкитах более чем стабильно. Но, видимо, разработчикам совсем была не любовна и прельстива та "мощь", которую даёт std::string, и они решили воспользоваться решениями, которые будут вести себя более предсказуемо.
     
  2. superakira

    superakira Guest

    Публикаций:
    0
    SadKo, аа ты вон в каком ключе) я про малварь говорил. мой косяк, не уточнил.
    но даже в твем ключе - QString или UnicodeString это как бы разные вещи.
    1. Под жопой кьюта строки тоже юзаются. И в std::string и в std::wstring оно не просто так перегоняется публичными функциями-членами.
    2. UnicodeString- чето оно не из этой оперы совсем, да рантайм системный для строк, но мы про плюсовый рантам говорим.

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

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

    о! ты не ушел) это гуд.
     
  3. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
  4. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    Тема асинхронности интересная сама по себе например https://groups.google.com/forum/#!topic/openpgm-dev/9qA1u-aTIKs
    Boost::Asio имеет плохой дизайн, он объектно ориентированный, а не функциональный.
    Асинхронные же задачи проще решать именно с функциональным дизайном, а не объектно-ориентированным.

    Вопрос - какую задачу необходимо решить?
    Ответ - асинхронная параллельная обработка без создания потоков.
    Вопрос - на каком уровне находится сетевая абстракция?
    Ответ - на низком.

    Сокеты предоставляют чтение данных из сети и отправку данных в сеть, это простейшая задача, которую раздули библиотеками до космических масштабов.
    Зачем здесь библиотеки для работы с сетью, если ответ на вопрос сводится к дизайну прикладного кода, все что здесь требуется это спроектировать state объекты, которые будут знать что им нужно делать в каждом из состояний и опрашивать их в цикле одного потока (это простейший пример, а не серебрянная пуля естественно). Главная проблема в C++ это попытка создавать "богоподобный код" для решения всех проблем, вот это и есть Boost::Asio.

    ioservice в бусте имело бы смысл завернуть в синглтон и спрятать подальше от глаз, в его задачи входит регистрация создаваемых объектов и их обслуживание, нахрена это выносить на уровне интерфейса не ясно.
    Посмотрите как работают библиотеки под виндой, они много создают различных объектов при инициализации, треды стартуют, но вы даже не паритесь за эти вещи, используете удобные простые API. В этом и суть.
     
  5. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
  6. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    нда, ну и код ты скидываешь...
    Код (C):
    1. boost::asio::io_service& io_service_pool::get_io_service()
    2. {
    3.   // Use a round-robin scheme to choose the next io_service to use.
    4.   boost::asio::io_service& io_service = *io_services_[next_io_service_];
    5.   ++next_io_service_;
    6.   if (next_io_service_ == io_services_.size())
    7.     next_io_service_ = 0;
    8.   return io_service;
    9. }
    Кровь из глаз честно говоря.
    Объясни мне зачем создавать такое на практике? Что мешает сделать это как в Java Spring Framework, где поведение компонентов просто конфигурируется? Допустим нужно 15 нам io_service объектов, и поэтому нельзя использовать singleton, ну ок, а почему нельзя для пула сделать враппер или пулов так же потребуется на практике 15 штук создавать? :) Пускай будет singleton пул, в большинстве случаев в нем будет один единственный io_service, такой подход как-бы норма в C++.

    Все эти пляски в C++ вокруг io_service и необходимость его таскать по всему коду с boost::asio, выглядит чертовски нелепо и непрофессионально, и это можно понять, т.к. библиотека старая, обратная совместимость нужна, а ранее нормально проектировать не умели, а теперь и поздно переделывать.
     
  7. CurryHowardIsomorphism

    CurryHowardIsomorphism Member

    Публикаций:
    0
    Регистрация:
    13 май 2017
    Сообщения:
    97
    unc1e, речь шла про ручной поиск ошибок. Тег #bsod скорее всего означает, что источник ошибки был найден в бэктрейсе.
     
  8. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    логично то, что цикл опроса select/poll находится в отдельном потоке, вопрос был конкретно почему это вынесено во внешний интерфейс библиотеки, почему это не скрыто как часть реализации. Те же std::async это так же часть реализации, но никто в здравом уме не выносит это как отдельный объект, который создаётся где-то в main и который надо тащить глобально во все файлы работы с сетью.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    В этом треде со всеми все ясно.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    _DEN_,

    Что значит ясно, типо матчасть не знаем ?

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

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Ну может оно так и было, пока их не переписали. Сейчас главное - безопасность. А данный компилер этим требованиям не соответствует, так как его выхлоп во первых не контролируется на должном уровне, а во вторых тянет с собой жирный ртл.

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

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
    Indy_, существует как минимум один нормальный проект на С++ это NTL, сами по себе плюсы конечно несовершенны, их гибкость играет против них, например метод pop в STL контейнерах имеет тип void, потому как при возвращении объекта требуется вызов конструктора копирования, который может кинуть экспешен, а для некоторых объектов это возможно только через std::swap, поэтому чтобы получить эквивалент методу pop в JavaScript нужно выполнить какой-нибудь back() + pop_back(), используя при этом итератор. Много смешных банальных костылей и глюков. Например std::remove не удаляет элемент в контейнере несмотря на её название.

    Написать годный код с использованием C++ можно теоретически, такие случаи иногда бывают. Даже boost::asio работает в принципе сносно, но проблема boost в том, что это отдельная экосистема, где каждый элемент тянет за собой всю экосистему целиком, что в корне против принципов нормального проектирования. И даже если ты притащил целую экосистему boost и хочешь завернуть аккуратно в рамках одного модуля в коде, то невсегда у тебя будет такая возможность, как например io_service'ы в asio.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Верно, для меня это кривой скрипт и поиск ошибок в нём, не более того. Локальная парадигма не интересует, я это и знать не хочу. Да и понятно почему, выше пример:

    > Например std::remove не удаляет элемент в контейнере

    Какой есчо контейнер, это какие грибы нужно вдуть..
     
  14. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    138
    Адрес:
    Ташлинск
    Конкретная реализация какого-либо абстрактного типа данных в c++ называется контейнером.
     
  15. superakira

    superakira Guest

    Публикаций:
    0
    im., юзаю асио стэндалон. буст уже почти не нужен. хотя для конфигов и логирования только если.

    Короче на правах ТС прошу админа закрыть топ. Все сваливается в негатив) собсно как всегда)
    Всем спасиб.
     
  16. im.

    im. Active Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    310
  17. superakira

    superakira Guest

    Публикаций:
    0
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Продолжайте :popcorm1:
     
  19. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    пожалуй закрою. по просьбе тс
     
    SadKo нравится это.
Статус темы:
Закрыта.