Ычан: [d | b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 17934)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5120 кБ.
  • Ныне 3657 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
cpp_furudo_erika.png - (754.49KB, 800×800)
17934
No. 17934  
Учим C++ за 21 день всем чиочаном.
Можно показывать крутой или страшный код, просить помочь с лабами и контрольными, помогать другим, а главное - много кодить.

Пополняемый список полезностей тут: https://docs.google.com/document/d/1rPPbiViiLSR2PlPnQWpZyk9Sz6-J7ucyM7HR6wvsYKk/edit?usp=sharing
188 сообщений пропущено. Показаны 50 последних сообщений
No. 18365  
>>18362
Да, не посмотрел, где ошибка. Тогда так. http://coliru.stacked-crooked.com/a/b8887c7f9859e0c5 Но ты это и так знал и вопрос в том, почему так? На самом деле, понятия не имею, что это и что ты делаешь.
No. 18366  
>If the deferred flag is set (i.e. (policy & std::launch::deferred) != 0), then async converts f and args... the same way as by std::thread constructor, but does not spawn a new thread of execution. Instead, lazy evaluation is performed: the first call to a non-timed wait function on the std::future that async returned to the caller will cause the copy of f to be invoked (as an rvalue) with the copies of args...
Так, теперь понятно, почему оно не должно работать - флаг рантаймный, а в одном из вариантов происходит копирование (или в обоих).
>>18351
Да. Осталось только понять, как тип возрващаемого указателя влияет на вычислимость возвращаемого типа. Обрати внимание - я не меняю тип аргумента функции, я меняю тип аргумента функции, указатель на который возвращает функция.
>>18362
Дык там функция принимает ifstream по значению, а возвращает указатель на функцию, которая принимает по ссылке.
No. 18367  
>>18365
Не я делаю. Он берёт вывод из >>18351 и пытается понять, где ошибка. Не ясно пока, почему работает WAT3.
No. 18368  
>>18365
Он не я. Спасибо тебе огромное, до меня допёрло. То есть, аргумент для result_of - это и тип Callable и список желамых параметров в одном.
http://coliru.stacked-crooked.com/a/093a22237891f112
Тогда ещё вопрос: почему как мне сделать то же самое с, например, функцией от инт, возвращающей инт? Мне нужно написать int(int)(int), но это оказывается функцией, возвращающей функцию.
No. 18369  
Я так понимаю, что сделать это без имени типа или иного усложнения не получится.
No. 18370  
>>18368
> Мне нужно написать int(int)(int)
Нет, нужно написать int(int). Но result_of не для этого.
No. 18371  
>>18370
Так я уже пробовал до того, как допёр, и это не компилится по названой причине - должен быть коллэбл-тип и скобки со списком араетров.
No. 18434  
>>18399
Оценил.
No. 18457  
a.png - (91.83KB, 1350×634)
18457
>>18399
Mistake # 21: Showing any weakness to std::async
No. 18529  
>>18457
Is it about shared_future or what? Looks perfectly normal considering RAII and absence of thread isolation.
No. 18530  
>>18529
Мне не нужен был возвращаемый результат, передаваемая функция была void, поэтому я вызывал async без future. А потом удивился, обнаружив последовательное выполнение.
No. 18532  
>>18530
Вот не вижу ничего удивительного в этом, ведь завершение async-функции - это тоже результат. Если тебе нужен detached thread, то тебе нужен detached thread.
No. 18635  
>>18457
В первом параграфе говорится о shared_future? Как могут несколько future относится к одному shared state?
No. 18636  
https://hastebin.com/conuvaxiyi.cpp
Попросили сделать реализацию алгоритма Прима. Вроде даже не совсем говнокод.
No. 18761  
Бампну ради великого правосудия.
No. 18836  
https://solarianprogrammer.com/2017/12/27/cpp-17-constexpr-everything-as-much-as-the-compiler-can/
Что-то я не понимаю этого. Зачем именно everything? Это же вредит читаемости кода. Почему нельзя констэксприть только очень важные для производительности части кода?
No. 18837  
>>18836
Как вредит? Вредить разве что компайл тайму может.
No. 18843  
>>18837
Вредит таким образом, что нужно код переписывать в соответствии с требованиями constexpr.
No. 18844  
>>18843
Н-е совсем. Скоро сделают, что можно будет действительно везде приписывать, как инлайн, например, а компилятор будет решать. Ну, а если тебе вправду нужно, чтоб функция на компайл тайме считалась, то перепишешь. Компилятор умный, так что это совсем не сложно.
Вообще, не очень понял твоё высказывание. Никто же тебя не заставляет переносить всё в компайл тайм, ну.
No. 18853  
>>18844
>Никто же тебя не заставляет переносить всё в компайл тайм, ну.
Я уже в нескольких местах видел такое предложение. Ясен хер, меня не заставляют, но мотивы этих людей мне непонятны (они шутят?).
No. 19004  
Поясните за скрипты линкера. Кто-то писал?
No. 19017  
>>19004
Пояснился. Осознал, что ничего не знаю, стал плакать в подушку.
No. 20339  
1531910919139-b.jpg - (128.20KB, 1366×768)
20339
Посоветуйте плиз, чем профилировать выделение памяти и потребление cpu софтинки на плюсах, собранной под mingw.
No. 20371  
Если что - помог Intel VTune. Триалка месяц, для разового ресёрча хватило.
No. 26517  
Какой забавный спам приходит.
No. 26518  
>>26517
А неплохо.
No. 26973  
По мотивам треда для новичков.
No. 26974  
>>26973
Более смешной вариант.
No. 26978  
>>26974
Еще более смешной
No. 26997  
>>26976
Вчера, кстати, пришлось погрустить из-за того, что мапа действительно не умеет сортироваться "автоматически". Мне хотелось иметь контейнер для N объектов, каждый из которых содержит в себе свой поток, живущий отдельной жизнью и в произвольные моменты времени меняющий состояние объекта - причем я планировал периодически находить самый "старый" (давно не менявший состояние) из объектов и заменять другим.

