Это копия, сохраненная 21 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2397264 (OP)
Паскал++
ГОвно какое-то по синтаксису. Зачем-то кастрируют кресты вместо добавления фич. Нужна функциональщина и реальная замена макросам. Ещё было бы хорошо разрешить implicit move и выкинуть нахуй ссаный санитайзер. Но эти шакалы зачем-то просто выкинули 2/3 языка и сделали из него Go. Ебанутые, даже больше ебанутые чем zig-фанатики.
Зная какие говноделы в гугле, как-то с трудом верится в успех этого. На моей памяти у них только хром был более-менее вменяемым, да и то никто не пользуется самим хромом, только форками хромиума. Андроид - просто калище из каши кучи технологий и легаси. Го - дрисня для хэллоуворлдов уровня питона, буквально самый ущербный язык в принципе. Дарт и флаттер - какое-то раковое образование, отросшее от джавы, сделанное для жирух. Тензорфлоу - отсасывает у Торча не сглатывая, даже мокрописька херас не спасает. Сами гуглосервисы неудобное говно, с трудом взаимодействующее между собой: добро пожаловать в мокросервисы - ебись как хочешь и без смазки.
> пилют язык их дополняющий, как Котлин джаву
Как показал пример Раста, подобная хуйня ничего не решает. Раст тоже совместим с крестами - там крестовый код можно компилировать вместе с растовым, использовать определения из хедеров напрямую и получать единый бинарник. Но проблема в том что ты в любом случае будешь писать обёртку на кресты, вне зависимости от уровня совместимости с ним, потому что API будет хуёво вписываться в инородный язык и надо будет адаптировать всё это. Но в Расте это решили шикарной кодогенерацией, а хули тут? Пусть покажут не хэллоуворлд, а как придётся взаимодействовать с шаблонами/концептами, легаси под void⚹⚹ и каким-нибудь winapi. Уверен, как обычно, скажут ебаться самому.
>Гугл: Предлагаем правки стандартной библиотеки С++
>Комитет: Отказано
>Гугл: Ряя! Нахуй С++, делаем новый язык!
Где логика? Каким образом правки библиотеки превратились в новый язык?
> Где логика?
Это же Гугл, они просто ебанутые. Ты не помнишь что ли как они вместо запила под ведро нормального фреймворка гуя решили запилить сразу новый язык? Который ожидаемо оказался никому не нужным дерьмом, разве что китайцам он зашел из-за лицензий. У них так всегда, выдумывают какое-то говно и ждут когда опенсорс-комьюнити допилит его за них. Не получилось - да и хуй с ним.
Лучший тред для лучшего языка.
1920x1080, 0:18
Видеоуроки и статьи по winsock, ну если ты конечно хочешь на с++ все это сделать и на виндовсе
https://coldflame.l-s.me/txt/translated/bgnet/bgnet/
Повторю свой вопрос - поясните за "проблему" с поломкой ABI >>2410363 →
PS вот вам картинка для шапки хорошая, каждый раз проигрываю как в первый.
Спасибо
Object-файлы, скомпиленные разными компиляторами, должны быть совместимы в теории, так по стандарту. Естественно там есть различия в STL и оно не будет работать на практике. Но условно, если ты соберёшь одним компилятором с no_stl под embedded, например один объект трансляции с функцией int a() {return 1;}, а main, использующий её - другим компилятором, то можешь слинковать два этих o-файла и оно должно работать.
Ох какие познания уровня /b/ в бекенде еще как используют, например https://nestjs.com/ https://typeorm.io/ на фронте да, нахуй не нужон только в ангуляре прижился, на всяких реактах вообще срут jsx
Ну так я про фронт и говорю
Неудивительно, что в крестотреде ничего не знают о мирке веба, т.к. почти с ним не пересекаются.
> jsx
Срут tsx.
Ну не без этого, но таких не так уже много хотя мне кажется большая часть совпадений это описание вакансии где typescript будет плюсом
Очень много. Слишком много, чтобы говорить, что тупоскрипт не прижился и ненужон. Сколько ни встречал фронтендеров - все так или иначе сталкивались с TS, хоть личные примеры и хуйня.
Ладно, тред про нормальный язык, а не вебдрисню.
Гугол прикроет проект через 3..2..1..
Как то не очень убедительно
>использующий её - другим компилятором, то можешь слинковать два этих o-файла и оно должно работать.
Зачем?
Алсо там ведь как раз терки из-за изменений в STL, а по факту ты сам говоришь там уже нихуя бинарной совместимости нет. Напоминает сцену в Матрице
>Mы потеряем узел приёма кораблей применив пушку в шлюзовом отсеке.
>Сэр, мы его уже потеряли.
> Зачем-то кастрируют кресты вместо добавления фич.
Ты это про контору в которой запрещены даже исключения в плюсах и вместо этого везде пихают ебаный StatusOr?
Анон в прошлом треде вроде что то похожее хотел для диплома писать, лол
Ты не путай совместимость STL и бинарную. Бинарная должна быть везде, те кто не соблюдают - нарушают стандарт. Без бинарной совместимости ты бы даже с одним и тем же STL не смог бы слинковать либы.
А я не знаю. Увидел объявление функции в интернете, думал сам попробовать решить, не получилось. Я не понимаю момент, как и где нам сохранять имена и пароли. Присвоить строку wchar у меня не получается. Как то так
Что значит увидел объявление функции? У любой такой функции должен быть контекст задачи. Если ты увидишь объявление функции, которая производит валютный платёж в другой банк по СПФС, тоже попробуешь реализовать в разрыве от остального приложения? Если так хочется реализовывать какие-нибудь функции, лучше ищи задачи на алгоритмы.
Понял, спасибо. Просто данная задача мне показалось не такой сложной(на первый взгляд).
Спасибо
Что скажешь про это
https://www.osnews.com/story/13651/fedora-core-5-test-3-slips-a-week/
oldie but goldie
>There is an ABI change in the gcc/glibc stack that requires a rebuild of the entire distribution
>Does that mean, you won’t be able to run older binaries?
>Probably.
Или тут
https://stackoverflow.com/questions/23874393/does-using-std-c11-break-binary-compatibility
Получается даже один компилятор с разными флагами и бинарной совместимости уже нет.
Это уже другие сорта ABI совместимости?
Я понимаю что в айсберге причин по которым
>прыщеблядье качает по сотне мегабайт аптейтов каждый день
изменения в стандарте плюсов даже не верхушка, а маленькая снежинка. Но если совместимости нет - то значит ее нет и все тут. Какая нахуй разница что ее "можно зделоть" в идеальных лабораторных условиях. Или я чего то не догоняю?
Вот в жабке там можно взять jar скомпилированный хер пойми кем на заре человечества и импортировать из него классы и делать с ним всякое. (По крайней мере в теории, на практике хз как дела обстоят). Но это достигается тем что одна фирма контролирует и язык, и компилятор и вм его выполняющую. (Это кстати необходимое, но не достаточное условие MS в dotnet говна понамесили и каждая сборка идет в десятке разных вариантов)
Пример:
Here is the death notice from gcc-4.7.2-1-mingw32.README.txt :
Binary incompatibility notice!
The C and C++ ABI changed in GCC 4.7.0, which means in general you can't link together binaries compiled with this version of the compiler and with versions before GCC 4.7.0. In particular:
The option -mms-bitfields is enabled by default, which means the bitfield layout follows the convention of the Microsoft compiler.
C++ class-member functions now follow the __thiscall calling convention.
The compiler now assumes that the caller pops the stack for the implicit arguments pointing to an aggregate return value. This affects functions returning structs by value, like the complex math type.
Че за вопрос.
Смотря какие задачи. Если десктопный софт, на С# можно писать GUI(правда Сишный winapi или Qt пизже в разы и быстрее)
Исключения не нужны.
std terminate
JS это схемка мимикрирующая под джаву, по сравнению с плюсами так вообще язык богов. Все кто утверждают что JS такой же кусок говна как плюсы или прости господи PHP - просто даунята умственно неполноценные.
Реализации STL - та ещё песня, там весь код выглядит так, будто кто-то проблевался и заставил блевотину компилироваться.
Все кто утверждают что JS это схемка мимикрирующая под джаву - просто даунята умственно неполноценные.
Про "схему в браузере" был высер от самих создателей жопаскрипта ещё в те времена, когда более адекватное сравнение было сложно придумать. А шизы подхватили.
Просто я подумал, а что есть Rust, или нет, пусть существует воображаемый язык Fast, который превосходит в производительности плюсы. Тогда зачем мне углубляться в плюсы? Я вижу только одну причину - интересные легаси библиотеки, написанные на крестах - openCV, boost, Unreal Engine, Unity и многие другие.
> есть Rust
Он примерно такой же по производительности как и кресты. Если ты не используешь очевидно медленные фичи, то скорость везде одинаковая, ведь оптимизации одни и те же. Отличия только в сахаре и в том что в Расте медленные фичи просто не добавляют, а в крестах всё подряд есть. Сишка, кстати, уже посасывает почти во всех случаях у крестов по производительности с максимальными оптимизациями.
Раст и другие подобные языки не про производительность, они про семантику. Типы недостаточно просто скорости, надо ещё и натянуть сектанство наподобие семантики владения. Они могут в каких-то задачах быть быстрее крестов, а в каких-то будут медленнее, потому что разные алгоритмы генерации и оптимизации кода. Да и то выигрыш не в разы, как при сравнении с питоном и JS, а в долях процента.
> Unity
Хоть рантайм и на крестах, самому тебе юзать кресты не дадут, только через обёртки на шарпе.
> Может ли быть язык быстрее c/c++
Кончено да
> зачем углубляться в плюсы?
Потому что это быстрее чем ожидать этот волшебный язык Фаст, а затем ещё ждать пока на него вся индустрия пересядет
некоторые с плюсов не слезут даже под дулом пистолета
Какие могут быть потенциальные проблемы при переходе с с++11 на 14/17 например?
Не потому, что им так нравятся древние кресты. Потому что сломана обратная совместимость, и до ломания написано слишком много легаси-кода.
Какой элемент языка тебе кажется медленным? - откажись от него или перепиши на avx-4096
Динамический язык с полноценными HOF с замыканиями, с чем вы предлагаете его сравнивать - с вашими сраками раздолбаными что ли?
>>12136
>пусть существует воображаемый язык Fast
У тебя какая то логическая нестыковка уже в самом вопросе. Вот если бы у бабушки был хуй вот тогда... Ну когда такой Fast появится то весьма вероятно плюсопараша и задаром никому не нужна будет как кобол.
Но ведь плюсы больше всех на свете надрачивают на обратную совместимость (на уровне языка).
Исключительно имхо но я считаю что проблема таких контор в подавляющем большинстве в чисто бюрократической плоскости - ведь нужно чтобы некий Вася обновил весь тулинг по всей конторе и кто будет этот Вася и на каких основаниях совсем не ясно.
>От тезиса что плюсы уебищнее жс сральни загорятся только в этом треде.
>С++ тред
Интересно, почему же?
Алсо, ясен хуй, что другие питухонища не будут гореть, а даже поддерживать, ибо сами на подобной скриптопараше пишут, а нормальные языки не осилили
>Тогда зачем мне углубляться в плюсы? Я вижу только одну причину
че, хуило, думаешь мы тут тебя уговаривать будем чтобы ты на крестах попрограммировал
ой, ну так и быть, убедите меня и я может быть начну
иди нахуй
Это как понять?
Дело не в чаре, а в том, что на линуксе везде utf-8, а на винде в разных программах то utf-8, то utf-16, до cp866, то cp1251.
а есть ли вообще существенная разница в скорости если всё компилируется в итоге через один и тот же LLVM?
Нет, лол. Фронтенд языка компилирует IR-код для бекэнда llvm, а уже внутри эой адской машины происходит все оптимизации. Разница может быть только между разными бекендами, например, gcc , llvm, tcc и т.д.
Только проснулся? Ещё вчера обсуждали.
Или си с ассемблерными вставками.
Еще гипотетически какой-нибудь caml можеть обогнать программу со множеством malloc/free за счет сборки мусора, где выделение памяти будет очень дешево, а освобождение "бесплатно".
>>12730
А как вам такое
https://old.reddit.com/r/programming/comments/w52tmb/investigating_managed_language_runtime_performance/
>Go achieves a 1.02x speedup over GCC in the multithreaded key-value store benchmark
>Go and OpenJDK outperform GCC for 3 out of the 12 benchmarks.
Я не о гiвнокоде.
пик стронгли рилейтед
>А может ли быть язык быстрее с/с++?
да, пиши на asm'e или в машинных кодах, что ещё лучше, долго пишешь, долго отлаживаешь, работать будет идеально - полок производительности достигнут
Поищи на гитхабе проекты, там уже все что угодно делали с халфой, и вулкан прикручивали, и рейтрейсинг добавляли, и текстуры меняли, в общем, на любой вкус найдется.
Собирался выучить c++ по книжке, а она вся на c++20.
Из нормального только ERP/WMS/CRM-системы на жаве или шарпе и разработка игр на Юнити.
А если перед std::size_t написать constexpr?
Как победить данную ошибку QtCreator
система Ubuntu
Не вижу ничего интересного в скринах.
сядешь
Почяему тогда написано, что проект опенсорс.
А что мешает использованию опенсорса во зло?
Лучше сразу Black Mesa пройди
Не, невыездные это которые с секретными документами работают. На простых прогеров насрать.
Используй string_view
Форумы вообще устарели как явление, здесь одни бумеры сидят, которым не понятны конфочки в телеге.
Так-то оно так, но когда ты уже математик то книжки без определений и теорем воспринимаются как полный зашквар
срочно в продакшон
Проблемы промытых математуток.
Ну такое. Делал на нем эмбеддед, гораздо хуже чем нормальные Иде. Лучше чем просто текстовый редактор канеш.
Забавное, Степанов очень не любил ООП, и постарался чтобы его по минимуму было в стл. А дебилы вместо стл в крестах изучают всякие наследования и инкапсуляции...
Называется найди cреди смузихлебов ушедших со второго курса человека который взял на себя весь матан.
Это максимчук, он реально похож, в гугле есть цветные фото
Тут просто забавно насколько по внешности большинства можно стереотипно сказать кто есть кто, хотя было дело 20+ лет назад
Два 20летних тимлида нафоршмачившие из говна и палок легендарный по забагованности иксрей
Три патлатеньких и духовно богатых художника
Подкачанный энергичный кабан
Лысеющий мужчина средних лет взявший на себя единственную технически сложную часть в этой салогалере
Ну остальные которых не выделил не так палятся конечно.
Ну мож с Украины.
Спасибо, стало понятнее.
В сталкере была продвинутая физика свинца
Это просто ленивый поток сайд-эффектов.
>В X-Ray Engine используется свободный физический движок Open Dynamics Engine.
Костя не справился? Автором числится Russell Smith.
То же самое можно экстраполировать на математику в целом. Все знают что такое математика, но попробуй объяснить на кой чёрт это нужно в программировании. Не нужно.
Монада же это просто моноид в категории эндофункторов, это же все знают, что тут такого.
У тебя на пике не функции, а их значения.
да, пиши на asme сам бы хотел так, но для этого нужно обладать очень большими знаниями, которые хрен где найдёшь в удобоваривом виде один мануал по x86 от Intel - 2k страниц на ангельском (тут точно не помню, то ли один мануал из 4х частей на 2k страниц, то ли каждая часть на 2k страниц), потом если хочешь писать под какую-либо систему, ищи аналогичные по объёму мануалы на win/linux или ещё что
>но для этого нужно обладать очень большими знаниями,
С чего бы? Ты вообще можешь сам написать простенькую виртуальную машину, реализующую например базовый RISC V для целых и писать под нее.
я не специалист в этом, так, общие представления
программисты с реальными знанием asma претендуют на заявки по 400k в месяц на удалёнке (судя по тому что видел на хабре)
а, и да, кстати, запрос был на 100% эффективный код
виртуальная машина не похожа на максимальную производительность
Лол, производительность идёт из инструкций которые ты исполняешь и их типов, видов и порядка. Поэтому тебе можно просто Тьюринг машину дать чтобы ты поигрался, но потом все проги переконвертировать в реальную архитектуру, в тот же risk v.
А вообще раз уж вы тут такие охуевше требовательные к производительности, берите что-нибудь с интересной архитектурой типо Эльбруса и вперёд - там задач по оптимизации на тысячелетия
Это ccls? У меня clangd, таких ошибок не выдаёт. Есть вообще какие-то профиты юзать ccls вместо clangd?
> Какие примеры есть на гитхабе?
https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Source
А у меня не показывает репозиторий. Это все потому что я русский?
clangd же вроде самый базовый. ccls явно богаче по фичам, но частенько падает.
Если кратко, все делают как хотят, никаких стандартов в индустрии не существует
> интерфейс класса
Ты видимо имеешь в виду объявление класса, да обьявляешь ты класс в хедере, а реализацию в цпп файлы
Но если класс является темплейтом, то пишешь определение в хедер файле
> Если кратко, все делают как хотят, никаких стандартов в индустрии не существует
Ну охуеть теперь, я хочу, чтобы мои работы на гитхабе не выглядели по-долбоебски для интервьюера на будущую работу.
> Но если класс является темплейтом, то пишешь определение в хедер файле
Время компиляции не жмет?
> мои работы на гитхабе не выглядели по-долбоебски
Делай как в армии, безобразно но однообразно
Использую, сам недавно узнал о такой залупе с шаблонам. Неудобно конечно и компил тайм увеличивает, но зато все логично. Вся-таки надстройка над портативным ассемблером, а не какой-то там абстрактный язык.
Ты себя ебланом выставить хотел таким вопросом? К синтаксису шаблонов только глаза привыкают 2 недели.
Ты бы лучше кресты учил, а не толстил тут.
vs code + любой компилятор
for (cost auto & it : entries)
{
auto I = std::distance(entries.begin(), it);
}
Как взять индекс I в таком цикле, работает при for (auto it=entries.begin(); it! = entries.end(); it++), а в варианте #1 нет. Не то, чтобы проблема, но хочется знать.
P.S. Написал в прошлый по ошибке
range-based for это сахарок над итераторами для случая, когда тебе как раз не нужны индексы. Зачем ты пытаешься их получать? Если очень хочется, то можешь объявить отдельную переменную, которую будешь инкрементить.
> Ну охуеть теперь, я хочу, чтобы мои работы на гитхабе не выглядели по-долбоебски для интервьюера на будущую работу.
Всем около похуй будет, но если прям хочешь запариться смотри популярные опенсорс проекты поглядеть
> Время компиляции не жмет?
Ну а что поделать
https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file
Потому, скажите мне, что я сделал не так.
Я просто не верю, что вот так вот нужно на самом деле писать.
Просто мои познания плюсов - ограничены вузом, там по сути из плюсов нам только про классы рассказали, а остальное скорее был чистый си. А потом я увидел жаву, влюбился и плюсы не трогал.
Но вот решил потрогать. И я опять же не верю, что вот так вот на самом деле на плюсах нужно писать.
Покажите, как надо на самом деле.
Ты не понимаешь. Это легко читаемый, идиоматичный С++. Хороший компилятор преобразует итерацию в команду деления, если они есть.
> Я не знаток С++
А чего ты знаток? На сишке или жабе это тоже будет считаться лютым говнокодом. Если ты долбаёб, то на любом языке будешь писать хуиту. Нахуй ты циклы используешь, когда есть std::chrono::system_clock::now()?
Ну, на текущий момент - я лид в команде на шарпах. До этого в жаве был.
Ну и для сравнения как это же делается в шарпах.
А про
> Нахуй ты циклы используешь, когда есть std::chrono::system_clock::now()?
Цель вывсести время работы системы. Каким образом это поможет - я хуй знает, потому что судя по описанию:
> Returns a time point representing the current point in time
Если это подразумевает время прошедшее с запуска системы - то извиняй.
> я лид в команде на шарпах
Да кому ты пиздишь, студент ебучий. На крестах это делается ровно так же, как на твоём пике, только с другими названиями методов.
>Gets the number of milliseconds elapsed since the system started.
>public static long TickCount64 { get; }
Буэ. Почему не наносекунды, почему нет своего типа, чтобы работало автоматическое приведение хоть к строке, хоть к Аллаху?
Чел. Так покажи. Я же сразу сказал, что не шарю за плюсы. Я потому и спросил же. Потому что по результатам гугления и смотрения на гитхабе - создается впечатление, что все вот так и делают.
>>14504
Я в упор не понимаю что ты хочешь сказать.
Чел, взглянув на функцию - зачем-то предлагает std::chrono::system_clock::now
При этом.
Функция называется : printUptime
В теле функции - происходит нахождение дней, часов, минут, секунд и миллисекунд прошедших с запуска системы и вывод это в стандартный вывод.
Но я - дурак. Я читать не умею.
>>14494
Какой еще бейт?
Возникли задачи на плюсах на работе. Очень жесткие требования к производительности и потребляемым ресурсам.
Я - последний раз писал на C/C++(именно что вот так, потому что от плюсов там только классы) на втором курсе и это был интерпретатор паскаля.
Сейчас - происходит исследовательский этап работ, по выяснению и составлению best practice, чтобы когда он закончился и новая команда была собрана - не тратить время на набивание шишек, а дать документик, с гайдлайнами и примерами как надо, а как не надо.
Для примера - пилится простой сервер, будет корректировать время устройства, плюс отдавать данные с датчиков и диагностическую информацию, как раз в духе работы системы.
Ну так вот.
Меня как раз и смутило, что я не смог найти какого-то единого и удобного способа, такую простую вещь, как вывод времени работы хотя бы просто получить.
Как я помню - С++ был ООП языком. И я почему-то ожидал, что будет что-то в духе: System.Uptime ну или похожего толка.
Опять же, если знаешь пример как вывести проще время работы системы - покажи. Я только ж рад буду, добавлю в документик как хороший пример.
Это такой троллинг тупостью? Напиши алгоритм быстрой сортировки на плюсах, а потом выспи в треде - а на шарпе это делается вот так a list.Sort();
>Возникли задачи на плюсах на работе. Очень жесткие требования к производительности и потребляемым ресурсам.
Это сколько раз в секунду нужно дёргать uptime, чтобы он тормозил?
А относительно этого, я вот только после того как запостил - заметил, что один while - лишний. Это действительно плохой код со стороны.
Я просто почему-то думал, что мне покажут как надо. Я ж не специалист. А в шарпах тех же - сейчас тренд на как-бы функциональщину и циклы там никто сейчас почти не пишет. Все оч высокоуровнево.
>>14517
Нет не троллинг. Я потому и спрашиваю. Потому что в тех же плюсах я помню, что был std::sort.
Но для такой простой вещи как время и временные промежутки для прикладных задач - все что я увидел это использование std::chrono и руками для нужд пилить вот такое вот.
>>14518
Это пилится пример.
Реальное ПО должно будет с датчиков на дешевом китайском железе собирать информацию, хранить в Sqlite и по запросу отдавать в систему сбора, которая в свою очередь будет приводить к общему виду и в облако отправлять, а пользователь - будет видеть что у него там котел перегрелся и нужно включить аварийное охлаждение.
>по результатам гугления и смотрения на гитхабе - создается впечатление, что все вот так и делают.
Небось на русском гуглил
>range-based for это сахарок над итераторами для случая, когда тебе как раз не нужны индексы. Зачем ты пытаешься их получать? Если очень хочется, то можешь объявить отдельную переменную, которую будешь инкрементить.
Для того, чтобы на основе текущего индекса и entry.size() высчитать прогресс операции в основной thread. Про переменную знаю, так и делал, но мало ли, может ещё варианты есть. А range based использую для лаконичности.
Хотел было написать про ranges::view::enumerate, но его ещё не приняли и, видимо, не примут даже в C++23
Не вкатывальщик, с плюсами знаком больше 10 лет. Есть несколько не оупенсорс пет проектов, часть из них правда старое легаси на мобайл.
Плюсы люблю, вижу как последние 10 лет он развивается, и логику и gui пишу только на нём, но комплексную из-за отсутствия диплома (хотя столько заданий решил будущим "дипломированным специалистам" с FL) и из-за возраста за 30 (ну ладно, чуть за 40). Ну и отсутствия опыта коммерческой разработки (донаты юзеров этож не коммерция наверное).
Активно юзаю stl, могу в многопоток, успешно интегрирую сторонние либы в свои поделки, git, cmake, несколько ide и компиляторов. Был опыт с opengl и glsl. Знаю на базовом уровне sql запросы, т.к. юзаю СУБД у себя, что не знаю, узнаю в процессе.
Жабу или Kotlin немного пробовал, но душа лежит к плюсам. От веб разработки или 1с тошнит. От разделения на backend или front-end впадаю во фрустрацию, вот десктоп приложение это фронт или бэк? Если пишу и логику и gui.
Любую технологию по мере надобности осваиваю, в общем практик. Но и литературу почитываю. Inb: шутеечки про завод.
> за 40
> отсутствия опыта коммерческой
> без профильного образования
Тут проблема в том, что тебя ХР даже до чела которому нужен разработчик не покажет твое резюме.
В твоем случае - по знакомствам - единственный рабочий вариант.
Если пользуешься гитхабом, то должен понимать, что он в первую очередь - социалочка. Так вот - вливайся в комунити, когда тебя в нем шарящим начнут считать - вбрось инфу о том, что работа тебе бы была нужна.
Можешь еще во всяких дискорд-конфах и телегах позависать.
Ну серьезно. Я когда про возраст услышал - уже охуел. У меня сразу вопрос: А хули ты 15 лет делал? Без проектов - каких-то, хотя бы уровня микроОС я бы не стал связываться с тобой.
тим-лид на шарпах, 24 года
Блядь. Как я люблю писать и редактировать не перечитатв.
> Тут проблема в том, что тебя ХР даже до чела которому нужен разработчик не покажет твое резюме.
Тут проблема в том, что ХР, увидев такое вот описание, даже не покажет твое резюме начальнику отдела, которому нужен разработчик.
Думаю так должно быть понятнее.
Где ты там тупость видишь, лол?
Моя жена - ХР. И вечерами пятницы под винцо - мы иногда такие вот резюме смотрим и ржем с них.
Ну серьезно. Я бы понял, если бы чел сказал, что он - работал инженером, по долгу службы что-то писал на си, в свободное время учил плюсы, а сейчас - решил не совмещать, а полностью уйти в плюсы.
Я бы понял, если бы он был каким-то там идейным опенсорсером, который что-то уровня Nginx запилил и теперь работу ищет.
Я бы понял, если это чел, который пишет блоги образовательные и у него есть репутация в комьюнити.
Но тут какой-то мутный дед, без ясного опыта и примеров рабочих проектов, который любовью к плюсам воспылал. Тут два варианта: деменция и деньги.
Хотя да, туплю. В плюсах же денег нет. По крайней мере, если чел не в nvidia и подобного уровня контору намылился.
Но это еще хуже для деда.
> без профильного образования и еба-онлайн курсов
Это говно нужно только для зумерков.
> шутеечки про завод
Туда джуном без проблем возьмут. А в нормальные конторы джуны скорее всего в принципе нахуй не нужны. Джуны там занимаются макакингом на высокоуровневых языках, а крестовики нужны хотя бы мидлы. Я бы на твоём месте не стал в это болото лезть, в ИТ и без кодинга денег достаточно, а для души можешь и так пердолить что-нибудь.
Ну и что плохого в жене ХР?
>>14646
> Туда джуном без проблем возьмут.
Если бы он это писал лет 10-15 назад, то да.
Сейчас - любой приличный завод, которому нужны плюсовики - в каждом региональном вузе имеет кафедру или пару засланцев на кафедры, с которых на практику тащат студентов. А хорошим предлагают работу. И у завода, точно так же как и у галер - есть выбор.
>Тут проблема в том, что тебя ХР даже до чела которому нужен разработчик не покажет твое резюме.
Я представляю уровень компетенции хрюш, поэтому и написал.
>В твоем случае - по знакомствам - единственный рабочий вариант.
Знакомства в онлайне, часть за рубежом, а хотелось бы офлайн.
>Если пользуешься гитхабом, то должен понимать, что он в первую очередь - социалочка. Так вот - вливайся в комунити, когда тебя в нем шарящим начнут считать - вбрось инфу о том, что работа тебе бы была нужна.
Я написал git, а не github. В ОС проекты меня приглашали, после некоторой помощи с моей стороны, но где-то было не интересно, где-то был чистый Winapi, что тоже не особо люблю.
>Можешь еще во всяких дискорд-конфах и телегах позависать.
Читаю, пишу. Но форумы и стак по компетенции выше. Дискорд это что-то зумерское?
>Ну серьезно. Я когда про возраст услышал - уже охуел. У меня сразу вопрос: А хули ты 15 лет делал? Без проектов - каких-то, хотя бы уровня микроОС я бы не стал связываться с тобой.
Писал в свое удовольствие, в ящике письма и благодарности от людей со всего света, в т.ч. от частных софтварных компаний,которым я помогал развивать их продукт just for fun.
>тим-лид на шарпах, 24 года
Завидую белой завистью. Что ты лично от и до написал за последние 15 лет? Интересно, что нужно, чтобы стать таким крутым специалистом.
>Я бы понял, если бы он был каким-то там идейным опенсорсером, который что-то уровня Nginx запилил и теперь работу ищет.
Я бы понял, если это чел, который пишет блоги образовательные и у него есть репутация в комьюнити.
Но тут какой-то мутный дед, без ясного опыта и примеров рабочих проектов, который любовью к плюсам воспылал. Тут два варианта: деменция и деньги.
Покажи свое, уровня nginx, запредельный ЧСВ ведь не на пустом месте?
>Джуны там занимаются макакингом на высокоуровневых языках, а крестовики нужны хотя бы мидлы
Джуна я упомянул в контексте опыта не с языком, а скорее с отсутствием официального опыта.
Про высокоурровневые языки хорошо, что вспомнил: я писал на плюсах расширения для одного из таких, из нативного формата в формат языка. Т.е. делал врапинг родного api платформы в интерпретатор, писал api reference к этому добру, часть просто врапинг, часть расширение функционала. Это к вопросу о том, что я делал 15 лет назад. В принципе это уже legacy, могу выкинуть и на github.
>>14574 "мутный дед" из этого поста.
Вот отзыв от разработчика интерпретируемого языка, для которого быдлокодил расширения на плюсах, нашёл:
>Thank you very much username, this module gives us a hole bunch of new possibilities.
>Great!
Мутный "дед" :[
> Читаю, пишу. Но форумы и стак по компетенции выше. Дискорд это что-то зумерское?
Ну так заведи блог. Внезапно - это сильно увеличивает твои шансы, если ты действительно крутой спец, как пишешь о себе. Кодеры - народ либеральный на самом деле, если тебя сам тимлид заметит - он может просто попросить хрюшу саму тебе написать и пригласить пройти собес. Плюс, для некоторых контор, иметь у себя автора популярного - это статусно, если ты при этом не будешь воду мутить.
> письма и благодарности
Лучше бы у тебя были сертификаты или ты значился в патентах/авторах-соавторах.
> Что ты лично от и до написал за последние 15 лет
Все что я писал от и до сам - это не связанная с работой хуня, уровня микро CMS, фреймворки на которых я пробовал идеи возникшие в ходе разработки, в духе: а что если у нас все приложение будет стеком и как это будет работать. Ну и в таком духе. А жизненный цикл этих петов: Возникла идея, за неделю склепал и выкинул на гитхаб, может быть кому интересно будет и форкент.
А тимлид я потому что умею именно что организаторские вопросы решать и быть буфером между девелоперами и бизнесом.
В резюме или сопроводительное можно указывать такое? Legacy, сайт остался только в web.archive. На гитхаб могу выкинуть, как пруф и for historycal purposes.
Эйчар действительно малолетние курицы в очках без диоптрий для умного вида, такое впечатление сложилось от просмотра инфоцыган на ютьюбе. И эти сущности стоят между людьми которыми есть что обсудить. Это печально :( "Мутный дед".
Ну с 20 можно хотя бы вот так делать:
for (size_t idx = 0; auto&& hui : zhopa) {
// ...
idx++;
}
> В резюме или сопроводительное можно указывать такое?
В гитхаб накидай всего. На хрюш похуй, не понравишься ей - уже похуй будет на твои знания, а вот если будет смотреть кодер, то уже лучше код показывать.
> Эйчар действительно малолетние курицы в очках без диоптрий для умного вида
Зависит от конторы. Если хочешь заебись работу, то надо чтоб тебя пригласили, а не ты оббивал пороги.
У нас хрюша вообще хуй пойми чем занимается - за год ни одного собеседования вроде не было, всех новых брали только по рекомендациям от других сотрудников, такое ощущение что уже в очереди стоят люди на 10 вакансий вперёд.
>Ну так заведи блог. Внезапно - это сильно увеличивает твои шансы, если ты действительно крутой спец, как пишешь о себе. >Кодеры - народ либеральный на самом деле, если тебя сам тимлид заметит - он может просто попросить хрюшу саму тебе написать и пригласить пройти собес. Плюс, для некоторых контор, иметь у себя автора популярного - это статусно, если ты при этом не будешь воду мутить.
С конца нулевых вёл, но забросил в начале 10-х. Форум свой был небольшой для своих, народ разный был и из СНГ и из-за рубежа. Но основная масса: пассивная: скачал и убежал, тоже закрыл. Крутым спецом себя не считаю, но и мутным дедом с деменцией, как ты выразился тоже. Опыт есть, но без обсуждения опыта с понимающий человеком через сито чьих-то жён-эйчар пройти проблематично.
>Лучше бы у тебя были сертификаты или ты значился в патентах/авторах-соавторах.
Может и лучше, но имеем что имеем.
>Все что я писал от и до сам - это не связанная с работой хуня, уровня микро CMS, фреймворки на которых я пробовал идеи возникшие в ходе разработки, в духе: а что если у нас все приложение будет стеком и как это будет работать. Ну и в таком духе. А жизненный цикл этих петов: Возникла идея, за неделю склепал и выкинул на гитхаб, может быть кому интересно будет и форкент.
>А тимлид я потому что умею именно что организаторские вопросы решать и быть буфером между девелоперами и бизнесом.
Ну вот видишь, не всем, кто может (или не может) что-то показать стоит об этом говорить. Некоторые проекты я вёл несколько лет, в одно жало и каждую версию ждали и был фидбек. До коммерции оно не доросло по причинам не разработки, а сторонним. Ну да ладно это лирика всё.
Мутный дед
ух бля макросики мои макросики
я ебу? у деда спроси что он там такое важное пилит, что даже на ждуна вкат не осиляет
60
Конечно, ассемблер. Но в 90% случаев, С++ сделает то же самое, что ты хочешь на ассемблере.
Уже давно С/С++ компиляторы могут использовать крутые инструкции, о которых хер вычитаешь иногда.
По сути, С++ без классов это просто тот же Си, только удобнее во многом. Ну мне с new проще чем с маллоком хуяллаком и прочей дрисней
Да в сишниках одни деды и шизы с заводов, че с них взять. Я вот люблю Си и уважаю.
Я тоже люблю С, но мне нравится использовать многие фичи из С++. Соответственно я пишу на С++ без классов. Чому я не прав, не пынямаю?
>тот же Си
с миллионном говняных семантик, которые ты не можешь просто взять и заигнорить
ну вобщем когда что то крупнее лабы напишешь, то поймешь о чем я
Контекст тут в том, сынок, что свои лабы можешь писать как хочешь, разрешаю.
> не заставляет тебя использовать классы
Но заставляет использовать корректные типы. Когда тебе приходится иметь дело с байтоёбством, то приходится дико ебаться, ведь кастануть что угодно к void⚹ нельзя. std::any немного упрощает жизнь, но всё равно не покрывает всё. В winapi например есть всякие LPxxx, которые очень неохотно кастуются, строки бывает сложно кастануть в правильный тип, хотя ты прекрасно знаешь что там массив чаров. Хотя с другой стороны после раста это кажется лёгкой задачей, там даже ансейф не даёт так просто наебать типобезопасность.
> с new проще
Его вообще нормальные люди в 2k22 не используют.
>нормальные люди в 2k22 не используют.
А что нормальные люди используют в 2к22? а что байтоебы используют?
clang
> А что нормальные люди используют в 2к22?
std::unique_ptr
> а что байтоебы используют?
Даже я, байтоёбствуя, никогда new не использую. Всё на стеке, либо unique_ptr, либо уже из либ получаю указатели на кучу.
>эксепшены
это че
> мув семантика
не ебет вообще.
> RTTI
Связь какая? Речь идет о байтоебстве, а не об адекватной разработке софта.
Обычно без этого можно создавать unique_ptr.
Ну выбрал это, а дальше че делать? Создавать новый файл .c и все? И точно все сишное будет? Среда не будет ругаться, что я выбрал scanf вместо scanf_s?
> эксепшены
Выключаются в компиляторе, совсем.
> мув семантика
Без неё оптимизированный код невозможен. У тебя же даже в сишке с включёнными оптимизациями неявно перемещаются структуры.
> RTTI
Выключается в компиляторе, совсем.
> Выключаются в компиляторе, совсем.
> Выключается в компиляторе, совсем.
Подскажи ньюфу как сделоть? И как без rtti полиморфизм и прочие рантаймовые вещи будут работать?
Вот этого двачую. Ну и повторюсь: почему бы не писать на С++ без классов заместо Си для байтоебства?
> И точно все сишное будет?
.c будет компилится сишным компилятором. Пикрилейтед можешь для всего проекта выбрать или для отдельного файла, разрешение хоть txt делай.
Copy elision даже для сишного кода есть в современных компиляторах.
Иду строго по книге, компилятор не дает запустить выдаёт ошибку. Почитал, либо нужно сделать strcpy_s(всё равно не дает запустить пропадает синтаксис). Или же сделать DEFINE _CRT_SECURE_NO_WARNINGS, но также не даёт запуск. Помогите неосилятору
https://habr.com/ru/post/440566/
Какой вывод можно сделать из этой статьи? Автор хочет сказать что SIMD инструкции — хуйня без задач и ШВИТОЙ компилятор все сделает за тебя? Так?
Я если что не хочу тебя демотивировать, няша.
Попробовать порассылать резюме и примеры того что делал - стоит. Желательно, раз уж ты вроде как шаришь - сразу на тех спецов выходить, потому что они таки последнее слово имеют, и в отличии от хрюши твои дипломы, возраст и прочее для них имеет третью важность.
Сорян, если показалось, что я пытаюсь тебя отговорить. Пробовать стоит в любом случае.
Подподает ли определение собственных и использование всяких мелких типов (меньше стандартного инта) под термин БАЙТОЕБСТВО. Есть мнение что типы меньше машинного слова только для педерастов поскольку не дает никаких профитов в скорости потому что они все равно приводятся к стандартному.
>потому что они все равно приводятся к стандартному
Не приводятся.
>не дает никаких профитов в скорости
Их не для скорости используют.
> в 90% случаев, С++ сделает то же само
Вот поэтому самый топчик это не ассемблер а профайлер с дизассемблером.
Пишешь на плюсах потом проверяеш что компилятор не нагенерил ненужной хуеты.
Хуйня без задач - говнокодер, считающий что если в одном месте что-то оптимизировать, то весь код станет быстрым. Сравнивать ручную оптимизацию в -О0 с -О3 - настоящая умственная отсталость.
Поэтому в очередной раз делаем вывод, что хабр - это помойка уровня пикабу.
Но зачем? Чем тебе "=" не нравится, наркоман?
потому что она юник. используй другой вид смарт пойнтера.
И еще крипта, протоколы, строки, флаги и все остальное байтоебство...
Ну да например
если тебе надо запихать в память дохуя данных
а рамы всего 64 гига.
Такое редко, но встречается.
>Гитхаб.
Это который разрабатывают индийцы для того, чтобы другие индийцы могли ставить друг другу звездочки и проходить собеседования таким образом, чтобы дальше подобную хуету разрабатывать?
Да это то место куда сливают лабы в надежде получить работу. Пытался найти что-то по openGL нашел только код с протухшим glut от линуксойдов.
> приводятся к стандартному
Нет, у тебя все инструкции могут принимать однобайтные константы: короче инструкция - лучше кеш работает и меньше задержки. В кэш-лайн больше переменных влезет, если делать их меньше - быстрее из памяти чтение будет. Из регистров можно брать отдельные байты.
Там по крайней мере бывает неплохо обоссывают друг друга в issue, чего не найдёшь на хабре.
Просто сахарка мало, не показывайте питоновца, в обморок упадут.
auto sptr = std::make_unique<std::string>(std::string("Ti pidor"));
auto copysptr = std::make_unique<std::string>(⚹(sptr.get()));
Вот ты даун. Смарт-поинтеры можно дереференсить как обычные указатели и обычным знаком "=" вызывать конструктор копирования.
Поэтому после универа и каша в голове у всех. Структура из 4 чаров будет занимать 4 байта, а не 16. Так же и на стек можно пушить 8 байт RAX, а можно 1 байт AH/AL. То что widening-касты происходят неявно не значит что там выравнивание меняется.
Не, сказали не париться с short потому что автоматически он переведется в int и обработается как int процесоором. Видимо такая приколюха чтобы у байтоебов пердак порвало когда узнают.
В чем они не правы?
смотря что конкретно ты хочешь и зачем тебе это нужно
> обработается как int процесоором
На бюджете такому учат? Сложение может быть разными инструкциями выполнено, один опкод может принимать разные размеры данных.
>где
хоссспади студентота, всему в компутер саенс можно и самому изучить.
Вкатывайся в реверсинг да и все
Это не вся правда. Хранится он будет как short, обрабатываться ИНОГДА тоже:
short s; ... s++;
Этот инкремент потребует две команды на мипсе вместо одной.
addu s0,1
and s0,65535
байтоеб
Любимая сингл игра есть?
Засунь в дизассемблер, например в IDA Pro или radare2, начни изучать. Патчи константы, функции, смотри, анализируй. Потом вкатись в godbolt
что такое godbolt?
>>начни изучать. Патчи константы, функции, смотри, анализируй
где-нибудь, в какой-нибудь книжке написано как эти базовые вещи делать? моя только команду nop понимат
Степан Бандера
Тому, що в мире RISC регистры не дробятся на кусочки.
а вы тут ноете что работы нет
а вот челик не унывает
влюбился в явку, покодил на ней, но вывертами судьбы оказался "лидом" в сишарп проекте, а сейчас вот будет походу лидом в команде плюсовиков
и везде нужный и полезный
а в коде портяночка из ифов и циклов, кхе, кхе
первая уже прочитана
спасибо
p.s. не скоро доберусь до этой книжки - есть в закромах, когда доберусь не знаю буду ли что-нибудь понимать(
как же многое зависит от автора... дай некоторым букварь написать и иная книжка по матанализу будет проще
В целом бесполезная книга. И довольно устаревшая. Все эти базовые вещи сделает за тебя Гидра. А вот про высокоуровневые вещи тебе там не расскажут, а ты с ними столкнёшься. В реальном бинарнике из 2022 года надо с vtable разбираться, анпакингом, защитами на виртуальных машинах, скриптовыми движками, говном на стеке, портянками после оптимизаций, VEX. Помощи от Карпеского с его книгами никакой, только если консольный crackme ковырять сможешь после неё. Намного полезнее прочитать если не все 5к страниц документации Интела, то хотя бы 2A и 3A.
Я уже несколько ссылок прочитал, все равно нихуя не понял.
Вроде относительно сложные вещи понимаю, но вот это - нет. Зачем это надо?
Выполняются до конструктора, оптимизации конпелятора. Всё.
https://www.youtube.com/watch?v=7DTlWPgX6zs
Вот это выступление на меня оказало можно сказать экзистенциальное воздействие.
Раньше я очень любил изучать разные фишки-фишечки-фишульки разных языков, что там да как. Но как то это увлечение сошло на нет, а вот это видео было особенно переломным в этом процессе. Теперь я просто хочу чтобы на языке было максимально просто написать то что мне хочется и без подводных камней, а дрочка на "стандарт" это что то сродни окунанию в море дерьмища.
Пиздец.
Он серьёзно выступает за то чтобы писать
for (i{0}; i < 2; i++)
И за это еще получает бабло
Что бывает, когда в язык тащат что попало.
Вот в божественном SML есть один способ:
val i = 0
and f = 0.0
Тип выводится, присвоение опустить нельзя (оно вообще однократное).
А что ты имеешь против?
Тоже люблю ML семейство в плане синтаксиса. Вот что бывает когда язык разрабатывают люди с чувством прекрасного, а не байтослесари.
Вероятность того что в коде с которым тебе придется иметь дело порезвился хотя бы один такой ебнутый очень велика, практически равна единице.
молодец, так держать
Нет.
Ахаха, прекрати
Строки.
Опенсл.
Питон. А куду выбрось.
Попробуй отказаться от прав.
>Он не компилирует.
Ну к словам-то уж не придирайся. И вообще, в широком смысла слова - таки компилирует.
Оттуда собственно и начал. Изначально мне не понравилось, что в туториале исходный код кладется рядом с конфигом cmake, но видимо отдельно класть научат попозже. Ладно, укатываюсь туда.
Ага-ага, меня вот одно уебище по имени Артем, не будем называть имена, собеседовало и спрашивало про то, какой тип данных вернет функция со всратой сигнатурой. Нет бы написать auto, но у этих уебком на проектах сишный код и ембедед.
Boost.DLL посмотри
for (int i = 0; i < 10000000; i++) {
start = get_cycles_start();
// code to benchmark
end = get_cycles_end();
num_cycles += end - start;
}
но в ассемблерном коде gcc выдаёт аналог вот такого кода
for (int i = 0; i < 10000000; i++) {
// code to benchmark
start = get_cycles_start();
end = get_cycles_end();
num_cycles += end - start;
}
Как запретить gcc изменять порядок инструкций? Желательно не для всего кода, а локально.
То есть года я пишу malloc, ОС перезаписывает таблицу виртуальной памяти (забыл как она правильно называется)
Бля, так вот почему запускалась и работала прога с созданием массива на овердохуя гигов памяти, но стоило туда попробовать что-то записать, и она сегфолтнулась.
И что это значит?
auto sptr = std::make_unique<std::string>("Ti pidor");
auto copysptr = std::make_unique<std::string>(⚹sptr);
ты там лишнего нагородил
мимо
Ну откуда я знал, у меня же cppreference в башку не вшит. Хотя то, что перегружено разыменование очень даже логично.
А еще путаюсь с категориями выражений. Скажите, любое выражение, которое справа от знака равно вернет r-value? В частности сначала (⚹sptr) вернет r-value, а потом функция std::make_unique() вернет r-value?
Я просто вообще никак не могу понять чего ты хочешь добиться и нахуя заводить два юник пойнтера на один объект. Его же блядь не для хохмы назвали ЮНИК пойнтером. Проблемы уровня что выведет i+++++i - правильный ответ - такое напишет только пидор ебнутый.
Макака, второй поинтер копирует строку по значению
У тебя в итоге два принтера на две одинаковых строки ссылаются
Я понял, ты имеешь ввиду, что (⚹sptr) вернет ссылку. Но ведь ссылка стоит справа от =, она разве не становится r-value или я вообще ничего не понимаю.
>>16971
> онять чего ты хочешь добиться и нахуя заводить два юник пойнтера на один объект. Его же блядь не для хохмы назвали ЮНИК пойнтером.
Бля, какой же ты тугой, сколько раз говорить, это не два поинтера на один объект, а два поинтера на разные объекты, но одинаковые по битам.
Ты серишь говном под себя, а тупой у тебя кто то другой, ну-ну.
У тебя есть объект Obj а.
В какой-то момент в коде нужно сделать его клон Obj b(a).
Все. разница только в том, что смартпоитеры за собой убирают.
Из-за таких чертей как ты хром при каждом нажатии кнопки в панели создавал-удалял 10000000000000000000000000000000000 объектов
Неправда! Для меня важна производительность, поэтому я стремлюсь разобраться и тестирую разные кейсы, поэтому я и выбрал кресты для вката.
>что перегружено разыменование
не только разыменование, но ещё и ->, иначе пользоваться этим очень неудобно
>любое выражение, которое справа от знака равно вернет r-value
value категория — это характеристика самого выражения, а не возвращаемого значения, то есть само выражение может быть rvalue или lvalue
и нет, справа от знака равно необязательно rvalue
"⚹sptr" — это lvalue, потому что дереференс возвращает lvalue ссылку
"std::make_unique()" — это rvalue, потому что это вызов функции, который возвращает НЕссылку
https://en.cppreference.com/w/cpp/language/value_category
Все верно
> и нет, справа от знака равно необязательно rvalue
Само собой, но я не понимаю, что конкретно делает оператор = с правым операндом, как бы нелепо это не звучало.
Я предполагаю следующий алгоритм:
1) вычисляет выражение, и как ты правильно заметил категория всего выражения может быть как r-value, так и l-value
2) если это l-value, то он применяет к нему операцию получить значение
И если это ссылка, то операция применяется конечно не к ссылке, а к сущности, на которую ссылка ссылается.
Вопрос остался в том, одинаково ли другие операторы выполняют операцию получить значение, например та же функция printf().
>что конкретно делает оператор = с правым операндом
так от контекста зависит: переопределён ли оператор равно или нет, что стоит слева от знака равно
>1) вычисляет выражение
ну да, как и при любом вызове функции: сначала вычисляются значения выражений-аргументов функции
>2) если это l-value, то он применяет к нему операцию получить значение
>И если это ссылка, то операция применяется конечно не к ссылке, а к сущности, на которую ссылка ссылается.
звучит как бред какой-то, я не понимаю, о чём ты, ссылки же по сути те же указатели, просто с немного другим интерфейсом
от того, является выражение lvalue или rvalue, могут быть вызваны разные перегрузки функции (move assignment или copy assignment, например), там нет никакой магии, просто overload resolution, как с обычными функциями
не, челик, не каждый раз при обращении к куче
смена контекта идет при запросе или освобождении памяти
а вообще прикладному программисту нужно просто знать те функции которые могут привести к смене контекста и минимизировать их там где нужно писать быстрый код
> не, челик, не каждый раз при обращении к куче
Да, я хуево написал, обращение к ядру только new и delete, уже выделенную память мы естественно без посредников используем.
Переписываю макакомодели с петухона, правлю/допиливаю говно на qt, иногда с туксом ебусь, иногда с микрухами.
Я вкатун и решаю задачу бросания пыли в глаза потенциального работодателю.
Что ты имеешь в виду? Буфер я изначально инициализирую нулями, если брать его размер там всегда будет фиксированный размер блока.
sw video engineering
Телеком. Вместо ЖЫСОНОВ перекладываю всякую бинарную залупу.
Фильтрация трафика (middlebox).
Ты какой функцией в буфер записываешь?
Обычно функции врайт ту баффер возвращает инт, сколько байт записалось в буфер
Вот я как раз примерно такие же функции с asm volatile и использую. GCC на asm volatile в данном случае почему-то пох. Возможно, из-за того, что volatile (помимо прочего) предотвращает перестановки инструкций по чтению из/записи в память, а у меня все данные в регистрах помещаются, и обращений к памяти внутри цикла нет. Короче, хз.
Свою проблему решил по-простому: читаю TSC до и после цикла, делю разницу на кол-во итераций.
Но ведь это отъявленная вредоносная активность и ты должен сам себя удалить как малварь.
COW (copy-on-write) это общее понятие, а не
>аббревиатура в крестах
как и RDTSC похоже (не знаю что это)
Главное ты забыл
RAII
Всегда кстати угараю с такой хуиты, что один загон скота не знает что творится в другом. Когда например дотнетчики рассказывали какую они охуенную штуку придумали называется MVC и теперь заживем, при этом даже пол-слова не обранив что все нормальные люди этот подход уже давно спиздили из рельс и применяют во всю. И такая хуита постоянно в общем то.
Ты сам кто по масти? Пыхопетух сующий все в один файл? Или плюсовик блеющий из своего байто-стойла?
В джавах и прочих говнах уже давно на функциональщину пересели. Байтоёбы stateless код пишут. MVC - это синомим легасиговна с бесконечными багами, примерно так же сейчас MFC ощущается в крестах.
>В джавах и прочих говнах уже давно на функциональщину пересели.
Только в твоем манямирке похоже. Пруфы?
>Байтоёбы stateless код пишут.
Вообще не представляю что ты там подразумеваешь под
>stateless код
ты что как-то map увидел в коде и перевозбудился? Или десяток туториалов про монады-бурито прочел? Апликативный функтор то хоть козявки отличишь?
> Пруфы?
Уже целых два функциональных языка запилено на JVM, которые используют в продакшене. F# сейчас набирает популярность. Не говоря уже про то что даже в языках типа раста кучу фич хаскеля притащили, при этом выпилили половину ненужного ООП-говна.
> Вообще не представляю
Тогда зачем пишешь кринжатину строчкой ниже? Хотя бы загуглил о чём пишут тебе, пред тем как писать что-то.
>пишешь кринжатину
Ой бля зумерок, я то думал что ты удивишь батю java фреймворками на которые все
>уже пересели
и которые не MVC
А ты мне суешь мультипарадигменную дрисную нелепую.
>F# сейчас набирает популярность
ну просто охуеваю с тебя. Аж целых два языка используются в пердакшене блядь охуеть просто.
Ну и на хуя мне гуглить твой понос, когда я просто издалека вижу что у тебя полные штаны говнища?
Причина подрыва?
Алсо, может ты сам сможешь назвать хоть один свежий MVC-фреймворк на джаве, а не всякие Spring 20-летней давности? Не сможешь же ведь, потому что их нет.
А нахуя хоть кому то в java
>свежий MVC-фреймворк на джаве, а не всякие Spring 20-летней давности
там же не малолетние ебанько по хуям разных новых нескучных технологий скачут каждый год как ты. Напиши что такое по твоему
>stateless код
с примером крупного байтоебского проекта в опен сорсе. Предвижу только один пук-сереньк.
> с примером крупного байтоебского проекта в опен сорсе
40к звёзд хватит?
https://github.com/ocornut/imgui
Повторяю, это классическое поведение вируса. Любой вирус действует так же, при заражении компьютера первым делом удаляет другие вирусы, оставляя только себя. Вот и твои ав-залупы делают ровно то же самое.
Ну если 40к звезд, то ладно, это значит не хуйня из под коня нахуй никому не всравшаяся.
ctrl+f stateless -> Phrase not found
ясно. Давай еще.
> хуйня из под коня нахуй никому не всравшаяся
Да уж. Половина ААА-геймдева использует это или свой аналог для разработки игр, но васяну с двача это нинужно.
https://github.com/ocornut/imgui/wiki/Software-using-dear-imgui
> ваши пруфы не пруфы
Ок.
Ты ебанашка сучая никакого "stateless" кода там в тексте не появится и какую ты нелепую хуиту в своей безмозглой головеньке насочинял, сколько бы я этот текст не перечитывал.
464x848, 0:07
Перестать писать на педалях
У тебя ОКР. Это не лечится.
Пиши все время все с нуля. Всегда так делаю вообще заебца рекомендую.
Вообще то об хто прям на главной написано.
пизбец ты тупой хам, я бы на месте того анона с тобой вообще не общался бы
>об хто
Об что?
А так да, лучше бы ему (тебе) перестать дристать под себя с "функциональщиной на которую перешли все джависты" и "stateless кодом"
Только по согласию юзера. (а после, сетап старого антивиря должен удостовериться, что это юзер его удаляет а не зловред, но это уже не моя забота)
> UB
Главная аббревиатура, которую надо знать каждому начинающему крестоёбу. А то блять как проинициализируют сид рандома значением неинициализированной переменной, ведь кажется, что там достаточно рандомное значение, чтобы было заебись.
Чтоб поебаться..
Что да боров чекер? Это какие-то проверки для их аналога юник_птр что ли?
Что бы ты не мог использовать перемещённую переменную. В крестах ты можешь её использовать и это будет UB, о котором тебе скорее всего компилятор даже не скажет. Причём тут вообще ансейф? Он невозможен без выноса коды в блок ансейфа, но даже в этом блоке borrow checker работает.
Потому что для сиспрога у тебя всё ебало будет в ансейфах, ну не всё, а частично, без верификации этих участков ты просто проигрываешь анус пацанам из треда. Но я понял, что ты там вебпарашу пилишь на расте и рад.
> для сиспрога у тебя всё ебало будет в ансейфах
Даже при работе с винапи достаточно оборачивать ансейфом только непосредственно вызовы функций, null обрабатывается как None в Option, коды ошибок возвращаются в виде Result. Всё остальное пишется без ансейфа, есть куча safe-биндингов для либ, в том числе и системных. Да и нихуя в ансейфе нет страшного, блок ансейфа значит лишь то что внутри него рантайм раста не управляет памятью, все проверки всё так же работают в нём.
>>18090
Как обычно изворачиваются как могут - "valid but unspecified state". Т.е. переменная валидная, а что в ней находится стандарт не регламентирует. Некоторые инициализируют перемещённую переменную дефолтным значением, как в гайдлайне рекомендуют, кто-то не станет - в любом случае это гадание по фазе луны, фактически UB, если будешь использовать её после перемещения.
Это не уб, долбаеб. Съеби нахуй
>Да и нихуя в ансейфе нет страшного, блок ансейфа значит лишь то что внутри него рантайм раста не управляет памятью
))
Static Initialization Order Fiasco
>Только по согласию юзера.
Это называется "троян". Зловред маскируется под полезную программу, заставляя юзера самого его поставить.
Ой, да иди ты в задницу, и драйвера удали - их сетапы то же самое делают.
Конечно мы удаляем другие ав, иначе не факт, что система запустится.
Если не можешь проверить подпись и чек сумму дистриба - не ставь.
А мозгоебли, что можно, а что нельзя, мне и от MS хватает, один аплейт винды охуительнее другого (у них есть куча документов в открытом доступе и ещё пачка под NDA)
затралел, доволен?
А как ты прокомментируешь то что твоё говно работает хуже защитника винды, но ты обманом отключаешь его и ставишь свою мокропиську с зондами? Это ведь самый настоящий троян, как бы ты жопой не вилял.
Пруфы, что хуже?
>драйвера удали - их сетапы то же самое делают
Нет. Драйверы это полезные программы, в них нет вредоносных функций.
>Конечно мы удаляем другие ав
Еще удаляете другие вирусы и файлы пользователя.
Еще пиздите https трафик.
Еще майните.
Еще замедляете и нагружаете систему приводя к скорому выходу оборудования из строя и ухудшая работу буквально всех программ, включая операционную систему, и не просто по производительности и потреблению памяти, но и внося множество сбоев.
Еще отправляете мегатонны собранной информации неизвестно кому и зачем.
В общем, нет хуже зловреда чем антивирус. Классический троян слетевший с катужек от вседозволенности, ведь их не судят и не садят. Куда хуже неофициальных троянов которые куда менее вредоносны и которым приходится скрываться.
Не пользуйся.
Привет! Где именно?
У меня есть две ситуации:
- первая я точно знаю что в поинтере лежит производный класс
- во втором, я хочу сделать что то похожее на reinterpret_cast<TagEntity<Type1>⚹>(ptr), где ptr = TagEntity<Type2>⚹. Они же должны иметь полностью идентичны, кроме их константы
к слову тесты мои вроде как эти штуки проходят, но не уверен что на всех машинах будет корректно работать
>Какие подводные могут быть в downcast с помощью reinterpret_cast?
По ебалу от лида получишь, как вариант.
Авторитет лида должен быть чем-то обоснован. Иначе бы все стали активно юзать реинтерпрет_каст сразу после того, как сами получили бы право голоса.
на С++ разумеется
Подумай над тем как сделать результат майнинга полезным и не ломающим текущую систему. Если получится, то станешь миллионером.
лол, у меня есть такая идея, но мне бы сначала хоть джуном стать
p.s. но там обратной совместимости нет
А откуда нам знать в какой предметной области он хочет проект написать? Никаких вводных о себе не написал, может быть ему любительская астрономия нравится, тогда можно написать программу для обработки астрофотографий, либо ему нравится системная разработка и тогда можно заняться ядром/загрузчиком/планировщиком, либо вообще может по сетям угорать и написать распределенную сеть для вычислений.
нужен пет именно для джуна, чтоб в худшем случае посидеть недельку-другую и полчуть что-то готовое (возможно подтянуть некоторые навыки, возможно закрыть пару белых пятен, но не изучая целую предметную область на которую нужно пол-года минимум)
>это точно пет для джуна?
В нем ничего сложного, просто требует много времени для одного разработчика.
>>19045
Ну так бы и сказали, что нужен проект для джуна. Попробуй просмотрщик и мини редактор для bmp-изображения написать на основе opengl/sdl/sfml. Это весело(можно быстро и наглядно увидеть результат своей работы, а не какие-то непонятные цифры) и полезно(учишься работать с информацией, декомпозировать проблему и проектировать архитектуру приложения). Начти с простого, а именно с ознакомления с форматом bmp, его считывания и вывода на экран. Потом погугли базовые операции с растровой графикой и реализуй эти алгоритмы(увеличение/уменьшение яркости, превращение изображения в ЧБ, изменение контрастности и т.д) . Главное писать все самому, а не использовать готовые решения и библиотеки, иначе какой в этом смысл, верно?
Нет, это сложно даже для синьора.
Если взять какое-нибудь опенсорсное геометрическое ядро, то может за длительный период времени что-то и получится написать, но без геометрического ядра будет тяжко.
спасибо, хорошая идея думаю мне это по силам с помощью гугла, можно ещё идейку-другую, буду крайне признателен!
и ещё вопрос: сети я не трогал (ни в каком виде, не знаю с какой стороны подступиться на текущий момент), это большой минус в том что пет-проекты будут desctop only?
p.s. не джунам нужны пет-проекты? я думал у них есть опыт работы и стек технологий, которые они могут подтвердить на собеседовании и всё
Все современные веб фреймворки для жабы (javalin, кваркус, микронавт, ktor для котлина) так или иначе можно использовать и в MVC приложениях.
MVC это просто подход к разделению слоев функционала приложения на модель, представление и контроллер. Еще частенько сервисный слой добавляют для всякой бизнес-логики.
>>17687
>В джавах и прочих говнах уже давно на функциональщину пересели
В Го из функциональщины максимум могу вспомнить то, то функцию можно передавать как аргумент в другую функцию. Почти то же самое, что и указатели на функции в ANSI C89. А так Go даже до жабы очень далеко в плане функциональщины. А в самой жабе функциональщина только на уровне лямбд и стримов используется.
Вообще до сих все пишут в ООП (или структурном, в случае Го) стиле, а функциональщину используют как синтаксический сахар.
>>17667
Есть какие-то альтернативы MVC?
>можно ещё идейку-другую, буду крайне признателен!
>и ещё вопрос: сети я не трогал (ни в каком виде, не знаю с какой стороны подступиться на текущий момент)
Ну могу тебе предложить простой проект связанный с сетью, а именно доработку твоего приложения до клиент-серверной архитектуры. Т.е. ты должен будешь предоставить пользователю тонкий клиент для общения с сервером, а все вычисления перенести на сервер. Юзеркейс, примерно, такой: пользователь загружает свой файл на сервер и выбирает операцию, сервер обрабатывает файл и отсылает результат пользователю, пользователь видит предпросмотр и если его устраивает результат, то скачивает файл, иначе выбирает нужную операцию снова. Тонкий клиент можешь реализовать как хочешь, веб-морда, ГУИ, консольная строка, а можешь и вовсе все сразу сделать, реализовав универсальный интерфейс.
> это большой минус в том что пет-проекты будут desctop only?
От вакансии и деятельности компании зависит. Например, не думаю, что эмбеддерам будет интересно на твой десктоп-софт смотреть. Хотя для джуна, может быть, и нормально.
>не джунам нужны пет-проекты? я думал у них есть опыт работы и стек технологий, которые они могут подтвердить на собеседовании и всё
Да и джунам они не всегда нужны, но опять же от работодателя зависит. Да и лучше иметь проекты на гитхабе, чем не иметь, лишним точно не будет.
Важно еще понимать, что пет-проект - это личная инициатива разработчика, а не средство получения вакансии или звездочек на гитхабе. Если у тебя нет желания что-то писать для себя после работы, то не пиши, не нужно мучать себя.
>Юзеркейс, примерно, такой: пользователь загружает свой файл на сервер и выбирает операцию, сервер обрабатывает файл и отсылает результат пользователю, пользователь видит предпросмотр и если его устраивает результат, то скачивает файл, иначе выбирает нужную операцию снова
Алсо, это я про проект с bmp говорил.
Ковыряться в каких-нибудь легких старых игрульках при помощи IDA/Radare/Ghidra, всякие crackme итд. Но смысла сейчас в этом нет особого, золотые времена реверсеров ушли в прошлое, лучше потрать время на что-нибудь более полезное и современное.
Еще можно сделать такую интересную и перспективную архитектуру: клиент посылает серверу командочки вида "нарисуй прямоугольник вот тут", а сервер это рисует у себя на экране. Обратно приходят движения мышкой и нажатия кнопок. Вроже этого нигде не было. Я еще не придумал как быть с тем, чтобы увидеть картинку на клиенте. Но и так может где-то пригодится. Скажем, будет редактор фотошоп работать на мощном сервере с экраном, а команды туда посылаешь с телефона.
>золотые времена реверсеров ушли в прошлое, лучше потрать время на что-нибудь более полезное и современное.
Не сказал бы, работы для реверсеров только больше становится, только зачастую эта работа связана с поиском уязвимостей и подразумевает наличие знание в инфосеке, т.е. с обычными знаниями реверса делать нехуй.
>>19076
да, прежде всего хочется для себя, но жизнь в текущей ситуации толкает на срочный поиск работы, да и для дальнейшего развития надеюсь это полезно должно быть
на данный момент я сильно ограничен теми знаниями что подчерпнул из учебников и "открытых" курсов, к сожалению в них нет "указателя" на "следующий элемент" обучения - они просто заканчиваются и всё(
> Вообще до сих все пишут в ООП
Только в языках где других вариантов нет - жаба, шарп, пхп, частично в крестах. В мобилках появилась возможность и уже ООП остаётся только как легаси-отросток. В скале и кложуре ООП только для совместимости с жабой. Раст изначально не заточен был под него и никому оно не надо иметь полноценный ООП. В крестах регулярно можно увидеть как в свежих проектах изворачиваются и пишут код без классов - нэймспейсы, лямбды, процедуры и простые структуры. Чтоб была совместимость с не-ООП языками. В бэкенде веба может и актуален ещё ООП, но в остальных местах уже при любой возможности пытаются от него избавиться.
На скале и кложе сейчас мало кто пишет, скала вообще скорее мертва чем жива.
В котлине ООП используют, в том числе и в мобилках. Раст тоже не шыбко взлетел, на нем массово никто не пишет ничего кроме криптоскама.
Вот Го взлетел, да, правда там вместо ООП не функциональщина, а обычные структуры и циклы. Никакой функциональщины в Го нет по факту.
Реверс бинарей (как раз ковыряение в IDA/Ghidra/Radare) умер, так как бинари уходят в прошлое, как и сами десктоп-приложения собственно.
разве? ботоводство в онлайн-игрульках цветёт и не воняет, байтоёба этот рынок и напоит и накормит и отсосёт если хорошо попросить
>Еще можно сделать такую интересную и перспективную архитектуру...
Да много чего можно сделать, после начала работы новые идеи постоянно будут в голову приходить. НО главное много не мечтать, а сначала реализовать что-то более простое, иначе нафантазируешь себе многое, обосрешься и вовсе на проект забьешь. Уже проверено
>>19085
>на данный момент я сильно ограничен теми знаниями что подчерпнул из учебников и "открытых" курсов, к сожалению в них нет "указателя" на "следующий элемент" обучения - они просто заканчиваются и всё(
А вот это и есть ловушка вкатунов в ИТ. Вы изучаете инструмент, а что с ним делать дальше не знаете, вас этому просто не научили. Поэтому важно понимать, что такое ЯП и зачем они нужны. В первую очередь, ЯП - это инструмент человека для управления ЭВМ, все. С помощью этого инструмента будут решаться проблемы предметной области, которой ты занимаешься, поэтому куда более важно знать нюансы конкретной области, чем знать язык. При этом для каждой области методы решения проблем и сами проблемы будут разными. Допустим, что ты изучаешь астрофизику и тебя заинтересовал вопрос эволюции галактик. Для начала ты пишешь ТЗ, т.е. описываешь ЧТО должно поступить в черный ящик и ЧТО должно ВЫЙТИ из черного ящика, после формализуешь задачу, т.е. описываешь задачу языком математики, моделями и прочим говном, потом уже удет реализация, т.е. процесс написания кода. В итоге для решения задачи мне нужно знать: что я хочу получить в итоге, какими способами я буду решать эту проблему(численные методы, алгоритмы, математический аппарат и т.д.) и знание ЯП. У тебя есть только третий пункт. Поэтому вкатывайся в интересную тебе область, изучай местные проблемы и методы их решения.
Алсо, 90% программиста - это работа на бумаге. Некоторые сеньеры-помидоры, настолько становятся далеки от этапа реализации, что забывают как писать код, так как его работа заключается в проектировании системы "на бумаге", а реализация ложится на плечи голодных студентов. Кодер - пишет код по ТЗ, программист - находит решение проблемы, проектирует систему и реализует ее(опционально).
>Еще можно сделать такую интересную и перспективную архитектуру...
Да много чего можно сделать, после начала работы новые идеи постоянно будут в голову приходить. НО главное много не мечтать, а сначала реализовать что-то более простое, иначе нафантазируешь себе многое, обосрешься и вовсе на проект забьешь. Уже проверено
>>19085
>на данный момент я сильно ограничен теми знаниями что подчерпнул из учебников и "открытых" курсов, к сожалению в них нет "указателя" на "следующий элемент" обучения - они просто заканчиваются и всё(
А вот это и есть ловушка вкатунов в ИТ. Вы изучаете инструмент, а что с ним делать дальше не знаете, вас этому просто не научили. Поэтому важно понимать, что такое ЯП и зачем они нужны. В первую очередь, ЯП - это инструмент человека для управления ЭВМ, все. С помощью этого инструмента будут решаться проблемы предметной области, которой ты занимаешься, поэтому куда более важно знать нюансы конкретной области, чем знать язык. При этом для каждой области методы решения проблем и сами проблемы будут разными. Допустим, что ты изучаешь астрофизику и тебя заинтересовал вопрос эволюции галактик. Для начала ты пишешь ТЗ, т.е. описываешь ЧТО должно поступить в черный ящик и ЧТО должно ВЫЙТИ из черного ящика, после формализуешь задачу, т.е. описываешь задачу языком математики, моделями и прочим говном, потом уже удет реализация, т.е. процесс написания кода. В итоге для решения задачи мне нужно знать: что я хочу получить в итоге, какими способами я буду решать эту проблему(численные методы, алгоритмы, математический аппарат и т.д.) и знание ЯП. У тебя есть только третий пункт. Поэтому вкатывайся в интересную тебе область, изучай местные проблемы и методы их решения.
Алсо, 90% программиста - это работа на бумаге. Некоторые сеньеры-помидоры, настолько становятся далеки от этапа реализации, что забывают как писать код, так как его работа заключается в проектировании системы "на бумаге", а реализация ложится на плечи голодных студентов. Кодер - пишет код по ТЗ, программист - находит решение проблемы, проектирует систему и реализует ее(опционально).
то что ты написал для меня из разряда выступлений коуч-тренеров, которые сами нихуя не знают, но могут научить чему угодно извини, если обидел
посоветуй лучше инструментов (библиотек с нормальной документацией или ещё чего(?) и как их (с какой стороны) изучать), а что с ними делать я уж как-нибудь разберусь
на текущий момент могу реализовать какую-нибудь простенькую работу через консоль (хоть базу данных со своими инструкциями (за SQL / MSQL не брался, команды будут не стандартизированные)), всё что в ходит в стандартную программу обучения C++ я знаю, ввод/вывод с консоли, простенькая работа с файлами, STL, algorithm'ы STL
могу к какому-нибудь простенькому функционалу прилепить простенький интерфейс (путём гугления)
и меня совершенно не интересуют коуч-фразы типа:
"ты сначала определись с областью" потом "сделай что-нибудь" и "у тебя всё получится"
меня больше интересует информация вида:
1. прочитай вот это: "obj_Name"
2. попрактикуйся с "obj_Name"
3/ по итогу у тебя получится "Result"
и исходя из "Result" я пойму хочу я этого или нет
> скала вообще скорее мертва чем жива
Откуда такие манявыводы? По популярности и количеству вакансий скала выше пхп, где-то на уровне раста.
> В котлине ООП используют, в том числе и в мобилках.
Compose - это функциональный фреймворк и там нормальной поддержки ООП в принципе нет. А это так-то актуальный нативный фреймворк для ведра, на котором уже почти весь софт написан в 13 ведре.
> Раст тоже не шыбко взлетел
Второй по популярности системный язык, после С/С++. У линукса есть поддержка модулей ядра на расте, у майков официальные биндинги системного апи есть только на раст и они сами говорят что некоторые части системы на нём пишут.
> Го
В нём вообще нихуя нет. Просто медленная сишка с сахаром. Нахуй ты его вообще на один уровень с полноценными языками ставишь?
>то что ты написал для меня из разряда выступлений коуч-тренеров,
>и меня совершенно не интересуют коуч-фразы типа:
"ты сначала определись с областью" потом "сделай что-нибудь" и "у тебя всё получится"
Так, блядь, а как я тебе могу посоветовать что-то, если не знаю чем ты заниматься хочешь? Я тебе описал пусть разраба сверху-вниз, т.е. от твоих желаний и интересов, а ты хочешь начать снизу-вверх и сначала выучить не понятно что. Больше конкретики давай, пожалуйста.
> Корутины ща юзабельны?
Вполне, но нахуя? Нормальная многопоточность в любом случае быстрее, а удобство корутин сомнительно. Вон в расте тоже завезли асинхронность и что, кто-то пользуется ей, кроме вебмакак?
опиши чем занимаешься, как к этому пришёл, какими инструментами овладел? если напишешь материалы какие для этого потребовались - ещё лучше
я(любой) могу тебе расписать как стать президентом РФ, в абстрактной теории, разумеется
Я бустовские юзал ещё на 14 м стандарте
Все подходит, и std::filesystem, и WinAPI, и Qt и наконец питон с библиотекой os.
Нет.
Как будто асинхронность где то кроме веба нужна
да и как она может быть медленнее многопотока
> да и как она может быть медленнее многопотока
Потому что у корутин куча кода под капотом, ещё и аллокации самой корутины. Ничего этого нет у многопотока, там только можешь на синхронизации выстрелить себе в ногу, но так и с корутинами тебе надо делать её, если ты не в одном потоке сидишь. А если нужны параллельные вычисления, то есть библиотеки под них, которые сильно быстрее чем куча корутин. Корутины ещё можно было бы использовать в эмбеддед системах, где нет нормальной многопоточности, но на полноценных процах корутины всегда будут медленнее правильного многопотока.
Т.е. кривые мокрописьки > нативное решение? А потом наблюдаем как лепят десять кроссплатформенных либ с одинаковым функционалом, потому что каждая прошлая была калом. Не лучше ли сделать три под конкретные системы, но сразу нормальные?
Я лучше одну сделаю на QT
Аргументы какие?
> как вкатываться в реверсинг?
Для начала, почитать и понять
https://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf
> А если много много ио операций?
Ещё с доисторических времён есть асинхронное IO в системах. В том же винапи как сеть, так и фс, могут работать без блокирования потока. Так что вообще похуй, одного синхронного потока хватает всегда.
> В чем подводные?
В том что это такое говно, что ты после него будешь с радостью вспоминать какой же крутой winapi. А ещё документации хуй, будешь читать исходники, а там миллионы строк легасиговна.
торч не жирно ли будет для игрулек? хороший байтоёб либо модифицирует клинент (вырезая из него всё что не нужно - графений и т.п. + самописный чит для ухода от анти-чит системы) либо вообще пишет свой такого правда в проектах сложнее карточных игорь не представляю
И как, что-то интересное уже намоделировал, или всё пердишь в трубу?
>в проектах сложнее карточных игорь не представляю
В пое, говорят, когда-то был альтернативный клиент, пока за него банить не начали..
Нагуглил какие то стд бинды, в общем попроще можно как то чтоли?
не слышал даже о таком, видел разных ботов, один даже запускал и настраивал но потом всё накрылось - разработчик ушёл в тот момент как компанию купил китай
Роутинговые движки (навигаторы там). Иногда немного около автомотива и чуть чуть мл для eta.
До этого чутка поисковыми движками занимался, медициной всякой на английских алкашей господ.
Забавно, что раьотая постоянно с разными типа сложными алгоритмами вообще слабо в них шарю. Лит код вообще на сайт пыток похож. Хотя там вскоре головоломки математические интересно решать.
И что, в итоге в следующий раз ты на жаве напишешь?
>Слышали че-нить про Android NDK?
Слышал, что это оберка над оберткой над еще одной оберткой.
Ты сейчас 90% современного ПО.
Ну да, std::bind
Еще, если не ошибаюсь, может подойти std::mem_fn, но std::bind универсальнее, тк позволяет биндить не только this, но и аргументы.
Бле это не глобалы, сорян за кривую фотку, чет я протупил. Это класс my_socket, вишь там во втором комменте, да и переменные обьявлены позже функций
>>19704
Хмм, а чому так? Вроде же можно написать типо так
thread = std::thread(&my_class::my_function, this)
и все будет работать. А почему нельзя
thread = std::thread(&my_class::my_function, &my_class_var)
?
По-идее тоже должно быть можно.
Смотри чтобы на this не получился двойной указатель разве-что.
Ну да можно, но только не в случае asio
И зачем было так жизнь людям усложнять, бинды какие то ахуеть
Ты на поставленный вопрос отвечай. Когда мне будет нужен генератор случайных фраз - я буду знать к кому обратиться.
Так в смысле
Если у тебя функция как аргамент принимает референс на функтор, то есть любую хуйню с оператором ()
То когда у тебя указывается как аргумент, pointer to member function
То надо просто забиндить нулевой аргумент (this)
Ссылка на объект это просто неявный нулевой аргумент
Ну вот так, это просто не собирается
Вот так к примеру все ок
std::thread(static_cast<size_t (asio::io_context::⚹)()>(&asio::io_service::run), &context);
А вот так не работает
std::thread(&asio::io_service::run, &context)
Я не понимаю почему, вот в чем вопрос, к чему здесь биндить че то, хз, не очевидно
Надо полагать, что run перегружен (или шаблон) и поэтому ты не можешь получить адрес без каста
Э ну в скорости чего? Фронта? Разницы глазу ты не заметишь точно, единственное что qml довольно нагруженный и большие аппы на нем писать не профитно, как и слишком маленькие ибо ресурсы хавает не соизмеримые. Но для твоей задачи вполне подойдет
int x init 5;
int c copy x;
Obj o init Obj();
Obj m copy o;
Obj n move o;
Ооох ебать, сразу повеяло душком старой суки злой на весь мир которая с короной на голове а-ля "Я самая чёткая, самая умная" пришла "преподавать" в школу или универ.
Одно из предназначений типов и типизации вообще - запрещать недопустимые операции и выдавать CE. С сырыми байтами можно творить что хочешь, а потом часами сидеть отлаживать. Например, я создал указатель на функцию, преобразовал его сишным способом и присвоил указателю на int. Результат разыменования непредсказуем, видимо я получаю интовое представление байтов кода функции. Еще одно предназначение типов - перегрузка функций. Я думаю только для move-конструкторов и move-присваивания и был придумал тип T&&.
Одно из предназначений типов и типизации вообще - запрещать недопустимые операции и выдавать CE. С сырыми байтами можно творить что хочешь, а потом часами сидеть отлаживать. Например, я создал указатель на функцию, преобразовал его сишным способом и присвоил указателю на int. Результат разыменования непредсказуем, видимо я получаю интовое представление байтов кода функции. Еще одно предназначение типов - перегрузка функций. Я думаю только для move-конструкторов и move-присваивания и был придумал тип T&&.
Соьрать из исходников или взять из репы дистрибутива лялеха.
Неважно. Пчел ноет на набор значков из 70х и в том же посте постит набор значков из 70х.
Ну, когда казалось что еще пару лет и можно будет программировать компуктеры на естественном языке.
сразу предупреждаю - обидеть не хочу
нахуя так сложно? ну есть указатель и есть, ссылка тот же указатель, только работать с ней чуть попроще, но нет того функционала что у указателя, и то и то хранит в себе адрес какого-то байта, тип указателя/ссылки "говорит" компилятору сколько байт всего
откуда у тебя этот материал? неужто нельзя было проще выражаться? я прочитал половину у меня мозг отреагировал как при чтении шизифренических постов
> нахуя так сложно?
Формализую свои знания. На собесе отвечать буду также. Не нравится - нахуй.
> и то и то хранит в себе адрес какого-то байта,
Это стандартом определено? Если не ошибаюсь, стандарт не описывает как именно реализуются референсы.
> неужто нельзя было проще выражаться?
Ты вот такой простой, можешь ответить например на вопрос, почему в Яп со сборщиком мусора собственно сборщик мусора, а не аналог шаред и вик поинтеров с подсчетом ссылок?
>почему в Яп со сборщиком мусора собственно сборщик мусора, а не аналог шаред и вик поинтеров с подсчетом ссылок?
я твой вопрос не могу понять
>почему в ЯП (это сокращение от языка программирования, хоть тут я надеюсь твоё и моё представления совпали?)
>сборщик мусора?
почему в языке программирования со сборщиком мусора сборщик мусора - в чём вопрос?
почему в яп автоматическое освобождение ресурсов? (не зачем, а именно почему?)
купил мужик шляпу, а она ему как раз
ты на говно уже исходишь, да?
Забудь об компактном бинаре, если пишешь на крестах. У тебя будет, в лучшем случае, компактный ИСХОДНИК.
Ой блин, с чего бы вдруг он был большим? Назови язык где бинари меньше inb4 C, но это тупой пример
Бездумное применение строк и иостримчиков, например.
Просто сравни ассемблер для
cout << "hello\n";
и
puts("hello");
что нужно сделать и где я повернул не туда что не смог решить эту проблему сам?
>экономить место на жестком диске
>2022
Плиз, ну хватит. Производительность > читабельность > расход оперативной памяти > говно > моча > размер бинарника
> поинтеров с подсчетом ссылок
Подсчет ссылок перестает работает когда возникают циклы из ссылок.
Представь себе двусвязный список на указателях например
puts смотри в компиляторе С, естественно. Давай сравнивать идиоматичный способ вывода для С и С++.
Выкручиваемся в стиле "пфф я тоже могу puts", "могу без исключений", "могу без шаблонов", "хочешь - пиши без классов".
Да блин, у меня на 350 строк кода бинарник 334 в release. Мб я в cmake что то не то настроил, но это пиздец.
Я просто сейчас со слезой вспоминаю контесты, где 500 строк дают бинарь в 20кб, а тут... Видимо все таки шаблоны не умеет хорошо сжиматься
А сколько строк кода в скайриме видел?
Я, честно, не знаю асм, но разве тут не одинаково +- строк в main. Все остальное типо инициализация, не? Поправь, пожалуйста.
Отладочные.
Ты чем там компилируешь? На винде для крестов размер хэллоуворлда около 15 кб, 100 кб - это раст с жирным рантаймом.
> Ты чем там компилируешь?
Msvc, но допускаю, что мог флаги некоторые забыть. Хотя вроде release и release-debug-symbols поставил. До этого было 500+
> На винде для крестов размер хэллоуворлда около 15 кб, 100 кб - это раст с жирным рантаймом.
Так у меня не хэллоуворлд
Да, там инициализация иострим. Но она таки занимает место.
Дальше, компилируем
cout << "hello";
......
cout << "hello";
и видим по три команды на каждую строку. А в сях получится по две команды.
А для map компилятор засунет весь код красно-черного дерева.
> Да, там инициализация иострим. Но она таки занимает место.
> Дальше, компилируем
> cout << "hello";
> ......
> cout << "hello";
> и видим по три команды на каждую строку. А в сях получится по две команды.
И я теперь должен забыть про компактный исходник? Звучит не убедительно
> А для map компилятор засунет весь код красно-черного дерева.
И? В других языках не так что ли? Не понял что ты хотел сказать. Кстати надо будет мне потестить как для разных типов в мапе меняется размер. Но уже завтра
Чуть уточню. Инициализация всего 1 раз за всю программу делается, так что +15 кб к любому бинарю звучит не страшно. А разница в 1 строчку в выводе меня улыбнула. Да, можно сказать, что это аж в 1.5 раза больше, но это только вывод, который, кажется, занимает незначительную часть исходника
Это примеры на коленке, где и почему кресты больше. Если вплотную обмазаться шаблонами и строками, будет нагляднее.
>>21359
> И? В других языках не так что ли? Не понял что ты хотел сказать.
В сях большой код выглядит большим в исходнике. Или там МАКРОСЫ, которые своим видом как бы предупреждают. Поэтому у сишника меньше соблазна сделать хуяк-хуяк однострочник, из которого получится толстый код.
Нормально делай - нормально будет.
indent -pmt -nbfda -di0 -nfc1 -npcs -bl -ce -cdw -br -nbc -ncs -nbbo -bad -sob -il0 -ip8 -i8 -l120
Могу ли я писать в несколько потоков в один сокет? Все сломается или просто перемешается?
а че ты кричишь
типо версия буста не та, но оно не хочет обновляться, как я понял. Говно ебаное, ваш линукс
> Если я вызову метод класса, а в методе класса вызову goto к метке, а метка расположена в другом методе класса, то программа перейдет к метке выполнет код после метки и все? Не вернется же к методу из которого вышла?
Да оно тебя, просто нахуй пошлет и не скомпилит такое. Как ты себе блять это представляешь?
Можно, я действительно проверил, нельзя в метку в другом методе переместиться. Эх, жаль, придется ебучие ретерны городить
не слышал про такое щас, буду гуглить
я и так каждый день рефлексирую
вводные данные:
знаю базовые things на С++, такие как переменные и типы данных, Функции(включая лямбды), ООП(классы, функторы и предикаты), Шаблоны, Многопоточность, Ссылки и Указатели, контейнера STL ( и их адаптеры стек, очередь), могу в многофайловость
но не знаю границ перечня методов и типов std (если верить оглавлению книги Josuttis: The C++ Standard Library то зная вышеуказанное должен уже знать почти всё, но уверенности в этом нет)
Собственно вопрос(прошу принять во внимание мою глупость и то что я новичок.):
пора ли браться за Qt? и что это такое (где-то пишут что это просто библиотека - т.е. я могу просто включить её в свой проект в Visual Studio? где-то пишут что это набор инструментов и предлагают скачать с сайта Qt.io(если не ошибся) набор этих самых инструментов, что это вообще такое, если простыми словами для непосвящённого? и что мне с этим делать!?). Ознакомление с самой популярной учебной литературой по Qt дало следующее:
Шлее Qt 5.10 - не понимаю для кого пишет автор, мы явно с ним на разных волнах (появляется ощущение что автор либо пишет книгу для друзей законченных программистов либо к моменту написания получил сильную профессиональную деформацию и его сложно понять другим людям не находящимся на одном уровне с ним)
Саммерфилд Qt - аналогично
Земсков Qt 4 - начало хорошее, автор как минимум старается быть доходчивым
Бланшет и Саммерфилд Qt4 GUI - видно что авторы стараются опуститься до уровня начинающих и немного чуть-чуть им это удаётся
Ищу совета который помог бы новичку в дальнейшем развитии (куда-нибудь, с указанием цели и возможных результатов)
Лол. Qt это наоборот самый лёгкий старт в крестах, лично я с него и начинал не зная вообще нихуя. Qt прячет кучу крестовой сложности, даёт охрененные плюшки, разжеванные книжки на русском, IDE имени себя и лучшую документацию из всех что я видел в оную IDE и встроенную.
а как начать то? я посмотрел литературу - даходчивостью там и не пахнет лично для меня
объясни, пожалуйста, мне как если бы рассказывал пятилетке
Чувак, в этой документации есть примеры, и дока на них ссылается, их можно собрать и потыкать. Читай бумажную (условно, в смысле и скан сойдёт) книжку (я точно не помню, вкатывался скорее всего через книжку саммерфельда по qt 4.5 а потом юзал доку) и смотри примеры. Пиши какие нибудь хелловорлды задействуя нужные тебе фичи, дергая их кусками из примеров и так далее. Вот так постепенно и въедешь.
Собсно Qt это локомотив крестов и лучший гуи-фреймворк эвар, 95% вакансий крестов будут требовать qt или boost (но буст это его противоположность, такая шаблонная поебень что ебнуться можно, новичку сходу я бы его не рекомендовал)
можешь написать где взять документацию и примеры?
примеры из пути:
Qt_creator\Examples\Qt-6.3.1
или ещё где?
документацию где взять?
Понятия не имею. У меня линукс и поставлено из репозиториев. Тебе надо качать из инсталлятор и тыкать там галочки на documentation и examples.
Скорее всего будет некоторая ебля - онлайн инсталлятор скорее всего тебя пошлет нахуй с рашкоайпишником, врубай впн или ищи оффлайновый, и во вторых эта хуйня потребует от тебя аккаунт разработчика, придется зарегать на фейкомыло.
У линуксобояр этот тулкит в системе родной и они его просто ставят из репозиториев и от этой хуйни избавлены.
Ну значит если ты поставил все галочки и запустил Qt Creator то и дока и примеры у тебя будут встроены в IDE и все должно работать из коробки.
Qt это набор либ. Вообще а что тебе не понятно? Ты с такой уверенностью заявил что разобрался с ядром крестов но qt для тебя сложно? Что сложного? Из доки скопипастить трудно? Или тебя интересует как кишки и метакомпиль устроены?
>Ты с такой уверенностью заявил что разобрался с ядром крестов
1. мне помогли (я просто перечислил то, чему меня учили)
2. что такое ядро крестов? что туда входит?
>Qt это набор либ
мне их как библиотеки в VS можно включать или мне нужно пользоваться Qt_creator? или и так и так сойдёт?
Ну всё что ты перечислил. Это так сказать база
Да, ты можешь их подключить прямо к проекту в VS, это просто набор либ. Но Qt это довольно автономный от крестов мир со своими свистоперделками, поэтому я рекомендую не страдать херней, а юзать нативные инструменты которые тебе предлагают авторы, качай куты через впн либо собирай сам. Открывай креатор, создавай гуи апп по шаблону и по ф1 жми доку и кури что не понятно. Можешь для разогрева к примеру крестики нолики написать простые
Лучше пользуйся креатором, если у тебя нет какой то конкретной необходимости использовать именно студию. Ну и просто как библиотеки его не подключишь, как минимум система сборки (хз чё там в студии) должна быть в курсе про moc, ту хуйню которая ресурсы компилит и прочие кутешные вызываемые утилиты.
>VS
Подозреваю она будет визжать от кютешного кода как порезанная шлюха, это же все таки надмножество крестов. Или там можно как-то извратиться с language сервером?
Не должно оно визжать, в кишках кутешных инклудов кутешные ключевые слова дефайнятся во что то нейтральное на ifndef MOC или типа того. Короче голый компилятор это не соберёт, но и подсветка синтаксиса с ума сходить не должна.
Но один хрен студия говно а креатор имба - так зачем жевать кактус? Тем более креатор умеет в qml а студия и прочие clion'ы - вряд ли.
Раз Qt компилится в нормальный C++, то этот препроцессор - тупо синтаксический сахар.
Компайл-тайм рефлексия, да.
> Раз Qt компилится в нормальный C++, то этот препроцессор - тупо синтаксический сахар.
Раз c++ компилится в нормальный асм/машинный код, то этот c++ - тупо синтаксический сахар
Нет, на ассемблере ты можешь делать то, чего принципиально на плюсах не сделаешь, только с ассемблерными вставками которые потом оптимизируются при компиляции, а они не являются частью стандарта C++. А на Qt можно писать без moc, но из-за хуёвого API много ебли.
Как в кути oauth сделать с редиректом?
@
СТРОКИ НЕЛЬЗЯ
@
STL И ШАБЛОНЫ НЕЛЬЗЯ
@
ПРЕПРОЦЕССОР НЕЛЬЗЯ
@
БУСТ НЕЛЬЗЯ
@
ВЕЛОСИПЕДЫ И БОЙЛЕРПЛЕЙТ МОЖНО
> Нет, на ассемблере ты можешь делать то, чего принципиально на плюсах не сделаешь, только с ассемблерными вставками которые потом оптимизируются при компиляции
Неа.
> а они не являются частью стандарта C++
Похуй на стандарт, в любом компиляторе они есть
> А на Qt можно писать без moc
Нет, нельзя. Как только ты унаследуешься от куобжекта и напишешь Q_OBJECT - ты идёшь нахуй
> но из-за хуёвого API много ебли.
У куте охуеннейший апи
> ЭКСЕПШЕНЫ НЕЛЬЗЯ
> @
> СТРОКИ НЕЛЬЗЯ
> @
> STL И ШАБЛОНЫ НЕЛЬЗЯ
> @
> ПРЕПРОЦЕССОР НЕЛЬЗЯ
> @
> БУСТ НЕЛЬЗЯ
> @
> ВЕЛОСИПЕДЫ И БОЙЛЕРПЛЕЙТ МОЖНО
Эмбеддед/микроконтроллеры?
https://ravesli.com/uroki-cpp/
Чел ну открой анонимайзер и через него сайт свой обосранный
Тоже кстати даже через тор открыть не могу. Хотя уроки у него действительно хорошие, понятно объясняет на базовом уровне и потом уже можно уверенно углубляться в референсы.
Судя по его группе в ВК он ебанулся на фоне СВО. Что-то заметил, что именно хохлокрестовики поголовно ебанулись.
Тебе инструкцию написать как заходить на сайты?
Это просто синтаксический сахар вокруг функциональных объектов.
Бустовские, кстати, когда маленькие, выглядели гораздо элегантнее.
Сравни
[](int i){ return i/2;}
и
arg1/2
но естественно не оптимизируются компилятором и дольше компилирпвались..
таки через анонимное окно firefox'са удалось + vpn
Ты абсолютно не прав.
0000040A04000500=Библиотека TCP/IP.
Мне нужно, чтобы при передачи в функцию такого значения, на экран выводилась строка Библиотека TCP/IP.
Не понимаю как работать с содержимым файла, и как извлечь этот идентификатор оттуда. Заранее спасибо
А если у меня идёт несколько таких строк и нужно в зависимости от числа, выводить разное строковое значение. Как тогда?
то есть ты можешь построчно считывать файл, и в каждой строке есть некоторая зависимость?
тогда....
1. построчно считываешь файл
для каждой строки:
2. проверяешь условие
.
.
.
PROFIT!
Понял. Большое спасибо
https://en.cppreference.com/w/cpp/string/basic_string/find
Ищешь подстроку 0000040A04000500=, если нашел берешь все что от ее конца до конца строки.
Спасибо <3
>Монада же это просто моноид в категории эндофункторов, это же все знают, что тут такого.
Я бы сейчас тебя придушил. Я знаю, что такое категории, функторы (и эндофункторы тогда уж) и что такое моноид. Я читал дохуелиард примеров с Maybe и do-нотацией. Но я не знаю, хоть убей, что такое монада в смысле конструкта программиста. Как это работает? Как это использовать?
Похожую фрустрацию я разве что по отношению к продолжениям испытываю.
Гори в аду, мразь.
Ахуха. Я знаю прекрасно, как работают продолжения (это просто аргумент для передачи управления), но на монады мой мозг так и не растянулся.
>Я знаю прекрасно, как работают продолжения (это просто аргумент для передачи управления)
Подкинь немного из своих запасов, а?
Я вроде как понял, что ты можешь запомнить место в программе и немедленно в него вернутся. Поэтому можно построить цикл с break. А из-за реификации (тоисть "продолжение-внутри-переменной") можно сохранённое продолжение апдейтить после каждого возвращения. Так делаются генераторы.
Но я НИХУЯ не понял, почему при возвращении не откатываются назад все переменные всей программы. Продолжения контролируют только тот стек, где были запомнены?
МФЦ - древняя устаревшая виндовая либа для создания пользовательского интерфейса (кнопки, поля и т.д.), СФМЛ - кроссплатформенная либа для 2Д-графики (линии, прямоугольники). Но в МФЦ тоже можно делать 2Д-графику.
>почему при возвращении не откатываются назад все переменные
Ты сейчас о чем, о CPS или возврате из call/cc?
При возврате из call/cc. Про CPS вообще молчу, я не понял зачем это нужно (если ты, конечно, компилятор не пишешь свой)
В самой простой реализации call/cc делает копию стека в хип и этот объект передает как аргумент. Когда продолжение вызывают, кусок из хипа копируется обратно в стек, восстанавливается указатель стека и т.п. Потом делается возврат, он выглядит как возврат из call/cc, только содержимое хипа и глобальные переменные будут другими.
Во, вот это заебись. Значит "продолжение" - это состояние программы, как обычно новичку объясняют. Эта хуйня тоньше.
То есть, например, если нужно сделать тот же генератор (и, соответственно, сохранять стек какой-то функции, а потом его апдейтить), то место сохранения "состояния программы" должно быть обязательно глобальным/в куче.
Ты не думай, что это что-то замудрёное, просто я тупой. Алсо, а где можно нормально про эти самые продолжения почитать? Чтобы всякие детали объяснялись. Только в талмуде мануале схемы?
>>24736
Кстати, вспомнил. В языках, где все функции - замыкания (например scheme), ты можешь сохранить продолжение в переменной, которая по стеку находится ниже. То есть внутри функции, которая вызвала твою функцию. Но при использовании этого продолжения (возврата в эту точку исполнения), переменная не переписывается.
Это потому что я не понимаю, как переменные в scheme работают? Или потому что продолжения не весь стек переписывают?
Видел как сохраняли в переменной из let (а let - синтаксический сахар для вызова функции), поэтому эта переменная должна была быть частью стека ниже вызова call/cc. Почему не перезаписалось?
>Видел как сохраняли в переменной из let (а let - синтаксический сахар для вызова функции), поэтому эта переменная должна была быть частью стека ниже вызова call/cc. Почему не перезаписалось?
А, нет, похоже спиздел. Извините.
>то место сохранения "состояния программы" должно быть обязательно глобальным/в куче.
Для этого не обязательно даже продолжения использовать. Вот это
(let ((c 0))
(values
(lambda () (set! c (1+ c)) c)
(lambda () (set! c (1- c)) c)
))
выделит три куска в куче: два замыкания и общая ячейка для с.
>а где можно нормально про эти самые продолжения почитать? Чтобы всякие детали объяснялись.
Dybvig, Three implementation models for Scheme
Более сложная, но очень забористая книжка про CPS и компиляцию в машинный код:
Appel, Compiling with continuations.
Если ниже на стеке есть переменная v и ты делаешь (set! v [call/cc (lambda (c) c)]), то компилятор считает v мутабельной и выделяет в куче объект из одной ячейки (box он же ref), а на стеке вместо v оставляет ссылку на этот объект. call/cc сохраняет копию стека сместе со ссылкой на ref (в котором неопределенное значение), а потом set! меняет это значение.
и ещё раз большое Спасибо
>А, нет. Похоже спиздел что спиздел. Код неверный, не делает того, что я пытался сделать.
Вот так пытался сделать, не спиздел всё-таки. Честно слямзено с английской статьи про call/cc
>>24790
>Если ниже на стеке есть переменная v и ты делаешь (set! v [call/cc (lambda (c) c)]), то компилятор считает v мутабельной и выделяет в куче объект из одной ячейки (box он же ref), а на стеке вместо v оставляет ссылку на этот объект.
Вот! Знал, что здесь что-то не так. Бывает, когда нормальные книжки по языку не читаешь, а сразу в пекло лезешь. Хотя почти все книжки, использующие схему, мутабельность не любят. Как будто их мнения спрашивают.
встретил неожиданное для себя использование слова const в чужом коде после имени метода и его аргументов, перед телом метода, что значит в данном случае const? (в хедере класса)
int Getter(void) const {return Value; }
Ты рил меня спрашиваешь, или просто тыкнул?
Метод константный. Нельзя менять значения полей класса (ЕМНИП, вообще нельзя обращатся к this). Это базовые знания крестов, любой учебник должен покрыть. Попробуй как справочник юзать, если от корки до корки читать не хочешь.
какой смысл использовать const? это обычный геттер, возвращающий значение одного из полей класса, не ссылку/указатель, а обычное значение
почему const стоит после параметров метода и телом метода? не встречал такого в учебниках (ни в одном) - это меня "смущает" сводит с ума, т.к. я не понимаю почему так
Можно обращаться к this и можно менять mutable члены.
>>25036
Компилятор может использовать это для оптимизации. Ну и если ты такое используешь, то лучше везде - для однообразия кода, даже в простых геттерах. А если все таки захочешь случайно изменить не mutable член на тебя наорет компилятор и иде.
>не встречал такого в учебниках (ни в одном) - это меня "смущает" сводит с ума, т.к. я не понимаю почему так
void method () const && noexcept {}
Как тебе такое, Илон Маск?
у меня под рукой 2 учебника и один курс, в них не встречал, я просто физически не справлюсь посмотреть вообще во всех ресурсах
спасибо
Чел это база. Получение значения члена класса не по указателю для модификации всегда делается констом. Не будь батхертом.
Но мне нужно
это из мфти какой-то чубрик, кста
https://www.youtube.com/watch?v=2PM4TgCZIQs&list=PL4_hYwCyhAvY2dY_tnTv3-TJThzcloCvM&index=1
он сам то может и знает, но объяснить в деталях почему-то стесняется гнать таких нахуй надо из преподавания, пущай работает где-нибудь
он немного заикается про кэш процессора, но про конвейер выполнения ни слова
Причем инклуды он ищет правильно
Инкремент тоже может вылезти за пределы кешлайна и опять будет загрузка в десять сто раз медленнее. Он делает это каждые 64 байта.
>В России за пределами Яндекса такое вообще востребовано?
Конечно, боевые дроны кто по твоему делает, Яндекс?
Хз, зависит от версий и используемых фич. Хотя мне кажется это в гцц больше всякой нестандартной хрени, типа свитч кейсов по диапазонам.
Есть ли смысл вкатываться или лучше выбрать ту же жабу?
Не буду, через его лекции я много узнал. Нигде больше нет продвинутого курса на плюсах на человеческом языке.
Вкатываться нужно не в язык
Выберай сферу где хотел бы работать: геймдев, бэк, системщина, эммбедед или что то ещё специфичное
Если ПРЫЖОК = обращение по случайному адресу, то да.
Учу плюсы для себя. Подучил несколько основных тем - циклы, массивы, переменные, функции и все в этом духе. А что теперь делать? Куда дальше копать?
Вообще делал как - беру интересующую меня тему, например калькулятор, дальше копаю ее, попутно узнаю что-то новое.
Тут позарился на сетевое программирование, типа винсокет, но понимаю, что вообще ничего не понимаю.
Других идей, что написать и что изучать у меня, почему то, нет.
И как быть вкатуну? Ну вот хочу я допустим ковырять что-нибудь сетевое или системное. Про сетевые протоколы что-то знаю, через сокеты данные перегонял, простенький FTP клиент писал. Дальше что делать-то?
Дальше расковыривать протоколы пытаясь из головы придумать интересную задачу для себя или что делать?
Roadmap
Итт сказали, что вычисления в компал тайм надо переносить и прога летать будет?
вот пощупал я разные win api /sfml / mfc, но совсем чуть-чуть
как мне получить доступ к области экрана в моём "приложении" чтоб туда напрямую писать массив пикселей, а не рисовать квардратики/кружочки/чёрточки используя функции?
Обычно у тебя есть какой-нибудь канвас (холст), на котором можно тупо записывать данные в массив пиксеоей. В том же SFML создаёшь текстуру и рисуешь: https://stackoverflow.com/questions/18805206/sfml-drawing-pixel-array
Некоторые пытаются рисовать пиксели через разноцветные прямоугольники 1x1, так делать неэфективно, для библиотеки слишком много лишних вычислений.
>как мне получить доступ к области экрана в моём "приложении" чтоб туда напрямую писать массив пикселей
Извращенец
Надо просто взять готовую библиотеку, в которой уже всё реализовано, да?))))00
Сеньоры выражают двумерный массив через одномерный, а то не дай бог проебаться с 0.000001% перформанса.
типа такого?
array [m] [n]
for (int i = 0; i <m x n; ++i)
{ array [ ( i %( m x n ) ) ] [ (i % m) ]; }
Есть массив байт, допустим, {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0} и мне в определенный момент времени нужно перестроиться и воспринимать его не как массив байтов, а как массив, например, интов, т.е. {0x12345678, 0x9abcdef0}
Как это можно сделать?
Кыш! Это ID
1. Указатели на функции.
Похоже, самый легковесный вариант. Но, к сожалению, отпадает, т. к. нужно иметь возможность захватывать в функцию некий контекст (пару-тройку переменных) в месте, где эта функция вызывается. Кол-во захватываемых переменных разное, поэтому просто добавить в общий тип хранимых в массиве указателей на функции пару-тройку параметров не получится.
2. Классические указатели на базовый класс с виртуальной функцией. Что-то типа такого:
struct Action {
Action() {}
virtual ~Action() {}
virtual int operator()(int a, int b) = 0;
};
struct Add : Action {
Add(int c) : c(c) {}
int operator()(int a, int b) { return a + b + c; }
int c;
};
потом где-то в коде создаём массив
std::vector<std::unique_ptr<Action>> vec;
где-то в другом месте добавляем в него указатель
int c = 123;
vec.emplace_back(new Add(c));
и где-то в третьем месте вызываем operator()
(*vec[0])(a, b);
3. Обёртка std::function.
Вроде, самый компактный способ.
using Action = std::function<int(int, int)>;
int c = 123;
std::vector<Action> vec;
vec.push_back([=](int a, int b) { return a + b + c; });
Однако, в данном случае sizeof(Action) == 32 байта (под gcc). А оверхед вызова таких обёрнутых лямбда-функций заметно побольше, чем у виртуальных функций (если я правильно померял).
Сам больше склоняюсь ко 2-му варианту. Но, может, есть ещё какой-то способ?
1. Указатели на функции.
Похоже, самый легковесный вариант. Но, к сожалению, отпадает, т. к. нужно иметь возможность захватывать в функцию некий контекст (пару-тройку переменных) в месте, где эта функция вызывается. Кол-во захватываемых переменных разное, поэтому просто добавить в общий тип хранимых в массиве указателей на функции пару-тройку параметров не получится.
2. Классические указатели на базовый класс с виртуальной функцией. Что-то типа такого:
struct Action {
Action() {}
virtual ~Action() {}
virtual int operator()(int a, int b) = 0;
};
struct Add : Action {
Add(int c) : c(c) {}
int operator()(int a, int b) { return a + b + c; }
int c;
};
потом где-то в коде создаём массив
std::vector<std::unique_ptr<Action>> vec;
где-то в другом месте добавляем в него указатель
int c = 123;
vec.emplace_back(new Add(c));
и где-то в третьем месте вызываем operator()
(*vec[0])(a, b);
3. Обёртка std::function.
Вроде, самый компактный способ.
using Action = std::function<int(int, int)>;
int c = 123;
std::vector<Action> vec;
vec.push_back([=](int a, int b) { return a + b + c; });
Однако, в данном случае sizeof(Action) == 32 байта (под gcc). А оверхед вызова таких обёрнутых лямбда-функций заметно побольше, чем у виртуальных функций (если я правильно померял).
Сам больше склоняюсь ко 2-му варианту. Но, может, есть ещё какой-то способ?
В смысле std::vector<Action>?
Меняется не часто. Но создаваться она должна динамически. Это, на самом деле, часть хэш-таблицы.
>Кол-во захватываемых переменных разное, поэтому просто добавить в общий тип хранимых в массиве указателей на функции пару-тройку параметров не получится.
Что тебе мешает? В других случаях придется тратить слово на указатель VMT + фрагментация при динамическом выделении.
Ну ты же процитировал, что мне мешает.
В одном случае это будет функция
void func(Foo foo, Bar bar);
в другом случае
void func(Foo foo, Bar bar, Baz baz);
в третьем случае
void func(Foo foo, Bar bar, Abc abc, Def def);
В один и тот же массив все эти указатели положить нельзя.
Ну и потом мне нужно захватывать значения некоторых переменных (из контекста) при добавлении функции/функтора в массив, а не при вызове функции/функтора. А держать ещё один массив специально для захваченных значений переменных - это как-то не очень.
А, у тебя тот случай, когда нельзя всё привести к void.
>А держать ещё один массив специально для захваченных значений переменных
Если не держать такой массив, придется держать кучу маленьких массивов, сделанных компилятором. Ты хочешь аналог каррирования и динамической типизации, но почему-то не готов платить за это.
Это JS тред, там точно слитый курс есть?
Это прямо ставит меня в тупик. Я понимаю что это такое и как ими управлять. Но я совсем не понимаю как их можно применять. В чём их смысл?
смысл ссылок - ссылаться на что-либо
1. на память
2. на динамическую память, чтоб не регулярно потреблять системные ресурсы, а только когда есть в этом необходимость
3. ссылаться можно на функции (точка входа в функцию - тоже какой-то байт в оперативной памяти)
«Все проблемы в программировании решаются путём создания дополнительного уровня косвенности» — Дэвид Виллер
В Си нужны для того, чтобы передавать в функции большие массивы или структуры (сравни сам, можно передать 100 мегабайт нельзя, стека не хватит, но я просто как пример привёл, а можно передать 8 байт и смысл не изменится), передавать в функцию параметр, в который ты бы хотел что-то записать, для того, чтобы указывать на функции и для создания ссылочных структур данных (деревья, списки, етц)
В Си++ первые 2 функции сместили ссылки, а для третьей появились новые варианты (которые всё равно основаны на указателях).
В общем, в настоящее время оно нужно для создания ссылочных структур данных и байтоёбства.
Потому что SDL-шизы писали для C.
https://pastebin.com/K14k1BAd
Вопрос закрыт, нужно было ещё const'ов накидать.
Вот ты по моему доступно объяснил
🐷 🧞 💘Видит
Больше не нужно писать setlocale
std::ofstream теперь записывает в файл обычную char-строку, содержащую любые символы юникода
к примеру:
EBTVOYMAT_KAK_IA_MOGY i =0;
&
int i = 0;
по факту одно и тоже
>видимо, придётся каждый раз перекладывать байты, ДОРОГО
На x86 где-то со времён Pentium есть инструкция BSWAP, которая меняет порядок байтов в 32-битном (64-битном для x86_64) регистре на противоположный.
В GCC и MSVC есть интринсики для этой инструкции.
В итоге под GCC у тебя будет:
inline uint32_t read_u32be(uint8_t ptr) {
return __builtin_bswap32(reinterpret_cast<uint32_t*>(ptr));
}
Это, понятно, нужно только для x86.
Ещё можно написать честную функцию, которая с помощью &,<< и >> изменяет порядок байтов. Clang и GCC её, наверняка, оптимизируют до MOV+BSWAP или даже MOVBE (для современных процов).
Так что это совсем не дорого.
>меняет порядок байтов в 32-битном регистре на противоположный.
а это сколько байт в одном бите?
1/8
Хуже всего венгерская нотация и свои типы.
Мало, но если придется, то будет много жопоболи. Лучше перебздеть.
Типы это же интринсики, стандарт тебе вовсе не гарантирует наличие uint8_t например.
Да без разницы, всем привычнее cmake, но лично мне больше нравится qmake
Ну есть у тебя ахуеть какая большая структура данных, например. Копировать её каждый раз - зачем? Долго, дорого. Поэтому ты може ссылаться на то место, где она есть. Хотя, как по мне, в ряде случаев это не нужно, как утверждают некоторые.
Как дела в мс? Давно из Индии уехал?
boost::filesystem::ifstream iFile("bin.mp4", std::ios_base::binary);
iFile.read((char)&buff, sizeof(buff));
cout << "buff is " << buff << endl;
Код выше ясен хуй не работает, просто попытка в лоб.
Есть ли средства прочитать 128 бит инт через ifstream.read() ?
Прочитать 64 бит инт можно через
uint64_t buff;
ifstream iFile("bin.mp4", std::ios_base::binary);
iFile.read((char)&buff, sizeof(buff));
cout << "buff is " << buff << endl;
А как быть с 128 битным интом?
Какое-то исключение при выводе бросает.
Даже не знаю, через отладчик визуалки не могу чекнуть что там в буффе у инт128.
> Что в qt юзать? Cmake или Qmake?
Если ньюфаг - qmake, если опытный - стоит переходить на cmake.
Дрвеб еще
>Но нормально ли вообще, что в ходе компиляции создается 100500 структур?
Да, если ты живешь в 2007 году. Сегодня это выглядит пикрилейтед.
Лень из кроватки вставать пеку грузить, чё будет если туда отрицательное значение прокинуть?
Семантика.
>чё будет если туда отрицательное значение прокинуть?
Очевидная ошибка компиляции из-за превышения лимита шаблонной рекурсии.
>>30229
>У тебя все равно создаться 100 функций вместо 100 структур, шило на мыло.
Ну это хотя бы читабельно. А что там существует в компайл тайме - всем глубоко похую. Ну и функции очевидно обладают более выразительным/простым синтаксисом.
Универсальный декоратор у меня сделать не получилось, поэтому для функций, возвращающих void я сделал отдельный.
> Очевидная ошибка компиляции из-за превышения лимита шаблонной рекурсии.
Обычную рекурсию оно вроде должно к циклу for соптимизировать, с шаблонной такого не будет?
>Вы когда-нибудь делали декоратор?
Да, шаблонный, ещё по заветам дидов. А ты какую-то петухонохуйню принёс.
>Ну так я изучаю петухон и смотрю можно ли сделать те же штуки на плюсах.
Можно, но обычно не нужно. У тебя здесь проебётся проверка на то, что function - это функция. Ошибка выскочит внутри твоего конструкта, хотя по идее должна быть там, где ты свой декоратор применяешь.
По хорошему, тебе нужно function как std::function объявить.
constexpr int sum (int n){
int sum = 0;
for(int i = 1; i <= n; i++)
sum += i;
return sum;
}
которое, судя по примеру в конце этой странички:
https://en.cppreference.com/w/cpp/language/constexpr
будет вычислено на этапе компиляции, но при этом будет допускать использование функции и в рантайме?
Да, это так и используется примерно, только и сам декоратор и вложенный генератор лучше сделать constexpr, в итоге будет сгенерена непосредственно целевая функция без всякой посторонней хуйни, т.е. фронт выкинет всю обвязку и объединит функцию с декоратором.
>>30445
Это будет работать не только с функциями, плюс std::function работает только в рантайме.
>Это будет работать не только с функциями, плюс std::function работает только в рантайме.
А с чем ещё? Функторы? Последний раз когда я хотел их использовать, сказали, что говнокод.
Алсо: декоратор не в рантайме? Ты больной ублюдок? Тут реально лучше лисп возьми и перестань выёбываться.
Можно написать (1 + n)/2*n, оптимизатор мамкин.
>А с чем ещё? Функторы? Последний раз когда я хотел их использовать, сказали, что говнокод.
Чел, челик, челидзе, все что trivially copyable + callable и нехуй воротить ебалом что ты не знаешь что это такое.
>сказали, что говнокод.
К слову, протип: не работай с долбоебами. Если кто-то что-то не осилил, это не значит что это плохо.
>Алсо: декоратор не в рантайме?
Естественно, нахуя он в рантайме, если вся логика и место привязки обозримы еще на фронте компилятора? На нормальном ревью тебя попросят обосновать нахуя ты еще один индирект впиздрячил в лице std::function там где этого можно было не делать.
>trivially copyable + callable и нехуй воротить ебалом что ты не знаешь что это такое
Такие и предлагал, бля. Обоснование говнистости: нихуя нипанятна, почему для полей ты делаешь get, а здесь сделал operator(). Делай тогда уж call / do методы.
>нахуя ты еще один индирект впиздрячил в лице std::function там где этого можно было не делать.
Чтобы тайпчек был. Если бы можно было проверку callable делать не внутри функции, а просто по типу, то незачем.
>Если бы можно было проверку callable делать не внутри функции, а просто по типy
Эххх.. Если бы в stl были type_traits а в с++20 приняли бы концепты. Тогда да, тогда зажили бы.......
>Такие и предлагал, бля.
Так я говорю, не работай с долбоебами. Если завтра нужно будет добавить корутины в оборот у них походу манямир треснет.
>Если бы можно было проверку callable делать не внутри функции, а просто по типу, то незачем.
А в чем собственно проблема?
Во-первых, нах тебе именно авто?
Во-вторых
template<typename T> concept Callable = requires(T a) { { .... } ->....; };
auto zalupa(Callable auto arg) { .... }
Сотона, он сделал функцию с аргументом типа auto. Но этот аргумент надо бы чекать на то, что он callable. Да, я знаю, что можно через тайп трейты проверить, если функция шаблонная. У него же constexpr auto (auto)
Поэтому я и спросил, как это сделать на его примере здесь: >>30579
Алсо, концепты не ебу. Плюсы меняются быстрее, чем я успеваю учить программисткую теорию. Зато модули, которых я очень долго ждал, так и не впилили до конца, суки.
Вот, теперь понятнее. Всё-таки ебучие концепты. Окей, мои знания устарели.
>Сотона, он сделал функцию с аргументом типа auto. Но этот аргумент надо бы чекать на то, что он callable.
static_assert(std::is_invocable_v<decltype(function), Args...>, ... )
Это если у тебя по какой-то причине не поддерживаются концепты.
Нет, это нестандартное расширение компилятора. Бустовская хрень называется Multiprecision - там вообще нет ограничений на размер числа.
Видимо достаточно для подрыва твоей жопы.
Получается, что остался только бэекенд и поэтому из плюсов пора выкатываться официально?
я не вижу смысла сейчас в РФ дрочить плюсцы.
Джава\Го\фронт прости господи. И работа есть, и оплачивается лучше, и перспектив больше
Функциональный язык не просто о чистоте функций, это ещё и когда функции у тебя не в компьютерном, а в математическом смысле, т.е. нет управляющих инструкций, и всё определение записывается в одно выражение. Фактически немного меняется семантика языка, а суть осталась прежней, пишутся те же самые алгоритмы, но вывернутые наизнанку, т.к. управляющие конструкции выразили через функции и рекурсию. Может потыкать хаскелль или схему, чтобы прочувствовать.
Крестовые шаблоны видел? Это полный по тюрингу функциональный язык. STL тоже во многом функциональщина, причем изначально, скажи спасибо Степанову.
>только нет обязательного требования к чистоте феункций
Как это нет? Если не будешь соблюдать чистоту функций кроме определённых экзотических ситуаций - над тобой будут смеяться и показывать пальцем, люди будут сторониться и считать тебя дурачком.
Чаще всего грязные функции - это быдлокод.
Аноны, есть ли жизнь на Винде с VS Code? Если не использую студию, то нужен шланг или можно всё же оставаться с MSVC? Есть ли варианты собирать чем-то кроме cmake?
Хочу укатиться из студии, потому что заебал интерфейс, я пишу ещё на расте и VS Code уже удобнее ощущается, сильно не хватает аутлайна в студии, куча лишнего говна, которым я не пользуюсь. MSBuild бесит отсутствием папок, так же хочется модулей, но интели сэнс постоянно раком встаёт. Ещё видел всякие санитайзеры и прочие зумерские мокрописьки, но в студии ахуел от того как криво они работают.
>У нас есть std::byte.
Что-то уровня stdbool.h, когда приходится подключать костыль извне, так как изкаробки не поддерживается. И если Си это можно простить, так как язык древний и содавался во времена, когда программирование было слабо развито, то плюсы - это пиздец.
>>33124
>>33122
>>33111
>ряяяя нинужна
Понятно.
Тебе не кажется, что если язык поддерживает расширение себя на нативном уровне, то это отнюдь не недостаток?
Дурачок, си и кресты обслуживают хотелки бизнеса.
Если бизнес захочет например сделать из-за инженерных или финансовых причин минимально адресуемые адреса 16 битными ( см. безумные творения Texas instruments), кресты сделают 16 битный char, стандарт это явно позволяет. А что сделает твой игрушечный язык? Ряяя я работаю ток на арме и х86?
>кресты сделают 16 битный char, стандарт это явно позволяет
Алсо, блядь, поэтому и нужен нормальных byte, а не его пародия через char, чтобы такой хуйни не возникало. И т.е. ты на полном серьезе этот аргумент привел, дуралей? Типа к тебе приходят спросить про тип, который означает один байт, другие отвечают, что можно использовать char, так как он занимает один байт, а ты выдаешь что-то уровня "ряяяя не выебывайся, жри, что дают, иначе вообще все сломаем". Ну охуенно что.
Пизда.
Так используй байты сейчас, долбаёб.
Не нравится std::byte - используй uint8_t, в чем проблема?
Каким аргументом? Бизнес тебе предъявляет требования, ты его шлёшь нахуй. Кто идёт нахуй в итоге?
Это норм, я тоже несколько дсл языков на коленке делал.
Просто не пиши на нем.
Что в твоём понятии "нормальный байт"? Чар и есть по стандарту ровно 1 байт блять, если байт это "минимально адресуется единица". Или что, 8 бит? Так такая хуйня во всяких рфцшках зовётся не байтами а октетами.
Почему у меня в панели элементов нет баттонов, скроллбаров и тд?
Делал ресет - не помогает.
Если тыкнуть "показать все", то элементы высвечиваются, но на форму добавить их не могу
Сынок, нахуй с треда срыгнул быстро в свой джавазагон.
Плюсы
Ну я и спрашиваю что доучить чтобы получать не копейки стажёрские. Буст там, qt-ху какую-нибудь или ещё что?
Ну мало ли, некоторые на полном серьёзе спрашивают, надо ли это учить, или это всё только для сеньоров, лол.
что бы ты не учил - без настоящего боевого опыта ты будешь получать только копейки
Да уже, собственно говоря. Писал же что базу книг прочитал.
Какой еблан такую хуиту придумал? Почти во всем си/с++ легаси говне, что я видел или щупал, писали циклы через шаблоны
Нахуя? Они байтики кода экономили?
Сиди блядь и пытайся теперь эти циклы разворачивать
Ни разу не видел
Как что-то плохое
А хули поделать, если сахара нет? Вот в расте лямбду можно писать вот так - " || 1+1 " , а у нас ебучая лапша. С циклами так же, хули нельзя написать " for( i : 0..size() ) "?
так сидебилы любят делать в нии, в нормальном С++ проекте человека, пищущего подобное даже не пушечный выстрел не подпустят
Плюсодебил как всегла не осилил божественные концепции Си-господ и начал извергаться калом изо всех щелей.
С тех пор ничего нового и не придумали, лол. Все идеи в CS, а в частности языкостроения прямиком из 70-80х годов. Только в расте, что-то относительно новое высрали.
Придумали не использовать макросы там, где не надо.
Обращаешься к функции до её определения?
Прототипы напиши в начале файла или сначала определяй функцию, а потом пользуйся ей.
> Обращаешься к функции до её определения?
блядь, это же в ссаных крестах только так, а вот в СИСИШАРПЕ ТО....
Пробовал с пяток книжек по win api, и во всех одна и лабуда. К примеру ни в одной книге не написано что такое дискриптор окна windows (HWND).
Лезу в гугл, там люди пишут что HWND (и другие дискрипроты) это тип данных HANDLE.
Опять лезу в гугл, с вопросом что такое HANDLE, люди пишут что HANDLE это 32-bit unsigned int, в других местах пишут что HANDLE это указатель на тип void чего, блять!? - нагуглил что это указатель на почти любой тип данных
А сейчас риторический вопрос в никуда, просто о наболевшем какого хуя люди-уёбки пишут книги в которых ничего не понятно, такое чувство что 999 книг из 1000 написаны только для того чтоб указать их в своём "портфолио" и работадатель заглянув туда охуел и подумал что перед ним ниебаццо какой специалист. Я страницы из таких книжек не могу прочитать чтоб 100 раз не полезть в поисковик и по итогу тоже нихуя не понять.
в первую очередь учусь для саморазвития, в идеале найти работу
>но чтобы доходчиво библиотека/фрейворк или ещё что - без разницы, главное хорошо разжёванный материал.
Чё
>в других местах пишут что HANDLE это указатель на тип void чего, блять!?
Что такое HWND и HANDLE написано прямо в msdn.
Если ты не знаешь, что такое указатель на void, то тебе ещё рано в winapi. Учи C++.
>Что такое HWND и HANDLE написано прямо в msdn
можно ссылку? на предмет того одинаковые или разные материалы мы используем
>Если ты не знаешь, что такое указатель на void, то тебе ещё рано в winapi.
нагуглил, теперь знаю, но опять же ни в одной из книг не было сказано что это указатель
>Учи C++
Хорошо. >>35638 >>35735
посоветуй чего-нибудь
>Анон, чего бы такого почитать, чтоб не совсем для новичков основы C++ более-менее знаю, но чтобы доходчиво friendly библиотека/фрейворк или ещё что - без разницы, главное хорошо разжёванный материал.
дай ссылку, я нашёл типы данных Windows тут:
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
это оно? в глаза ебусь - не вижу чтоб там было хоть слово о типе HANDLE, но всякие HACCEL, HBITMAP, HBRUSH, HCOLORSPACE, HCONV и прочие являются typedef HANDLE
В ссаном сишарпе нет функций. Пиши на крестах в классах, как в шарпе, и никогда у тебя этой проблемы не будет.
Спасибо
1280x720, 0:32
А почему не будет лика? Если Т нетривиальный тип, где в конструкторе есть new, то на какой-нибудь итерации цикла копирования бросится исключение и будет утечка на тех элементах, которые успели скопироваться.
SYCL типа?
Мне не платят за то, что я учу по новому языку в неделю. Который к тому же не факт что будет хоть сколько-нибудь востребованным через 5 лет.
Handle это просто ручка, за которую ты можешь достать нужный тебе объект. Обычно это целый тип данных без знака - считай просто число. А смысл числа зависит от реализации - адрес в памяти, порядковый номер в каком-то массиве данных или составной ключ (допустим 135428 == xxyyzz, xx - тип, yy - подтип, zz - номер в массиве).
Это изначально абстракция для уникальной идентификации ресурса (объекта) и не надо парить мозг как она там под капотом устроена. Есть тип абстрактного ресурса HANDLE и от него "наследуются" (через typedef) типы других ресурсов HIMAGE, HDC, Hxxx.
>HACCEL, HBITMAP, HBRUSH, HCOLORSPACE, HCONV
Почему названия, как будто ебаный паинт программируешь
Так верно - к технологиям, а не к инструментам. Я уже знаю плюсы, жс и питон, зачем мне ещё ещё что-то если я уже универсальный боец?
Потому что легаси с начала 90-х.
>будет утечка на тех элементах, которые успели скопироваться
Не будет утечки, ибо сработает деструктор этих элементов.
Чел, тут пол треда на с++11 сидят, о каких новых технологиях ты хочешь им донести?
Ну вот. Язык развивается, становится лучше от стандарта к стандарту, коммитет учится на своих ошибках.
А половина индустрии всё ещё на с++11 сидит, молодцы в комитете, лет через 15 уже на с++20 может даже перейдут
Пущай себе сидит. Полстраны тоже когда-то сидело. Можем ли мы им запретить? Если удобно - пущай сидят.
>Так верно - к технологиям, а не к инструментам. Я уже знаю плюсы, жс и питон, зачем мне ещё ещё что-то если я уже универсальный боец?
Так это именно та технология, которая решает проблемы, которые не устранили в Си и Плюсах за 30лет. Мне казалось, что для байтоебов должно быть максимально интересно.
>это именно та технология, которая решает проблемы, которые не устранили в Си и Плюсах за 30лет
such as?
Все, протестил и понял.
new T[n] вызывает дефолтные конструкторы T для всех элементов, я почему-то думал, что просто выделяется кусок памяти размеров sizeof(T)*n с мусором, наверное потому что так было бы быстрее.
delete[] вызывает деструкторы у всех элементов, поэтому в примере с видео все ок.
И наконец, если во время аллокации new T[n] у одного из T конструктор бросит исключение, то до захода в блок catch магическим образом будет вызвано столько деструкторов, сколько элементов массива успело сконструироваться. Это при условии, что исключение отловлено. Если не отловлено, утечка памяти и UB, и студия стопает выполнение. Что будет в готовом продукте - хуй его знает.
> И наконец, если во время аллокации new T[n] у одного из T конструктор бросит исключение, то до захода в блок catch магическим образом будет вызвано столько деструкторов, сколько элементов массива успело сконструироваться.
Потому что c++ это гарантирует
Зачем ты лезешь в такие дебри, если ещё не выучил азы?
Базовая и основная, которая является причиной ~90%+ уязвимостей, а именно обсеры с памятью. Да можно упомянуть такие штуки как MISRA, но оно только для написания софта под марсоходов подходит, ибо сжирает непомерно много человекочасов
Я то выучил, знал ведь, чем malloc от new отличается, но только на практических примерах приходит полное осознание.
Это что же получается: в расте умные указатели умнее или потокобезопасность безопаснее?
Ладно, это бесполезно обьяснять и что-то говорить, если ты сам не интересуешься своей областью.
Спасибо
>Почему названия, как будто ебаный паинт программируешь
Потому что винапи написан на сишке, всякие МФЦ это уже обертки.
tsoding
В последнее время, правда, в хохлошизу ударился, но сам чувак нормальный. Живет в Новосибе и стримит на ангельском.
>В последнее время, правда, в хохлошизу ударился, но сам чувак нормальный.
Сказал А говори и Б - он за чьих? Бтв что это за мода каждому первому прогеру писать свой ЯП?
>Сказал А говори и Б - он за чьих
А мне откуда знать? Это стиимы по кодингу, а не политические дебаты, но ссылочка на донаты Украине в комментах висит.
>Бтв что это за мода каждому первому прогеру писать свой ЯП
Поиграться? Попробовать свое говно слепить?
>Бтв что это за мода каждому первому прогеру писать свой ЯП?
Потому что хороший программист в том числе немного лингвист. Может не каждый пишет язык общего назначения, но дсл под разные нужды точно.
У меня один вопрос: хули так много?
Я чёт немного в ахуе. А в двадцатом уже на монадические операторы замахиваются. Чё за нахуй?
И это везде на рабочих местах требуют? Где дух старой школы? Типа, как гуглопидоры, которые даже эксепшенов боятся.
>которые даже эксепшенов боятся
Эксепшны это не просто синтаксический сахар, а сложная хуйня с RTTI, блекджеком, шлюхами и цирком с конями, от того их все и боятся.
Да знаю я, что они дорогие. Для этого вроде как noexcept и throw и впиливали же.
Дело в другом: что, все так и ломанулись юзать ranges, концепты, корутины и вот это всё? Это же пизда.
> А в двадцатом уже на монадические операторы замахиваются.
Да ты монады и раньше мог крутить.
Да, это же просто паттерн такой. Вопрос нахуя тащить это в стандартную либу?
Соврал, кстати, в 23 хотят сделать.
В крестаче постоянно всплывают два типа людей:
1) нахуя это тащить в стл, она и так пухлая
2) чё кресты такие отсталые, там нет {функциональная или ещё какая хрень нейм}
Похоже комитет в такой же ситуации.
И этим пидорам из второй категории всегда будет мало. И этих пидоров ещё и разные типы существуют. И все тянут одеяло на себя.
Тьфу, блядь.
Так, где-то к С++30 можно будет ливать нахуй из крестов.
https://bitwizeshift.github.io/posts/2021/02/24/creating-a-fast-and-efficient-delegate-type-part-1/
Короткий ответ - да
Длинный ответ - сейчас для написания игр используют движки, есть unreal engine, в нем можешь на плюсах и блюпринтах писать, а затем свою игру хоть на пеке, хоть на консоли, хоть на мобилке запускать
Можно попробовать написать игру без движка или написать его самому, все это тоже сделать возможно на плюсах, но сложнее в миллионы раз
Я просто вбил в гугле гарантии безопасности, чтоб подробнее изучить
https://www.youtube.com/watch?v=6l7Bp4eSoyw
Не надо лечить, пиши на любом языке максимально эффективный и производительный код.
Но я пишу не эффективно, похуй на эффективность кода. Хочу хуяк-хуяк, но меня аж трясёт.
Шланг для линтеров, потому что структура новая и модульная, гцц для итоговой компиляции, потому что в итоге код получается более производительный.
У самурая нет задачи, только вечный путь исправления сегфолтов.
>Как лечить
>не занимаюсь кодингом
Ну так займись, хуле. Берёшь таску, оцениваешь её и аппрувишь 0.75 от своей оценки. Хуячишь абы как, чтобы успеть. Сначала будет сопротивление, потом торг и принятие. Короче иди веслать на галеру - там твой недуг быстро вылечат.
Я сказал идею для пета, а не проекта на полжизни.
Придумай относительно несложный язык уровня си и напиши для него интерпретатор. Или компилятор.
Ну, когда результат выражения будет твой инт8...
Когда функция возвращает этот тип
Когда переменная справа имеет этот тип
>>37402
Микро игровой движок
Рейтресер
Файловый менеджер, с какими нибудь приколами
Простой веб сервер какой нибудь, чтобы бд туда прикрутить и ещё пару свистоперделок
Какой нибудь чит для игры сингплеерной, чтобы себе деньги или ещё какие нибудь ресы начитерить
Зареверсь что то
Ну ещё есть огромное колличество всяких приколов на Ардуино
Посоветуйте литературы по которой сами учили.
В том что для того чтоб иметь структуры на стеке и быть уверенным что не случится boxing, нужно выкинуть 2/3 всего функционала. И индусы горда назвали этот огрызок ref struct. А обычная структура хоть и является value-типом, но может быть по желанию компилятора отправлена на кучу. При этом классы - это ref-тип и всегда на куче. В итоге вместо RAII на стеке имеем тонны говна на куче, которое чистит вилкой GC, и потребление памяти как у джавы. А из альтернатив только ущербный ref struct, от списка ограничений которого я ахуел.
>boxing
Я сейчас почитал и охуел (снова). А как вообще язык, в котором такое есть (без ведома программиста, заметьте), может называться быстрым? Я всё понимаю, UB, грязные мерзкие поинтеры и прочая и прочая. Но вот это? Это же ебучая пакостная хуйня.
Можно ссыль на то, где обосновывается что boxing - это серебряная пуля, и прогер не должен над этим иметь контроля? (По крайней мере для языков, которые обычно компилируют в бинари)
мимо
Нету литературы нормальной по winapi, если кто-то и учит, то только по msdn.
А нахуя оно тебе вообще?
> А как вообще язык, в котором такое есть (без ведома программиста, заметьте), может называться быстрым
Никто не считает до диез быстрым.
Я имею в виду хуеву тучу языков. Не обязательно один определённый. Вот раст считают быстрым?
ПедеRust - этим всё сказано
С++, как и раст, нахуй не нужны за пределами прям очень очень очень узкой ниши в разработке.
Только вот в этой нише уже 50 лет как все пишется на си и крестах.
это платиновый вопрос видимо. Но что после базовых книжек выбрать, куда дрочить дальше, в какую сторону?
Из моих данных исходных: работа сервис-инженера\1сника\сис-админа- все клиенты на винде.Хотелось бы пока вкатываюсь и обучаюсь какие-то мелкие штучки дрючки под работу делать.
Под такой расклад что в перспективе с c++ лучше учить?
А не старовата? Там windows 2000 рассматривается
Тебе не надо учить что-либо без задач.
Тебе нужна задача.
Сделать беспонтовый чат\супер марио\гуевое приложение\расчет какого-нибудь матана - писать код и учить то, в чем есть нужда. Просто учить что либо бессмысленно.
А HTML и MySQL где?
Поставь codeblocks
Конечно можно, clangd + cmake
на плюсах даже нормального лсп нету, как ты собрался лёгкую Иде делать тут? Новая кста студия вроде быстрой стала, по крайней мере у меня
> Новая кста студия вроде быстрой стала, по крайней мере у меня
это скорее всего у баринов с 666 гб оперативки и NVME, почему в этом говне такой уёбский интерфейс? я даже не вижу как папку создать
Ну чел, щас оператива и ссд копейки стоят
Ты же ни одного не написала, да?
Спасибо
я тоже пытаюсь в winapi, только начал, что-то конкретное порекомендовать не могу, только то, что нашёл сам, пока на стадии выбора
имею следующий список литературы:
Литвиненко - технология программирования на C++ Win32 API
Саймон - справочник системного программиста
Петцольд
Побегайло - системное программирование в windows
Рихтер - создание эффективных win-32 приложений
Назар и Рихтер
Русинович - аж 9 книг (часть из них разные переиздания)
Щупак - разработка приложений для Windows
Павловская и Щупак
Гальченко - системное программирование в среде win32
Харт - системное программирование в среде windows
Марапулец - системное программирование в win api
Шрайбер - не нашёл книжку где скачать (справочник по базовым функциям)
я только начал и попробовать успел только Литвиненко, какую-то ещё книжку из списка, ну и разумеется msdn
пока что сплошное разочарование, примеры не работают в VS-22 даже с msdn, ни в одном из источников не объясняются многие вещи, в ближайшие дни буду браться за Побегайло
отпиши в треде как у тебя дела, может что сам ещё найдёшь хорошего, хорошо?
Спасибо за список. Отпишусь, если не дропну винапи)
Эх, ну правильно в треде отписали, что лучше иметь какую-то задачу. Так интереснее, легче найти по ключевым словам современные решения + не забудешь что узнал.
Зачем тебе вообще винапи? Туда стоит лезть в очень редких случаях, обычно можно обойтись чем то более высокоуровневым.
Смотря что ты хочешь получить. Если сложное стандартно выглядящее десктопное приложение, то скорее виджеты, в куэмле компоненты есть и под десктопную тему могут закосить, но 100% сложного виджетного функционала не покроют, и вскроется это на каком нибудь TableView или TreeView.
Во всех остальных случаях, особенно если запускаться это будет не (или не только) на десктопе - ессно qml, он охуенен, хотя есть у меня у нему некоторая претензия.
И можно совмещать же. У меня например в одном проекте виджет рисует карту, а интерфейс поверх нее на кюмл.
Ну что значит "тяжёлого гуя"? Если что то с миллионом таблиц и тривьюх то да, их куэмэльные компоненты появились совсем недавно и очень примитивны и ограниченны, хера с два сейчас там сделаешь колонки, сортировку по ним, редактирование полей и тому подобное, сделать скорее всего можно но сильно придется поебаться, а ради чего?
В остальном куэмэль удобнее виджетов раз в 10 и позволяет писать сложную логику используя кода на порядок меньше.
>хера с два сейчас там сделаешь колонки, сортировку по ним, редактирование полей и тому подобное,
Колонки просто делаются по полям, а не номерам, остальное все делается в модели на крестах. Ничего сложного. Ну нет редактирования искаропки, да, но ты всё равно сам интерфейс пилишь.
Ролям, блядь, не полям.
Я имел в виду заголовки колонок. Чтоб можно было кликнуть по нему и табличка сортировалась, по алфавиту или обратно... Всего этого там нет, и если впилить то кучей костылей, а какой нибудь QTableView будет уметь искаропки.
Можно послать сигнал в модель на сортировку так то.
Интересно, как qtableview отсортирует цвет или картинки.
Ты бы и собаку уебал.
&str
Чем подстрока длины n от ориг. строки дополненная рандомными символами если подстрока > ориг. строки не вариант?
Тем что "дополнена рандомными символами". Шиз, хеши должны быть повторяемы, ничего рандомного там быть не должно.
И миллион других примеров где из говна, палок и перекладывания битов получаются ебейшие проги. А то я сколько всего не перечитал/пересмотрел после таких статей и проектов кажется что ничего сложнее template <typename T> не знаю.
Там бесполезно читать и смотреть, надо задрачивать одни и те же алгоритмы.
А где там ебля, собственно?
Да хуйня в принципе. Лаба для студента.
По теме можешь почитать нетленку Graphic Gems или поищи аналоги посвежее.
>Самая лучшая
Лучших нет, зависит от размеров строк/чарсета, а дальше считать время и коллизии, в идеале их не должно быть.
>>12422
Блять, я понял. Используйте вообще везде где только можно wstirng и wchar_r. Char и стринг эта такая по сути легаси хуйня для однобайтовых кодировок, в которой накостылили поддержку мнимую поддержку UTF-8(только если в консоли это установлено будет), что пиздец. Вайд строки решают все проблемы.
Не решают, надо писать свои реализации строк.
> Блять, я понял. Используйте вообще везде где только можно wstirng и wchar_r
Говнище которое в линупсе 4 байта а в шинде 2, ахаха?
Как раз utf-16 это говно без задач, никакой гарантии что символ будет закодирован парой байт он не даёт и ничем не лучше utf-8 (но жрет больше места, плюс UTF-8 обратно совместим с ASCII).
Так что или utf-8, или utf-32 в редких случаях.
char8_t петушок закукарекал, спокуха, пердикс.
Обосрался в каждом предложении, что еще можно ожидать от крестотреда.
Можешь попробовать поставить сертификат поставить на файл. Как нибудь напишу инструкцию.
Шиндопроблемы
При запуске только что скомпилированного .exe из cmd файла выдаёт ошибку пик 1. Но при этом просто запустив файл даблкликом всё работает нормально.
В чём проблема? Код ошибки не точный но намекает на какую-то проблема с библиотеками.
Вот видео для наглядности и makefile на всякие случай
Я не понял, а какой тред живой? Почему прошлый на 500 посте бросили?
Попробуй в батнике перед запуском экзешника зайти в папку bin, и запускай без префикса .\bin\
> Я не понял, а какой тред живой? Почему прошлый на 500 посте бросили?
Этот, потому что тред перекатывал залётный мимокрокодил, спешивший стать опом, чтобы запостить смешную картинку.
Не помню, но вроде в окнах библиотеки в текущей директории библиотеки ищет, а она у тебя выше на уровень, чем бинарник.
cd bin && ./output.exe
Аааа, я понял. Я положил 32 dll, и когда заменил на 64 то заработало. Только почему он компилировался - не понятно.
Можно. Только ты проебешь то, что дает тебе universal reference, а именно корректную категорию выражения.
> Подкиньте мне идеи для пета
Напиши тулзу командлайновую которая будет искать пиры у торрента по DHT. Или клон скайпа - домелкомягкого, p2pшного
> тулзу командлайновую которая будет искать пиры у торрента по DHT
Мало одного DHT, дохуя торрентов работают через ебучие трекеры.
Хотя бы DHT, с трекерами все примерно ясно, а вот подебажить чего там эти пидорасы возвращают что в одних клиентах находится дохуя пиров а в других нихуя - было ь неплохо.
template<typename T>
T &&id(T &&x)
{
----return static_cast<T &&>(x);
}
По определению, std::forward<T>(x) == static_cast<T &&>(x).
Вот и попробуй изнутри forward-а, догадайся, что такое T && без указания того, что такое T.
Хуй получится.
О, а вот это уже выглядит как клондайк. Спасибо.
Всё равно не понятно. Вот есть T x;
И T&&, и T можно получить из decltype(x). T получается из T&& отбрасыванием &&. Зачем заставлять программиста писать <T>, если эту информацию можно получить из x?
А если нельзя, то можешь привести контрпример с вызывающей и вызываемой функцией?
Почему правильная категория проебётся? Ведь при выборе специализации шаблона компилятор обязан выбрать наиболее подходящую, а значит при наличии & и && выберёт то, что надо, разне нет?
// R и Args - типы специализации шаблона класса, в котором этот метод определён
template <
auto Fn,
typename T,
typename = std::enable_if_t<
std::is_invocable_r_v<R, decltype(Fn), T*, Args...> &&
std::is_standard_layout_v<T> &&
std::is_trivially_destructible_v<T> &&
(sizeof(T) <= Foo<R(Args...)>::kValueSizeMax)>>
void Insert(uint32_t key, const T& value) {
...
}
С самим методом всё в порядке - он компилируется только с подходящими типами. Проблема в том, что сообщение об ошибке в случае слишком большого типа явно не говорит о том, что проблема в sizeof(T).
Пробовал сунуть внутрь функции
static_assert(sizeof(T> <= kValueSizeMax, "Type is too big.");
Но, почему-то, MSVC на этот static_assert пох.
Как-то можно в данном случае на этапе компиляции сообщить о том, что проблема в размере типа?
там говноалгоритмы и азы спрашивают. С++1488 никто не спрашивает
любой запускаемый файл находится в ОЗУ, как не крути.
Если у тебя какие-то шизозадачи, типа ускорения запуска софтины на 0.01мс - либо рамдиск в линуксе, а в винде префетчер за тебя все сделает.
Ну а если ты совсем шиз - можешь сначала файл ммапнуть, прочитать (он останется в кэше ФС), а потом запустить
Когда делаешь forward аргумента шаблонной функции, аргумент этот у тебя не T x, а обязательно T &&x, иначе его нельзя форварднуть -- теряешь какие-то варианты. Это то, что выше назвали universal reference. Так вот, тип T сам может оказаться ссылкой -- передаёшь int const &, T = int const &, T && = int const & && = int const &. Но это ещё цветочки. Передай int &&, тогда T = int и казалось бы, всё зашибись. А вот хуй, любое упоминание переменной x в твоей функции будет себя вести так, будто х это int &, и его надо дополнительно прикастовать к T &&, чтоб он передался дальше как int &&. Ну а дальше как я и сказал, хуй ты без T кастанёшь нормально к T &&, если T может оказаться ссылкой.
Короче, держи, поиграйся. https://gcc.godbolt.org/z/sd7rqh3d6
Вангую он это и имеет ввиду, и хочет выбрать что именно писать, чтобы на работу взяли со знанием условной libraryName
Перекати.
Что из себя представляют объекты std::ifstream и std::оfstream? Хранят ли они файл целиком в оперативной памяти? Буфер, поток ввода-вывода что это в физическом смысле, а не в абстрактом, где конкретно они находятся? Что конкретно делает flush(), а что делает .close()? Как мне освобождать ту часть файла, которая мне в больше программе не нужна?
Например я средствами С++ попытался скопировать несколько фильмов по 500 мегабайт в разных потоках, но времени это заняло порядочно, из-за того, что памяти не хватало. Посмотрите на код, я ведь делаю хуйню, копируя файл по кусочкам? Просто когда я тестировал время кода, у меня так получилось вроде бы быстрее, но потом я понял, что есть какое-то кеширование и не все так однозначно. Как мне сделать, чтобы при каждом копировании кусочка, уже скопированная часть как-то освобождалась бы из памяти. Вы не представляете, я гуглил, никто нихуя не знает, на английском даже какая-то абстрактная хуита, вместо конкретики.
И вообще, против динамического полиморфизма. Чому нет?
Пчел, начни с базы. У тебя на каждой итерации выделяется и удаляется в куче блок памяти. Вынеси make_shared за пределы цикла. Из неочевидного - ты взял размер CHUNK с потолка. Оптимального значения тебе никто не скажет - зависит от файловой системы и кэшей процессора и hdd (но в пределах размера L2 кэша и что-то кратное 4кб - 16 или 32).
Всё остальное - тупо реализация библиотеки std и под капотом может быть всё что угодно. Хочешь скорости и понимания происходящего - пиши в стиле C.
Решил стать БЕЗНОГNМ?
template<class T>
class ZalupaBase
{
static_assert(!std::is_arithmetic_v<T>);// тип T должно быть классом/структурой!
ZalupaBase() = default;
void FooCall()
{
(static_cast<const T*>(this))->DerivedCall();
//вместо вызова виртуальной функции и генерации таблицы таких функций, просто вызываем функцию.
}
};
class ZalupaDerived : public ZalupaBase<ZalupaDerived>
{
ZalupaBase() = default;
void DerivedCall()
{
std::printf("%s, "Абу пидор");
}
};
int main ( )
{
ZalupaDerived zalupa{};
zalupa->FooCall();
}
template<class T>
class ZalupaBase
{
static_assert(!std::is_arithmetic_v<T>);// тип T должно быть классом/структурой!
ZalupaBase() = default;
void FooCall()
{
(static_cast<const T*>(this))->DerivedCall();
//вместо вызова виртуальной функции и генерации таблицы таких функций, просто вызываем функцию.
}
};
class ZalupaDerived : public ZalupaBase<ZalupaDerived>
{
ZalupaBase() = default;
void DerivedCall()
{
std::printf("%s, "Абу пидор");
}
};
int main ( )
{
ZalupaDerived zalupa{};
zalupa->FooCall();
}
>c
>i
>l
Реквестирую критику.
Зачем электрон в драйвере для сетевого адаптера? А гуй нормальные люди на крестах не пишут.
На шарпе или веб. Гуй на плюсах нужен в 1% случаев, если у тебя реально сложный проект с кучей вычислений типа САПР или фотошопа, причём по какой-то причине нельзя вычисления вынести в отдельные нативные DLL-ки.
> На шарпе
Говно с кучей зависимостей, запускается долго, жрёт ОЗУ, надо верстать ебучий XML.
> веб
> вычисления вынести в отдельные нативные DLL-ки
JS с крестами на WASM вообще не вяжется, все существующие реализации ffi медленнее питона, разве что электрон ещё терпимый. Да и сам веб та ещё тормозная параша с кучей дерьма "для безопасности". PWA было неплохой идеей, но как обычно навтыкали ограничений до состояния неюзабельности.
На чем блять угодно, только не на С++
>создали 1488 различных вариации строк имеющих никаких задач
Ебало с -Wchar-warning-error-zapula-lupa скомпилировали?
> -Wchar-warning-error-zapula-lupa
Этой хуйни нет в стандарте, так что надо придумывать костыли на уровне языка.
>TYPELIST_1488
Забудь нахуй про эту анальную имитацию вариабельности из с++98. Ну только если для учебных целей но все равно нахуй
Ну вот кстати да, по идее с параметр-паками из ++11 это можно как-то и без повторяющихся макросов сделать.
Пусть у меня есть блок try{}catch(), в котором вызывается множество функций, которые в свою очередь вызывают ещё функции и т.д. try охватывает только исключения брошенные на первом уровне? То есть, в функциях, вызванных непосредственно в блоке try? Чтобы ловить более "глубокие" исключения мне нужно в функциях первого уровня также делать блок try{}catch, чтобы передать их на нулевой уровень? и также во всех уровнях?
читать не умеешь?
нет
Пусть у тебя есть N функций func_i
Исключения ты ловишь только в функции func_1.
func_1 вызывает func_2, которая вызывает func_3, которая вызывает func_4 и так далее вплоть до func_N, которая бросает исключение.
И func_1 его поймает.
Ещё ты можешь его поймать, обработать и перебросить ещё выше
std::map
std::optional?
Но немного тупо, что сначала идут обязательные параметры как просто строки-аргументы, а потом одна большая со опциональными. Я просто думаю, не будет ли это выглядеть тупо, что пользователю потому придется ручками пробелы в строки вставлять
Вначале неприятно и мало с этого имеешь, потом привыкаешь и постепенно продвигаешься, конкуренция нулевая почти.
Хочется как то дергать утилиту как функцию почти.
Ну ёпт, ставишь в сmake SHARED, компилишь, инклудишь скомиленное и радуешься життю
какая же все таки это пиздатая среда разработки
Нет ничего лучше вижуалстудии, я бы её и на работе юзал, но она не поддерживает жабу.
Какими ебилдами, студия для винды только. Но мне как счастливому пользователю винды похуй.
Все, отбой. Нашел способ обойти эту дрочь
> существует ли что то лучше вижуал студио?
> какая же все таки это пиздатая среда разработки
Очевидный креатор.
Только вижуал студия с решарпером
тебе время на хуйню проебывать или на С++ писать?
Если второе - то ставишь операционную систему и на нее вижуал студию
За 20 минут накатил арч и пишу на С++ без проблем. А у тебя как дела? Условный буст без мозгоебли установить сможешь или в каждый проект локально будешь пихать?
Петушку неприятно.
Очередной вкатыш с очередными тупыми вопросами.
Решил вкатиться в плюсы, не работы ради, а хобби для. Можешь посоветовать годные книги по алгоритмам, паттернам, основам ОС и т.д., которые ты сам читал и тебе зашли. Ибо что толку от этого синтаксиса, если я его толком применить не смогу? Бесконечные хэлловорлды писать? Или все книги, упомянутые в соседних тредах достойны чтения и просто поочереди беру и читаю?
>хобби
>не могу придумать чем заняться
нормальное такое хобби, увлекательное с первого дня
>алгоритмы, паттерны, ос
это вообще не про язык программирования
>нормальное такое хобби, увлекательное с первого дня
Тебе не всё ли равно как проёбывает своё время какой-то рандом?
>это вообще не про язык программирования
Ты хочешь сказать, что прочитай я условного Страуструпа, то всё, могу писать конкурента unreal engine, к примеру?
Чел.. я начал учить кресты лет двадцать назад и до сих пор их не до конца знаю. Каждый год ты прочитаешь новую книгу и узнаешь как на крестах делать монады, умные итераторы, ещё какую-нибудь ебанаю хуйню, от какой ты охреневаешь и впадаешь в катарсис. Это пиздец.
Плохо я вопрос сформулировал.
Интересуют не конкретные средства языка, а ход мысли программиста в процессе проектирования.
>The contents of a widget-based window and a window showing a Qt Quick scene are rendered in a quite different way: the latter relies on 3D graphics APIs (*), such as OpenGL, Vulkan, Metal, or Direct 3D, whereas a widget-based user interface is rendered using QPainter and then blitted to the native window by windowing system specific means, for example, either BitBlt or UpdateLayeredWindowIndirect in the case of Windows.
Будто тяжесть зависит только от способа рендеринга.
Что такое монады? И зачем нужны?
Зачем? Когда ты фигачишь #include препроцессор тупо берет и втупую копипастит на его место содержимое файлика.
Смотрю ролики. Читаю книги.
И знаете, вроде бы что-то откладывается в голове. Классы, объекты, методы, поля, функции, указатели.
Но я вообще не представляю что практичного можно сделать со всем этим, кроме говно-хуйни какой-нибудь в коснольке, ну или говно-подсчета какой нибудь математической формулы.
Это нормально? Сколько мне нужно времени, прежде чем я смогу в нормальный программный продукт?
Я ещё книги читаю, но с них у меня прям човсем печально копятся знания. Поэтому пока делаю упор именно на лекции разного рода.
Имеет может быть смысл смотреть разбор каких-нибудь программ? Или написание их с нуля?
Я пробовал, но там обычно всё происходит в духе:
- такч подключаем библиотеку, так используем оператор "йоба-нейм"
Ты сидишь, слушаешь, но эти названия тебе ничего совсем не говорят.
В общем буду рад ответу конструктивному.
> Сколько мне нужно времени, прежде чем я смогу в нормальный программный продукт?
Пару лет минимум. Или ты думаешь самый хитрожопый и за два месяца станешь хотя бы джуном?
Ну, я честно сомневаюсь, что много людей действительно готовы тратить много времени на обучение.
Большинство либо в вузах спят, либо по пару часиков в день трудятся.
А у меня ирл есть пример, как человек за лето выучил змеюку, устроился сразу на ахуенную зп (в районе 80) и сейчас, как раз через два года у него уже за 200 зп.
У человека никакой базы не было, только инженерное образование, но он был ускрден.
> Большинство либо в вузах спят, либо по пару часиков в день трудятся.
Так такие потом и идут в Мак Вкус очка работать после вуза. Ты определись, тебе знания нужны или видимость получения этих знаний? Если первое, то я тебе уже написал сколько времени надо.
>>43550
Опять же, тебе знания нужны или устроиться в самую донную контору чтоб говнокодить за еду? "В нормальный программный продукт" ты точно не сможешь, если по такому пути пойдешь.
Мне нужно стать профессиональным программистом.
А чтобы им стать - нужно устроиться работать кодером. А чтобы устроиться работать кодером - нужно уметь выполнять, к примеру, прикладные задачи.
Об этом я и спрашивал.
А по поводу "нормального пп", то тут можно дискуссию разводить часами. Кто-то вообще скажет, что половина программ на рынке это говно и по большому счёту нормальный программный продукт делают только мудрецы сеньоры и то один раз за свою жизнь.
> чтобы им стать - нужно устроиться работать кодером
Только в твоих фантазиях только. Без нормальных знаний сможешь только на завод устроиться и будешь через 20 лет заводчанином с пивным пузом, неспособным накодить что-либо за пределами своего заводского опыта.
Я тебе только что выше написал, что у меня ирл пример, как человек за лето набрал знаний на джуна-кодера.
А ты продолжаешь гнуть линию свою.
За что спасибо, дядь? Ты на вопрос мне ответишь? Что есть прикладные задачи в плюсах? Вот я стл знаю, с бинарниками работал, шаблоны, мультипоток все дела. Это прикладные задачи?
Прикладные задачи это просто пример.
Изначально вопрос про "нормальный программный продукт" - а это то, за что платят.
Ответил?
Степан Трофимыч, вы?
Я уже получил свой диплом вроде.
Ну ладно, вот тебе определение прикладной задачи:
Прикладная задача - это задача, поставленная вне математики и решаемая математическими средствами [4]; когда в какой-нибудь области науки (не математики), техники или практической деятельности возникает задача, она не является математической по своему содержанию.
Вроде и диплом получил, а мышление всё равно как у ребёнка.
> Это нормально? Сколько мне нужно времени, прежде чем я смогу в нормальный программный продукт?
Теперь учишь Qt и ебашишь программные продукты.
Чтобы делать программные продукты нужно блять делать программные продукты. Берешь и делаешь. Сначала получаются ненормальные, но походу дела набиваешь шишки. Сперва сам, потом тебя будут тыкать в них ебалом на кодревью.
> Мне нужно стать профессиональным программистом.
> А чтобы им стать - нужно устроиться работать кодером. А чтобы устроиться работать кодером - нужно уметь выполнять, к примеру, прикладные задачи.
Чтобы устроиться кодером - нужно блять устроиться кодером. То есть пройти собеседование, брутфорсом. А в первое время на тебе все равно сложных задач не будет, даже если ты не ждун и тем более не стажёр - все равно будет стартовое время на погружение, и скорее всего поначалу будешь сидеть на багфиксе и по большей части код читать, а не писать, а фиксом нередко будет вообще одна строчка кода.
Короче если писать научился и базу знаешь - гугли вопросы для собеседований и пиздуй проходить. На нескольких обосрешься - будешь знать чё нужно подтянуть.
> Нахуя писать гуи на плюсах?
Чтоб гуи не тормозил. Если бекендоговну тормозить позволительно, то вот с гуем если не будет отзывчивости у пользователя жопа сгорит, и он будет прав.
> Ну ты смешной, чтобы багфиксить, надо хорошо знать проект.
Именно. Вот для погружения в проект сперва на багофикс и сажают.
В целом да. То есть оно ограничено здравым смыслом а не жёстким порогом. Ведь суть то не чтобы ты баг пофиксил (раз он висит в трекере и еще никому не назначен и его дают джуну, значит он не такой важный и срочный) а как раз чтобы в поисках какого хуя там не работает и как его фиксить ты и погружался в проект.
Те которые критические и нужно из закрыть вотблятьпиздецсрочно - тебе сразу не дадут.
баги разные бывают. Первое время будут давать всякую хуйню, ограниченную одним\двумя файлами, до которой просто ни у кого руки не дошли
cppreference.com
Напиши тетрис, что бы все названия классов были осмысленные и имитировали стандартную библиотеку по поведению.
Чел, тормоза это необязательно тяжёлые вычисления и нагруженность, тормоза это отзывчивость, точнее ее отсутствие.
Самое первое что приходит в голову - во всяких жсах нет нормальных структурок и типов которые хорошо бы ложились на аппаратную архитектуру, там все будет через дохулион абстракций, во вторых сборщик мусора, виртуалочка с байткодом, какая нибудь тормозная отрисовка - вот тормоза и набежали.
Код это нечто большее чем просто текст, текст это его своего рода "физический уровень"
то, что у тебя мощности в десятки тысяч раз больше, есть современные инструменты (а не палка-копалка), и само программирование на порядки сложнее.
Если ты пишешь текст - пиши, я пишу сложные проекты. Так что неосилятор тут ты.
Расскажи - зачем? Ты сейчас мне предлагаешь выйти из майбаха и сесть за проперженную полуразвалившуюся шестерку, зато в ней можно все ПОДСЕБЯ сделать. Только это все равно будет полуразваливашаяся шестерка.
C++ - необходимость, а VIM - страдание ради страданий.
Чел, я пишу проекты на работе, а не трачу свое время на хуйню.
На еженедельном 1:1 я рассказываю что я закоммитил,а не "ебался с уже решенными проблемами всю неделю"
Надо было линуксовую пеку покупать, а то эту только выбрасывать.
ну мне за это платят в районе 450к рублей в месяц на руки. А тебе за твою гомоеблю с луниксом?
Или ты элита с пенсией по шизе?
> ну мне за это платят в районе 450к рублей в месяц на руки
Показать пачку денех с супом а не скриншот в фотошопе у тебя конечно же не выйдет, мамкин фантазер?
>Или ты элита с пенсией по шизе?
Лучше, я сдаю две квартиры в ДС, а сам живу в мухосранском миллионнике, правда на квартиры пришлось повьебывать в свое время.
Какая пачка денег в 2022 году, ты рофлишь да?
Я в /b как-то запостил 190 килобаксов налом с супом - там были вопли смешные от "ПОЛОЖИ БАТИНУ ЗАНАЧКУ НА МЕСТО" до "ОТЛИЧНАЯ ПАЧКА БАНКА ПРИКОЛОВ" купил хату в ДС на них, еблан. За 3 месяца до пынявойны
Любой скрин с ЗП могу прислать на твой выбор
>>44038
кайф, у меня только одна пока, и то строится. Но если ее сдавать (в районе 90к примерно оно будет, судя по достроенным в соседних домах) - мне на нормальную жизнь не хватит даже близко.
C++20 чё, как то убирает его сишные корни и выкидывает его сильный препроцессор, или чё?
Соболезную. Ладно ещё 11, но 03 это пиздец.
А там можно уже хотя бы стандартной библиотекой пользоваться полностью без инклудов и дефайнов, не говоря уже о сторонних?
в С++23 будет, обещали стандартизировать, да и поддержку модулей допилят. Я игрался со студийными - ну, оно правда работало на моих примерах, но import std; намертво все ложило.
wstring?
string?
u32string
u16string?
qstring и qtlinguist
другой язык программирования, С++ и юникод это анальная жопоебля имени Геннадия Ивановича Пердачевского
Аргументы командной строки ты в любом случае получаешь в char, и про кодировку нихера не знаешь. А вообще, наверное использовать для них не ASCII - скорее всего моветон, я сходу не могу вспомнить ни одной утилиты где это было бы не так.
>Какие строки использовать мне для кроссплатформенности(GNU/Linux, Windows там) и поддержки языков во всем мире(японский и т.д.)?
Ищи сторонние либы, но вообще работа со строками в С++ это не работа, а струя поноса в лицо.
Пиши свои строки.
Да, вы правы, затупил. То есть, чтобы передать указатель, нужно написать что то типо такого?
Спасибо
Ну вообще то нет, ты имена библиотек и подгружаемые символы и в рантайме указывать.
Можешь
гуглить пытался, но там как то спороно и про старые версии, да и нужно мнение увожаемых экспертов
Похуй+похуй. Но в гсс отрубай всякие расширения
Ну типо если у тебя функция возвращает строку, то никогда не надо писать return std::move(s). Так только хуже будет. Компилятор может иногда вообще не мувать, не копировать, а сразу на месте создать нужный объект.
std::move() это статический каст к rvalue, а возвращаемое значение из функции это почти всегда rvalue
Вот поэтому оно и не имеет смысла.
Извини, мне лень лекции читать. Без тролинга и пренебрежения, мне просто лень. Сам погугли, если интересно. Это к моему вопросу уже не относится
> Не только. Я же написал причину выше
> Приведи пример кода
> Извини, мне лень лекции читать. <...> Это к моему вопросу уже не относится
Ты шиз что-ли?
Кто знает, тот поймет о чем я. Новых пояснений не нужно
У тебя в одном месте возвращается значение из функции, а в другом месте передается параметр в коллбек
Ты ведь понимаешь, что это разные вещи?
А извини, я подумал, что нужно пояснение к возврату. Прошу прощения. Мой пример простой. Я вызываю функцию f, которая когда нибудь потом, как появятся данные, считает оттуда строку, да кинет мне в переданный коллбек ее. Внутри функции кажется логичным написать callbackfunc(std::move(s)), но вдруг там тоже есть какие нибудь такие оптимизации, и в случае, если чтение не удалось я могу писать без мува, просто в колбеке объявление временного объекта и он не будет копироваться/муваться, а сразу там сделается
Колбек надо писать с мувом. А вообще блять все пиши с мувом, где он не нужен тебе просто компилятор ворнинг кинет.
спс
Если ты прям щас не пишешь какой-то адовый бэкенд супернагруженный для яндекса или озона - даже не думай о такой хуйне как "хитрые оптимизации", и пиши корректный код, в котором ты полностью уверен
Зачем заставлять? Если в сроки укладываешься - ну и залипай себе. А если не укладываешься - то необходимость не огрести пиздюлин заставит.
> А как называется программирование, когда программа в рантайме меняет свой исходник или бинарник?
А как она может в рантайме чего то менять если там ридонли?
Вопрос некорректный, может или не может, это другой вопрос, технические трудности. Ну например, делает копию, потом пр перезапуске старую версию в архив, сравнивает результаты работы в новой версии, делает на основании этого какие-то выводы.
ну вот ко мне зашли недавно сказали ускоряться, ну мне конкретных сроков не называли, сказали к началу сентября. Ну мне просто надо научиться как то не отвлекаться, от думанья. Если честно так заебало программировать, хоть я всего пол года программистом работаю, и особо много не накодил, но чето уже так настоебенило вот это все.
лол
>wstirng
>2 байта на символ
>UTF-8
Хуй с ними с символами, для которых хватает одного байта, но как в этой хуйне будут храниться трёхбайтовые символы?
> Char и стринг эта такая по сути легаси хуйня для однобайтовых кодировок, в которой накостылили поддержку мнимую поддержку UTF-8
Шизоид, ты вообще знаешь, что такое UTF-8?
рефлексия называется
rvalue возвращает
И еще cope elision
как же там воняет
Nrvo, пидор, сам вектор и возвращается.
Два чая
QML не вариант, некогда изучать примудрости, да и придется использовать просто виджеты, а у меня чето не получилось использовать и виджеты и qml виджеты одновременно
> QML не вариант, некогда изучать примудрости, да и придется использовать просто виджеты
Ну и наворачивай говнецо
> а у меня чето не получилось использовать и виджеты и qml виджеты одновременно
Руки из жопы потому что. В твоем случае виджеты не нужны, но вообще никаких проблем миксовать qml и виджеты неь
я тоже
Так нарисуй только те что помещаются, и только цифры меняй и смещение немного. Я так как то бесконечную шкалу имитировал. На qml.
В этом то и проблема, я кое как наговнокодил, тут оно рисуется но криво, я хочу более правильно сделать, вот второй день не могу додуматься до алгоритма. Я даже не знаю как объяснить, что я хочу от алгоритма к которому стремлюсь.
Это я не знаю как тебе описать алгоритм какой я хочу, я то знаю что я хочу получить, хочу что бы квадратики перемещались и код хоть чуть чуть по уебански не выглядел.
"Квадратики" и линейка бесконечны? То есть у тебя просто полоса с текстурой квадратиков а при скроллинге цифрой отображается координата?
количество квадратиков ограниченно, при скроллинге, едут квадратики в зависимости от выбранной координаты выбирают нужное место на линейке. Дело в том что я квадратик могу рисовать только полностью. Надо как то узнать на сколько мне пикселей отступать влево за окошко, что бы там нарисовать квадратик, что бы только часть его виднелась когда он не полностью помещается
> Дело в том что я квадратик могу рисовать только полностью
Это ещё сфига? Шо, в купейнтере (ты ведь им рисуешь) нельзя отрицательных координат указывать?
можно, но как мне вычислить на какой координате в минусовой рисовать, и вообще надо ли мне рисовать квадратик за пределами виджета, может там и так все помещается, конечно, можно просто рисовать количество квадратиков = (ширина виджета/ширина квадратика и отступа между квадратиком) + 2. Один что бы слева за виджетом рисовался, другой справа). Но тогда надо будет считать на сколько сдвинуто все, патом прибавлять сдвиг, и там кароче проблемы у меня дальше возникают. Мне почему то это кажется говнокодством и мне кажется есть более изящный способ рисовать квадратики
Как вы заебали со своим qml, мне некогда изучать его, и решать проблемы с миксингом qml и обычных виджетов.
Луддит
ну хотя на что я надеялся спрашивая тут совета.
Чего ты такое вообще пишешь что обязательно нужны виджеты? У нас обычно вся времязависимая хрень выносится в отдельную систему реального времени, а интерфейс быстро клепается на обычных ос, связь по сети или шаред мемори если системы на одном компе.
Потому что там будет один виджет в приложухе который я не представляю как реализовать на QML, может и можно реализовать, но мне некогда познавать все тонкости QML, к 10 числам сентября надо уже доделать.
>к 10 числам сентября надо уже доделать.
Ну ладно. Хотя хз как получится, мне как то дали легаси на шарпе/ксамл и у меня была неделя на изучение языков. Как-то справился)
Бамп
ну я не такой крутой, ну в теории я могу, но я боюсь что где нибудь увязну, и начнется хуета и гугление бесконечное.
3840x2160, 0:33
А без абстракции про квадратики чё он должен делать? Показывать гистограмму какой то хуйни? Скролл чем идёт, мышью тягаешь по горизонтали, или колесо крутиш?
Какого сигнала? Откуда он берется? Раз столбиков фиксированное число - сигнал получается не реалтаймовый? Какие у него характеристики?
Подробнее блять описывай.
Спектр сигнала по частотам, откуда берется не знаю, характеристики частота и мощность. Частота это номер столбика мощность высота столбика. Вообще представь что ты радио настраиваешь крутилкой
3840x2160, 0:23
Добавил округление до 10 знака, и теперь работает все плавно
До 1 знака после запятой
у меня его нет, в представленных примерах я просто рандомными значениями заполняю, а даже если бы был то не скинул бы
Это блять что ж за сигнал такой секретный ебать...
И да, сигнал то реалтаймовый должен быть? Как скачущие столбики у mp3 плеера?
>но как в этой хуйне будут храниться трёхбайтовые символы?
Да ебучий китайский алфавит полностью помещается в два байта, да даже мне пришлось несколько десятков секунд мотать всю таблицу юникода, чтобы дойти до тех символов, которые в 2 байта не умещаются. А хранится символы которые больше 2 байт будут при помощи сурогатных пар в строке.
Дай угадаю, устроился в оборонкунападалку? Третью форму при устройстве подписывал?
Я чуть менее чем год назад свалил из такой на третий день РАБоты, даже записи о том что я там работал не осталось - трудовую в другой город на оформление отправить не успели.
Я чето хуею qpainter оказывается квадратики не умеет рисовать, он их то шире то уже рисует
Нужно было использовать вместо round, ceil, теперь все работает плавно
А нет, я еблан. Все работает наверное просто как в первом случае, вне зависимости от типа наследования. Дальше я какую то хуйню написал
Родилась ебанутая идея: зарегаться на сайте для фрилансеров, и предлагать свои услуги бесплатно, честно предупредив, что задача займет миллион лет. Насколько такой формат вообще может кому-то понадобиться?
ну так сам проверь и посмотри
> Я знаю, что виртуальные вызовы это дорого
Схуяли
> но я очень хочу в базе указать, что функция должна быть
Нахуя?
Если ты хочешь указать, что эта функция должна быть у потомков, то она обязательно должна быть виртуальной, потому что в этом и смысл виртуальных функций.
Напиши отдельный хедер с функциями для пользователя и напиши для него реализацию на базе имеющегося. Это будет правильно, т.к. пользовательский интерфейс должен меняться как можно реже, а внутреннюю кухню можно будет регулярно менять. Тем более, что у тебя наверняка dll и подвендой методы экспорта надо дополнительно помечать как __declspec(dllexport/dllimport).
Либо если dll под windows, то всё что не помечено как
__declspec(dllexport/dllimport) извне не видно.
блять, виртуальный вызов это оверхед в 7 ебаных тактов процессора. В СЕМЬ СУКА.
Это все еще в тысячи раз быстрее, чем пистрон и прочий мусор. пиши код, а еби голову
И чё ты на нём фрилансить собрался? Лендинг, интернет магазин или перкладчик джейсонов? Лабы для студентов?
В твоём представлении писать что-то серьёзнее лаб или лендингов возможно только в офисе?
Здесь я вопросы задаю. Это ты сгенерировал мысль про то, что на дому почему то код на плюсах не пишется, вот и защищай её.
>тезис очень прост
Тезис ничем не подкреплён
>приведи контр пример
Почему я смог устроиться в 2 компании на полную удалёнку + поддерживать контакты с полдюжиной постоянных заказчиков с почившего апворка а ты нет?
> приведи контр пример
> не приводит
спасибо за твой пост конечно, как что то по существу будет сказать пиши
Быстро же ты слился
Фриланса на С++ нету практически. А то, что есть - супер-узкоспециализированное для шарящих.
Ну и да - удаленка это не фриланс
Получается что все во время короны стали "фрилансерами"? Или ты хуй с пальцем путаешь?
В обычном понимании фриланс это небольшие проекты, которые ты выполняешь как ипшник соло.
https://godbolt.org/z/Een5PTfMn
Для сравнения, если раскоментировать 27ую и закоментировать 26ую, то всё окей.
Типа requires не используется для вывода типа?
А параметры шаблона кто будет писать за тебя? Как он должен догадаться что ты хочешь получить?
В 23ей строке ему это не помешало.
А вообще https://en.cppreference.com/w/cpp/language/class_template_argument_deduction
> В 23ей строке ему это не помешало.
Потому что они у тебя указаны в параметрах функции? Траллишь тупостью что ли? Как он во втором случае должен угадать из воздуха?
Мимо системный и сетевой админ
Раз задаёшься таким вопросом - точно стоит.
Конечно стоит, там кто-то может сидит думает где взять бабло на новую видюху, а тут ты принесёшь бабло просто так.
> Мимо системный и сетевой админ
Молодец. После курсов начинай учить кресты.
Вот, блядь, я об этом. Можно вывести тип, но делать он этого не будет. Потому что "траллишь тупостью что ли? я компилятор крестов а не cock coq."
Ты долбаёб что ли? Откуда он его выведет, если ты нигде не указал его? В первом случае есть откуда. А хули ты ждёшь во втором магию? Чтоб он рандомный подставил тебе?
Из сигнатуры функции конечно же. requires связывает сигнатуру функции и остальные параметры шаблона.
> Из сигнатуры функции конечно же.
Это всё заебись, но у тебя её сигнатура известна только в рантайме. Ты тут машину времени изобретаешь?
Хуясе. А вот здесь поподробней можно? Лямбда с деклтайпом, возвращает флоат. Чёрным по белому. Неужели плюсы это знают только в рантайме?
Щас чекнул с обычной функцией, именованой. То же самое.
> Из сигнатуры функции конечно же.
Но у тебя там структура, а не функция...
Сам не видишь что ли?
Ты сейчас про лямбду? Ты не стесняйся, если она разворачивается в функтор, а не в функцию, то так и скажи же, ну.
Я знаю, что MyShiet - структура. Интересовало, почему нельзя вывести параметры шаблона из сигнатуры и типа возвращаемого значения функции, которой я инициализирую инстанс этой структуры.
Жду ответа от >>48408 про сигнатуру в рантайме.
> почему нельзя вывести параметры шаблона из сигнатуры и типа возвращаемого значения функции
А где у тебя там сигнатура? У тебя есть только переменная с типом лямбды...
Ты же не думаешь что в указателе на функцию умещается ещё и её сигнатура?
Хуясе. Вот сейчас интересно.
Нет, я не думаю, что в указателе умещается сигнатура.
Да, я думаю, что в compile-time кресты знают полный тип указателя, в котором умещается и сигнатура.
Ну и естественно, я полагаю, что параметры шаблона подставляются в compile-time.
Вот если бы у тебя всё это было в одном шаблоне, то сработало бы. Тогда бы ты передал параметры в функцию и они вывелись в структуре.
>Вот если бы у тебя всё это было в одном шаблоне, то сработало бы. Тогда бы ты передал параметры в функцию и они вывелись в структуре.
Немного не понял. Из-за того, что MyShiet и FitnessFunction - разные шаблоны, подстановка нормально не работает?
Да блять, ну нельзя в структуре выводить. Генерейшон запихни в шаблон со структурой и будет всё заебись.
Ты ебанат или куда? В рантайме нет никаких типов. Это нетрудно понять, если попробовать поискать типы в генерируемом ассемблерном коде.
>>48381
requires никого не связывает там у тебя и не выводит. Он просто подставляет всю хуйню в requires и проверяет, получилось true или false. Понять, что он ничего не может вывести, тоже несложно -- невозможно вывести тип Cost. То, что он конвертится к какому-то другому типу, не определяет его однозначно, ну вообще никак.
У тебя получится, если твой концепт сможет всё вывести сам, зная только тип T. Сам вытащи из типа T то, какие он аргументы принимает, и что потом возвращает.
> если твой концепт сможет всё вывести сам, зная только тип T
И тогда в концепте смысла не будет. Вот сейчас я понял. Пример высосан из пальца, потому что в struct MyShiet есть только поле с функцией. На деле там есть ещё поля, типы которых зависят от параметров шаблона.
Надо ещё подумать. Сложная магия.
Это оттого, что концепты совсем не для вывода типа нужны.
Там у тебя из непростого -- вывести аргументы, которые принимает лямбда. Остальное дальше нетрудно.
Свою ос, но это так, начальный нет проектик
шучу, но вакансии сам способен глянуть и посмотреть что требуется
Ну в вакухах что угодно можно встретить. А мне нужно что-то конкретное, чтобы и интересно писать было и работу найти можно. С чего вообще все начинали?
> Анчоусы, стоит ли вкатываться в с++ по курсам Яндекс.практикума? Цена вопроса ~120.000 рублей. Если нет, то обоснуйте.
> Мимо системный и сетевой админ
Конечно стоит. Вдруг они там на таком лошье наварят бабоса, и такси дешевле станет...
А нахуяя? Тебе делать нечего больше, кроме как копировать? Вот у тебя есть один идентификатор, ты его и используй. Зачем тебе копии?
Я их очень много использовал в асинзронщине, чтобы один объект в разные коллбеки передавать и чтобы память не утекала
В итоге пришлось сделать статиком функцию. Может так даже лучше
Каждый раз когда пытаюсь написать что-то мультипоточное, упираюсь в активное ожидания. Может быть, изначальную проблему оно и решает, но заодно с этим решает ещё и проблему отопления помещения.
Посоветуйте что-ли книжки, в которых объясняется это и прочие проблемы.
Ну и в целом желательно чтоб там объяснялось мультипоточное программирование
Не подходит.
Я имел в виду, например, ожидание ввода от пользователя в графическом приложении или ожидание новых подключений в сервере.
В смысле? В чем вообще проблема с ожиданием, оно же не тратит вообще нихера, ядро просто на другой процесс переключается.
>ядро просто на другой процесс переключается
В этом и проблема. Так должно быть, но я не знаю, как это сделать, и в итоге у меня цикл while и активное ожидание.
Попробуй сделать циклическое ожидание в потоке if(flag) без sleep. Увидишь как оно 100% от одного ядра зохавает. Как быть? Например использовать conditional_variable.
>>49633
Нахера там делать while, вы совсем шизы? Для этого у операционок есть мультиплексированый ввод-вывод, хз чё там в винде но в линуксе это select/poll/epoll. Процесс тупо уходит спать указав за каким списком дескрипторов он будет следить, и операционка его разбудит когда там будут интересующие его изменения.
Соответственно, в крестах для этого надо или использовать qt - там в его QIODevice вся асинхронщина будет встроена, юзай сигналы и все, и есть классец чтоб сырой дескриптор из системного апи обернуть и уже с сигналом удобно работать.
Или юзать буст с его io_service(оно называется уже иначе, но когда я его использовал было ещё io_service) и асинхронные операции, типа async_read...
Чем тебя std::conditional_variable не устраивает? Зачем тянуть за собой буст (asio) или блядский Qt?
> Чем тебя std::conditional_variable не устраивает
Тут нахуй не нужна многопоточность, чел.
> Зачем тянуть за собой буст (asio) или блядский Qt?
Во первых можешь не тянуть и использовать родное апи операционки (в моем случае posix, хз как там у виндоблядей) если хочешь поебаться и если кроссплатформенность не нужна. Только - boost asio реально куда то там надо тянуть? Она разве не header only? Блять, да она никак не может быть не header only, там же ебучие шаблоны шаблонов шаблонов шаблонов...
Похоже тебе нужны бустовские фьючи с континуэйшонами (хз как по-русски)
https://www.boost.org/doc/libs/1_55_0/doc/html/thread/synchronization.html#thread.synchronization.futures.then
Чел писал про
>пытаюсь написать что-то мультипоточное
>ожидание новых подключений в сервере
У тебя сервер в один поток работает?
>boost asio реально куда то там надо тянуть?
Зависимость, которая непропорциональна поставленной задаче.
http://pastebin.com/h0kMZqRh
Тут всё очень просто, есть переменная с выражением (3+4), есть переменная со смещением, и есть цикл, в котором происходит счёт, пока есть что считать. На этом моменте и происходит необъяснимая хуйня.
Я в свитче проверяю знак в том месте строки, где он был найден. В итоге это не +, не -, не * и не /. Это, сука блять, "+4".
Вопрос: как символ в определённой позиции строки может быть двумя символами?
> char⚹ expos = &ex[pos];
Ты возвращаешь не один символ, а строку, поэтому там и +4.
Исключение кидает в итоге, потому что ты break'и забыл поставить.
typedef struct foo
{
...
} mytype_t;
mytype_t bar;
И вот этим
struct foo
{
...
};
foo bar;
Нужен ли в данном случае typedef?
Мне казалось typedef это что то из мира сишки, где слово struct перед именем типа писать надо обязательно.
Есть, первое не на крестах написано.
Оказывается это все из за того что на моем 4к мониторе стоит масштаб 150% процентов и вот так он криво масштабирует
Чел ты дурак или троль? Ты тут уже неделю пару квадратов нарисовать не можешь. Очевидно у тебя какой то график, почему бы тот же кастомплот не использовать или простигтсподи кутичартс? Нахер ты дрочишь в присядку?
Законом не запрещено, дрочу как хочу.
скажи мне алгоритм что бы нарисовать это? Основные действия. И что бы не рисовать за пределами виджета 1000 столбиков
Что такое нужное значение и почему оно должно быть посередине?
Просто скинь свой проект куда нибудь на гитлаб шоб собирался.
Я нечто похожее делаю, только у меня не красная стрелочка будет бегать по шкале, а шкала будет под красную стрелочку нужное значение подставлять
Нужное значение, это значение которое ты виджету скармливаешь, а он ищет элемент массива у которого индекс точно такой же, и рисует посередине столбик такой высоты в зависимости от значения которое лежит под этим индексом.
Возможно, ебланское решение, но может просто сделать длинную горизонтальную картинку со шкалой и просто сдвигать по координате х влево/вправо?
ну изначально, то я так хотел, но не хочется рисовать несколько тысяч столбиков, если только несколько из них окажутся отрисованными, но время то затратится на отрисовку всех.
Не, это самая блевотная хуйня которую только можно было создать.
Любой год на любом другом скрипто-языке который требуется забустить и заимпрувить перформанс.
С++ стандарт драфт. Ебальничек бы разбить тому дауну что писал эту хуиту лел. У нас даже в TypeScript такой хуйни нет, всё чётко описано вплоть до интерфейсов callbackов. Ну ёптвою мать.
Вектор изначально сохраняется в то место (уровнем выше), где функция его возвращает, мань.
ICU
С магистратуры по комп.с.
Оправдывайся.
У меня тоже жил, да мамка пересрала и хлопнула его.
Ну тогда надо было ебошить по полной, каждую скобочку на своей строке, ещё и комментарии к каждому действию приписать.
Впервые увидел геттеры?
Бля, не тот тред, ну да ладно.
А вообще конструктор перемещения и оператор присваивания по rvalue reference стоят как noexcept, а больше ничего вызываться имхо там не может
Его нет
>Сегодня начал читать матан
Хуёво читал, раз не дочитал до определения предела.
> например, говорят вот предел у функции при х->∞ такой-то
В нормальных книгах это как раз доказывают.
Колись, что читал? Википедию?
Cond var
Ну так Демидович же сборник задач, а не учебник. Там тебе никто доказывать не станет.
Фихтенгольц там или Виноградов будут с пруфами. Кудрявцев для имхо ноунейм какой-то.
> А что если на каком-то значении функция наебнется и вообще по-другому себя поведет?
Если читать повнимательнее, то весь беспруфный пиздеж в матане, как правило, сопровождается всякими оговорками и уточнениями.
В частности, весь беспруфный пиздеж про пределы работает с т. н. непрерывными функциями. Непрерывная функция - это по определению такая функция, которая хорошо себя ведет и не наебнется.
>>51031
>Демидович
Демидович это задачник, там и нет цели воспроизводить пруфы. Прост краткая справка для напоминания.
std::conditional_variable
Если совсем туго - открой книжку вильямса по параллельному с++ и скопипасти оттуда пример параллельной очереди.
Во-первых, есть и другие способы.
Во-вторых, я ничего не говорю о том что через что вводится. Я говорю о том, что почти к любому свойству предела будет оговорка о том, что оно верно только для непрерывных функций.
Если уж не получается реализовать задуманное через простую pod-структурку, то
1. Единооборазие - все делается через вызовы функций. Единообразие это хорошо.
2. Можно дать позырить член, но при этом не давать его трогать.
3. В общем случае могут потребоваться всякие танцы с бубном, а не просто return член.
Спустя дохуя лет предложили единственный нормальный умный указатель. И теперь я не понимаю, нахуя другие нужны?
Реально вопрос. Нахуй нужно выделять динамически память, кроме как для массивов(и то, уже есть std::vector и прочее)? Нахуя нужно динамически выделять память под указатель, а потом ее удалять? Это медленно пиздец. НАХУЯ. Поясните. Ведь можно статически выделить в стеке.
Так зачем нужны все эти unique_ptr, shared _ptr и прочая залупа?
>Ведь можно статически выделить в стеке
Стек по размеру ~1 мегабайт. Удачи выделять в нём память.
Очевидная проблем - в стеке нельзя выделять память во время выполнения.
> Это медленно пиздец.
А статика как будто быстрее, чел. Ты же понимаешь, что с кучей статики у тебя будет бесполезный жор памяти? Статику никогда не стоит использовать, у нас тут не джавапараша. Если хочешь быстро, то не вылезай со стека.
>очти к любому свойству предела будет оговорка о том, что оно верно только для непрерывных функций
Например? Ты со сходимостью или асимптотикой не путаешь?
> Нахуя нужно динамически выделять память под указатель, а потом ее удалять?
А этого и нет, ты какую-то хуйню выдумываешь, аллокатор в крестах не так работает. И со статической аллокацией ты будешь платить скоростью обращения к памяти и её размером. Выигрыш от этого сомнителен, только если в эмбеддед пригодится, как корутины.
так я не пойму, нахуй все таки нужен умный указатель? Ведь суть его в том, чтобы вручную не писать new и delete, так? Так зачем это нужно для указателя? Почему нельзя использовать обычный, ака статический указатель? Вот для массива понятно зачем new и delete, но уже есть std::vector и велосипед не нужно изобретать.
Очевидно, что объекты, созданные на стеке до блока памяти под static_ptr не могут быть удалены ранее этого блока (LIFO).
> нахуй все таки нужен умный указатель?
Для повторного использования памяти без ебли.
> Почему нельзя использовать обычный, ака статический указатель?
Потому что у тебя память конечная. Ты с тем же успехом можешь сразу себе выделить всю доступную память и без аллокаций срать в неё не снимая штанов.
А кроме этого? То что память конечная сомнительный аргумент, я видел дохуя примеров использования этой залупы в маленьких функциях и классах.
Например для обработки исключений. Если у тебя кидается exception то стек раскручивается и удаляется smart_ptr, который освобождает память автоматически.
Придумай альтернативный сценарий со статическим указателем.
> сомнительный аргумент
Тогда тебе лучше не писать на клестах, потому что ты идёшь по тем же граблям, что и многие говнокодеры, высерающие говно с текущей памятью и багами.
То ли я тупой, то ли ты. Во-первых, ссылка не открывается, хуй знает, что там за волшебный "статический смарт-поитер" изобрели. Во-вторых, ты в курсе, что при завершение функции, все локальные объекты считаются уничтоженными? А память, взятая из кучи существует, пока ты явно ее не удалишь либо до конца программы?
Если тебе кажется, что ты в кудрявнике видишь беспруфный пиздёж, остановись и осознай, что ты нихуя не понимаешь, что происходит и о чём речь.
Существование предела функции при x -> inf имеет конкретный смысл, который там однозначно указан. Твоя отрыжка про "при каком-то значении функция наебнется" показывает то, что ты ещё и не понял, что вообще такое предел и нахуя он нужен.
А когда это нахуй нужно в 2022?
Кто использует new и delete?
Давно есть std::vector и прочая залупа, которая все за тебя делает
Время жизни объекта заранее не известно.
Например есть class A { static_ptr p; };
Код:
A f1;
{
f1.p = alloc_memory_on_stack();
...
// в этом месте удаляется память f1.p так как scope закрывается
}
// в этом месте f1.p указывает на невалидный блок памяти
Такое ощущение что тут джуны питонисты сидят, которые вообще никогда не задумывались о скорости.
https://johnysswlab.com/the-price-of-dynamic-memory-allocation/
Так а в чём чай то?
Если статическую память использовать то она освободится только в конце работы софта.
Если стек, то освобождение по правилам LIFO.
Оператор размещения new будет работать с одинаковой скоростью для всех типов памяти. Только для кучи не будет ограничений по времени жизни блока, на котором всё размещается.
> Оператор размещения new будет работать с одинаковой скоростью для всех типов памяти.
Почему?
Ты не поверишь, но есть те, кто уже написал аллокатор и опубликовал его по свободной лицензии.
>Оператор размещения new будет работать с одинаковой скоростью для всех типов памяти.
Маня, в курсе как работает выделение памяти, RAM, операционная система?
статью прочитай, сеньор хуев.
мимо embbed кабанчик
Я вообще вебмакака, конечно не напишу блять.
Какие высокоуровневые прогеры дегенераты, пиздец просто
Вы либо прогаете на С++, соблюдая паттерны и делая кол как можно более оптимизированным, либо идете в питоны.
Ибо нахуй вам С++, красноглазики, если вы не умеете в эффективный код на нем? Перекатывайтесь на джавапарашу.
Доводы уровня malloc/free?
Placement new (address) (type) не запрашивает выделение памяти (у ос тем более).
Видимо потому, что он в качестве аргумента принимает адрес уже выделенной памяти. И по этому адресу вызывает конструктор, работа которого также не связана с типом памяти.
Думаешь что обмазываешься малоками осетровых. В проде чуствуешь привкус ротана.
>вкакотуси
Фиксанул.
Удвоил так-то. Вообще не понимаю, нахуй изучать кресты будучи в проперженной шараге. Когда открою свой биз, принципиально дебилов с корочкой нанимать не буду. Один хуй бесполезны будут лел.
Инженер-констрктор.
Выучил весь этот ваш computer science bachelor degree сам бесплатно, нахуй вообще в универ(тем более рашковуз, пиздец) поступать? Кроме как повыебываться перед РАБотодателем? Диплом и купить можно
Ну и чё ты там наконструировал, мань?
>Инженер-констрктор.
Это же дно ёбаное в плане зп. Ну разве что инженерные расчёты на барена копеечку приносят. Всякий там ansys, абкакус и прочие star-cd.
>нахуй вообще в универ
Диплом решает, когда ты начинаешь с зарубежными организациями общаться. При релокации просят наличие master science или ph.d. Просто это хай тир и когда ты до него доходишь,, то время уже назад не провернуть.
> При релокации просят наличие
В азиатских странах не просят. А релоцироваться в западные помойки с сжв, ниггерами и преступностью - это умственная отсталость.
В универе (тех, что в списки там всякие входят) ты можешь купить хуйню типа зачёта по физкультуре. С дипломом так не прокатывает.
>релоцироваться в западные помойки с сжв, ниггерами и преступностью - это умственная отсталость.
Азиаткофетишист с /b/, ты?
Лахта, иди нахуй.
Азиаткофетишиста не существует, существует только бот, который создаёт 70 азиаткотредов в день.
>свою фирму открывать
И на кого она работать будет? Кроме госзаказов в ближайшее время ничего не предвидится.
За рубежом я имею ввиду. Если простым работником в зарубежную фирму без диплома не берут, как ты говоришь.
Нет, просто говорю как есть. Интегрироваться в общество ты не сможешь никогда, в лучшем случае твои дети, зато бонусом будет ебля твоего мозга леваками а они будут в любой нормальной ИТ-компании и возможность получить перо под ребро от ниггера/абу-бен-ладена.
Хуёво, когда пользователь - это твой коллега-дегенерат за соседним столом и тебе приходится городить такое говно. Стоит задуматься туда ли ты попал вообще.
Диплом ещё идёт бонусом при всех видах миграции (в ту же Канаду есть система начисления баллов, которые дают за знание языка, профессию, образование, возраст).
Жиза.
Да уж, их сейчас полно должно быть. Пойдёшь так бухнуть с русским коллегой, а он вдруг достанет заточку и попросит сказать паляница.
Коробка в переводе с английского.
В стандарте крестов ничего не сказано про гуй - получается, его не существует?
Так чё будет если себе стек увеличить, к примеру через setrlimit(RLIMIT_STACK)? Не кресты же за него отвечают, а ОС.
Так без маневров, это увеличит стек или нет? Получится у меня ебануть char data[3210241024] или хуй?
Проверь и расскажи нам итт.
> enumclassbyte:unsignedchar{};
Объясните
Иногда принципами можно пренебречь, если это обеспечит намного более высокую производительность.
Чот орнул. Тебя надо к скриптопетухам определить на парашу, там тебе никакой менджемент памяти не нужен будет. Будешь виртуальным колясочником.
В крестах вообще самый хуёвый OOP из возможных. Даже в жава параше он и то лучше. Долбоёбы зачем-то вынесли стандартные классовые методы в отдельные функции. Я в ахуе чё творится. И эта хуйню ещё с 2011 стандарта.
Ты ёбнутый? С чего это должно нарушать принципы ООП?
То есть допустим тебе надо отсортировать массив в несколько гигов - мало того что он сам весит ебануцца сколько - нужно ещё столько же памяти отожрать, лишь бы не нарушать каких то маняпринципов?
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
>>2451830 (OP)
Я так понимаю обычно просто пишут какую то обертку, кучу функций в которых ифдефами для нужной ос функции добавляют. Тут так не получится?
У мог бы на WINUI хуяк-хуяк за 15 минут на XAML сделать с тремя строчками кода. Вангую даже на чистом Direct2D меньше бы проебался.
не, не криво, там есть на видео артефакты, где цвет смешивается и видно иногда не тот цвет пикселя который должен быть. Это из за 150% масштабирования у монитора. Мне просто лень было, ставить 100%, для видео. Вот что это >>50132
>>50098
Да, это очень легко на деле оказалось. Даже стыдно как то теперь.
Ну я могу скинуть алгоритм отрисовки квадратиков. Может кому то поможет. Извините, комментариев пока не расставил.
https://pastebin.com/VXgLsjWw
double selectValue - значение которое мы выбрали, и которое должно быть по середине;
int widthLevelSignalColumn - ширина столбика;
int distanceBeetwenLevelSignalColumn - расстояние между столбиками;
QSize sizeTags - ширина и высота риски с координатой, это те которые черные внизу с цифрами;
double quantityLevelSignalColumns - количество столбиков помещающееся на виджете;
QVector <int> inputValueVector - массив со значениями;
double widthOneSegment - ширина одного столбика вместе с пустым пространством;
double step - прирост значение при одном шаге колесика мыши;
double tagsValue - на каких координатах рисовать цифорки внизу, типо хочу что бы каждые 10 столбиков рисовалась координата номер столбика, а можно поставить что бы каждые 10.5
А ну в принципе краткий комментарий по алгоритму могу дать.
Сначала определяем сколько столбиков + отступ от столбика помещается в виджете. Затем делим на два. рисуем столбик текущего значения на 0 координате, слева от 0 координаты рисуем количество столбиков помещающихся в виджете / 2 и справа также. Затем все это сдвигаем в право на половину виджета. Таким образом получается что значение которое выбрал пользователь всегда по середине. Также нужно нарисовать рисочки со значениями, также находим сколько помещается рисочек в виджете, затем находим ближайшую к выбранному значению риску путем алгоритма
double valuefloat = modf(selectValue/tagsValue, &valueInt);
double leftTag = tagsValuevaluefloat;
double posValue = (selectValue - leftTag) + (i tagsValue);
он находит ближайшее слево значение относительно selectValue и кратное tagsValue. Затем также рисуем влево половину всех рисочек, от tagsValue и вправо также. Также сдвигаем на половину виджета. Ну и все.
Правда для корректной работы потребовалось добавить костылек.
double valueInt = 0;
double valuefloat = modf(step, &valueInt);
selectValue += valueOffSet;
if(valuefloat > 0)
{
selectValue = round(selectValue (1/valuefloat))/(1/valuefloat);
}
Если у selectValue есть дробная часть то ее надо округлить, до step. Типо если у меня шаг прокрутки 0.1, то selectValue надо округлить до 1 знака после запятой. Если дробной части нет, то ничего не делаем. Я не знаю почему, но иногда у меня получались значения, вроде -1.164545 10^-16, и я придумал только такой способ избавиться, от этого, потому что на нулевых координатах столбики себя не адекватно вели иногда.
А ну в принципе краткий комментарий по алгоритму могу дать.
Сначала определяем сколько столбиков + отступ от столбика помещается в виджете. Затем делим на два. рисуем столбик текущего значения на 0 координате, слева от 0 координаты рисуем количество столбиков помещающихся в виджете / 2 и справа также. Затем все это сдвигаем в право на половину виджета. Таким образом получается что значение которое выбрал пользователь всегда по середине. Также нужно нарисовать рисочки со значениями, также находим сколько помещается рисочек в виджете, затем находим ближайшую к выбранному значению риску путем алгоритма
double valuefloat = modf(selectValue/tagsValue, &valueInt);
double leftTag = tagsValuevaluefloat;
double posValue = (selectValue - leftTag) + (i tagsValue);
он находит ближайшее слево значение относительно selectValue и кратное tagsValue. Затем также рисуем влево половину всех рисочек, от tagsValue и вправо также. Также сдвигаем на половину виджета. Ну и все.
Правда для корректной работы потребовалось добавить костылек.
double valueInt = 0;
double valuefloat = modf(step, &valueInt);
selectValue += valueOffSet;
if(valuefloat > 0)
{
selectValue = round(selectValue (1/valuefloat))/(1/valuefloat);
}
Если у selectValue есть дробная часть то ее надо округлить, до step. Типо если у меня шаг прокрутки 0.1, то selectValue надо округлить до 1 знака после запятой. Если дробной части нет, то ничего не делаем. Я не знаю почему, но иногда у меня получались значения, вроде -1.164545 10^-16, и я придумал только такой способ избавиться, от этого, потому что на нулевых координатах столбики себя не адекватно вели иногда.
tcmalloc\jemalloc\mimalloc
> Я делаю много объектов маленького размера через new, причем живут они не более секунды. Каждый раз при выделении я к ОС обращаюсь?
Нет. ОС с мелкой хуйней не работает, а ебошит страницы памяти килобайта по 4. С ОС работает стандартная библиотека, а как с памятью работает аллокатор в большинстве случаев тебя ебать не должно.
Спасибо
Выдумывать свои пэты или в опенсорсе можно быдлокодить понемногу? Какие есть бест варианты тут?
я видeл, что тyт один yжe попpошaйничaл, тaк что поймy, ecли нaxyй пошлётe..
y мeня мой котофeй зaболeл. зовyт Гошa, y нeго capкомa жeлyдкa, тpи нeдeли нaзaд обнapyжили..
caм cтyдeнт, eщё нe paботaю, почти ниxyя нe имeю, a то, что имeл, yжe пpодaл - cмapтфон, нeкотоpyю одeждy, комплeктyющиe от пк, котоpыe xоть чeго-то cтоили. тaк жe влeз в долги. пытaлcя в микpозaймы или кpeдиты - ниxpeнa нe дaют из-зa отcyтcтвия paботы. pодитeлeй нeт, только бaбyшкa, котоpaя почти вcю пeнcию нa ceбя тpaтит - лeкapcтвa, eдa, коммyнaлкa. в общeм, нe помощницa..
тaк нacкpёб 16 c половиной тыcяч. нa опepaцию нyжно 18, eщё cpaныx 1450 pyблeй нe xвaтaeт. a опepaция нa зaвтpa, нa пятницу нa 11 дня нaзнaчeнa бляять...
yмоляю, aноны, xотя бы pyблём помогитe пожaлyйcтa.
220073ㅤ0247ㅤ539162 (извинитe, что имeнно так напиcал, боюcь бан выxватить раньше времени)
я догaдывaюcь, что нeкотоpыe пpeдложaт зaбить нa котофeя - я нe могy тaк, aноны... Гошa cо мной yжe полжизни, это caмоe доpогоe cyщecтво для мeня. и ceйчac, cмотpя, кaк он мyчaeтcя, xочeтcя нaxyй вcкpытьcя...
мeня cкоpee вceго ceйчac зaбaнят к xepaм, поэтомy извинитe, ecли отвeтить нe cмогy..
Это копия, сохраненная 21 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.