- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
AnsiString str = IntToHex((__int64) longvalue, 2); // 0x01020304
char _c[11];
char *ch = str.c_str();
int len = strlen(ch);
int _s = len;
int j = 0;
_c[j++] = '0';
_c[j++] = 'x';
while (_s >= 2) {
_c[j++] = ch[_s-2];
_c[j++] = ch[_s-1];
_s-=2;
}
if (len == 7) {
_c[j++] = '0';
_c[j] = ch[0];
}
_c[10] = '\0';
unsigned long pp;
char *pEnd;
pp = strtoul (_c, &pEnd, 16); // 0x04030201 - PROFIT!
FataLL 05.08.2022 11:48 # 0
Soul_re@ver 05.08.2022 12:09 # 0
ниработаит.
FataLL 05.08.2022 12:24 # 0
Steve_Brown 05.08.2022 12:57 # 0
Soul_re@ver 05.08.2022 13:13 # 0
FataLL 05.08.2022 13:40 # 0
Soul_re@ver 05.08.2022 15:30 # 0
3.14159265 05.08.2022 16:25 # +1
Хотя конечно строчек чуть больше.
FataLL 05.08.2022 17:03 # 0
guest6 05.08.2022 17:19 # 0
А как же без сишной хуйни образца 1991-го года?
int len = strlen(ch);
?
Кстати, есть такой синдром, когда петух с СИ перелез на С++, но С++ не знает, и пишет вот такую вот хйню ручную перемежая ее классами
ISO 05.08.2022 20:26 # 0
Зря.
FataLL 05.08.2022 21:32 # 0
guest6 05.08.2022 21:37 # 0
через обычный массив чтобы идеологически красиво
FataLL 05.08.2022 21:38 # 0
ISO 05.08.2022 22:18 # 0
Правильно такие вещи делать или сдвигами, или через std::memcpy() в массив и обратно, или каким-нибудь std::bit_cast. Все три способа современные компиляторы всё равно соптимизируют в один bswap.
guest6 05.08.2022 22:57 # 0
J.1 Unspecified behavior
— The value of padding bytes when storing values in structures or unions (6.2.6.1).
— The values of bytes that correspond to union members other than the one last stored into
(6.2.6.1).
3.14159265 06.08.2022 00:50 # 0
По-моему современные компиляторы вообще любое говно оптимизируют в bswap. Я вставил штук 10 разных реализаций (в т.ч. из этого треда) и они все стали bswap.
Кстати глянь что MSVC чудит. Это вообще ужасное тупое животное, которое ни одну идиому не восприняло.
>1. такие вещи делать или сдвигами
Сдвиги — это пирдоль, а не ЯВУ-way.
>2. или через std::memcpy() в массив и обратно
Пиздец Говно.
>3. каким-нибудь std::bit_cast
Вот именно поэтому я и люблю Кресты.
Был в Сишке очень простой и понятный способ даже джва: юнион и каст.
Пришли крестухи, усложнили всё до невозможности и начали умничать: «ой ты что, юнион же нельзя! И касты со скобочками нельзя!!»
«Нужно std::bagor_pidar_cast, потому что std::bagor_govno_cast, который ввели в C++11 уже задепрекейтили, а обычный std::bagor_cast кастит не так.»
«А вот в С++24 завезут std::bagor_govno_pidar_cast, вот самое идиоматичное.»
KOPOBA 06.08.2022 00:54 # 0
Выглядит как юзернейм типичной файки на Говнокоде.
j123123 06.08.2022 01:05 # +1
Janycz 06.08.2022 22:50 # 0
hormand 06.08.2022 23:01 # 0
guest6 05.08.2022 22:54 # +1
Но использовать можно только один какой-то член.
Ты записал в ``u32``: все. Никакого b у тебя больше нету, и наоборот.
Куда записал -- оттуда и читай.
Тот факт, что ты что-то там писнул в b, не дает тебе повода думать, что в u32 что-то само собой изменилось. В реале это конечно так скорее всего, но по стандарту -- нет.
То, что ты пытаешься сделать, называется "type punning (каламбур типизации).
Компилятор может напихать паддингов как ему удобно, и у тебя нихера не сработает.
Причем в сишке это unspecified, то есть зависит от компиялтора, а в C++ это вообще UB, потому что соврешенно не понятно когда члены разрущаются и когда им нужно вызывать конструкторы и деструкторы
Soul_re@ver 05.08.2022 17:20 # 0
3.14159265 05.08.2022 17:29 # 0
u.b здесь однозначно есть.
guest6 05.08.2022 17:27 # 0
Алсу, вроде в юнион можно трогать только за один его член. Судьба других в этот момент неизвестна
3.14159265 05.08.2022 17:33 # 0
Да, действительно, я написал реверс бат.
Хотя ОП сказал в комментарии «Byte swap». Так что всё ок.
Впрочем: Исправил. Уменьшил.
И переписал на нормальный язык:
3.14159265 05.08.2022 17:41 # 0
А вот всяким экзотическим платформам эта вареция нравится больше старой:
3.14159265 05.08.2022 17:50 # 0
ISO 05.08.2022 20:30 # 0
guest6 05.08.2022 20:34 # 0
вот как он понял, что твои двигания битиков это на самом деле __bswapsi2?
А __bswapsi2 это небось интристснстсник какой-нито чтобы сделать правильно на кокретном цпу?
3.14159265 06.08.2022 00:09 # 0
Это же не НАСТЕНЬКА.
3.14159265 06.08.2022 00:04 # 0
Меня после того как они царизмы в сдвиги превратили уже мало что удивляет.
https://govnokod.ru/28289#comment781162
И да, я днём тоже игрался c godbolt и получил вызов __bswapsi2.
3.14159265 05.08.2022 18:21 # +1
Тут конечно j123123 мог бы доебаться возразить что это тоже непортабельное говно.
guest6 05.08.2022 19:14 # +1
guest6 05.08.2022 19:18 # +1
guest6 05.08.2022 19:19 # 0
guest6 05.08.2022 19:25 # 0
guest6 05.08.2022 19:17 # 0
а бывает не 8?
ISO 05.08.2022 19:46 # +1
3.14159265 06.08.2022 00:11 # 0
А через каст в кокозатель (char*) или (uint8_t *)?
guest6 06.08.2022 00:15 # 0
от сортов каста проблема не уходит: если ты писнул в один мембер, то читать второй -- UB.
ISO 06.08.2022 11:26 # 0
Единственное, что можно — это скастовать объект в char* и посмотреть, что там внутри лежит, но вот можно ли туда записать что-то — слишком лень выяснять. Я бы не стал.
guest6 06.08.2022 11:38 # 0
ISO 06.08.2022 11:43 # +1
guest6 06.08.2022 12:55 # 0
bormand 06.08.2022 13:38 # 0
Если standard layout и внутренние представления всех полей получатся корректными, то наверное можно?
memcpy() же как-то должен работать с сишными структурками.
bormand 05.08.2022 19:48 # +2
Гцц понял идею и заменил на bswap, шланг обосрался.
guest6 05.08.2022 20:02 # 0
Тут ты ему сокрмил два итератора: один на начало in, второй на конец, и попросил от сих до сих перевернуть, да?
3.14159265 06.08.2022 00:14 # 0
> почому char а не uint8_t когда у пи в структуре uint8_t ?
Потому что я лоханулся же.
На не 8-битных платформах не заработает. Борманд до довёл до идеала.
guest6 06.08.2022 00:16 # −1
но я боюсь что тут не поможет
bormand 06.08.2022 08:01 # 0
2) Чар может алиаситься с любым типом.
Так что вроде всё ок.
3.14159265 06.08.2022 00:15 # 0
Причём
а) портабельно
б) один и тот же код работает для разных размеров инта
3.14159265 06.08.2022 01:11 # +1
А ГЦЦ — умница, юзает циклоняшный сдвиг.
PS> кстати я запросто отличу настоящую Бормандоняшу от подделки даже при полном совпадении ников и ав. Подделка никогда не напишет сливающий всё однострочник.
bormand 06.08.2022 09:17 # +2
Тест Питуринга.
guest6 05.08.2022 14:00 # +1
nyTuH_nugop 05.08.2022 15:35 # 0
guest6 05.08.2022 17:30 # 0
ISO 05.08.2022 20:26 # 0
guest6 05.08.2022 20:30 # +1
Единственная нужная структура данных это uint32_t
bormanb 05.08.2022 23:06 # 0
guest6 06.08.2022 00:19 # 0
Питуз был байтоебом, и писал такой код, который царю очень нравился.
Зелибоба пришел в кресты из джавы, и писал всё в терминах stl и итераторов
А компилятор всё равно сворачивал их код к одной инструкции, которая на современных процах сама всё делает.
Отсюда вывод: не выебывайся
j123123 06.08.2022 00:31 # 0
> Зелибоба пришел в кресты из джавы, и писал всё в терминах stl и итераторов
Я в своё время без особых проблем написал на Си сортировку массива фиксированного размера, которая дефолтный std::sort из крестоговна уделывала по скорости на рандомных данных. Т.е. крестопарашная стдлиба далеко не самая оптимальная, это как бы факт.
Какую-нибудь хеш-таблицу тоже наверняка можно уделать, если захотеть
guest6 06.08.2022 00:35 # −1
j123123 06.08.2022 00:37 # 0
https://govnokod.ru/25307#comment452812
j123123 06.08.2022 00:54 # 0
Так-то вообще всяких алгоритмов сортировок довольно-таки дохуя, есть специальные гибридные алгоритмы, типа https://ru.wikipedia.org/wiki/Timsort которые и крестопарашный std::sort уделают на изначально сильно сортированных массивах хуйни.
KOPOBA 06.08.2022 00:41 # −1
3.14159265 06.08.2022 00:45 # 0
* на выбранных Царём бенчах и данных
Desktop 06.08.2022 00:50 # −1
bormand 06.08.2022 08:14 # 0
3.14159265 06.08.2022 00:59 # 0
Байтоебство — говно, которого нужно избегать, и писать максимально понятный код.
Просто я про std::reverse забыл. Точнее что он на массивах работает.
> А компилятор всё равно сворачивал их код к одной инструкции
Да вот только не везде оно так. Посмотри например выхлоп MSVC и поймёшь.
j123123 06.08.2022 00:59 # +1
3.14159265 06.08.2022 01:13 # 0
Кстати анскилябры не поняли его мудрых слов и зачем-то Царя заминусовали. Пошёл въебал ему плюс.
https://govnokod.ru/13180#comment181254
https://govnokod.ru/13180#comment181179
guest6 06.08.2022 01:20 # 0
Это в сишке данные пассивны, и как в песне про навоз: "я ни с кем не дружу: где положат -- там лежу"
А в крестах у них бывают деструкторы всякие и конструкторы мува и операторы копирования
3.14159265 06.08.2022 01:21 # 0
Так крестухи же в новом штандарте ввели идиому trivially movable. Или как-то так.
Ну это как джависты на третий десяток лет существования языка, наконец-то додумались что нужно примитивные типы сделать.
Но опять же это нихуя не снимает проблемы питушарских крестов, о которой говорил Царь и j123123: питушарские реаллоки вектора вместо сверхбыстрого ремапа виртуальной памяти.
guest6 06.08.2022 01:28 # 0
Или знает?
Или реально написать калллекцию, которая бдует мремапить чары, но явно расширяться для моево класса User?
3.14159265 06.08.2022 01:33 # 0
Ну раз траливали, тогда можно не морочиться с сёмантикой и делать realloc памяти, а не вызывать для каждого элемента вектора дырсуктор старого + коньсуктор нового.
Просто они обосрались как и джависты в примитивами.
Любому же школьнику очевидно что int8_t или структы с такими простыми типами (без явных деструкторов конструкторов) можно спокойно двигать.
3.14159265 06.08.2022 01:25 # 0
https://en.cppreference.com/w/cpp/types/is_move_constructible
«Мы сначала усложнили донельзя, обосрались с пирформансом vector<int>, а теперь хотим обратно как в Сишке
Потому мы ещё больше всё усложним, чтобы догнать Сишку»
UPDATE: а похоже я ошибся, is_trivially_relocatable ещё не завезли
3.14159265 06.08.2022 01:32 # 0
is_trivially_constructible
is_nothrow_constructible
is_trivially_default_constructible
is_nothrow_default_constructible
is_trivially_copy_constructible
Пиздец блять.
j123123 06.08.2022 01:40 # +1
hormand 06.08.2022 01:51 # 0
guest6 06.08.2022 10:07 # 0
KOPOBA 06.08.2022 11:54 # 0
guest6 06.08.2022 01:57 # 0
Если бы не было идиотского понятия "активных" данных, а были бы отдельно структуры и алгоритмы для работы с ними, то вот этого бы всего говна не было. Никаких блядь ``is_trivially_default_constructible``, никаких реаллоков.
А еще не было бы целого арктического гектара говна с ОРМ:
https://blog.codinghorror.com/object-relational-mapping-is-the-vietnam-of-computer-science/
Мухи отдельно, котлеты отдельно
KOPOBA 06.08.2022 02:48 # 0
guest6 06.08.2022 03:00 # 0
Говно, конечно.
Что должен сделать ORM, когда я напишу
?
PS: И это я еще не вставил условие, типа чючялярем делать только если у ципленка поле foo равно 32
3.14159265 06.08.2022 03:00 # 0
Альтернативы не прельщают: полностью ручное управление или gc.
guest6 06.08.2022 03:06 # 0
Для обычных структур можно говорить об инициализации нулями по умолчанию (как в го, например). Это вполне нормально, чтобы не иметь доступа к неинициализированному говну.
ООП с RAII лучше чем ООП без RAII (когда ты создаешь объект в хуйпойми каком состоянии и потом заполняешь его сотней сеттеров)
Но сам ООП очень плохо дружит с РСУБД. И, как мы видим, сильно усложняет реализацию коллекций (последнее можно конечно вылечить работая всегда по указателю (Как ЙАЖА) но тогда может соснуть пирформанс)
KOPOBA 06.08.2022 03:05 # 0
guest6 06.08.2022 03:09 # 0
В джанге вот костыли есть
https://docs.djangoproject.com/en/4.0/ref/models/querysets/#prefetch-related
KOPOBA 06.08.2022 03:15 # 0
Какие ORM рекомендуешь посмотреть (на разных ЯП)?
Интересно, какие вообще бывают костыли.
guest6 06.08.2022 03:23 # +1
Там есть неимоверная круть -- гибрид --
https://docs.sqlalchemy.org/en/14/orm/mapped_sql_expr.html
которую джангоебы не осилили и до сих пор пишут ДВА раза одну и ту же логику (для питона и для SQL).
Из пафосной хуйни наверное Hibernate для ЙАЖА и EF для .NET
Там можно наблюдать интересный подход: ты описываешь декларативно питушню, а тебе по ней генерят и классы и таблицы
В жаве есть еще mybatis, когда ты пишешь запросы вручную, а он просто результат натягивает на объектф
ну и нагугли фаулеровскую Enterprise Application Architecture, там описываются все сорта ормов
ps: есть еще способы замапливания классов на sqlite (coredata у ябла, в андроиде тоже штук пять)
по сути тоже орм, как и https://metacpan.org/pod/Tie::Hash::DBD
3.14159265 06.08.2022 04:09 # 0
Чем это лучше jdbc template?
Fike 06.08.2022 03:16 # +1
всем привет, подскажите пожалуйста, как можно решить проблему)
есть сервис, помечен спринговой @Transactional
в нем метод обновления сущности, у этой сущности есть поле - табличка связей, там может быть много объектов (ссылок), есть валидация по БД, то есть каждый idшник вставляемый в это поле, сначала валидируется на наличие в БД через репозиторий.
Я заиспользовал parallelStream для валидации списка объектов, чтобы значительно ускорить всё это.
...
...
если 3 поля распаралелить и там много idшников, то с 12-13 секунд я до 4.5 сократил
3.14159265 06.08.2022 03:27 # 0
> чтобы значительно ускорить всё это.
Кокой AssParallel )))
Ну Жописты теперь как их ololo-linq братья
https://govnokod.ru/9194
Спойлер: В результате бенчей AssParallel выяснилось что он замедляет кот в несколько раз
guest6 06.08.2022 03:40 # 0
3.14159265 06.08.2022 03:43 # 0
Да.
Я смотрю как они его в «JAVA» сделали и понимаю что у Майков LINQ получилось:
а) в пять раз удобнее
б) на пять лет раньше
>entityRepository
Зачем мне ваши repository? Я хочу как в Linq-to-sql прямо чтобы Where в запрос пошло.
>.collect(toList());
Нахуй мне писать это говно?
> но увы: он не взелетел
А я по общению .netчиками слышал что взлетел.
guest6 06.08.2022 03:47 # 0
кстати, в koko починили. Там можно foo.map{...} и чуть ли не сразу его результат в лист положить
>А я по общению .netчиками слышал что взлетел.
наскока я опнимаю, linq-to-sql в серьезных проектах не исопльзуют: там везде EF
Потому что можно напистаь такой linq случайно, который будет раблотать пиздато, когда у тебя 10 записей в базе (и он породит 10 запросов)
А когда их станет 1000 и он породит 1000 запросов, то ты соснеш
3.14159265 06.08.2022 03:51 # 0
Мне объясняли что Entity Framework это ORM и дохуя оверхеда генерит.
А ololo-linq там маппинг в sql чуть ли не 1-к-1. А в чём подвох я уже забыл.
> Потому что можно напистаь такой linq случайно, который будет раблотать пиздато, когда у тебя 10 записей в базе (и он породит 10 запросов)
А зачем ему 10 запросов?
> .Where<string>(s => (s.Length == 4)).GroupBy(x => x).
Это по идее одним запросом можно выбрать.
guest6 06.08.2022 03:53 # 0
>не наоборот
````
LINQ to SQL is the quick-and-easy way to do it. This means you will get going quicker, and deliver quicker if you are working on something smaller
Entity Framework is the all-out, no-holds-barred way to do it. This means you will take more time up-front, develop slower, and have more flexibility if you are working on something larger.
``
3.14159265 06.08.2022 03:54 # 0
«А если я её кувалдой?»
Против дурака нет защиты.
А разве если обращение к EF в цикле написать оно не 1000 раз вызовется?
> more time up-front, develop slower, and have more flexibility if you are working on something larger.
Это какой-то маркетинговый буллщит. Не объясняется в чём именно различие.
guest6 06.08.2022 03:56 # 0
https://docs.microsoft.com/en-us/ef/ef6/querying/related-data
>Против дурака нет защиты.
Ну вот начинается блядь
Я не могу просто писать C# код для работы с объектами, я должен постоянно думать, во что там оно в СУБД превратится
3.14159265 06.08.2022 03:58 # 0
Это логично. EF не решает эту проблему.
guest6 06.08.2022 04:02 # 0
потом все данные уже в контексте и можно по ним итерироваться безопасно
я не уверен, что это может linq-to-sql.
3.14159265 06.08.2022 04:10 # 0
Честно, уже очень хочу спать, листал тред и ничего не понял.
guest6 06.08.2022 04:19 # 0
ты запросом выбрал 1000 петушков, идешь по ним циклом, и у каждого берешь курочку
получается 1000 запросов
N+1 запросов, где N -- количество петушков
Для этого в ORM завезли prefetch, Include, и прочую зхуйню чтобы ты мог сказать "к петушку выбери еще и курочку". Тогда получится джойн петушков на курочек, всех выберет один запрос, результат загрузят в контекст, и ты по нему будешь итерироваться безопасно
3.14159265 06.08.2022 05:05 # 0
Edit
Ладно, уже совсем сплю, как проснусь перечитаю.
3.14159265 06.08.2022 05:37 # 0
> https://docs.microsoft.com/en-us/ef/ef6/querying/related-data
В Linq тоже есть пара костылей. И Include и опция DeferredLoadingEnabled.
https://docs.microsoft.com/en-us/dotnet/api/system.data.linq.datacontext.deferredloadingenabled?view=netframework-4.8
Точно то же самое что и во всех остальных ОРМах.
guest6 06.08.2022 03:39 # 0
В ООП у тебя есть граф объектов в памяти, и ты императивно по нему шероёбишься. Граф всегда в памяти (там могут быть оверлеи или виртуальная памтяь, но тебе на нее похуй как прикладнику)
В SQL у тебя есть декларативный (обычно) запрос для нарезания в двумерное пространство каких-то таблиц (в OLAP кубах есть больше измерений, но их никто не умеет)
Эти две концепции вместе не дружат, и приходится рождать неебические костыли
guest6 06.08.2022 03:52 # 0
все мои знакомые галерщики хранят говно в РСУБД выдергивают его хибернейтом и всё время должны помнить, что они работают не просто с объектами, а с отражением СУБД
bormand 06.08.2022 08:28 # 0
Они всегда будут хуже реляционок т.к. с однородными данными всегда быстрее работать, чем с разнородными...
3.14159265 06.08.2022 03:00 # 0
> были бы отдельно структуры и алгоритмы для работы с ними, то вот этого бы всего говна не было.
Очень спорно.
ООП — нормальная концепция. И объединение контроля жизненного цикла неких данных (RAII), алгоритмов (ха-ха-ха геттеры/сеттеры) рядом со структурами, которыми они оперируют — не самая плохая идея.
Просто Кресты всё переусложнили на ровном месте.
guest6 06.08.2022 03:07 # 0
Как можно не пирдолица с мувабл-хуювабл кроме как всегда ложить всё в кучу и работать через указатель?
3.14159265 06.08.2022 03:10 # 0
Нет конструктора/деструктора — смело можно двигать.
Есть — ну значит что-то нетривиальное: refcount ссылки, файлы какие-то или memory mapped.
Может тот вектор шарится с каким-нибудь managed enviroment вроде «Йажа» и его просто так двигать нельзя.
> ложить всё в кучу и работать через указатель
Тогда невозможны никакие абстракции вроде ARC и прочих умных указателей: vector<shared_ptr<...>>
guest6 06.08.2022 03:16 # 0
То есть я положил говно в вектор и оно там ремапица нормально
А потом я написил конструктор у говна, и у меня в векторе стали лежать умные указатели?
Чем-то похоже на ескейп анализ в момент копуляции как у го, но гораздо смелее
3.14159265 06.08.2022 03:21 # 0
Не понял это сраказм или нет.
Ну оно в крестах и примерно так работает же.
Я же сразу сказал: крестухи как и йажисты, переизобретают Сишные примитивные типы.
> похоже на ескейп анализ в момент копуляции как у го, но гораздо смелее
Та анскильному Говну до унылой жабы ещё срать и срать. А до Крестов и подавно.
guest6 06.08.2022 03:13 # 0
Хорошая, но она плохо ложится на коллекции
Обернуть ресурс обхъектом чтобы его вручную не закрывать (и не делать как в ЙАЖА) -- это хорошо
Но вот я хочу написить res1 = res0. Что мне делать? Скопировать ресурс? Какова семнатика?
Можно все сделать через указатели (ну не GC, но ARC), но это проеб перформанса. Ты уже не можешь сделать vector<char> не став лалкой
3.14159265 06.08.2022 03:20 # 0
Царь об этом говорил.
Но трали-вали по идее и есть решение этой проблемы. А также mov-сёмантика.
> Какова семнатика?
Она зависит от того какие именно конструкторы (не) оперделены.
guest6 06.08.2022 03:43 # 0
int? Значит, будем копировать
User, но movable? значит, будем мувать
User, но не мувабл? Значит, заменяем на умный указатель и пхаем на кучу
В С++ же ты сам явно должен выбрать между указателем и объетом
Можно всегда работать по указателю и не знать горя (как в йажа) но тогда поблема vector<char> появлятся
bormand 06.08.2022 08:18 # 0
На ГК совсем не осталось ООП'шников, раз за них сам Пи зашёл?
Desktop 06.08.2022 10:52 # 0
bormand 06.08.2022 11:04 # +1
Desktop 06.08.2022 11:16 # 0
bormand 06.08.2022 08:17 # 0
Вот есть у тебя сишная структурка с указателями -- она уже в 90% случаев не trivially copyable, надо писать какую-то функцию, которая вложенные структуры докопирует или счётчики увеличит.
guest6 06.08.2022 16:24 # 0
Язык не коммитился в то, чтобы чото там ему гарантировать, и потому проблемы на концептуальном уровне нет
j123123 06.08.2022 03:52 # +1
Если я делаю вектор из int, очевидно что его можно двигать просто так, без всяких специальных говен (но крестоговно не осиливает такую оптимизацию). И mremap() не всегда меняет адрес хуйни, иногда он тупо довыделяет сзади, и тогда никаких хуйней для двиганья не надо вызывать т.к. адреса не меняются.
guest6 06.08.2022 03:58 # 0
А может ли веткор аллокатору сказать, что у тебя Int, а не User?
>не всегда
еще лучше. Он там подвинет чтото под копотом и не скажет мне, а как я тогда мув вызову?
j123123 06.08.2022 04:17 # 0
Если ты под аллокатором понимаешь функцию типа malloc() или calloc() то нахуя ему это надо знать? Туда тупо передается количество байтов, которые надо выделить - и тебе или дают адрес начала с этими байтами, или NULL.
Если ты про какие-то кишки крестоговна, то можно конечно туда подобавлять всякой хуйни, типа "если тут тип с такими-то свойствами, то можно тупо перемещать через memcpy, но если нет, то уже нет". Вот там https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1144r5.html такое говно предлагают. Т.е. аннотировать некие хуйни специальным говном, что их можно просто так копировать, и нихуя плохого от этого не будет.
И кстати, в крестах до сих пор не сделали так, чтобы программист сам мог выдумывать всякие такие хуйни для аннотирования, которые может проверить какое-то шаблоноговно на этапе компиляции и сделать что-то на основе этого? В "D" например вот https://dlang.org/spec/attribute.html#uda
> еще лучше. Он там подвинет чтото под копотом и не скажет мне, а как я тогда мув вызову?
А в чем проблема? mremap() возвращает адрес начала ремапнутой хуйни. Если он тот же, значит никаких мувов вызывать не надо, вся хуйня осталась на своих местах.
guest6 06.08.2022 04:21 # 0
https://en.cppreference.com/w/cpp/named_req/Allocator
когда в вектор не влезло говно --- онпросит у аллокатора еще места как я понима
bormand 06.08.2022 08:20 # +1
Просто сейчас он это сделать не может т.к. у аллокаторов нету метода для реаллока.
guest6 06.08.2022 10:13 # 0
bormand 06.08.2022 10:34 # 0
Почти все лоу-левл реализации аллокаторов умеют в реаллок. А те что не умеют -- пусть просто не заявляют его поддержку и контейнер будет юзать обычный аллок.
bormand 06.08.2022 10:47 # +2
- Реаллочим если аллокатор умеет и тип достаточно простой
- Аллочим и двигаем если тип умеет перемещаться
- Аллочим и копируем если тип умеет хотя бы копироваться
- Иначе не конпелируемся
guest6 06.08.2022 16:21 # 0
Это как в постгре оптимизатор знает сколько стоит последовательный и случайный доступ к сторадж, и решает делать ли сиквенс скан или пиздовать в индексы
>- Иначе не конпелируемся
выдаем километровые ошибки) Ну впрочем плюсарям не привыкать же: я как-то у класса сделал поле const, и сразу все сломалось
Soul_re@ver 06.08.2022 16:46 # 0
ССЗБ
guest6 06.08.2022 16:49 # 0
3.14159265 06.08.2022 17:53 # 0
> объект перестал влазить в контейнер
Ну да. В мире жабоёбов принято падать в рантайме с ClassCastException, когда что-то хочешь положить в контейнер (TreeMap).
В лучших традициях скриптухи.
Серьёзный Enter-price. Не то что смешные, глупые крестухи, у которых ошибки находятся на этапе компиляции.
guest6 06.08.2022 18:03 # +1
Скучные старёпры сделали XHTML и XML-based шаблонизаторы.
Не закрыл тэг? Получи ошибку компиляции.
Модные хипстеры все это XML говно нахуй выкинули, теперь о незакрытом теге можно узнать случайно, когда что-то неверно отрбразится.
Скучные старперы завезли SOAP, где и XML схемам генерилисб классы, а модные хипстеры заменили его на JSON over REST, чтобы
писать
ах, там надо было baz, а не buz. Ну ничего, QA отловит.
3.14159265 06.08.2022 18:09 # +1
Блять.
Я видел как один раз по SOAP тупо передавали String с xml, а во второй случае передавалсь строка с json.
Свинья везде болото найдёт.
>заменили его на JSON over REST, чтобы писать
>foo.get("bar").get("buz").get("lal")
Никто так не пишет.
Рефлексией вроде jackson оно само натягивается на DTO.
Сами DTO можно вынести в отдельный пакет и менять централизовано.
guest6 06.08.2022 18:17 # +1
В какой-то момент я тусил с дотнеблядями и даже сертифицировался по второму сишапру
На дворе был конец нулевых, и кругом был SOAP.
Мы качали wsdl, запускали тулу, получали прокси-класс, и дергали его методы (передавая туда другие структуры , тоже сгенерированные)
Потом волны говна вынесли меня в жабский хипстопрайс (это как интерпрайз, но только наколенный и молодой)
Там мне быстро объяснили, что надо все делать по REST и JSON, и стали писать как я выше написал.
Потом я добился хотя бы написания DTO и заполнения его кажется GSonом, но опять таки:вручную
Я пытался объяснить, что это всё даунгрейд, но меня никто не слушал.
Потом я еще в нескольких проектах видел тоже самое, и вот с тех пор у меня глаз и дергается
3.14159265 06.08.2022 04:04 # 0
Крестомразь конечно прекрасна в своей бездарности.
Сначала они засрали вектор хуйнёй и слили как лалки весь пирформанс.
Потом Царь их ткнул носом в говно и они ввели в С++11 std::is_pod //primitive data object или «у нас же как в Сишке»
А что они делают в С++20? Правильно! депрекейтят std::is_pod и вводят вместо него ДВА новых концепта std::mycpp_real_is_pod и std::tralivali_copyable
guest6 06.08.2022 04:09 # 0
Оказывается, у объекта есть некоторые черты, от которых зависит поведение контейнера при работе сним, и на формулирование черт уходят годы
Причем это же все по утячи (явных интфрейсов нет) и ты должен
* изучить все черты
* понять, какие из них есть у конкретно твоего класса (добавил сложный конструктор -- все черты в пизду пошли)
* а вектор должен по чертам сделать какой-то вывод
И только в сишке никаких черт нету, и массиву потому похуй что в нем лежит
3.14159265 06.08.2022 04:13 # +1
False.
Они для этого зделали is_pod и прочие траливали_копи.
Чтобы в реализации контейнера условная Бормандоняша писала
если (траливали) то реаллок, если мув, то муваем, иначе копируем поэлементно, выполняя деструкторы/конструкторы.
Тогда крестошаблоны сгенерят джве реализации вектора, оптимизированные под каждый тип.
guest6 06.08.2022 04:17 # 0
https://en.cppreference.com/w/cpp/header/type_traits
traits -- черты по английси
j123123 06.08.2022 04:30 # +1
(C++11)
checks if two types are the same
is_base_of
(C++11)
checks if a type is derived from the other type
is_convertible
is_nothrow_convertible
(C++11)(C++20)
checks if a type can be converted to the other type
is_layout_compatible
(C++20)
checks if two types are layout-compatible
is_pointer_interconvertible_base_of
(C++20)
checks if a type is a pointer-interconvertible (initial) base of another type
is_invocable
is_invocable_r
is_nothrow_invocable
is_nothrow_invocable_r
(C++17)
checks if a type can be invoked (as if by std::invoke) with the given argument types
Ну да, вместо того, чтобы предоставить какую-то тьюринг-полную питушню для инспекции типов, они насрали в стандарт кучу каких-то "is_pituz" для кучи частных случаев. И эти трейты самому добавить естественно никак нельзя из самого языка, только пропозалы в говнокомитет слать
3.14159265 06.08.2022 04:58 # 0
Ну это похоже на наше любимое __builtin_types_compatible_p(typeof(a),t ypeof(b))
А остальное кучи какого-то крестоговна. Ну может is_layout_compatible ещё ничего, но тоже спорно.
Лучше бы действительно дали какое-то апи, чтобы можно было по обходить дерево/граф классов, смотреть его параметры, атрибуты, в каком порядке поля лежат, какие у них квалифайеры.
Но тогда мы приходим к... гомоиконности.
Desktop 06.08.2022 10:54 # 0
bormand 06.08.2022 10:55 # +2
ISO 06.08.2022 11:40 # +1
Примерно к 2030-му году всё должно устаканиться и можно юзать в продакшене!
https://isocpp.org/files/papers/n3996.pdf — рефлексия.
https://open-std.org/Jtc1/sc22/wg21/docs/papers/2018/p0707r3.pdf — метакласс (кодген).
Soul_re@ver 06.08.2022 16:56 # +1
> puddle
> rubber
> lagoon
Наркоманы ёбаные, как людям все эти имена запоминать? 4, сука, неймспейса с ничего не говорящими названиями в одном пропозале.
bormand 06.08.2022 17:58 # 0
3.14159265 06.08.2022 18:01 # 0
> Примерно к 2030-му году всё должно устаканиться и можно юзать в продакшене!
А суть та же: сектанты варятся в говне, и верят в светлое будущее: «коммунизм через джвадцать лет».
Уж «в новом Стандарте™ всё починят».
bormand 06.08.2022 18:12 # +1
j123123 06.08.2022 21:13 # +4
А при C++30 все будет заебись.
Он наступит скоро - надо только подождать.
Там все будет рефлексивно, там все будет в кайф.
Там, наверное, вообще не надо будет код писать.
Я проснулся среди ночи и понял, что
Все идет по плану.
ISO 06.08.2022 21:35 # +1
3.14159265 06.08.2022 22:12 # +3
А все другие остальные – такое дерьмо,
А все другие языки, и такие мудаки.
Над родной над сишкой бесноватый UB шёл,
Я поставил С++ там всё тоже хорошо,
Там товарищ Стра Ус Труп – там #include как и у нас,
Я уверен, что у них то же самое
И всё будет по Стандарту.
guest6 06.08.2022 22:15 # 0
ISO 06.08.2022 22:16 # 0
bormand 06.08.2022 22:27 # +3
А наш батюшка Ритчи совсем усоп
Он разложился на макросы и на битовый код
А конпеляция идёт и идёт по плану
ISO 06.08.2022 22:45 # 0
nyTuH_nugop 06.08.2022 22:49 # +1
bormand 06.08.2022 18:15 # 0
guest6 06.08.2022 10:11 # 0
guest6 06.08.2022 10:21 # 0
ISO 06.08.2022 13:08 # 0
guest6 06.08.2022 13:12 # 0
guest6 06.08.2022 10:27 # +1
Да блядь
hormand 06.08.2022 23:02 # 0
HE_OTBE4Au_YE6KY 06.08.2022 21:39 # 0
bormanb 06.08.2022 01:13 # 0
ISO 06.08.2022 12:05 # +1
https://gcc.godbolt.org/z/KqaYv8dPz
ISO 06.08.2022 12:05 # 0
А вот «clang» сливается в хламину даже с -O3:
3.14159265 06.08.2022 18:02 # 0
ISO 06.08.2022 18:14 # 0
3.14159265 06.08.2022 18:18 # 0
bswap на ардуино я получил довольно быстро.
А вот с MSVC пирдолился-пирдолился, но так и не смог выжать из него более-менее адекватный выхлоп.
Может там есть какие-то особые флаги. Я пробовал /O2 и /Og.
KOPOBA 06.08.2022 18:22 # 0
3.14159265 07.08.2022 01:29 # 0
А разгадка проста: Кресты — гавно. std:: reverse нахуй
guest6 06.08.2022 12:09 # 0
guest6 06.08.2022 13:04 # 0
ISO 06.08.2022 13:30 # +1
https://onlinephp.io/c/7cd10
Desktop 06.08.2022 13:37 # 0
guest6 06.08.2022 13:48 # +1
НА ПХП ПЕРЕВОДЧИКИ
ISO 06.08.2022 14:54 # 0
Desktop 06.08.2022 19:30 # 0
bormand 06.08.2022 19:34 # 0
Desktop 06.08.2022 19:38 # 0
bormand 06.08.2022 19:40 # 0
Desktop 06.08.2022 19:41 # 0
KOPOBA 06.08.2022 14:06 # 0
bormand 06.08.2022 13:46 # 0
На раст что ли ушёл?
ISO 06.08.2022 14:54 # 0
bormand 06.08.2022 15:59 # 0
ISO 06.08.2022 16:39 # 0
bormand 06.08.2022 16:41 # −1
guest6 06.08.2022 16:08 # 0
ISO 06.08.2022 16:39 # 0
guest6 06.08.2022 16:43 # 0
ISO 06.08.2022 16:47 # +1
guest6 06.08.2022 16:51 # 0
"Вот у нас есть система 1984-го года, надо бы ее переписать на современные технологии, но никто не понимает, как она работает, так что пускай нам Gost скажет"
ISO 06.08.2022 16:53 # 0
guest6 06.08.2022 16:52 # +1
ISO 06.08.2022 16:55 # 0
Desktop 06.08.2022 18:49 # 0
bormand 06.08.2022 16:58 # 0
guest6 06.08.2022 17:01 # +2
ISO 06.08.2022 17:05 # +1
Desktop 06.08.2022 18:50 # +1
bormand 06.08.2022 19:02 # +1
Пропуск никто бы и не заметил.
Desktop 06.08.2022 19:31 # 0
обычно всё-таки с той стороны тоже не такие уж идиоты сидят
bormand 06.08.2022 19:37 # 0
Ну фрилансил чел или работал в чёрную где-то. Имхо не повод справки требовать.
Desktop 06.08.2022 19:40 # 0
bormand 06.08.2022 19:42 # 0
Если в самом конце -- то, конечно, возникают вопросы не отстал ли от жизни и не проебал ли все скиллы. А в середине кого вообще ебёт?
З.Ы. Ответ "фрилансил" не прокатит?
Desktop 06.08.2022 19:44 # 0
bormand 06.08.2022 19:44 # 0
Мне кажется, настолько токсичных видно сразу.
guest6 06.08.2022 19:47 # +2
Приходит к тебе на собеседу чувак, и говорит: "а чего у тебя аватарка бабья? ты пидор что ли?"
Desktop 06.08.2022 19:57 # +2
bormand 06.08.2022 20:08 # +1
Desktop 06.08.2022 20:17 # +2
guest6 06.08.2022 21:14 # +2
--ниче такая.. а тебе муж работать-то разрешает?
--???
--ну чоты, я просто хотел узнать, если у тебя мужик
guest6 06.08.2022 19:45 # 0
2012-2018: Продавец-консультант Эйвон ООО "вектор-сервис"
2018-2022: Программист С++ ООО "вектор-плюс"
3.14159265 06.08.2022 20:11 # +3
Desktop 06.08.2022 19:49 # 0
– ты чо, про такое в приличном обществе вообще не говорят
bormand 06.08.2022 19:50 # −1
Бля, а я говорила )))
guest6 06.08.2022 19:52 # 0
bormanb 07.08.2022 16:57 # 0
guest6 06.08.2022 19:52 # 0
В нулевых это был не так (борманд вероятно говорит про более ранние времена) но сейчас мне интуитивно кажется, что так
Desktop 06.08.2022 19:54 # 0
о справедливости судить не берусь
bormand 06.08.2022 19:56 # +1
Олимпиадники тоже в эту категорию попадают, кстати.
bootcamp_dropout 07.08.2022 17:26 # 0
bormand 06.08.2022 20:16 # 0
Если этот фриланс стоит в начале или середине карьеры, а потом идёт пара лет в нормальных конторах, то не похуй ли? Скорее всего уже сумел.
Desktop 06.08.2022 20:19 # 0
ISO 06.08.2022 20:22 # +1
Как следствие — в профессиональном плане фрилансер или не растёт, или растёт, но очень туго. По сути, единственное, чем фрилансер отличается от студента с пет-проектами — у фрилансера есть опыт общения с заказчиками и работы с требованиями.
Безусловно, это тоже очень важный и полезный скилл, но куда более важен он для каких-нибудь аналитиков или PMов, а от программистов всё же в первую очередь ждут умения писать качественный код.
о справедливости судить не берусь
Desktop 06.08.2022 20:23 # +1
guest6 06.08.2022 21:01 # 0
Нужно работать с коллегами, причем чтобы эти коллеги были местами скилловее тебя, и ебли тебя на ревью
Если ты сам себе коллега, то можешь всю жизнь писать один rotoeb.php, и на все сайты его выкладывать, и считать себя заебись программистом
bootcamp_dropout 06.08.2022 19:49 # 0
Desktop 06.08.2022 19:54 # +1
bootcamp_dropout 07.08.2022 17:07 # 0
nyTuH_nugop 07.08.2022 18:46 # +1
be a better way
Red tanks, mass graves, Red liars always get their say
Cos the only good commie is a dead commie, it's about time we learned
That the only time our people are gonna taste freedom's when the last Red flag
is burned
https://yewtu.be/watch?v=FM3BruL_B-Y
Steve_Brown 08.08.2022 14:22 # 0
Мы написали трехэтажный запрос и гордо представили преподу. А он говорит: а вот на императивном языке это был бы один цикл.
Оказывается, вот к чему это было.
guest6 08.08.2022 15:10 # 0
3.14159265 06.08.2022 18:05 # 0
В принципе это бормандоняш-код. Только с флагом -pedantic и тайпчекингом целых/беззнаковых.
> std::array<std::uint8_t
А поцчему не char? Мы же выше установили что это непортабельно
ISO 06.08.2022 18:09 # −1
И с убранным потенциальным UB — я не уверена, что инт можно трогать через реинтпретнутый указатель.
3.14159265 06.08.2022 18:15 # 0
Они уже три каста завезли. Зачем вводить очередной std::mycpp_real_bitexact_cast ?
guest6 06.08.2022 18:21 # +1
https://stackoverflow.com/questions/53401654/c20-bit-cast-vs-reinterpret-cast
reinterpret_cast is forbidden in constexpr functions. One of the explicit goals of bit_cast is to be able to do these sorts of things at compile-tim
3.14159265 06.08.2022 19:19 # 0
Сперва вроде всё логично: не хотим ломать поведение (хотя когда их это останавливало).
Потом начинаются перлы:
> Now, you could say that you could just extend this specific usage of reinterpret_cast to constexpr contexts. But that makes the rules complicated.
Блять!!! Меня восхищает эта манера крестоблядей оправдывать очередное усложнение, иначе всё станет complicated.
UPDATE
Дочитал. На поверхности всё выглядит логично и правильно.
Но я же интуитивно чую это иезуитское манипулирование.
И оно же всегда так: прикрываясь благими намерениями в С++ завозят пиздец ещё большей сложности.
guest6 06.08.2022 19:20 # 0
3.14159265 06.08.2022 19:37 # +1
> constexpr To bit_cast( const From& from )
Что красиво с точки зрения немутабельности/алиасинга и я сам не люблю питушню с сайд-эффектами.
bit_cast это никакой не каст, а обычная обёртка над мемсру.
На очень умных компиляторах он поймёт что const From& from больше не используем и каст схлопнется в noop/mov.
А на не очень умных будут дёргаться либцовая мемсру или выполняться кучи говна, что мы и видели на примере clang.
Гост в принципе об этом всём уже сказал здесь (просто я не конца понял):
https://govnokod.ru/28319#comment783986
ISO 06.08.2022 20:09 # +2
> bit_cast это никакой не каст, а обычная обёртка над мемсру.
Да, с нябольшим нюансом: memcpy() нельзя использовать в constexpr-функциях, а bit_cast можно. Так что теперь в компайл-тайме можно закодить «fast inverse square root»!
ISO 06.08.2022 18:21 # +1
Однако иногда так делать всё-таки нужно: например, чтобы флоат в инт превратить и биты ему подрочить.
std::bit_cast — это решение проблемы: он позволяет, буквально, «взять битики объекта from и сделать из них объект to» — так же, как это делают запрещённые хаки с реинтпретом, но без сопутствующего UB.
3.14159265 06.08.2022 19:01 # 0
Потом понимают что она таки нужна, и завозят её «в новом Стандарте™».
Зачем? Зачем?
3.14159265 06.08.2022 19:04 # +1
Whenever an attempt is made to read or modify the stored value of an object of type DynamicType through a glvalue of type AliasedType, the behavior is undefined unless one of the following is true:
AliasedType and DynamicType are similar.
AliasedType is the (possibly cv-qualified) signed or unsigned variant of DynamicType.
AliasedType is std::byte, (since C++17) char, or unsigned char: this permits examination of the object representation of any object as an array of bytes.
Хопа! А через char всё-таки лучше. Так что у бормандоняшки UB быть не лолжно.
ISO 06.08.2022 19:07 # 0
Но тут слишком мутно написано — непонятно, они только показывают или продоют читать через байтики разрешают, или писать тоже можно: надо читать Стандарт.
bormand 06.08.2022 19:14 # 0
А у беззнаковых чисел вроде все значения валидны, т.е. имхо прокатит. Но надо читать стандарт.
З.Ы. Вот указатели переворачивать или в бул пихать 42 -- это явно UB.
guest6 06.08.2022 19:35 # 0
А в какой-нить int32 может зависеть от байтордера, может по разному изображать отрицательные числа (хотя на самом деле никто так не длеает), наконец процессарь может не разрешать обращаться к конкретному байту по невыравненному адресу, и когда ты попытаешься реинтерпретировать in32 как пачу чаров и считать третий, процессор закоротит, загорится, комп расплавится, от компа загорятся занавески, от занавесок вспыхнет ковер и деревянные двери, и вот чисто из желания спасти человеческие жизни авторы стандарта и не разрешщают наверное в инты ходить как в битовые помойки
3.14159265 06.08.2022 19:53 # 0
Да. Только название хуёво выбрали.
Именно поэтому я за std::byte
guest6 06.08.2022 18:12 # +1
Дата рождения
21 января 1983
https://habr.com/ru/users/sergey-gornostaev/
[quote]
Я за 22 года в отрасли столкнулся только один раз с требованием иметь вышку. Это было на заре карьеры, когда пытался устроиться админом на АТС в Иркутске.
[/quote]
bormand 06.08.2022 20:14 # +2
> устроиться админом на АТС
Правильно, а как без вышки провода на столб вешать? Хотя у таких контор обычно своя есть.
guest6 06.08.2022 21:03 # 0
> своя есть.
22 года назад своя сеть была даже у турфирмы
bormand 06.08.2022 22:02 # +1
А зачем вышка если нет столбов?
guest6 06.08.2022 22:23 # 0
hormand 07.08.2022 21:00 # 0
Два солтада поспорили:
-Спорим, я сейчас вобью этот дюбель в броню танка?
-А давай.
Солдат начал вбивать лбом гводь, вбил наполовину, а дальше - никак. И вот он говорит товарищу: погляди-ка, что там такое твердое, что я не могу пробить?
Посмотрел солдат - а в танке спит прапорщик Васильев.
3.14159265 07.08.2022 01:33 # 0
И Шланг наконец-то повержен.
Да и гцц на 64 битах стал вменяемый bswap делать, а не питушню.
А я вынес важный урок: как не нужно делать.
bormand 07.08.2022 09:20 # −1
3.14159265 09.08.2022 02:16 # 0
Старые версии шланга более однородны :)
Desktop 07.08.2022 18:45 # 0
Rooster 07.08.2022 07:06 # 0
Rooster 07.08.2022 10:44 # 0