Конечно, рефлекторным порывом было определить оператор сравнения для объектов по дате изменения и складывать их в std::set - но сразу стало ясно, что оно не будет так работать.

Удивительно, что при этом такой веселый код оказался способен компилироваться и запускаться - хотя я собирался посмотреть, под каким предлогом мне не дадут это сделать.

https://onlinegdb.com/vfSmqJ6kqO
No. 26998  
А еще в нагрузку дали девочку-студентку (не лоли, крупную и потрепанную). Три месяца назад ей дали амбициозное задание сделать свой кастомный видеоплеер для подглядывания за идущими в нейросеть данными. Девочка молодец и многое сделала, но небыстрыми темпами - и я типа должен помочь ей побыстрее закончить.

Теперь она впиливает новые кнопочки и фичи, а я лазаю за ней по коду, исправляя новые сегфолты и утечки памяти. Чувствую себя очень глупо.
No. 27103  
2023-05-17 19_15_25.jpg - (62.41KB, 1280×669)
27103
Когда ты сочиняешь алгоритм кластеризации прямоугольников на длинной ленте, но тебе лень подключать внешнюю библиотеку для визуализации.
No. 27132  
>>27103
Когда у тебя нет этой библиотеки под рукой и тебе хорошо знакомой - именно так.
No. 27141  
Какие-то вы мертвенькие.
No. 27143  
>>27141
Летние каникулы~
No. 27223  
1470576270668.jpg - (130.57KB, 1242×941)
27223
>>17934
Не подкажите ли, наследники Страуса, можно ли как-нибудь ускорить компиляцию заголовочных файлов с
inline
функциями?
А то мне, падавану, не удалось вынести реализацию таких в функций в .cpp файл. без костылей, как я понял, это невозможно.
No. 27228  
>>27223
Пока мы ждем рыцарей-джейдаев, хотел спросить, подходит ли тебе вот такой вариант с extern?
https://stackoverflow.com/a/23432044
No. 27229  
Здравствуйте.
Захотел написать обертку для редис, как часть Rails-подобного C++-фреймворка.
Что думаете по первому впечатлению?
https://github.com/movepointsolutions/activeredis/tree/main
No. 27230  
>>27223
Нет смысла руками прописывать inline.
Компилятор сделает это лучше тебя.
Выноси большие функции, время выполнения которых много больше 4-5 тактов связки CALL/RET, в .cpp файл, а если хочешь обнять линк-тайм инлайнинг, читай документацию.
No. 27231  
2023-08-25_20-23.png - (70.62KB, 900×514)
27231
>>27228
Не знаю даже, попозже посмотрю, имеет ли это смысл. Сейчас, почитав Вашу ссылку, у меня появились сомнения в использовании встраиваемых функций.
>>27230
>Компилятор сделает это лучше тебя.
Ему же вроде надо подсказать. Нf пикриле доки MS.
No. 27234  
16439095459943.gif - (1.26MB, 700×393)
27234
>>27229
Да вроде норм.
Кода у Тебя мало, ещё неизвестно, как он себя поведёт при усложнении проекта. Ты лучше пока обдумай, как будет структура классов.
Старайся делать обёртку с нулевыми издержками и не забывать о KeepItSimple,Stupid и DontRepeatYourself.

