@ProCxx

Страница 2199 из 2477
Серж
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
Ща завезут с++26
Просто корутины во многом должны быть ими, но пока там ручник

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
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
в сериализации самое сложное - написать сериализацию
Как правило она уже написана, protobuf, json, asn, xml...

Constantine
13.07.2018
14:04:06
ну... почти

остается только данные подогнать как они хотят

Dmitry
13.07.2018
14:05:39
остается только данные подогнать как они хотят
Да, например записать в network byte order число. В один байт, в два, в три..

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
Не плохо. Интерфейс минимален. В минимуме ему соответствует просто массив байтов.
есть пруф что каша динамической неопределенности типов не должна быть инкапсулирована внутри класса-обертки представляющей конкретный тип и с RAII на борту?

Например std::function

у текущего io стека как раз торчит все наружу, как в джаве сишарпе или кьюте, но это чтото из 90-х\

Constantine
13.07.2018
14:24:41
есть пруф что каша динамической неопределенности типов не должна быть инкапсулирована внутри класса-обертки представляющей конкретный тип и с RAII на борту?
Предлагаешь обертку на каждый unique_ptr<interface> писать? Вроде, это избыточно Другое дело, что типоудалялки под контракты вещь, похоже, правильная

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
надо переходить на FORTH
плюсы замечательно это поддерживают, хотя через некоторую жопу

Aidar
13.07.2018
14:43:21
Constantine
13.07.2018
14:44:43
так кажется про все можно сказать
tag dispatching это на самом деле почти то, что надо

еще бы пространства имен для всяких 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);

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

Страница 2199 из 2477