
Серж
13.07.2018
13:42:54

Aidar
13.07.2018
13:43:30
Я ваще на самом деле против того чтобы все начинали писать объектики в потоки

Constantine
13.07.2018
13:43:44

Aidar
13.07.2018
13:43:54
Ну будут наверн

Google

Aidar
13.07.2018
13:44:01
Ща завезут с++26

Серж
13.07.2018
13:44:04
поцоны в гугле написали целый компилятор чтобы уйти от байтиков, а ты топишь за буферы и байтики и чтобы к ним вернуться
это точно безопасно?

Constantine
13.07.2018
13:44:22

Aidar
13.07.2018
13:44:41
Я не понял

Constantine
13.07.2018
13:44:43
А мне надо именно объектные потоки
Ну корутины очень близки к объектным потокам

Dmitry
13.07.2018
13:45:20
Пацаны в Google может примерно то о чем я и говорю пытались сделать.
Посмотри их "zero copy" streams

Серж
13.07.2018
13:46:20
да они вроде сделали, протобуф, потом флатбуфер, описываешь структуру, компилятор генерит для твоего языка её представление, геттеры/сеттеры, получение сереализованного массива байтов
zero copy стримс это как? есть массив указателей и кол-ва байт по указателю?

Dmitry
13.07.2018
13:47:47
Хз, но вот так они их называют :)

Серж
13.07.2018
13:47:57
это не кеш френдли

Google

Constantine
13.07.2018
13:48:04

Dmitry
13.07.2018
13:49:13
Короче, стрим это типа штото куда ты пишешь и всё, оно двигает каретку.

Серж
13.07.2018
13:50:34
короч стрим инвазивный а буфир нет, стрим содержит каретку и сам её двигает, у буфера нет каретки и каждый кто хочет сам заводит каретку и её двигает извне
гениально!

Dmitry
13.07.2018
13:51:10
У мну есть буфер в два байта. Которые надо заслать. Как средствами c++ записать туда uint16?

Aidar
13.07.2018
13:51:32
Точно не memcpy если ты об этом

Dmitry
13.07.2018
13:52:13

Alex Фэils?︙
13.07.2018
13:52:48
Берите мемсру, и не парьтесь

Aidar
13.07.2018
13:52:53
А теперь на структуру{uint64_t; uint8_t}

Серж
13.07.2018
13:53:00
если не проверять endianess то и memcpy и взять нижний и верхний приведут к одному результату

Aidar
13.07.2018
13:53:02
И пиши в свой буффер
Удачи

Серж
13.07.2018
13:53:05
но разному на разных компах

Dmitry
13.07.2018
13:54:05
Да-да, а я не хочу по разному. Потому и говорю, может кошерный вариант будет? :)))

Aidar
13.07.2018
13:57:58
Короче ты ваще потенциально не можешь гарантировать возможность одинаковой упаковки структур в памяти на двух разных машинах например

Dmitry
13.07.2018
13:59:22
Разница может быть такая, я пишу сложную структуру. Могу просто зарезервировать место для записи размера и потом записать или пишу потоком.
Либо двойной обход с расчетом размера сериализации, который может быть сравним с самой сериализацией или так вот.

Constantine
13.07.2018
14:02:19
ЯННП
в сериализации самое сложное - написать сериализацию

Google

Constantine
13.07.2018
14:03:20
если надо что-то параллелить это решается на уровне типов данных по жизни

Dmitry
13.07.2018
14:03:42

Constantine
13.07.2018
14:04:06
ну... почти
остается только данные подогнать как они хотят

Dmitry
13.07.2018
14:05:39

Constantine
13.07.2018
14:06:22
я к тому, что сериализация всегда идет на потоковый вывод
со вводом сложнее
и если перед выводом надо еще надо картинки прокодировать, это совершенно точно делает не резервированием места в выводном буфере с последующим запуском потока :)

Dmitry
13.07.2018
14:08:11
со вводом сложнее
Не всегда, можно точно так же написать намного более простой по сравнению с istream парсер готового буфера.

Constantine
13.07.2018
14:08:37
потоковый ввод это про бинарные форматы

Dmitry
13.07.2018
14:11:12
В общем если говорить про ввод, там тоже все парсеры это обертки над string_ref, не более

Constantine
13.07.2018
14:11:38
Ну если ввод бинарный - да

Dmitry
13.07.2018
14:12:11
А, это я тоже про упрощённые парсеры...
Которые не умеют через глубинные жопы требовать очередного ввода.
В общем есть streams, которые по большому счету шикарны.
Но мне всегда надо глубже ;(
Вывести в строку thread id
Работа с датами ...

Constantine
13.07.2018
14:19:57
я когда-нибудь обязательно доделаю свой сериализованный велосипед :)

Google

Aidar
13.07.2018
14:20:44
Например std::function
у текущего io стека как раз торчит все наружу, как в джаве сишарпе или кьюте, но это чтото из 90-х\

Constantine
13.07.2018
14:24:41

Dmitry
13.07.2018
14:24:49

Aidar
13.07.2018
14:24:55
но короче какаято часть логики выйдет как раз в эту обертку
а виртуальными останутся какието типа трейтсы и данные

Constantine
13.07.2018
14:25:58
да, предлагаю
Тут вопрос, юзеровская реализация по этому контракту конечная или промежуточная, видимо. Сложно, не могу формализовать
Т.е. раcтипизированный xml-источник данных вот просто хочется возвращать как unique_ptr<источник_данных>
Видимо, std::function возникает, когда тебе нужно растипизировать и сохранить контракт одновременно

Aidar
13.07.2018
14:28:29
ваще надо както пофиксить юзеррасширение через наследование, это всегда бесило, полиси лучше, или че там модно

Constantine
13.07.2018
14:28:54
модули сделай сначала, потом будем думать, когда не наследовать
динамический полиморфизм слабее статического, но уменьшает время компиляции в бесконечность раз

Aidar
13.07.2018
14:30:00
да стек ио надо делать потом уже модули, но беда в том что стек ио делали умные чуваки, но получилось что получилось, тоесть это слишком трудная задача
от вас эмбеддедщики бегут в страхе, увидев cout

Constantine
13.07.2018
14:30:47
без стека ио намного проще жить
а вообще имхо будущее за отглагольным кодированием и внешними предикатами
ООП тупиковое направление
в части инкапсуляции методов

Google

Aidar
13.07.2018
14:33:10
надо переходить на FORTH

Dmitry
13.07.2018
14:34:43
Хз, никогда не зависел от того что введет пользователь. Хотя обычно это конфиги...
Я тут выше по деревьям чот высказался, но вот например gcc перебалансировку в либу тащит, а llvm нет.

Constantine
13.07.2018
14:42:58

Aidar
13.07.2018
14:43:21

Constantine
13.07.2018
14:44:43
еще бы пространства имен для всяких swap разрешили, вообще было бы найс

Дед Пегас
13.07.2018
14:47:13
Наркоман)

Constantine
13.07.2018
14:48:01
Наркоман)
ну я не знаю, какими сумеречными гениями надо быть, чтобы в случае qualified name lookup запретить перегрузку универсальных методов
using std::swap; //I LOVE THIS LANGUAGE
swap(a, b);

Ilia
13.07.2018
15:50:05

Constantine
13.07.2018
15:52:21
The portion of the declaration preceding [ applies to the hidden variable e, not to the introduced identifiers.
int a = 1, b = 2;
const auto& [x, y] = std::tie(a, b); // x and y are of type int&
auto [z, w] = std::tie(a, b); // z and w are still of type int&
assert(&z == &a); // passes