А так, продолжай в том же духе и поглядывай на обёртки других библиотек/фреймворков.
No. 27242  
>>27229
>Rails-подобного C++-фреймворка
Звучит так, что у тебя должен быть ActiveCache/ActiveObject/(другое название), который внутри вызывает, например, абстрактный ImdbAdapter. И уже на нижнем уровне должна быть реализация в виде RedisAdapter, наследующегося от ImdbAdapter.

Функция redisContext() уж точно должна быть приватной, иначе непонятно, что именно обёртка должна скрывать.

Интересно узнать, как твой Rails-подобный C++ фреймворк будет работать, в частности, какие практики из "convention over configuration" ты хочешь применить. В отличие от Ruby, язык не динамический и имеет меньше возможностей для метапрограммирования.
No. 27287  
>>27223

Очевидные C++-модули.
No. 27307  
F9JpzlNWEAAZhHz.jpg - (23.98KB, 983×602)
27307
>>17934

Всех приветствую. Делаю задание для шараги, нужно написать прогу которая способна сжимать и растягивать файл алгоритмом LZW. Сам алгоритм предполагает наличие начального словаря, который по ходу сжатия файла(нахождения в нём новых последовательностей байтов) расширен. То есть для того чтобы в дальнейшем растянуть файл обратно, нужно знать словарь. И вообще понять, подлежит файл растягиванию или же это просто белиберда из битов. Пока такие соображения: первые биты в сжатом файле сделать что-то типа сигнатурных, чтобы можно было сходу определить можно ли растянуть файл. И после сигнатурных битов будут биты сжатого файла, а потом будет магическое число типа как "разделитель" между файлом и словарём. Насколько хорошая идея использовать магическое число как разделитель? Или же лучше будет выделить под сжатый файл первые 4 бита как сигнатурные, где помимо метки сжатия файла будет ещё число под оффсет, как количество битов после которых заканчивается сжатый файл и будут пары ключ-значение из словаря? Или может быть лучше сделать по-другому как-то?
No. 27313  
>>27307

>Делаю задание для шараги, нужно написать прогу которая способна сжимать и растягивать файл алгоритмом LZW.

Нахрена нужен ещё один LZ*-алгоритм, их и так как собак нерезанных.

