Sergey
Не обиды или чего-то такого ради, но я всегда все сам изучал и если какие-то траблы, то бежал в книги/спецификации/гугл. Ведь когда сам разберешься это в 10 раз лучше, чем кто-то ткнет.
Andrei
Если он не дочитал аккурат до строк, то откуда знает что надо их брать в двойные кавычки?
Anonymous
ну пример такой попался
Andrei
И если он прочитал уже массивы зачем удивляться 6 а не 10 записям
Andrei
Я добрый.
Andrei
Задавай вопросы без эмоций, получишь ответ без эмоций.
Anonymous
ඞ
ඞ
Кривая как винда ME
Andrei
Когда задают вопрос "почему этот вот код выводит это?", я смотрю в код и если он действительно выводит, то что вывел, я спрашиваю "а что должен если не это?" И хотя я понимаю, что вопрос был в том на самом деле "как работает этот код", я предпочитаю чтобы человек высказал своё предположение, потому что так быстрее найти изъян в его понимании, чем объяснять все целиком.
Andrei
Есть же уже
Когда мне было надо (4 года назад) не было.
ඞ
Andrei
Взял никсовую какую-то либу и переписал для винды.
ඞ
И всегда был говном
ඞ
ඞ
Но
ඞ
НАХУЯ
ඞ
ФАСТСГИ ПОД ВИНДОЙ?
Andrei
Что тебя смущает?
Andrei
@PenterProKaos ?
Andrei
Хаскелль знаешь?
Sergey
Нет
ඞ
Не Expected
ඞ
А Exception
ඞ
Если ты имел ввиду свой класс для неожиданных случаев
Andrei
Нет. Я про expected
Andrei
Как замену исключениям.
ඞ
Бля
ඞ
Ну
ඞ
Класс исключения?
ඞ
Или что?
Andrei
Короче, Сергей. Expected это обертка над возвращаемым значением, которая хранит либо его либо ошибку. В виде стринга или std::exception_ptr.
Andrei
У неё как у монад есть биндеры
Andrei
Биндер в который передается функтор от типа возвращаемого значения
Andrei
Который вызывается в случае успеха
Andrei
Или fail
Andrei
В который передается ошибка
Andrei
Понятно что такая штука как бы "заражает" все возвращаемые значения.
Andrei
Поэтому там где уже обычный код мы руками можем чекнуть у expected-a в каком он состоянии и вызвать get или geterror
Andrei
Собственно все.
Sergey
Хм
Andrei
Вместо throw у нас оьычный return
Sergey
Ага
Sergey
Клево
Andrei
Только в этот ретёрн конструируется спецобъект
Andrei
И плюс там шаблонная магия позволяет делать ретёрн ожидаемого типа без приведения
Andrei
То есть функция которая возвращала инт, стала возвращать Expected<int, std::string> например, но внутри тела все равно return 2; можно оставить.
Andrei
Очень ускорило работу.
Andrei
Бтв. Во многих языках именно такой механизм
Andrei
Например в хаскеле монадический трансформер maybeT
Andrei
Или в Rust
Andrei
Там тоже нет исклбчений
Andrei
И они имено в виде expectation-ов возвращаются.
Andrei
Вот ссылка на пропозал о добавлении в стандарт плюсов этого класса
Andrei
https://isocpp.org/files/papers/n4015.pdf
Andrei
Кстати реализация Александреску норм, но мне не очень. Я бы делал более функциональную и менее тяжелую для эмбеддеда.
🦥Alex Fails
Square
Во вы злые.
Square
Че у нас можно из подкастов про разработку послушать, только не для новичков. I tunes u чухню предлагает
Square
Хочу вдохновиться каким нить свежим архитектурным познанием
Square
Не могу придумать толковый обмен данными между потоками. Нужно чтоб прям blazingly fast
Square
Минимум реаллоков :( локфри
Square
Текущая реализация уныловата
arisudesu
очереди сообщений
Square
Zeromq? Медленно
Square
У меня обмен указателями через локфри очередь
Square
У выталкивающего потока на выходе буфер статический,читающие потоки по указателям собирают свои данные из буфера соседа. Вот колхоз вокруг этого буфера мне не нравится. Приходится следить чтобы читающий не догонял пишущего
Square
Если навешивать сюда диспетчеризацию - скорость падает
Andrei
Сколько чтецов?
Andrei
Ридрайт мутех
Square
Чтецов как правило 1-2 но может быть больше. Зависит от сценария
Square
И перед тем как забрать данные читающий проверяет позицию пишущего
Square
Это через атомик
Square
В грубом приближении так
Square
Вызодной буфер потока зациклен и поделён на 3 части...
Andrei
Можешь локфри сделать
Andrei
Перед и после буфера каунтер
Square
Если вдруг оверфлоу, треть очищается. Если не успевает