#include <zstd.h>
и пошли нафиг. Требуемые возможности в нём есть. А неподдерживаемую самоделку, которую самим же и развивать придётся, в прод тащить - себе дороже. Мелкошарага - это не FAANG, чтобы свои алгоритмы компрессии общего назначения тянуть.
No. 27314  
>>27313
Вполне возможно, речь идёт не про фирму, а про университет.
No. 27315  
>>27307 >>27314
Ну раз курсовая работа....

>растягивать файл алгоритмом LZW.
>Сам алгоритм предполагает наличие начального словаря, который по ходу сжатия файла(нахождения в нём новых последовательностей байтов) расширен. То есть для того чтобы в дальнейшем растянуть файл обратно, нужно знать словарь. И вообще понять, подлежит файл растягиванию или же это просто белиберда из битов. Пока такие соображения: первые биты в сжатом файле сделать что-то типа сигнатурных, чтобы можно было сходу определить можно ли растянуть файл. И после сигнатурных битов будут биты сжатого файла, а потом будет магическое число типа как "разделитель" между файлом и словарём. Насколько хорошая идея использовать магическое число как разделитель? Или же лучше будет выделить под сжатый файл первые 4 бита как сигнатурные, где помимо метки сжатия файла будет ещё число под оффсет, как количество битов после которых заканчивается сжатый файл и будут пары ключ-значение из словаря? Или может быть лучше сделать по-другому как-то?

Строение формата: разделить стрим, словарь и контейнер. Все числа - little endian! Файл маппится в память целиком через либу mio, дальше работаешь с std::span и структурами. Стрим состоит из заголовка стрима и стрима. Без сигнатуры. Контейнер состоит из сигнатуры, глобального заголовка, содержащего длину области контейнера и смещения областей стрима и словаря в ней ОТНОСИТЕЛЬНО КОНЦА ЗАГОЛОВКА. После следуют области, сначала область словаря, потом область стрима, потом конец файла. Ты провершь это при загрузке файла. Размеры вычислишь как разницы этих смещений.

Начальный словарь может иметь смысл хранить в отдельном файле для переиспользования, поэтому область словаря - это может быть просто CRC32-хэш от файла словаря, который при операциях надо задать явно. Также начальный словарь можно
хранить внутри контейнера или использовать захардкоденный. Поэтому сначала 1 байт перечисление. 0 - хардкод, 1 - файл, 2 - внутри. Если 0 - то инициализируем хардкодом. Если 1 - берём имя файла, добавляем ".dic" - вот и наш словарь. Проверяем наличие файла. Маппим его. Проверяем формат словаря. Поскольку задача учебная, то для твоего удобства в его редактировании это просто массив, сериализованный в BSON/bencode. Поскольку тебя просили сделать только компрессию, то ты волен для словаря юзать другие либы. Если 2 - то сначала 8 бит длина, потом - блоб словаря.

Дальше идёт область стрима.

>Насколько хорошая идея использовать магическое число как разделитель?

Абсолютно идиотская. Тебе задачу делать надо, или извращаться? Ты либо делаешь всё максимально просто, либо огребаешь проблем немеренно. Что если у тебя в блобе словаря случайно встретится разделитель? Сигнатура используется исключительно для проверки принадлежности файла конкретному формату. Она располагается строго в начале и занимает строго либо 4 байта, либо 8 и не будет меняться никогда. Если планируется много версий формата - делается заголовок с версиями, формат которого не будет меняться вообще никогда. Вся информация, необходимая для парсинга структуры, должна быть известна ДО начала её парсинга.

При проектировании формата рекомендую использовать Kaitai Struct. Парсер получишь бесплатно.
No. 27369  
Наткнулся при компиляции на ошибку вот в этой строчке
> typedef int Check[sizeof(A) == sizeof(int) + sizeof(bool) ? 1 : -1];
Долго думал, что это за ерунда такая, а потом как понял.
Структура А определена как
> struct A {bool b; int a;};
Оказалось, что это проверка на отключение выравнивания в структурах -fpack-struct=1.
Удалить сообщение []
Пароль  
[Mod]