Вместо шапки:
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>3248820 (OP)
Нет таких
Может компилятор следит за этим или создаёт там скрытую функцию следящую чтобы моя прога получила именно тот адрес?
В виртуальной нет, в физической что угодно может быть. Вплоть до того что в виртуальной памяти это два разных адреса, но оба физически на один участок памяти указывают.
>Все адреса ячеек идут друг за другом?
Подумай, как и где ты места разрывов хранить собрался, что бы при инкременте они проверялись. Прсмотри на реализацию malloc
>Прсмотри на реализацию malloc
Когда-то я скачал исходники gcc, посмотрел, охренел от объёма чтения и непоняток что там происходит и удалил/просто скомпилировал и забыл.
>Когда-то я скачал исходники gcc
Это конпелятор, к стандартным либам он не имеет отношения. Подтяни базу, многое станет понятней.
Да
ОДНА КНИГА ничё не решает. Мало знать что-то, нужно уметь применять на практике. Не важно, прочтёшь ли ты 100 раз эту книгу, это всё равно одна ёбанная книга. Чтобы был результат, нужно минимум книг 10. И не по одной теме, а по нескольким, не то что один компьютер сцаенс задрочил или одни алгоритмы и сидишь.
builder new [project_name] - создать проект
builder build - собрать проект
builder run - запустить бинарник
вроде в мейке цели есть
Кури CMake
>>34319
Лол блять. Уже почти 2025-ый год на дворе, люди всё ещё утверждают что С++ ЭТО БАЗА. Но при этом спотыкаются на элементарных вопросах типа "как установить зависимости" и "как развернуть проект". Сука, даже в фортране уже стоит менеджер пакетов по дефолту. В ФОРТРАНЕ, прикинь!!!! Лолирую с долбичей.
правила такие же как в си - в заголовках объявляешь классы с полями операторами и названиями методов, в cpp файлах определяешь вызовы для методов/операторов, заголовок инклюдишь во все файлы где используется класс.
> даже в фортране
Потому что ты имеешь в виду какой-то конкретный конпелятор фортрана, где все либы и всех разрабов можно пересчитать по пальцам левой руки Ельцина.
Terminal?
Вопрос не про то заголовки, а про само написание кода. Объявить взаимно рекурсивные классы я могу, а вот создать их как?
Тогда объясни внятно что ты пытаешься сделать? Что значит "не объявить а создать"?
Я короче не понял что в вижуал студио докачивать надо чтобы все компилировалось нормально и работало
Почему цикл видит только первый элемент? При том что в других функциях подобный цикл с тем же словарём норм отрабатывает
Забейте я ебалн
Нах тебе книги в 2025 году? Берёшь нейронку и просишь пояснить тебе, современные нейронки для кодинга стандарт крестов наизусть знают. Можешь писать код промптингом и на практике вникать, нейронки уже пишут локальный код не хуже макак.
Было бы неплохо. Сразу бы стал уважаемым человеком.
C++98 не читай. Возьми страуступа хоть, хз. Хуже не будет, все равно одной книги мало
Класс по сути обычная структура, с той лишь разницей что у нее есть приватная/публичная части, поэтому так же как в си сделай сверху объявление а ниже определение (как тебе показали).
Естественно это будет работать только для определения аргуметов методов или указателей, наследоваться или объявлять локальную переменную класса/структуры, размер которой определяется где то внизу, нельзя по понятным причинам.
Смотри что у меня есть. В A есть указатель на B который инициализируется в конструкторе и нигде больше. В B такой же указатель на A. Как теперь создать a и b, чтобы в b был указатель на a, а в a указатель на b? В таком виде никак, но это то, что в идеале нужно получить по логике программы. Как выкрутиться?
Почему-то как раз по С++98 написаны самые крутые книги, а по новым стандартам книг мало, да и те от ноунейм авторов.
Страуструп вроде не очень как писатель, он там какой-то справочник написал, а не учебник.
Почему нельзя?
class A;
class B;
class B {
A a;
public:
B(); // jghtltkbim yb;t
}
class A {
B b;
public:
A(); // jghtltkbim yb;t
}
И хоть в том же самом заголовке если нужно чтоб инлайнилось (обычно в самом конце дописывают ) ну или или в цпп файле.
B::B() { a = new A() }
A::A() { b = new B() }
Не надо читать книги по C++98, потому что язык очень изменился за это время, соответственно изменился подход к написанию программ. Да, какие то вещи, типо POD типов, указателей, сильно не изменились (хотя изменения есть). А так даже способы инициализации примитивных типов данных изменились. Не значит, что классическое int i = 0 не сработает, но знаний единственного такого способа инициализации мало.
Я плюсы не по книгам учил, а по лекциям, так что хорошую подсказать не могу. В любом случае, одной, даже супер крутой книги не хватит. По каким нибудь шаблонам или многопоточее спокойно материала еще на 1 толстенную книгу по каждой теме
Ты когда в мейне сделаешь инстансы A и B, a и b будут новыми указателями, а не указывать на созданнве в меейне инстансы A и B
Не ебу. Boost огромный. Вряд ли тебе все нужно. Еще в вакансиях пишут про область знаний. Например, понимание многопоточки, опыт написания статических анализаторов, умения работать с сетями. Для всего этого будут свои (если будут) либы из буста. Их и нужно знать как инструмент написания многопоточки, сетевых приложений и тд и тп. А просто знание буста в вакууме никому не нужно
>Как в сишарпе асп.нет или в джаве спринг.
Не ебу что это. Буст это огромный набор самых разных библиотек
Ну я же не знаю что ты там делаешь, поправь под себя ебаныврот:
B::B(A p) { a = p; }
A::A(B p) { b = p; }
Ну и как ты в мейне создашь инстансы так, чтобы они друг друга имели в членах класса?
И че будет? Надо сразу проинициализировать друг другом. Ты реально не пониманшь, что это нереально в чистом виде?
>> как вложить структуру в которой вложена эта же структура в которую вложена ...
> никак юзай поинтеры
>> как создать поинтер на данные с поинтером на данные который еще не получен/создан
> никак, юзай операторы
>> а мне надо что бы можно
еще раз - хуй будешь?
Я тебе сразу и написал, что то, что я хочу, в чистом виде не решается. Короче, мне лень тебе уже что то объяснять. Сам разберусь
Затупил, вот так:
https://godbolt.org/z/6eTj9McPa
Хотя принципиально разницы нет. Общий принцип: в хидерах только декларируешь, но функционал необъявленных классов не используешь. Выносишь всю логику в .cpp, где уже будет доступ ко всем хидерам.
И какой стиль наименования переменных, функций? camelCase, PascalCase или snake_case?
> Раньше писали фигурные скобочки на той же строке, а теперь часто вижу, что переносят на новую.
Долбаёбы потому что.
> акой стиль наименования переменных, функций?
K&R
Зависит от компании
> Какую IDE лучше всего использовать?
Visual Studio Ultimate
> Действительно ли надо учить всякие vim/emacs?
Нет, конечно же.
Visual Studio по сути единственная, вменяемая IDE для плюсов.
не слушай красноглазых фанатиков. В писюгнуксе есть только текстовые редакторы, коих как говна и ни одной адекватной IDE.
Если UNIX то только MacOS
VS Studio по функциональности пока что самый лучший варикант, в плане удобства использование и в целом ui кал говна, но жить можно
QtCreator только если ты линуксе и тебе что то под qt нужно сделать или просто собрать qmake говно. Функционала нет, ui это просто пиздец
CLion не пользовался особо, единственный минус который я знаю, это то что он не вывозит слишком большой проект с моей работы, в отличии от вижлы
Но сейчас в 2024 году жить без иде приятнее чем когда либо, появились хорошие lsp, почти везде есть интеграции с системами сборок, работающие деббагеры и тд
Сам на работе конечно в вижле сижу, так как там иногда говно мамонта встречается что может только вижла проглотить, но пети вполне себе комфортно пишу в вс коде + clangd + cmake
но для новичка бы не советовал ебаться с этим, а просто под вижлой сидеть
Чем оно тебе не нравится и что ты под IDE подразумеваешь? Что бы при рефакторинге макросы по всему проекту распидарасило или вхождение переменных заменяло везде до куда доберется?
VSCode - глючное говно
лучше CLion пока нет, но работать с ним лучше через JetBrains Gateway, вынеся самую тяжелую работу на серверные мощности (выделив под хип гигов так 16). тогда все летает даже на тяжелых проектах.
Что может быть глючнее джавапараши? Только у них IDE умудряется каждые 10 минут выдавать ошибки с отъёбом подсветки синтаксиса. А ещё кринж с рестартами на каждый пук, кривыми экстеншенами, поломанным рендерингом гуя под виндой и напрочь сломанной сетью.
Я работал не в рф и 99% времени я общался на русском. Общие чаты были на английсом, естественно, ну и с иностранцем на русском не получится поговорить, понятное дело. Так что не были и не есть. Думаю, чисто бизнесовые соображения. Я бы тоже, честно говоря, крупный бизнес в рф не держал и съебывал в Европу скорее. Так что решение правильное.
Ну да. И этот долбоебский пробел после имени функции. И вообще он тогда был талантливым дилетантом без связи с торадициями C и BSD. Ему яблочные поделия нравились.
>и съебывал в Европу скорее
То же считаю правильно, ДжетБрейн говно здесь на хуй не нужно, плюс сейчас золотое время волны импортозамещения на котором в РФ можно и нужно поднимать хорошии деньги, чего в загнивающей европомойке сделать не получится по многим причинам.
>дилетантом
jsf av стандарты написанные не транс-пидорасами, а умными белыми людьми с cs степенями стенфорда из локхед мартина предписывают писать так же
Что-то не пойму, откуда берутся эти int32, uint16?
Я учил на ютубе. Если можешь в простенький английский на слух, то туториалы ChiliTomatoNoodle хорошие.
Не смотри, что у него уклон в геймдев, первые два плейлиста по основам языка и ооп, графика с 3 листа начинается.
Так же у него по другим темам есть плейлисты. Многопоточка, boost, std.
для джавапараши надо много памяти и проц, такова жизнь
если ты запускаешь на деревянном ПК, то да - будет хуйня.
у меня нет ничего из того, что ты перечислил, даже несмотря на то, что объем кодовой базы весьма значителен.
А мог бы просто VSCode поставить как нормальный разработчик
Если пикрила мало, то нахуй это говно нужно?
> у меня нет ничего из того, что ты перечислил
Вангую ты никогда крупный проект не открывал этой парашей.
>Вангую ты никогда крупный проект не открывал этой парашей.
Когда эту поделку по дефолту Гугля как IDE под Андроид зделол, то я отключал в настройках все что можно и более менее все работало, в прочем я и на Вижуал Студии все отключаю
На скринах простейший код, но в случае с типом float он не работает: при работе с маленькими числами значение переменной не меняется, при том, можно прибавить 1000 или умножить на два, тогда вывод корректный.
Вынес блок с float в отдельный код, на разных машинах\ОС компилировал - один хуй, в упор не вижу ошибку. При том, что double работает корректно
Во-первых, ты обратился к неинициализированнлй переменной, что уб и дальнейшие рассцждения о поведелии программы бессмыслены. Во-вторых, иди читай как устроены вещественные числа и почему они не могут хранить любое число с нужной точностью
Не знаю, почему так, но если ты юзаешь float, то ты должен писать не 1, а 1.0f, иначе компилятор юзает double. Но это замечание эту странность не исправляет.
Ты делаешь какую то хуйню, вещественные числа не хранятся как двоичные числа, они имеют специальный формат который требует декодирования, поэтому изначально в процессорах этим занимался специальный сопроцессор (fpu) который умел с ними работать а позже переехал на кристал и стал стандартом.
Что бы компилятор понимал что твои литералы нужно конвертировать в вещественный формат, ты должен везде писать 32.0f 25648.0f а любую целочисленную переменную конвертировать во флоат перед арифметикой fl += (float)i что бы точно быть увереным что твоя хуйня никак не может быть расценена иначе, например конвертировать fl в инт и сложить с другим интом после чего отконвертировать во флоат. Ну и что бы распечатать флоат как строку надо наверное тоже использовать специальные функции и патерны.
Потому, что плавающее число состоит из двух частей, для целого числа во float выделено 23 бита и твое число не влазит
Даже на JS можно написать так, чтобы работало только на винде определённой сборки с определёнными обновлениями. Дело вообще не в языке, а в используемых компиляторах и API.
Двачую вот недавно пытался запустить игру на рпгмейкере, несмотря на то что там используется nwjs который по сути эмулирует вэб-окружение поверх системного стека и к файлам там можно обращаться через виртуальный хост, гениальные жапонские программисты в плагинах натыкали xhr.open( require('path').dirname(dir).path )
берут модуль ноды получают системные пути и делают по ним http реквест, пиздец короче, на винде видимо работает ну потому что там C:\\Users\SukuiIbanava\hentai\loli\game\www и сразу понятно что это системный путь, а на линуксе надо file:// добавлять хотя бы, а по хорошему надо или нодой файлы открывать или блять вебстеком. Либо одно либо другое. но обнюханый трусами самурай даже подключив модуль fs все равно будет лазить через хттп-реквест, причем старый
>да
Как мне кроссплатформенно преобразовать wstring в utf-8? wstring_convert - диприкейтед лол
Кожаных мешков нету, с кем ещё говорить?
Для кроссплатформенной разработке это не нужно, а то что ты под ней подразумеваешь это не кроссплатформа, поэтому пишешь части платформозависемого кода и в нем пердолишься с системными вызовами для конвертации.
>поэтому пишешь части платформозависемого кода
Ага, а еще пишешь параллельно три нативных морды для гуя: под винду, линукс и мак.
Конечно, ведь либы для гуя не изобркли еще
>>37353
>>37511
>Во-вторых, иди читай как устроены вещественные числа и почему они не могут хранить любое число с нужной точностью
THIS. Теперь понял, где ошибка, благодарю.
Буквально первая строка поисковика:
Тип данных float — это 32-разрядное число одинарной точности с плавающей точкой, которое может точно хранить числа, содержащие только до шести цифр. Например, вы не сможете хранить точно число 515 297.15 в поле с типом float
Там чуть сложнее. Зависит от порядка числа - больше - хуже
Я не паста, а настоящий анончик
Я думал, что в основном под линукс пишут, а винда как доп. система. Сейчас же идёт переход с винды на линукс в бюджетных организациях и выгоднее писать кроссплатформенные приложения.
> в бюджетных организациях
В каких бюджетных и что поменялось? Все как сидели с виндой, так и сидят. Переход на пердоликс - это новые затраты и обучение персонала, никому это не надо. Кто хочет безопасно от потенциальных штрафов сидеть - сидят с плашкой "активируйте винду", но многие кмсом активируют. Даже госконторы так делают, всем похуй, легально винду не купить, но майки никого не блочили и не будут.
В нашей местности AstraLinux внедряют, я сам занимался этим пару лет назад. На все новые машины предписано ставить именно его, а не винду.
Был бы бюджет, а на что распилить всегда найдут. Ты не забывай что русских пидорнули из линукса, а финский нацик сказал что все русские разрабы - это фсбшные боты, внедряющие бэкдоры. Если выделят бабло на форк ядра, то может и будет повышенная активность, а пока ничего нет, сверх того что было до СВО. Полторы госконторы на Астре - это даже трём анонам не хватит мест. Вдвойне не забывай что даже Китай с винды не слез пока, а СВО скоро закончится.
На том же Шарпе как писали, так и пишут. В том числе госы. Условно в тот же nalog.gov.ru залогиниться не из под винды - длительное приключение с туманными перспективами. В egais.ru в принципе только с IE пускает.
Не, так и было месяц назад, сейчас вижу вообще личный кабинет выпилили, весь функционал наконец в УТМ перенесли. Это нихуя не шутка, там и дожили до 2024 года, когда IE уже даже в свежей винде нет.
Может и так, но в любом случае считаю, что отвязывание от продуктов Майкрософт и Оракекел это есть хорошо.
>Раньше писали фигурные скобочки на той же строке, а теперь часто вижу, что переносят на новую.
Так бесит эта манера. Сам всегда оставляю скобочку на той же строке, а обоснуй таков. Помимо плюсов, пишу ещё на питоне и луа. У питона после скобочек идёт двоеточие - аналог открывающей скобочки. У луа есть end - аналог закрывающей скобочки. В обоих языках тело функции можно начать прям со следующей же строки после её головы (но я оставляю одну строку пустую). Соответственно и в плюсах так же. А сраная скобочка, занимающая целую строку, ящетаю, это полнейшее уебанство.
Ключевое - ящетаю.
>А сраная скобочка, занимающая целую строку, ящетаю, это полнейшее уебанство
От ситуации зависит: если параметры функции или инициализация конструктора в столбик, то лучше переносить скобку. Если у тебя считают строки, то тут и вопросов нет.
Если ты не пишешь контекст, то using namespace никогда не пиши. Иначе, обновишь компилятор, добавят в std функции с такими же именами, но другими типами аргументов, но которые подходят по типам (например lcm, тру стори как на контесте это головную боль доставило), и ты охуеешь искать ошибку.
>Как вкатиться в clang?
Сначала подумал, что ты хочешь стать контрибьютором, но прочитал дальше и понял, что тебе до этого еще далеко
> почему если я пробую собирать им то, что компилится GCC, он срет тоннами ошибок?
Два варианта - код писали долбоебы или адекватные люди, но по каким то внутренним причинам привязались к одному компилятору и его расширениям
> И нужен ли он вообще?
Идиотский вопрос
> Никак не могу понять, зачем он+весь проект LLVM существует в принципе (кроме того что ллвм использует каждый новомодный яп).
Чтобы ты спросил, блядь. Зайди в гугл, открой первые 3 ссылки и прочитай. За тебя никто не будет их сюда копипастить
Хотя дороговато
Может если там будет только эта ф-ия, может создать callable class и в конструкторе сохранить map?
Ну я гейдевщик, не представляю как можно жить без виндовс и студии. На линуксе можно играть, иногда даже фпс больше, чем на виндовс+дх, спасибо Гейбу создателю dxvk, но программировать нет. В студии как минимум невероятно удобный дебагер, который в моей сфере нужно использовать постоянно, принтами и логами, как в вебе и около, невозможно пользоваться.
Забавно будет, если лет через 10 будут считать, что Линукс для игрулек, а Виндовс для работы, хехе.
>удобный дебагер
Це такое есть, просто не могу имаджинировать ебало студийных челиков, которых посадят на гдб.
>Забавно будет, если лет через 10 будут считать, что Линукс для игрулек, а Виндовс для работы, хехе.
Не будет, челибосам нахуй не упёрся лялих где-то дальше сервера.
>А что тогда с захватом сделать?
А в чем проблема с захватом? Тебе все равно как-то контекст колбека надо хранить.
Проблем нет, просто почему то вижуалка тряслась что то тряслась и щас перестала, всё норм.
VS Code кроссплатформенный и там тоже удобный дебагер. И в целом вс код гораздо приятней в работе, чем монструозная вижла.
А лямбду можно напрямую сохранить в классе, сослаться на неё как на тип? Я прост не знаю(
>А лямбду можно напрямую сохранить в классе
Нет, у каждой лямбды свой тип, который определяется в месте создания. Можно работать через темплейты, std::function или свою велосипедную обертку (если, например, надо сделать лямбду без аллокации под фиксированный размер захваченных данных).
Можно авто прописать в определении класса
Дайте норм тем для Вижуал Студии (не Коде), а то выглядит как синее говно.
Двухсвязный список могёшь без ансейфа?
Server Software: werewolf
Server Hostname: localhost
Server Port: 8816
Document Path: /abc/1234567
Document Length: 16 bytes
Concurrency Level: 222
Time taken for tests: 8.604 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 1000000
Total transferred: 123000000 bytes
HTML transferred: 16000000 bytes
Requests per second: 116221.47 [#/sec] (mean)
Time per request: 1.910 [ms] (mean)
Time per request: 0.009 [ms] (mean, across all concurrent requests)
Transfer rate: 13960.20 [Kbytes/sec] received
Ясно. Конечно, отвечать никто никому не обязан, но судя по твоему ответу, это ненужный проект, как я и предполагал, потому что ты не смог объяснить его цель и при этом агрессивно даешь понять, что веришь в ее (цели) наличие.
Животворящий С прямо сейчас у меня делает 130k rps, три системных вызова на запрос.
Может я и правда агрессивно очень ответил, но это потому что у меня бомбануло с вопросов уровня 9 классника (и это не преувеличение). Скорее всего, ты хеллоуворлды лениво пописываешь раз в месяц и компилируешь их дефолтным системным компилятором. Зайди на cppreference в раздел compiler support и охуей от количества компиляторов, преднаначение которых ты понять не можешь. Короткий ответ - крутые компании, пишут свои инструменты для своих целей, чтобы не зависеть от сторонних людей. Например, intel c++ может быть выдрочен для генерирования производительного кода под конкретно их процессоры. И они пишут это сами, потому что никто кроме них не знает лучше особенности процессоров интел. Потом продают этот компилятор туда, кому нужно максимум производительности выжать (но емнип, intel c++ это вариация шланга и они уже подзабили на свой компилятор и коммитят в шланг). Майки могут писать свой компилятор, потому что хотят, чтобы нужные их командам фичи появлялись в первую очередь. Свой компилятор также дает возможность интегрировать его в ide и получить очень мощную среду разработки. Да и банально, у компиляторов могут быть клиенты в в виде корпораций и эти самые комплиляторы можно продавать, зарабатывая деньги на том, что в твоем компиляторе есть какая то узкая, но нужная кому то фича, которой нет в других компиляторах, либо, в которых она хуже реализована. По поводу, шланга. Если бы ты с ним поигрался, то ты бы заметил, что у него ошибки в 100500 раз более понятные и человекочитаемые чем у гцц. Потому что у шланга более модульная структура, что позволяет легче его переиспользовать для других проектов: статические анализаторы (clang-tidy), бэкэнд для 100500 языков отличных от c++. И если ты думаешь, что плюсы очень стандартизированный язык и достаточно однго компилятора (кстати в хаскеле так, по этому поводу там и последний стандарт языка вышел в 2010 году, а не выходит каждые 3 года, как в плюсах; там тупо 1 главный компилятор на котором пишут 99% людей, поэтому и нет смысла выпускать стандарты), зайти на тот же cpp reference и охуей от того какая каша может быть в поддержках разных фич разными компиляторами. А чтобы ты в дальнейшем не заставлял меня писать простыни на такие детские вопросы которые рассказывают в первую неделю обучения в вузе, если ты до этого с прогой дел почти не имел, найди себе хороший курс по плюсам, а не смотри всякие инфоцыганские курсы и задачи для умственно отсталых которые дают ложное чувство знаний. Хоть мфтишный курс начни смотреть
Может я и правда агрессивно очень ответил, но это потому что у меня бомбануло с вопросов уровня 9 классника (и это не преувеличение). Скорее всего, ты хеллоуворлды лениво пописываешь раз в месяц и компилируешь их дефолтным системным компилятором. Зайди на cppreference в раздел compiler support и охуей от количества компиляторов, преднаначение которых ты понять не можешь. Короткий ответ - крутые компании, пишут свои инструменты для своих целей, чтобы не зависеть от сторонних людей. Например, intel c++ может быть выдрочен для генерирования производительного кода под конкретно их процессоры. И они пишут это сами, потому что никто кроме них не знает лучше особенности процессоров интел. Потом продают этот компилятор туда, кому нужно максимум производительности выжать (но емнип, intel c++ это вариация шланга и они уже подзабили на свой компилятор и коммитят в шланг). Майки могут писать свой компилятор, потому что хотят, чтобы нужные их командам фичи появлялись в первую очередь. Свой компилятор также дает возможность интегрировать его в ide и получить очень мощную среду разработки. Да и банально, у компиляторов могут быть клиенты в в виде корпораций и эти самые комплиляторы можно продавать, зарабатывая деньги на том, что в твоем компиляторе есть какая то узкая, но нужная кому то фича, которой нет в других компиляторах, либо, в которых она хуже реализована. По поводу, шланга. Если бы ты с ним поигрался, то ты бы заметил, что у него ошибки в 100500 раз более понятные и человекочитаемые чем у гцц. Потому что у шланга более модульная структура, что позволяет легче его переиспользовать для других проектов: статические анализаторы (clang-tidy), бэкэнд для 100500 языков отличных от c++. И если ты думаешь, что плюсы очень стандартизированный язык и достаточно однго компилятора (кстати в хаскеле так, по этому поводу там и последний стандарт языка вышел в 2010 году, а не выходит каждые 3 года, как в плюсах; там тупо 1 главный компилятор на котором пишут 99% людей, поэтому и нет смысла выпускать стандарты), зайти на тот же cpp reference и охуей от того какая каша может быть в поддержках разных фич разными компиляторами. А чтобы ты в дальнейшем не заставлял меня писать простыни на такие детские вопросы которые рассказывают в первую неделю обучения в вузе, если ты до этого с прогой дел почти не имел, найди себе хороший курс по плюсам, а не смотри всякие инфоцыганские курсы и задачи для умственно отсталых которые дают ложное чувство знаний. Хоть мфтишный курс начни смотреть
Ненавижу пидоров, которые из единственного оставшегося не зашкваренного вебом языка делают очередную бэкенд-дрисню для перекладывания жсонов.
Так на доске сплошь пидоры вкатуны за БАБЛОМ, которое естественно в веб-параше. Только упомяни нормальную компьютерную программу - ГУИ приложение для Windows, получишь кластерный подрыв срак.
Чтобы BSONы оператором << сочинять же.
> в треде начинают появляться 100 трешовых постов с вопросами от студентоты
> неожиданно в треде появляются посты шизика про пидоров, сою и веб, с его представлением о тру программировании из тиктока
когда там у вас сессия закончится и вы из треда выкатитесь?
Есть идеи как в окне отладки ВС посмотреть весь массив имея указатель на него?
Нет. Просто массив - тупо указатель на кусок памяти. Откуда компилятор знает размер этой памяти?
>тупо указатель на кусок памяти. Откуда компилятор знает размер этой памяти?
Я в каком то хексвьювере видел, что можно было на участок памяти сишную структуру применить даже как массив заданного размера и она красиво отображала все эти поля. Так что хочу такое же.
если это строка то пока не уткнется в ноль
или
если это эльбрус в 128 битном режиме то в указателе есть размер, другой вопрос как получить/передать этот указатель строкой или числом его никуда не вобъешь и ничего по такому адресу не получишь.
Так, еще ImHex поддерживает шаблоны оказывается. Теперь если сохранить дамп памяти по указателю, то более менее можно просматривать.
все программы бесплатные..
И вот нахуй я писал такую простынь, отвечая на простой вопрос, если даже "спасибо" в ответ не получил
Нет, это поехавший шизик.
Допустим, вызывается метод, а в методе есть локальная переменная типа unsigned char. Так как переменная не проинициализированна, то в ней, как я думаю, будет какое-либо "случайное" значение. Вопрос: можно ли так получить случайный сид для генерации псевдослучайных чисел? Какие подводные?
Какая разница нулевой байт все равно попадется где нибудь
Ну а если вопрос про эльбрус то там 2 битный тег указывает на то что память: 00 - неинициализирована 01 - данные 10 указатель 11 - неизвестно, но вангую что unsafe. Хотя в unsafe режиме логичнее нулевые теги просто использовать, но не знаю
на интеле же можно, некоторые программы даже используют для генерации случайных чисел. Что конечно не правильно, но есть "правильно" а есть реалии.
....
VS Code + clangd
у меня вопрос - допустим я использую некую библиотеку, но использую допустим 1 процент ее возможностей, то есть задействую малую часть ее классов и методов.
После компиляции есть ли разница в быстродействии программы, как если бы я задействовал скажем 50 процентов библиотеки? другими словами, после компиляции в неиспользуемые элементы этой библиотеки просто отсекаются или же они все равно в том или ином виде присутствуют?
Если ты собираешь библиотеку отдельно, то там все функции будут висеть мертвым грузом, другое дело что для статически линкуемой библиотеки вроде есть оптимизация во время линковки, но ее надо включать.
Оглавление замечательное, но текст на любителя. Если текст туго идет, то придерживайся оглавления как программы, и читай соответствующие топики в других местах.
По тому же Паскалю есть книга гораздо лучше, чем писаниня Столярова - Песни о Паскале.
В быстродействии вряд ли. Скорее лишная память будет тратится, но и это обычно не проблема для прог на плюсах, если ты не для встроенных устройств пишешь
Почему я просто не могу статическую переменную внутри тела класса объявить?
Почему я должен следить за порядком объявления всякой муры? Как я заебался в свое время с тем, что у меня Node и Tree должны знать друг о друге. Полдня я проебал чтобы найти как, блядь, объявить структуру без тела, и потом уже реализацию ее написать.
Почему у темплейтов - такой всратый синтаксис?
Почему нет внятного способа получить нормальную информацию о типе? В ебучих жавах, сисярпах, пистонаха - есть, тут - нихуя нормального нет.
Нахуя в языке вообще возможность есть объявить женерик поле? Вот типа чтобы что? Чтобы зачем?
Почему, блядь, нет простого иструмента чтобы проект быстро подготовить? Нет, блядь, мейк или пиши батники/шел-скрипты.
Еще этот ебучий препроцессор, который ебал его мать в сраку.
Короче. Мне не нравится. Поделился мнением. Пошел дальше свою жаву теребить.
Проиграл с макаки, орущей с ветки на нормальных людей.
Школьник, плес. Антипаттерн != Гитлер. В таких вопросах надо смотреть на проект в целом, а не на синтаксис в 5 строках кода.
пиздец тут неосилятор затолстил, статик уже давно завезли
https://en.cppreference.com/w/cpp/language/static
да и по остальным пунктам все хорошо.
нет, всё верно, там паттерны, а тут в плюсо треде одни антипаттерны
Вот есть указатель void*, есть второй такой же. Данные там могут быть самые разные - циферька, строчка, структурка какая-нибудь. В отдельных переменных хранятся размеры этого богатства и тип.
Задача: скопировать данные из одного указателя в другой.
Вопрос первый. Правильно ли я понимаю последовательность действий?
1. При инициализации даём указателю nullptr
2. Первый раз обращаясь, делаем ему malloc
3. Перед следующей записью делаем realloc
4. Пишем данные через memcpy
5. В деструкторе всего хозяйства, делаем указателю free
Вопрос второй. Это ведь сишная дребедень? Нет ли какого-то более благородного плюсового аналога?
>Объясните, вот чего так сложно-то?
>Почему я просто не могу статическую переменную внутри тела класса объявить?
Можешь. Другое дело, что с шаблонами нужно думать.
>Почему я должен следить за порядком объявления всякой муры?
Потому что компилятор должен знать именя к моменту когда дойдет до него
> Как я заебался в свое время с тем, что у меня Node и Tree должны знать друг о друге. Полдня я проебал чтобы найти как, блядь, объявить структуру без тела, и потом уже реализацию ее написать.
Это легко решается, если ты понимаешь разницу между объявлением и определением
>Почему у темплейтов - такой всратый синтаксис?
Нормальный
>Почему нет внятного способа получить нормальную информацию о типе? В ебучих жавах, сисярпах, пистонаха - есть, тут - нихуя нормального нет.
Потому что в плюсах нет инормации о типе в рантайме, в отличие от джавы и питона.
>Нахуя в языке вообще возможность есть объявить женерик поле? Вот типа чтобы что? Чтобы зачем?
Чтобы писать обобщенный код, внезапно. Наример, вектор в котором будет шаблонный указатель
>Почему, блядь, нет простого иструмента чтобы проект быстро подготовить? Нет, блядь, мейк или пиши батники/шел-скрипты
Зачем проект, если можно просто компилмровать из консоли? Это тебе не джава. Тащемта везде сборка не просто "вот возьми такие файлы и скорми компилятору", а гораздо сложнее.
>Еще этот ебучий препроцессор, который ебал его мать в сраку.
Наследие C. Не используй его в современных плюсах, если только ты не пишешь инклуд гуарды. Хотя модули это решают, вроде.
>Короче. Мне не нравится. Поделился мнением. Пошел дальше свою жаву теребить.
Потому что ты рассчитываешь взять, выучить синтаксис и писать как на джаве. Так нельзя. Это работает только если ты учишь язык на уровне циклов и условий. Главная твоя проблема в том, что ты где то нашел справочник по плюсам и пытаешься джавовыф код переписатт не плюсы. Это ошибка. Плюсы нужно учить. Долго и упорно.
Как я заебался уже отвечать на такие вот вопросы. Они довольно примитивные, но для объяснения нужно целое полотно написать. Этих всех вопросов не было бы, если бы люди учили язык блядь, я не просто выдирали рандомную хуйню не понятно откуда и приходили задавать о ней вопросы
>Объясните, вот чего так сложно-то?
>Почему я просто не могу статическую переменную внутри тела класса объявить?
Можешь. Другое дело, что с шаблонами нужно думать.
>Почему я должен следить за порядком объявления всякой муры?
Потому что компилятор должен знать именя к моменту когда дойдет до него
> Как я заебался в свое время с тем, что у меня Node и Tree должны знать друг о друге. Полдня я проебал чтобы найти как, блядь, объявить структуру без тела, и потом уже реализацию ее написать.
Это легко решается, если ты понимаешь разницу между объявлением и определением
>Почему у темплейтов - такой всратый синтаксис?
Нормальный
>Почему нет внятного способа получить нормальную информацию о типе? В ебучих жавах, сисярпах, пистонаха - есть, тут - нихуя нормального нет.
Потому что в плюсах нет инормации о типе в рантайме, в отличие от джавы и питона.
>Нахуя в языке вообще возможность есть объявить женерик поле? Вот типа чтобы что? Чтобы зачем?
Чтобы писать обобщенный код, внезапно. Наример, вектор в котором будет шаблонный указатель
>Почему, блядь, нет простого иструмента чтобы проект быстро подготовить? Нет, блядь, мейк или пиши батники/шел-скрипты
Зачем проект, если можно просто компилмровать из консоли? Это тебе не джава. Тащемта везде сборка не просто "вот возьми такие файлы и скорми компилятору", а гораздо сложнее.
>Еще этот ебучий препроцессор, который ебал его мать в сраку.
Наследие C. Не используй его в современных плюсах, если только ты не пишешь инклуд гуарды. Хотя модули это решают, вроде.
>Короче. Мне не нравится. Поделился мнением. Пошел дальше свою жаву теребить.
Потому что ты рассчитываешь взять, выучить синтаксис и писать как на джаве. Так нельзя. Это работает только если ты учишь язык на уровне циклов и условий. Главная твоя проблема в том, что ты где то нашел справочник по плюсам и пытаешься джавовыф код переписатт не плюсы. Это ошибка. Плюсы нужно учить. Долго и упорно.
Как я заебался уже отвечать на такие вот вопросы. Они довольно примитивные, но для объяснения нужно целое полотно написать. Этих всех вопросов не было бы, если бы люди учили язык блядь, я не просто выдирали рандомную хуйню не понятно откуда и приходили задавать о ней вопросы
>Это ведь сишная дребедень?
Да
>Нет ли какого-то более благородного плюсового аналога?
smart pointers
Перепишм вопросы. Ты че то странное делаешь. Откуда деструктор, если ты не сказал какую структцру ты хочешь написать? И еще : такие фокусы можно делать только с POD
>допустим я использую некую библиотеку
Ну смотри, допустим, это популярная библиотека, и ты не залинковался с ней статически. Данный расклад наиболее вероятен, учитывая, что ты только начал изучать плюсы. Значит библиотека наверняка уже есть у пользователя на компе, и ею пользуются другие программы. Так что не слишком парься на этот счёт. Просто старайся не лезть во всякую экзотику.
Ну и да, все перечисленные функции из си. В плюсах вместо этого new, delete.
>Откуда деструктор,
Не душни, указатели же не в воздухе висят. Они откуда-то появились, их когда-то и уничтожать надо будет. Например, они могут быть полями класса. Ну или при выходе их освобождать.
> Потому что компилятор должен знать именя к моменту когда дойдет до него
Почему он не может: пройтись, собрать имена(ака идентификаторы), а потом уже зная из построить что там ему надо?
Я в вузе когда делал свой компилятор - проходил два раза - ниче, не переломился. В плюсах в 2024 году - это почему-то надо.
> Это легко решается, если ты понимаешь разницу между объявлением и определением
И на кой хуй эта разница вообще нужна? Язык - компилируемый. Я вообще ИРЛ не видел ни одного кейса в реальности где это надо, кроме как раз шизоплюсов, в которых компиляция занимает 100500 лет.
В жаве - я беру и прямо в модуле пишу код, ниче, все заебись. Думать о том что я там когда объявил мне не нужно.
> Нормальный
Не нормальный. Нормальный это типа:
void Foo<T>(T bar, T buz)
А как в плюсах - это откровенное издевательство, чтобы баже без обфускации - никто не мог прочитать.
> Потому что в плюсах нет инормации о типе в рантайме, в отличие от джавы и питона.
Так и в чем проблема добавить ее? Если она мне нужна. Чет опять же - счетчик ссылок для юник поинтеров и прочего - не переломились добавить. Так и информацию о типах можно. То что ее нет - это проеб.
> Зачем проект, если можно просто компилмровать из консоли?
Можно. Как только у тебя больше 10 файлов и больше одного разработчика - это должно быть автоматизировано. Потому что ебись оно в сраку.
А нормальных из коробочных инструментов у плюсов - нет. Make - не нормальный.
> Потому что ты рассчитываешь взять, выучить синтаксис и писать как на джаве. Так нельзя
Я хочу за отпуск просто игрульку фром скреч сделать. Все. Не хочу я плюсы учить. Я чтоли виноват, что нормального инструментария для игрулек нет на других языках?
>Не душни, указатели же не в воздухе висят.
Что значит в воздухе?
>Они откуда-то появились, их когда-то и уничтожать надо будет.
У сырых указателей деструктор тривиальный. Он ничего не делает. Короче, ты опять что то странное пишешь. Нормально сформулируй вопрос и тогда я отвечу
> Например, они могут быть полями класса.
Могут. И тогда можно будет говорить о деструкторе. Пока ничего такого не было написано
> Ну или при выходе их освобождать.
Выходе откуда?
>Почему он не может: пройтись, собрать имена(ака идентификаторы), а потом уже зная из построить что там ему надо?
>Я в вузе когда делал свой компилятор - проходил два раза - ниче, не переломился. В плюсах в 2024 году - это почему-то надо.
Честно, я не помню. Может по историчечким причинам,требовалось, чтобы компилятор мог сгенерировать код в 1 проход. Это правило закрепилось и имеем, что имеем. Может есть еще причины, не помню.
>И на кой хуй эта разница вообще нужна? Язык - компилируемый. Я вообще ИРЛ не видел ни одного кейса в реальности где это надо, кроме как раз шизоплюсов, в которых компиляция занимает 100500 лет.
Тупейший вопрос. На кой хуй нужна разница между числом 2 и 3? Я хз как ответить даже.
>В жаве - я беру и прямо в модуле пишу код, ниче, все заебись. Думать о том что я там когда объявил мне не нужно.
И че? Нахуй ты правила джавы на плюсы переносишь? Я уже сказал тебе так не делать. Меня наоборот в джаве иногда бесило, что я не могу определение класса вынести куда то в отдельное место, чтобы у меня на виду был "интерфейс" класса, а в отдельном месте уже реализация. В джаве это можно сделать с помощью интерфейсов, но это не то же самое.
>Не нормальный. Нормальный это типа:
>void Foo(T bar, T buz)
Ты предлагаешт опустить строчку template<typename T>? И как компмлияор должен понять откуда это T? Шаблонный параметр или класс объявленный хуй щнает где?
>А как в плюсах - это откровенное издевательство, чтобы баже без обфускации - никто не мог прочитать.
Ты заебал. Ты не понимаешь - значит синтаксис плохой и никто не понимает? Нет. Будешь дальше хуйню такую писать, я не буду отвечать. Если бы ты предложил какой то вариант, я бы сказал, что с ним не так. А ты просто говном кидаешься.
>Так и в чем проблема добавить ее? Если она мне нужна. Чет опять же - счетчик ссылок для юник поинтеров и прочего - не переломились добавить. Так и информацию о типах можно. То что ее нет - это проеб.
Ты заебал. Это последний пост на который я отвечаю тебе. В твою тупую башку не влазиает мысль о том, что у любого языка есть спектр задач, а не каждый язык стремится выглядеть как джава, потгму что ты на ней пишешь.
>Можно. Как только у тебя больше 10 файлов и больше одного разработчика - это должно быть автоматизировано. Потому что ебись оно в сраку.
> автоматизировано
Эта автоматизация называется makefile
>А нормальных из коробочных инструментов у плюсов - нет. Make - не нормальный.
Для плюсов - нормальный. Есть еще cmake. Он может быть приятнее в чем то (хотя и он потом до make прелбразуется)
>Я хочу за отпуск просто игрульку фром скреч сделать. Все. Не хочу я плюсы учить.
Ну и дебил. Хоти дальше.
>Почему он не может: пройтись, собрать имена(ака идентификаторы), а потом уже зная из построить что там ему надо?
>Я в вузе когда делал свой компилятор - проходил два раза - ниче, не переломился. В плюсах в 2024 году - это почему-то надо.
Честно, я не помню. Может по историчечким причинам,требовалось, чтобы компилятор мог сгенерировать код в 1 проход. Это правило закрепилось и имеем, что имеем. Может есть еще причины, не помню.
>И на кой хуй эта разница вообще нужна? Язык - компилируемый. Я вообще ИРЛ не видел ни одного кейса в реальности где это надо, кроме как раз шизоплюсов, в которых компиляция занимает 100500 лет.
Тупейший вопрос. На кой хуй нужна разница между числом 2 и 3? Я хз как ответить даже.
>В жаве - я беру и прямо в модуле пишу код, ниче, все заебись. Думать о том что я там когда объявил мне не нужно.
И че? Нахуй ты правила джавы на плюсы переносишь? Я уже сказал тебе так не делать. Меня наоборот в джаве иногда бесило, что я не могу определение класса вынести куда то в отдельное место, чтобы у меня на виду был "интерфейс" класса, а в отдельном месте уже реализация. В джаве это можно сделать с помощью интерфейсов, но это не то же самое.
>Не нормальный. Нормальный это типа:
>void Foo(T bar, T buz)
Ты предлагаешт опустить строчку template<typename T>? И как компмлияор должен понять откуда это T? Шаблонный параметр или класс объявленный хуй щнает где?
>А как в плюсах - это откровенное издевательство, чтобы баже без обфускации - никто не мог прочитать.
Ты заебал. Ты не понимаешь - значит синтаксис плохой и никто не понимает? Нет. Будешь дальше хуйню такую писать, я не буду отвечать. Если бы ты предложил какой то вариант, я бы сказал, что с ним не так. А ты просто говном кидаешься.
>Так и в чем проблема добавить ее? Если она мне нужна. Чет опять же - счетчик ссылок для юник поинтеров и прочего - не переломились добавить. Так и информацию о типах можно. То что ее нет - это проеб.
Ты заебал. Это последний пост на который я отвечаю тебе. В твою тупую башку не влазиает мысль о том, что у любого языка есть спектр задач, а не каждый язык стремится выглядеть как джава, потгму что ты на ней пишешь.
>Можно. Как только у тебя больше 10 файлов и больше одного разработчика - это должно быть автоматизировано. Потому что ебись оно в сраку.
> автоматизировано
Эта автоматизация называется makefile
>А нормальных из коробочных инструментов у плюсов - нет. Make - не нормальный.
Для плюсов - нормальный. Есть еще cmake. Он может быть приятнее в чем то (хотя и он потом до make прелбразуется)
>Я хочу за отпуск просто игрульку фром скреч сделать. Все. Не хочу я плюсы учить.
Ну и дебил. Хоти дальше.
Ты прицепился к слову "деструктор" и проигнорировал продолжение. На самом деле там было
>деструктор всего хозяйства
Под хозяйством имеется ввиду та область видимости, в которой наши указатели живут.
а) Они могут быть полями класса. Тогда речь про деструктор класса.
б) Они могут "болтаться в воздухе" - то есть быть объявлены глобально. Тогда их надо подчищать при закрытии программы.
в) Они могут быть объявлены как переменные внутри какой-нибудь функции. Тогда удалять надо перед возвратом.
Конечно, из этих всех опций слово "деструктор" принято использовать лишь по отношению к классам. Однако если мы обратимся к смыслу данного термина, то поймём, чтово всех трёх случаях выполняется одно и то же действие - подчистка выделенной памяти; что и есть смысл деструктора.
>Нормально сформулируй вопрос и тогда я отвечу
Всем всё понятно по контексту, а ты решил компилятор из себя корчить. Тебя, может, ещё и Витя зовут? Типичные придирки носителей этого имени так-то.
>Под хозяйством имеется ввиду та область видимости, в которой наши указатели живут.
У области видимости нет деструктора. Написанное дальше не имеет смысла
>Конечно, из этих всех опций слово "деструктор" принято использовать лишь по отношению к классам.
> Однако если мы обратимся к смыслу данного термина, то поймём, чтово всех трёх случаях выполняется одно и то же действие - подчистка выделенной памяти; что и есть смысл деструктора.
Нет.
>Всем всё понятно по контексту, а ты решил компилятор из себя корчить. Тебя, может, ещё и Витя зовут? Типичные придирки носителей этого имени так-то.
Ну тогда жди пока кто то менее душный ответит тебе как в деструкторе области видимости почистить указатели в воздухе. Я слишком душный, чтобы понимать написанное
> И как компмлияор должен понять откуда это T?
В 95% случаев - людям нужно: для всего.
В 5% случаев - есть ограничения, как в той же джаве или шарпе.
Java:
T Add<T extends Number>(T a, T b) { }
C#
T Add<T>(T a, T b) where T : INumber, new(), class { }
> Шаблонный параметр или класс объявленный хуй щнает где?
Сама модель типов должна быть такой, чтобы языку было строго похуй. Есть тип. Какой-то класс - это просто способ описать свой тип. Для языка должно быть строго похуй в контексте обобщенного программирования - шаблонный параметр это или тот самый класс.
> Нахуй ты правила джавы на плюсы переносишь?
Потому что это тупо удобнее. Вот и все. Писать код там же где ты его объявил - удобнее. Ты же не являешься ебанатом с паскаль-лайк подходом, который все переменные объявляешь до их вызова? Думаю нет. Объявляешь по необходимости. Но чет с методами и типами - я должен зачем-то в голове эту хурму держать.
> Ты не понимаешь - значит синтаксис плохой и никто не понимает?
Я понимаю как раз, я говорю что он хуевый, и даю примеры где сделано лучше. Да, женерики != темплейты, но то что все сейчас используют варианты женериков вместо темплейтов как раз говорит о том, что придумали в свое время хуево.
> у любого языка есть спектр задач, а не каждый язык стремится выглядеть как джава
И потому - мне принципиально надо не знать о типе с которым я работаю? Я не понял логики.
Такой хуйней можно и долгое отсутствие потоков в стандарте оправдать. Лямбд. Ну, другой спектр задач. Ой, блядь, оказывается можно научить язык и теперь они завелись. Ном-ном-ном.
Мне - нужен способ узнать тип нормально. В рантайме. Пусть для меня и таких как я - в языке будет. Кому не надо - пусть у них не будет. Еще раз - уник поинтеры - не зерокост, если ты их используешь, но они упрощают жизнь тем кому оно надо.
> makefile
Ничем не лучше пачки баш-скриптов. Попробуй мейком просто собрать проект, который делали в другом окружении. Линукс<->Винда. В 90% случаев - нихрена не соберется. И ты будешь все равно руками разгребать этот мусор.
> Ну и дебил. Хоти дальше.
Не переоценивай язык, няша. Это инструмент, чтобы заставить машину делать то что я хочу. Не более. Не я виноват, что нужные мне библиотеки - не имеют нормальных оберток, и придется таки в ваше болото погрузиться. Но я справлюсь, базарю.
> И как компмлияор должен понять откуда это T?
В 95% случаев - людям нужно: для всего.
В 5% случаев - есть ограничения, как в той же джаве или шарпе.
Java:
T Add<T extends Number>(T a, T b) { }
C#
T Add<T>(T a, T b) where T : INumber, new(), class { }
> Шаблонный параметр или класс объявленный хуй щнает где?
Сама модель типов должна быть такой, чтобы языку было строго похуй. Есть тип. Какой-то класс - это просто способ описать свой тип. Для языка должно быть строго похуй в контексте обобщенного программирования - шаблонный параметр это или тот самый класс.
> Нахуй ты правила джавы на плюсы переносишь?
Потому что это тупо удобнее. Вот и все. Писать код там же где ты его объявил - удобнее. Ты же не являешься ебанатом с паскаль-лайк подходом, который все переменные объявляешь до их вызова? Думаю нет. Объявляешь по необходимости. Но чет с методами и типами - я должен зачем-то в голове эту хурму держать.
> Ты не понимаешь - значит синтаксис плохой и никто не понимает?
Я понимаю как раз, я говорю что он хуевый, и даю примеры где сделано лучше. Да, женерики != темплейты, но то что все сейчас используют варианты женериков вместо темплейтов как раз говорит о том, что придумали в свое время хуево.
> у любого языка есть спектр задач, а не каждый язык стремится выглядеть как джава
И потому - мне принципиально надо не знать о типе с которым я работаю? Я не понял логики.
Такой хуйней можно и долгое отсутствие потоков в стандарте оправдать. Лямбд. Ну, другой спектр задач. Ой, блядь, оказывается можно научить язык и теперь они завелись. Ном-ном-ном.
Мне - нужен способ узнать тип нормально. В рантайме. Пусть для меня и таких как я - в языке будет. Кому не надо - пусть у них не будет. Еще раз - уник поинтеры - не зерокост, если ты их используешь, но они упрощают жизнь тем кому оно надо.
> makefile
Ничем не лучше пачки баш-скриптов. Попробуй мейком просто собрать проект, который делали в другом окружении. Линукс<->Винда. В 90% случаев - нихрена не соберется. И ты будешь все равно руками разгребать этот мусор.
> Ну и дебил. Хоти дальше.
Не переоценивай язык, няша. Это инструмент, чтобы заставить машину делать то что я хочу. Не более. Не я виноват, что нужные мне библиотеки - не имеют нормальных оберток, и придется таки в ваше болото погрузиться. Но я справлюсь, базарю.
Твои extends where в жабе и шарпе сосут у плюсов с причмокиванем
https://en.cppreference.com/w/cpp/language/constraints
Концепты в плюсах не на наследовании основываются. Соответственно синтаксис другой. Ты там можешь проверить какие-то отдельные свойства у обобщенных параметров, а можешь сотни требований сделать. Например что их можно сравнивать с данными такого же типа или что они занимают такой-то размер в памяти.
https://en.cppreference.com/w/cpp/language/template_parameters
У шаблонов бывают параметры не связанные с типом
Ты
>Есть еще cmake. Он может быть приятнее в чем то (хотя и он потом до make прелбразуется)
cmake это "configure make" это не скрипт сборки а скрипт конфигурации, ну и помимо make есть еще ninja build, который вроде как заточен на тяжелые проекты и многопоточность.
Да.
так а нахуй без них писать?
я вот без клавиатуры писать не могу, это же не значит что я должен учиться голосовому вводу
что то конструктивное сказать есть что?
ну или объясняй какое отношение чатгпт к этому посту имеет
>В плюсах в 2024 году - это почему-то надо.
Дело не в однопроходности. Компилятор проходит сколько нужно раз. Внутри класса, например, можно использовать методы в любом порядке, без предварительной декларации.
>В жаве - я беру и прямо в модуле пишу код
Джава гораздо проще как язык, там нет препроцессора, дженерики куцые, поля класса - это или примитивы или указатели, структур нет, единицы компиляции четко определены. В С++ все гораздо сложнее, у компилятора нет 100% возможности вывести тип без контекста.
>Так и в чем проблема добавить ее?
Это не так просто. Уже лет 10-15 добавляют. В С++26 обещают сделать.
Вы там как в джаве, вообще без фабрикабстрактныхфабрик кушать не можете? Обязательно фабрики сходу лепить?
Пиздец у тебя на скрине, конечно. Ты совсем не понимаешь, как темплейты работают в плюсах. Это не дженерики в джаве, в рантайме их нет.
Про что щас узнал. Я просто из скриптовых языков пришёл, там такой хуйни нету. Следите за руками.
class first { public: int foo; };
class second : first {};
class third : second {
public:
void bar() {foo = 99999}
}
Вот так не будет работать, потому что foo в данном контексте приватное. А вот если в секонде публично его переобъявить - тогда норм будет работать.
Такие дела, вдруг кому полезно будет.
Ебать, не знал, спасибо
Бля, да в самых первых главах про ООП в любом учебнике по крестам разжёвывают про публичное и приватное наследование. Но это же путь для тех, кто читает книги, слишком сложно, лучше будем видосики смотреть.
Полезное сокращение. Без него точно все бы заебались писать каждый раз бойлерплейтный private.
Ты молодец, что читал учебник.
>лучше будем видосики смотреть
Вот щас обидно было. Ни одного видосика по плюсам не смотрел, своил исключительно по цппреференсу и метаниту. Плюс про инклюд гуарды и void* указатели мне подсказал друг-сишник (презирающий плюсы, лол). А основы программирования как такового я выучил на интерпретируемых языках.
Вообще, этот ваш цпп - пиздец какая легаси залупа, если честно, тянущая обратную совместимость аж из 1980х. Но мне очень нравится отделение интерфейса от реализации, такого в скриптовых языках не хватает, чтоб прям по разным файлам разнесено было.
>>44469
Вот это, кстати, я тоже читал, но так давно, что успел забыть, а ты напомнил. Имеет смысл, да.
Стимдек очередная вендорлокнутая консоль. Линукс - прошивка для вендорлокнутых говнин. Заметь как на релизе стимговна этот пидор обещал там винду, но хуй там, сначала протормозил в молчании, а теперь вообще пропагандирает стимкал как "Для тех кто хочет ОТКАЗАТЬСЯ от гейминга на винде". По сути и устройство и линукс на нем это параша для тех кто хочет отказаться от гейминга попав в зависимость от говно-корпорации с её кастомной залупкой несовместимой ни с чем кроме самой себя. Слыш, раб, купи корпоративную затычку. Вот для чего нужен линукс, вот чему он служит.
Так что линуксом занимаются только корпоративные рабы на зарплате. Кто возится с линуксом не получая за это деньги от корпорации, тот просто безмозглый лох.
>попав в зависимость от говно-корпорации с её кастомной залупкой несовместимой ни с чем кроме самой себя
База. Стим кстати так же силой навязывали. Ты просто не мог запустить игру, не установив эту прокладку, не смотря на то что ты купил игру. Сперва они мучили лишь потребителей своего же кала, можно легко нагуглить "восторженные" отзывы о стиме времен выхода хл2 и эпизодов. Но вконце 00х почти все игры перешли туда.
Бесконечная уважуха тому же Нотчу, что распространял игру через Веб, а не Стим.
Кстати тут ещё можно увидеть, почему ОпенСурс это зло. Какой-то чел сделал Вайн, другой сделал dxvk, корпорация взяла этот софт и сейчас с помощью неё стрижет бабло. Комитить в опенсурс = быть куколдом.
Дело даже не в стрижке. Ну открытый код открыт, каждый может взять и стричь бабло, это нормально. Проблема в том, что корпорации только берут, но обратно не дают. Вот Валв сделали на бесплатном линуксе за чужой счёт прошивку для своей залупы которая более-менее удобна и можно во что-то играть. Но так и залочила эту работу только для себя, на ПК это не поставишь, не получишь обратно. Корпорасто-хуесосы только берут, но не отдают. Так бы можно было бы поставить эту стим-ОС (или как она там) на ПК и иметь качество лучше чем этот слабосильный планшетик, но нет же, корпожид не позволит, он лочит только для себя. То есть, опенсорс и линукс спонсируют корпорабство, помогают устраивать цифровой гулаг по-дешевке. Так бы эти жадные корпы может и не смогли сделать свою систему с нуля ради своего любимого рабства, но линукс дает любому скоту легкий способ устраивать рабство, и это всё под лозунгами визга "мы за швабордку! линукс - швабода!". Ну охуеть вообще, самый жирный перефорс века. Почему все корпы нынче так любят линукс, да потому что это халявав и лучший инструмент для свиноскотского корпорабства, вот прочему. Это то, что корпорации хотят, естественно они любят линукс и опенсорс который им круто помогает.
Хотя зная что это арч можно обычным способом поставить https://store.steampowered.com/steamos/download?ver=steamdeck
Через арчстрап например
>Так бы можно было бы поставить эту стим-ОС (или как она там) на ПК и иметь качество лучше чем этот слабосильный планшетик
Стим на любой линукс устанавливается без проблем.
Корпораб включил дебила, типа прочитать не смог и серет тупостью, когда речь была вовсе не про сраное приложение, а про всю Ось которую ставят на корпоративный планшетик, и хуй ты её еще куда поставишь, прибито гвоздями к анальному локу гулага. Хули толку с говноприложения га новнолинуксе на котором нихуяы не работает, когда эта корпа даже графическое ядро системы своё понаписала (расширения Вейланд), ведь имеющееся - нерабочее говно. И такой весь линукс, просто говно нерабочее, не ОС, а конструктор ОС, до рабочей ОС его доводят только корпы, но корпы не делятся, лочат только себе. В итоге корпы жируют на халяве, а простые линуксо-лохи сидят в говне навечно и пашут на корпов бесплатно.
Причем пашут все, даже простой тупорылый хуесос итт, который ни строчки кода не написал и не напишет, одними своими кукареками про "линукс-крута" уже рекламирует эту парашу привлекая рабов которые уже реально пашут на корпожида. Вся система линукса устроена срать на людей и обогащать корпорации, причем так, что эти жертвы еще добровольно корпов защищают и систему эту защищают и рекламируют везде.
карина-таблеточки.webm
Сам плюсач, есть одна тян.
Можем, sizeof(). Или есть разница?
Вот из-за таких syntactic short-hand плюсы и не любят. Язык прячет выжные для семантики детали, а читающему код надо держать в голове сотни вот таких мелочей чтобы просто понимать как прога работает. Лучше уж бойлерплейт.
>>44480
Оставь void* в сях. Да и там лучше без них обойтись.
всё так. и ИМХО плюсовые интерфейсы (то есть эйфелева башня из костылей, имитирующая интерфейсы) тоже не фонтан. тебе бы джаву глянуть.
Вот из-за таких опечаток русский язык и не любят.
Всем привет. Подскажите, что лучше учить с целью понимания низкоуровневых концепций (указатели, ручная сборка мусора и пр) C или C++? Я так понимаю C++ более обширный, но его есть смысл учить, если прям целенаправленно хочешь на нем писать дальше. А мне нужно просто познать внутрянку после петухонов. Обычного C для этого хватит или все таки лучше плюсы? Или может есть какой-то облегченный C++?
Дело в стрижке. Жирной пидор сэкономил сотни тысяч, а то и более, долларов, на разработке ОСи или договора с МС. Плюс не появились рабочие места. Как ты думаешь, скинул он хотя бы долларов 100 девелоперам вайна с dxvk?
ОпенСурс это выгода для корпораций в виде дикой экономии. Для разрабов же это меньше рабочих мест и статус куколда.
Изучив С/С++ ты не познаешь внутрянку. Чтобы познать внутрянку нужно читать книги или проходить курсы по этой теме.
Можешь nand2tetris навернуть. Лучше, наверное, в смысле теория+практика нет. Есть отдельные книги, что теоретически лучше, но их уже потом сможешь прочесть, если нужно будет.
Плюсы не добавляют ничего низкоуровневого к сишке. Только и сишка сама не очень-то низкоуровневая, ниже указателей по сути и нет ничего.
2 столбец пикчи в нюфаг-треде, как правило посредством C. Современный C++ вообще уходит от низкого уровня, и его туториалы скорее дают советы "как обойтись без указателей".
В сишке есть longjmp еще
Функциональщину уже полным ходом завозят.
Рассказываю. Я сам пришёл из скриптоговна, причём совсем недавно.
>указатели
Использовать в следующих случаях:
1. У тебя какой-нибудь объект, который не хотелось бы лишний раз копировать. Например, экземпляр класса или структуры, или массив. С такими вещами, тащемта, и в скриптовых языках обращаются как с указателями, просто в слух не говорят. С ними всегда надо так:
MyClass huy = new MyClass();
huy->zalupa = 1;
И всё. Ничем не отличается от скриптовых, только вместо точки не забывай использовать -> .
2. Тебе надо сымитировать нетипизированное поведение. Делается через void. Такой тип можно преобразовать во что угодно вообще без затрат, а потом записать в него что хочешь. Но вообще, сюда не лезь, оно тебя сожрёт.
3. Передать в функцию значение по ссылке, если не хочешь лишний раз копировать переменную. Имеет смысл, когда точно знаешь, что внутри функции с ней ничего не будешь делать, зато функцию будешь вызывать 100500 раз в секунду - оптимизация.
4. Передать в функцию значение по ссылке, чтобы сымитировать несколько возвращаемых значений. Тут наоборот - ты эту переменную внутри функции точно поменяешь и таким образом "возвращаешь". Использовать очень осторожно; и вообще, несколько возвращаемых значений - это зло даже в языках, где оно официально разрешено.
Всё, в остальные случаи ты вряд ли ты захочешь лезть без глубинного понимания. А глубинное понимание появится после практики с этими четырьмя.
>ручная сборка мусора
Просто на каждое new в коде должен быть свой delete, и будет тебе счастье. Если не будешь использовать хуйни вида malloc, memcpy и прочую прямую работу с памятью в обход типизации, то этого правила тебе будет достаточно. А если будешь - что ж, F
>Передать в функцию значение по ссылке, если не хочешь лишний раз копировать переменную. Имеет смысл, когда точно знаешь, что внутри функции с ней ничего не будешь делать, зато функцию будешь вызывать 100500 раз в секунду - оптимизация.
И где возникают указатели при передаче по ссылке? А еше ты про const не знаешь походу. Охуенный ты советчик. И таких полон тред
1. Ссылки. И да, ссылки != указатели.
2. Дженерики и тайп касты. Они тоже тебя сожрут, но анализаторам кода будет чуть проще.
3. Ссылки, на крайняк smart_ptr и unique_ptr. Добро пожаловать в ручное управление сроком жизни объектов, это надо знать.
4. Объект как возвращаемое значение. Но да, так и так моветон.
>Просто на каждое new в коде должен быть свой delete
Ни разу не просто, когда проект больше сотни строк. Учи принципы владения объектами.
Описанные тобой приёмы пришли с дремучих времён, когда на сишечку натягивали ООП, а кроме указателей других инструментов не было. Их применение плодит баги, сегфолты и утечки. Архитекторы языка сделали работу над ошибками (не идеал, но всяко лучше чем было), и начиная где-то с C++11 чистые указатели - это легаси либо эмбеддед код.
>Я сам пришёл из скриптоговна
Выйди и зайди нормально
Ты когда-то что-то внутрь функции передаешь, и это не должно меняться, то пишешь const перед параметром.
int square(const int x&) например.
Ещё, если у тебя есть функция в классе, и она не должна менять кишки класса, то ты тоже можешь приписать const
int square(const int x&) const
называется вся эта байда const correctness
Вопрос на засыпку что это значит
class Person {
private:
std::string name;
public:
std::string getName() && {
return std::move(name);
}
const std::string& getName() const& {
return name;
}
}
>MyClass huy = new MyClass()
Блять, я всё-таки проебал звёздочку. Точнее, её сожрала макаба. После первого MyClass должна быть.
>>45679
>Охуенный ты советчик. И таких полон тред
Между прочим, честно предупредил, что сам такой же нуб, пришедший из скриптоговна.
>И где возникают указатели при передаче по ссылке?
Поверь мне, на первых порах можно не фокусироваться на их различиях. Всё равно области применения разные.
>про const не знаешь
В контексте передачи аргумента по ссылке это было не особо существенно.
И да, ключевое слово const - не нужно.
>>45718
>1. Ссылки
Нихуя, оператор new возвращает указатель на экземпляр класса.
>Дженерики и тайп касты. Они тоже тебя сожрут
Вообще, у меня сложилось впечатление, что именно типизация - самое сложное в сях. Не указатели.
>Их применение плодит баги, сегфолты и утечки.
Ну тут да. Особенно тайпкаст указателей. Это пиздец. К счастью, на такой случай человечество придумало санитайзеры.
>чистые указатели - это легаси либо эмбеддед код.
Я бы с радостью разделил твой оптимизм, но в тех проектах, у которых мне доводилось видеть исходники, это вполне себе база. Ну и к тому же, на мой взгляд, гораздо правильнее писать ядро на плюсах по хардкору с указателями, а управлять этим всем (и рисовать морду) при помощи скриптовых языков.
> пришедший из скриптоговна
Никто ниоткуда не приходит, а значит и не уходит. Все, всегда , перманентно находятся в своём состоянии. Если ты "из скриптоговна", значит ты в скриптоговне, был, есть и будешь навечно. Здесь тебе не место, но лезешь и изображаешь из себя. Это лишь тупая игра, дуришь сам себя и серешь вокруг.
Но не подумай плохого, ты хоть не конченый дебил как твой собеседник, тот вообще просто кусок тупого дерьма не годный ни на что.
Я вообще с css стилей и регекспов начал, и постепенно спускался до си, плюсов и ассемблера.
> омежка пытается самоутвердиться считая изучение языков каким то невьебенным навыком, а уж если плюсы выучить то ты сразу тру программистом становишься
Кто среди студентоты такое форсит?
>>45718
> начиная где-то с C++11 чистые указатели - это легаси либо эмбеддед код
Хорошо что половина софта который тебе придется разрабатывать не появился раньше с++11 и естественно никто его переписывать не собирается
Не говоря уже о том что десктом на кьюте сырыми указателями пользуется, пользовался и будет пользоваться не или выйдет qt7 и придется опять весь софт переписывать
>и начиная где-то с C++11 чистые указатели - это легаси либо эмбеддед код.
Для передачи параметров все указатели как использовали, так и используют. Для хранения - лучше оборачивать какой-то в умный указатель, но в 90% случаев владелец всегда один, и достаточно unique_ptr или тупо new-delete, и запрещенное копирование у класса. Shared_ptr обычно редко нужен, и городить их везде по дефолу - плохая идея.
Программирование не навык, а образ мышления. Обосранному скриптами мозги уже не вправить, он научился, мировоззрение зафиксировалось. Дальше можно только подниматься к более тупым скриптам, но опуститься на низкий уровень нельзя.
>Обосранному скриптами мозги уже не вправить
Да ладно, диды с бейсика начинали, и написали весь современный софт.
> Программирование не навык, а образ мышления.
сможет кто в треде переплюнут по тупости эту фразу?
Что дальше будем романтизировать, школьную алгебру?
>(hex & 0xff000000) >> 24;
И по идее должно выйти 0x000000ff
И что он потом обрежет когда приведу к uchar? Нолики или ff?
Но после Бейсика им приходилось учить Ассемблер, потому что альтернатив порой не было.
Каст это обычная операция, он работает над своим операндом, а не над аргументами функции, результат которой в него передается.
(uint8_t)0x12345678 == 0x78, старшие разряды отбрасываются при narrowing conversion
Он создал возможность для тебя перенаправить энергию своей зависти в русло создания такой же ебатории.
Не забудь 100 баксов разработчикам вайна.
>Корпорасто-хуесосы только берут, но не отдают
Они не могут не отдавать, если лицензия их принуждает к этому. Иначе в США их просто засудят на бетабаксы.
То что разработчики выбирают MIT или BSD для своих поделок исколючительно их вина. У Wine кстати GPL, также как и у ядра линукса, не понимаю бухтение.
>Как ты думаешь, скинул он хотя бы долларов 100 девелоперам вайна с dxvk?
dxvk буквально делают люди у него на зарплате.
Объясните мне таки сакральный смысл разделения на cpp и hpp если тот же шаблонный код - ты так писать не можешь и тебе все прям говорят - пиши сразу в hpp и не выебывайся?
Просто я вот пытался нормально, раз уж заставляют делить - буду делить. Не дураки же придумали.
Но что я получаю - получаю ебельдь и совет - ну, смотри, если хочешь в cpp реализацию держать - ты все шаблончики явно проинициализируй, чтобы линкер знал что такое понадобится.
Я такой - ок, понял - шаблонный код сразу в hpp и не выебываемся.
Я даже решил, мож я дурак - полез внутрь векторов, карт, посмотрел. Они тоже - сразу в заголовочном файле и не выебываются.
Но ведь весь смысл тогда ломается же нафиг. Мож я чего пока не понял, но гуглеж в течении 2 часов показывает, что ты либо в .hpp пишешь сразу, либо в этом же hpp все нужные варианты прописываешь а реализацию таки выносишь. Второй вариант - сразу идет нафиг, ведь я не знаю что мне там понадобится ведь если бы знал - прост иерархию объектиков построил и передавал интерфейс.
Просто вилка в виде - для шаблонов так, для обычного так - выглядит как посос полный.
Так исторически сложилось.
Все нешаблонные функции делаешь inline и можешь ничего не разделять, если сильно бесит.
Я так и не понял чем CMake принципиально отличается от того чтобы я сделал g++ ./src/*.cpp -o build/app.exe -Llibs -Iinclude
Все так же прописываешь. Получаешь какую-то магическую партянку из Makefile, какого-то СmakeCache и прочего разного. Но уже разобраться без поллитра как оно работает - становится невозможно. Какие-то заклинания, а на самом сайте с доками - просто грят: вот вставь эту магическую штуку, и будет счастье.
Пока решил - буду дальше собирать через баш. Оно и проще и понятнее и вообще. МБ потом пойму. Пока ./build.sh и погнали.
Ты придумал make.
Кто то пробовал с Раста на Плюсы переписывать, на сколько Раст далек от нормальных языков?
Да в целом не сложнее чем с других языков, много конструкций нормально на плюсы переноситься
Единственное код будет поуродливее выглядеть, в расте покрасивее можно ошибки с Option/Result обрабатывать
Возможно придется свои велосипеды писать, хотя когда в плюсах было иначе
Проблема не в том чтобы написать аналог cargo, а в том чтобы им начали пользоваться
Какой смысл от твоего package manager если в нём нуль пэкеджей
А так как все свои проекты люди собирают на чем угодно, заставить их переехать на твой велосипед == невозможно
Поэтому создать билд систему и пэкедж менеджер как единное целое у тебя не получится, в итоге максимум что может получиться это conan
>Какой смысл от твоего package manager если в нём нуль пэкеджей
Да на пакеты даже пофиг на самом деле. Киллер фича - это билд скрипты. Добавляешь build.rs, и на том же языке делаешь всё, что угодно. На этапе сборки, с использованием любых либ, без ограничений constexpr.
В симейке нужно сделать дополнительный таргет, определить кастомную команду, добавить в сорцы (удачи с первого раза угадать, по какому пути пропишется этот файл), хуё-моё.
Какого хрена я должен всем этим заниматься, чтобы скомпилить ебаный шейдер?
> чтобы скомпилить ебаный шейдер
Неосилятор, спокнись, если ты шейдеры под конпелируемые языки гоняешь, то дело явно в тебе
Не, я понимаю, что SPIR-V для казуалов, а тру геймдевы пишут прямо на ассемблере гпу, но не всем же писать Крузисы.
>а тру геймдевы пишут прямо на ассемблере гпу
Тру геймдевы пользуются пеcочницами и тем же WebGL2 для прототипирования, а не пердолятся с конпеляцией.
Иди здесь https://shdr.bkcore.com/ играй со своими шейдерами.
Дожили, теперь даже для CG плюсы не годятся.
Я тут попробовал SCons и больше не ебусь со сборщиками. Правда, пока только основу понял, но этого оказалось достаточно. Вот как сейчас выглядит мой сборочный скрипт:
>Program("имя_программы",
> ["file1.cpp", "file2.cpp", "file3.cpp"],
> LIBS=["lib1", "lib2"])
И всё, это полный текст. Человеко-блин-понятный, а не те мейковские баш-портянки. Собирает, собранное нормально запускается. Конечно, там ещё окружение можно как-то прописывать, флаги. Но это всё можно раскурить по мере надобности.
И весь сборочный скрипт написан на питхоне, то есть настоящем языке программирования, то есть его можно как угодно расширять под свои нужды, и это не будет непонятное колдунство по рецепту.
Вот тебе пример из проекта, который я щас пишу (имена изменены для большей контекстуальной понятности) (символ звёздочки защищён от макабы).
//parent.h
#pragma once
#include "child.h"
class Parent {
public:
Child★ children[];
unsigned int num_children;
void askforbeer(Child★);
int beer = 0;
}
Окей, тут всё понятно, батя может попросить у сынули пива, ссылка на детей у бати имеется.
//child.h
#pragma once
class Parent;
class Child {
public:
Parent★ parents[]; // num не нужно, всегда двое их
void bringbeer(Parent★);
}
Тут мы уже наблюдаем своеобразную рекурсию. Ребёнок - поле родителя; родитель - поле ребёнка. Понятно, что им надо друг на друга ссылаться, и выходит рекурсивная зависимость. Поэтому у ребёнка нет инклюда parent.h, вместо этого просто объявляем сам факт существования класса Parent - этого будет достаточно, чтобы в заголовке иметь этот тип.
А дальше самое весёлое.
//parent.cpp
#include "parent.h"
void Parent::askforbeer(Child★ child) {
child->bringbeer(this);
}
Тут уже надо знать, что сынуля умеет приносить пива. А значит надо инклюдить полноценный заголовочник. К счастью, это уже сделано.
//child.cpp
#include "child.h"
#include "parent.h"
void Child::bringbeer(Parent★ parent) {
parent->beer++;
}
А вот и мякотка. Сынуле тоже необходимо знать, что у бати есть поле beer, а не просто что батя существует. Сынуле тоже надо подключить батин заголовок целиком. При этом ему не важно знать, что там батя с этим пивом будет делать. А бате не важно знать, откуда сына это пиво достанет. Они просто оба знают о полях друг друга. Как результат - цппшники нормально собираются. Без разделения заголовков отдельно это был бы пиздец из зависимостей.
Это всего один пример. Но, повторюсь, такое вот кольцо из зависимостей (тип А это поле класса Б, тип Б это поле класса А) я разрулил прямо сейчас в своём проекте. На скриптоговне без разделения объявления и реализации - не смог бы (но без строгой типизации сама проблема эта легко обходится). Есть и другие причины, почему разделять важно, так что делай это не думая - однажды оно тебе внезапно пригодится, а ты уже будешь готов.
Вот тебе пример из проекта, который я щас пишу (имена изменены для большей контекстуальной понятности) (символ звёздочки защищён от макабы).
//parent.h
#pragma once
#include "child.h"
class Parent {
public:
Child★ children[];
unsigned int num_children;
void askforbeer(Child★);
int beer = 0;
}
Окей, тут всё понятно, батя может попросить у сынули пива, ссылка на детей у бати имеется.
//child.h
#pragma once
class Parent;
class Child {
public:
Parent★ parents[]; // num не нужно, всегда двое их
void bringbeer(Parent★);
}
Тут мы уже наблюдаем своеобразную рекурсию. Ребёнок - поле родителя; родитель - поле ребёнка. Понятно, что им надо друг на друга ссылаться, и выходит рекурсивная зависимость. Поэтому у ребёнка нет инклюда parent.h, вместо этого просто объявляем сам факт существования класса Parent - этого будет достаточно, чтобы в заголовке иметь этот тип.
А дальше самое весёлое.
//parent.cpp
#include "parent.h"
void Parent::askforbeer(Child★ child) {
child->bringbeer(this);
}
Тут уже надо знать, что сынуля умеет приносить пива. А значит надо инклюдить полноценный заголовочник. К счастью, это уже сделано.
//child.cpp
#include "child.h"
#include "parent.h"
void Child::bringbeer(Parent★ parent) {
parent->beer++;
}
А вот и мякотка. Сынуле тоже необходимо знать, что у бати есть поле beer, а не просто что батя существует. Сынуле тоже надо подключить батин заголовок целиком. При этом ему не важно знать, что там батя с этим пивом будет делать. А бате не важно знать, откуда сына это пиво достанет. Они просто оба знают о полях друг друга. Как результат - цппшники нормально собираются. Без разделения заголовков отдельно это был бы пиздец из зависимостей.
Это всего один пример. Но, повторюсь, такое вот кольцо из зависимостей (тип А это поле класса Б, тип Б это поле класса А) я разрулил прямо сейчас в своём проекте. На скриптоговне без разделения объявления и реализации - не смог бы (но без строгой типизации сама проблема эта легко обходится). Есть и другие причины, почему разделять важно, так что делай это не думая - однажды оно тебе внезапно пригодится, а ты уже будешь готов.
>половина софта который тебе придется разрабатывать не появился раньше с++11
Да, легаси много, но это не повод застревать в старых приёмах вечно. Новым кодерам - новые стандарты. Так и растёт язык.
>спойлер
Ну вот, ты и сам шаришь.
Да даже если "придётся" ковыряться в легаси, то в принятых на проекте костылях лучше разбираться на месте.
>Qt
Адаптирован с шестой версии. И плевать, что там копошится в недрах фреймворка.
Когда prvalue и xvalue раздербанят на какие-нибудь pprvalue, mbxmbnotvalue и napolshishehkilvalue и ведь когда-нибудь раздербанят ъ
Лучше пусть дадут определять кастомные ⚹value, вот тогда заживём.
>Выделил жирным шрифтом
>Ты про &&?
Ворос, когда сработает перегрузка выделеная жирным шрифтом.
Пример из джосатиса
Когда объект будет lvalue
>Кроме языка эсессна, но смысл писать сценарии сборки именно на расте я тоже не вижу.
>
Общие типы и возможность перетащить в рантайм и из рантайма же.
>Общие типы
В сценариях сборки? Какие там типы нужны кроме string?
>перетащить в рантайм и из рантайма
...допустим, но ИМХО звучит как багодром. Рантаймы сборочной машины и машины юзера будут отличаться, эти отличия будут всплывать в самых неожиданных моментах; всего не учесть. Я бы откладывал промежуточные результаты в файлики.
>В сценариях сборки? Какие там типы нужны кроме string?
>
Я еще игровую базу данных собираю. Вместо пердолинга с сериализацией в какой-нибудь эс ку лайт просто делаешь несколько инсертов в б-дерево. В рантайме остаётся замаппить файл в память и пользоваться той же самой структурой данных, что и при создании. Работает быстрее, чем при каждом запуске обходить ФС, и основной код становится чище.
>перетащить в рантайм и из рантайма
Блять. Из компайл-тайма в рантайм. Если мне потребуется переписывать шейдеры на горячую, я смогу взять ту же самую либу, которую использую сейчас и вся остальная логика почти не поменяется. Или наоборот, если какой-то функционал окажется не нужен в рантайме, я смогу перетащить его в билд-скрипт с минимальными изменениями. Удобно.
Бейсик это ассемблер, ты хоть глянь картинки в гугле как он выглядит, тупорылая пориджила. И в то время работа с компьютером это работа с железом, просто не существовало никаких абстрактных маняскриптов изолирующих свиномакак от машины, даже теоретически на них бы банально ничего не заработало, слишком медленно. На бейсике напрямую вставляли машинные коды и обращались к прошивке за аппаратными возможностями.
Почему в других языках, вроде жавы и шарпа, все просто работает, без такой вот хуйни?
В обоих языках есть интерфейсы. Без них со строгой типизацией не обойтись, постоянно будешь вляпываться в зависимости. А в интерфейсах можно кратенько всё нужное описать, оставив реализацию в другом месте. Зато, делая foo.bar(), ты точно знаешь - у foo есть метод bar.
А в питхоне, жабаскрипте, луа - типизация динамическая, и ты можешь написать foo.bar() без всяких интерфейсов, просто придётся следить, чтобы в foo случайно не залетело что-то без метода bar.
Тащемта скриптовые языки не предназначены для сложных программ с комплексными зависимостями. А строго типизированные - предназначены. И динамическая типизация дорогая и медленная, потому что перед каждым чихом приходится проверять кучу нюансов.
> foo.bar() без всяких интерфейсов, просто придётся следить, чтобы в foo случайно не залетело что-то без метода bar.
В некоторых можно и не следить, но выглядит некрасиво - foo.bar?.()
Я макбукобоярин, посоветуйте редакторов и ide для разработки на С++
Ебучий вим или нано с емаксом не предлагать, спасибо
Придётся тебе ставить виртуальную машину с виндой и туда Visual Studio.
У вас же есть хкод. Хуле ты нос выёбываешься? Взял мак - ебись в икскод.
Msbuild очевидный
Сначала make, для пет-проектов его хватит за глаза. Когда подключишься к проекту побольше, смотри как там настроен CMake и разбирайся на месте.
+ TUI
+ лабиринт хоткеев кстати половина стянута из vi, а вторая из kakoune
+ зоопарк плагинов чтобы дотянуть до IDE
Для всех кроме фанатиков - тот же вим
>Дак что в итоге учить из сборщиков? make или Cmake?
И то, и другое
Cmake стандарт, и чтобы сразу был вкат в language server, без костыля в виде bear, make'ом можно собирать небо и аллаха по жизни пригодиться.
https://github.com/movepointsolutions/iv
Вот, что доктор прописал
Тысяча баксов позора на доработку, и можно втирать сисястой эльфийке-офис-менеджеру, что это ранняя версия vi, которую написал сам Иисус с апостолами
https://www.youtube.com/watch?v=VMpSYJ_7aYM
А ещё он удобней, на нем меньше вероятность создать баги, да классно.
Но Rust всё равно дно, потому что пик. Согласны коллеги?
Это ещё хуже. Например:
> a = foo.bar?.()
> bleble = a.blabla?.()
> return bleble.x + blublu.y
Ну и дальше вообще пиздец ищи-свищи, где ошибка. Уж лучше как в луа:
> if not foo.bar or type(foo.bar) ~= "function" then
> print("Error!!! Vse propalo!!!")
> return
> end
Но такие конструкции добавляют ещё немного к общему времени исполнения, которое при гибкой типизации и так немаленькое.
Для решения любой задачи стараюсь использовать сначала самые глупые инструменты; а потом, если им не хватает функционала, заменяю за более сложные и умные.
Если указатель полностью живёт внутри экземпляра класса, или если я чётко знаю, когда происходит new и когда delete, то не вижу смысла что-то усложнять.
А смысл этот появляется в комплексных проектах, где не так просто уследить за указателем. Например, когда он много где используется. Или когда разные части проекта разрабатывают разные люди.
Понял, спасибо. В целом логично
Настолько ранняя, что большинства ed команд не реализовано
>а потом, если им не хватает функционала,
пытяться вкорячить другой, успокаивать компилятор, вскрыть муравейник багов, неделю мучаться с переходом, плюнуть и начать всё заново
Не, я только за простые решения для простых задач, но желательно заранее прикинуть, не станет ли задача сложнее. А если станет, поискать, не решали ли её до меня, и к какому результату пришли. И кто бы мог подумать - поиск обычно заканчивается в доках STL или Boost!
А голые указатели всё-таки удел сишников.
>желательно заранее прикинуть, не станет ли задача сложнее.
Согл. Не уточнил:
>стараюсь использовать сначала самые глупые инструменты соответственно потавленной задаче
То есть, сначала распланировать задачу, затем взять инструмент достаточно простой.
Если в процессе задача поменяется, и надо будет использовать более сложный инструмент, скорее всего, понадобится меньше телодвижений, чем на переход с более сложного на более простой. Частенько интерфейсы сложных инструментов обратно совместимы с простыми; наоборот встречается гораздо реже.
В общем. У меня вопрос. Я чет не понимаю. Я опять дурак или так и надо.
Собственно. Вот код. В чем суть. Я хочу, хранить и-ю о том какие компоненты сущность себе добавила, чтобы потом - удалить их правильно.
И в чем проблема. Ну, мои хабы - синглтроны темплейтовые. Вот. И типа из-за этого я не знаю как по нормальному при "уничтожении" сущности - разрегистрировать компонент в хранилище.
Типа я вот сейчас сделал что при добавлении нового компонента - вот эта срань происходит, т.е. я в словарик добавляю ключом - шаред поинтер и лямбду на разрегистрацию. Но выглядит это как какой-то посос.
Я сначала хотел просто список вести, но типа чтобы знать из какого хаба удалять - надо знать тип... Вот а в момент уничтожения сущности - я бы знал что просто какой-то компонент есть.
Можно конечно сделать финт ушами, и пусть компонент знает про сущность к которой привязан, тогда я могу просто по всем хабам пройтись, и удалить просто все компоненты с этой сущностью. Но тоже как посос выглядит.
Такие вот дела.
МБ кто-то знает как сделать менее пососно это все дело.
Хм... В принципе - подумал что наверное хаб - может возвращать сам функцию для разрегистрации.
Тогда сущность будет просто их хранить и вызывать и ей вообще про компонент не надо будет знать.
В принципе наверное такой вариант норм.
Но если я хочу чтобы компонент можно было удалить во время жизни сущности - тогда придется делать врапер для удаления компонента. Типа - компонент - разрегистратор. И при удалении компонента из сущности, без полного удаления сущности - можно будет найти враппер такой и его дернуть.
Смотри как сделано в популярных ECS
Например Entt
Смотреть какие компоненты добавлены в конкретную сущность, это вообще противоречит подходу ECS
В системах ты не по сущностям проходишь, а по компонентам из общего реестра
Реестр делается на разреженных структурах данных. Операции удаления и добавления O(1)
Метод обхода шаблоный для набора компонентов
auto view = registry.view<const Component1, Component2>();
view.each([](const Component1 &com1, Component2 &com2) {
//
})
})
Идея в том что в системе автоматически выбираются только те сущности, у которых есть в наличие компоненты нужные для системы
Ну. Я таки не ECS делаю.
Мне просто хотелось компонентный подход применить в классическом смысле. Типа чтобы не каждый раз реализовывать логику с физоном для крысы, персонажа и т.д. и при этом не придумывать хитрую систему наследования; а один компонент который за нее отвечает и его уже все кому надо физон себе получают и радуются. Ну, типа композиция, вся фигня. А сущность это типа такой-то аггрегат просто, чтобы пачку компонентов держать и проще с ними работать.
А ECS классический, как понимаю - это же типа хитрая фигня, которая именно чтобы оптимизировать уже работу с компонентами в плане - хуяк, у тебя завекторизировалось, хуе-мое, хуяк за одну итерацию цикла - сразу 100500 компонентов просчитали что-то что им надо.
МБ я не прав.
В любом случае - да, посмотрю.
VsCode - самый очевидный вариант, относительно легковесный, куча плагинов для всего. CLion, если есть возможность купить или готов пиратить. Eclipse - энетерпрайзненько и тяжеловато, но все фичи есть.
>но типа чтобы знать из какого хаба удалять - надо знать тип...
Почему его компонент не может выдавать? Тупо виртуальный метод у него сделай, который возвращает IComponentHub. Заодно можешь в хабе хранить список интерфейсов, который твой компонент реализует. И потом работать через интерфейсы в компонентах, если тебе не хочется системы делать. Т.е. должен быть метод получить у сцены все компоненты с физоном, рендером, и потом работать с ними через соответствующий интерфейс. В Qt 3D, например, у их компонентной системы это называется "аспекты".
Джава шел -- cocaine нашел
Ладно, пусть указывают как нам тредпулы писать, так она ещё и без реализации там лежит, придётся ещё искать реализацию реализации стандартной библиотеки.
Может все остальные классы тоже заменить на эти ебаные концепты, бля? Зря что-ли на лабах свои стринги и массивы реализуем, будет польза хотя бы, чтобы в будущем проекте перед написанием полезного кода меньше концептов реализовывать.
Чтобы стандартописакам дали медальку, маркетолухи визжали "C++ теперь асинхронный", а всякие шланги с кутями разгребали это говно.
Да ладно, стандарт пока не принят, авось допилят ещё.
>Зачем было добавлять в стандартную библиотеку монстроозную писанину std execution уровня фреймоврка?
Это для куды и OpenMP, я так понимаю. Чтобы можно было код переносить без адаптации. Т.е. реализация в сторонних тулзах будет, а не в стандартной либе.
О какой рекурсивной зависимости ты говоришь если у тебя тупо указатели в структуре?
1. Пишу сборщик homo для С и С++
2. Пишу кросспайлер homoC в C (как Vala)
3. Если проект взлетит, то напишу фронт для LLVM
Пидора ответ
!(кто ебет) || (тот, кого ебут)
Пьяные фины в сауне придумывали
Делал как то плеер и так получилось что перемещение ползунка вручную вызывает рекурсию, так как запись в параметры какого то объекта по сути вызов по цепочке всяких зависимых параметров.
А со списком треков я вообще заебался, при перемещении трека драгндропом надо подсвечивать между какими треками оно встает и так получается если список прокрутить то подсветка начинает уезжать так как в qml нету scrollX scrollY как в html+js, и реально то что в последних делается на раз два без проблем в qml надо ебаться.
В общем уебищная технология на которой только хеловорлд отрисованый ровно по центру хорошо реализовывать, а что-то сложное это анал-карнавал.
В связи с чем и предлагал запилить фреймворк аналогичный Qt только без Q классов, на ванильном стандарте и с html+js+css вместо qml+es для адаптивных интерфейсов.
>В связи с чем и предлагал запилить фреймворк аналогичный Qt только без Q классов
Qt - это еще свой RTTI и свой рефлекшен. Без препроцессора, пока C++26 не приедет, это будет выглядеть как лес из макросов в разы хуже Qt, а с препроцессором будет тот же Qt вид в профиль. Для +- браузерного интерфейса и так полно либ, можно тупо на Skia + какой-нибудь либе для лейаута вроде Clay все слепить за пару недель, причем самое сложное будет инпут текста вроде QLineEdit, и вся платформозависимая фигня вроде нативных диалогов для открытия файлов.
Препроцессор это часть компилятора, причем тут Qt или стандарт шиз?
>Для +- браузерного интерфейса и так полно либ
Перечисли какие знаешь.
>амое сложное будет инпут текста вроде QLineEdit, и вся платформозависимая фигня вроде нативных диалогов для открытия файлов.
libgtk Firefox использует и норм
https://www.nongnu.org/ext2-doc/ext2.html
Как понять иерархическую организацию директорий, если в структуре директории есть только оффсет (до соседнего по текущей директории) файла, имя и айнод; а в айноде - лист блоков, где хранится файл, и другое, но ни намёка, как разные уровни директорий связаны друг с другом?
Спрашиваю здесь, потому что Си-треды унесло куда-то
Только что доперло. Первый указываемый блок в inode.iblock хранит запись директории. Вопрос закрыт, сорян за мусор
https://www.youtube.com/watch?v=tD5NrevFtbU
но зеро кост же... бесплатно же...
> а вот на qt кокошоп написан
С препроцессором серанул решил с другого края зайти?
Не отличаешь qml от qt не лезь вообще тогда, клован блять.
Самое главное это успеть отключить комментарии, чтобы другие пердолики не обоссывали.
Всё так. Я могу его понять. Ютуб не место для обсуждения, это вам не госдума.
https://www.youtube.com/watch?v=8-VZoXn8f9U
База оптимизаций c++ - быть человеком с мозгом и писать качественный код от и до, не думая, что какая то единственая фича ускорит таой код в мильон раз
Анимешная аватарка - это всегда симптом глубокого повреждения головного мозга, конечно.
> В связи с чем и предлагал запилить фреймворк аналогичный Qt только без Q классов, на ванильном стандарте и с html+js+css вместо qml+es для адаптивных интерфейсов.
Зачем что-то придумывать, если есть xaml и winui/uwp?
Язык любви, очарованья, стенания души моей.
Я каждый раз садясь за книги и молча глядя в монитор,
Пытался осознать все фитчи, на код бросая томный взор.
Развеяв грусти и печали, взбодрившись рано по утру,
Я чашку кофе выпиваю и код писать к тебе бегу.
86 смузи-вакансий по написанию нового софта на современном модном блейзинг фаст языке против 1395 вакух по поддержке легаси копролита старше тебя в 2-3 раза на отвратительно задизайненной хуете, от которой медленно но верно отказываются по всему миру.
>ты в каждый тред срешь про пердолей и прочую хуйню, да шиз?
Да, все вокруг шизы, один ты нормальный, с шизами борешься во всех тредах.
Так на смузи языке такую же говно архитектуру пишут. Любой софт со временем превращается в "легаси". Потому что уходят последние люди, которые его разрабатывал и теперь часть проекта является джунглями куда никто не заглядывает. Тут не в языке дело.
Если верить в закон Конвея, то тогда получается, что архитектура наслаивается друг на друга во времени отражая изменения в организации работы компании разрабатывающей этот софт.
В этом случае софт неизбежно скатывается в неповоротливое нечто с нулевой эффективностью требующего кучи разрабов, чтобы он просто продолжал работать с изменяющейся во времени инфраструктурой.
Выход тут один:
1. Делать вайп всего софта и по сути писать его заново
2. Никогда не менять не только архитектуру, но и организацию работы над софтом
Оба варианты утопичны поэтому легаси, говно архитектура вечны до тех пор пока процесс создания кожа не станет принципиально, революционно отличаться от текущего
А это только был один раз когда изменилась или структура организации и границы ответственности отделов создали новую архитектуру или решили изменить архитектуру осознанно. Разница не имеет значения для итогового результата.
Неправда, я вот например пишу новое легаси, над которым будут ломать голову потомки.
Но я перестал понимать, что мне пишут в документации, а все ти шаблоны и прочее... ну для меня не читаемо. У меня проблемы в знании метапограммирования или что?
Всех с наступающим Новым годом! Желаю поменьше легаси, поменьше митингов и зп 500к!
С наступающим!
Насчёт документации: я только после того как сам напишу несколько примеров начинаю понимать что в ней обычно написано.
Линуксолахта это уже не миф, а реальность? Почему и кому выгодно все измазать говном?
Реддит, квора, чатгпт, куда не взгляни все под копирку орут, что гну/линукс вещь необходимая, но умалчивают о плохой поддержке драйверов(не говоря уже о проприетарных), об отъебе графической оболочки после большого обновления, отсутствии нормальной IDE, о использовании opensource поделий заместо норм софтов, о пакетах которые тянут за собой еще дохулиард зависимостей, которые в итоге крашутся к хуям.
Отдельный разговор про реддит, где с серьезным ебальником рассказывают что gdb лучший дебаггер с которым нужно в консольке пердолиться лол
Сам выпей. В зависимости от архитектуры значение этого unsigned числа будет разное, надо сравнивать его с дженерик npos, любые попытки сравнить с числом будут работать некорректно. В чём проблема возвращать signed, где будет нормальное -1? Алсо, что за size_type у них, которому они -1 присваивают? size_t - это unsigned, там не может быть -1. По итогу эти клоуны предлагают пользоваться отрицательными числами с беззнаковыми типами, заебись.
а ты что думал, все тут шутили когда говорили что стл это кал?
с новым годом так сказать, можешь в целом для себя запомнить что плюсовики не умеют в библиотеки, от слова совсем
А по поводу npos, никогда не расчитывай что он будет ниже нуля, проверяй сравнением find(...) != std::(...)::npos
>По итогу эти клоуны предлагают пользоваться отрицательными числами с беззнаковыми типами, заебись.
Вроде бы, size_t n = -1 достаточно понятная запись. Понятно, что отрицательных чисел там быть не может, и в результате в битовом виде получаться 1111...1, т.е. максимальное значение для беззнаковых чисел. И сравнивать с -1 его можно, но больше-меньше работать не будут по понятным причинам. Это особенности беззнаковых чисел, которые знать надо. Многим сложно, да. Не зря в джаве только знаковые числа сделали.
> достаточно понятная запись
Если тебе понятно что это значит, то напиши что за число конкретно в n окажется. Там может что угодно получится в зависимости от размера size_t и архитектуры, переполнение unsigned платформозависимая операция. Это знать надо. В том же расте тебе компилятор просто не даст сделать такое говно, могущее работать хуй пойми как.
А там не будет так, что просто будет сделано число со знаком в двоичной записи, а потом просто будет вписано это представление в беззнаковое число?
>А там не будет так, что просто будет сделано число со знаком в двоичной записи, а потом просто будет вписано это представление в беззнаковое число?
Да, так и будет, я об этом и пишу, -1 - это 64 единицы в двоичном виде. Для беззнаковых чисел - это 2^64-1.
>Там может что угодно получится
И что с того? Понятно должно быть, что с этим числом можно только == сравнивать, а не больше-меньше делать. Ну и реально, в 2023 платформ и компиляторов уже слишком мало, чтобы там что-то экзотическое могло получиться.
>В том же расте тебе компилятор просто не даст сделать такое говно
Там не лучше, на самом деле. Или паник на оверфлоу, или отключаешь эксепшен, и получаешь превращение в тыкву похуже, чем в плюсах.
Там паник на оверфлоу только в дебаг сборке, оно само тключается в релизе. Предполагается что ты нормальную обработку сделаешь если нужно.
let value = i8::MAX;
let result = value.overflowing_add(1); // (i8, bool)
Ты читать не умеешь. Все написано там, надо просто пынимать почему так. Там даже написано почему -1, хотя тип unsigned. Читать научись
>В чём проблема возвращать signed, где будет нормальное -1?
>что за size_type у них, которому они -1 присваивают? size_t - это unsigned, там не может быть -1.
Как же ты заебал, шиойд. Изучи матчасть по целочисленным типам потом приходи высираться.
-1 это просто обозначение числа у тебя в коде
для size_t это число может быть равно 18446744073709551615
процессору похуй что считать, у него в архитектуре для целых чисел нет специального знакового разряда. Целые со знаком просто в дополнительном коде предствляются. Безнаковые представляются обычным способом, число -1 транслируется в 18446744073709551615
мимо
Ты видимо из джаваскрипта привычку распостранил на с++
В жс все числа float-ы. У флоатов есть знак в комлюктере
Какой же отвратительно омерзительный код. Идеальные ссылки, мувы, мутейбл. Как будто бы в этот суп намешали всего самого нового говна.
> В жс все числа float-ы
Нет иначе бы битовые операции например не работали.
Там просто как и в других подобных языках число представлено объектным типом Number который хранит информацию о том в каком формате находится [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger](число)
А так вообще там и строго типизированные массивы есть, пару раз использовал что бы сишную функцию в браузере запустить:
var a = new Uint32Array(2)
a[0] = -1
a[1] = 0xFFFFFFFF
a[0] === a[1] // true
>Там может что угодно получится в зависимости от размера size_t и архитектуры,
Ну так то следует писать (size_t)-1 и все.
>auto String::operator-(Number) -> Number
>auto String::operator+(Number) -> String
>'5'::operator+('2'::operator-())
Джаваскрипт EcmaScript задумывался как легко интерпритируемый в плюсы язык без виртуальной машины, JIT и прочего.
В QML например так и происходит js файлы интерпритируются в C++ лапшу (как выше) и компилируются в бинарий.
Кек, видел эту историю в живую. Тянка училась на qa инженера, поискал работу, не нашла и просто стала трахаться с Олень Оленычем за деньги. Ещё и с гордостью об этом рассказывала как наебала систему.
https://en.cppreference.com/w/cpp/string/basic_string/npos
Note
Although the definition uses -1, size_type is an unsigned integer type, and the value of npos is the largest positive value it can hold, due to signed-to-unsigned implicit conversion. This is a portable way to specify the largest value of any unsigned type
Переходишь дальге по ссылке из статьи и читаешь правила конверсии
Вот так и помогай потом
При написании небольшого клиента можно ли сделать свое значение TTL? В одних источниках написано, что можно это делать через setsocketport, но не удалось найти, как такое делать.
А нах тебе? Шлюзы его всё равно могут и будут менять как им вздумается.
2025 уже был на носу, а он:
>Я бы тоже, честно говоря,
>съебывал в Европу скорее
Ебало представили?
Вот что бывает, когда человек совершенно не понимает, куда движется геополитика.
> При написании небольшого клиента можно ли сделать свое значение TTL?
Можно.
> не удалось найти, как такое делать.
Вряд ли тебе стоит заниматься программированием.
1. Поддерживается любым устройством с GPU
2. Можно параллельно задачи на GPU вместо того, чтобы забивать процессор
3. Крайне не популярный, если загуглить вакансии, то упоминается только в игроделании
Почему работа с GPU как будто игнорируется за пределами игрушек? Это же важный способ увеличить перформанс приложения в случае хорошо параллелизуемой задачи.
дите познает мир
Ладно, эта хорошая была. Проиграл.
Не вижу признаков упадка
Бизнес активно использует машоб и нейросети для решения своих бизнес задач. Под капотом у всяких машоб фреймворков cuda. Ты первокур?
>>54800
Так это работает только с видеокартамми NVidea. Это не запустить на мобилках, на планшетах, на телевизорах, на десктопах с амд видюхами. Opengl поддерживается буквально любой системой и любой гпу.
Вообще надо быть первокуром, чтобы серьёзно скидывать куду как пример универсального решения работы с гпу.
Лол
Я не эксперт, но думаю проблема в том, что GPU может не поддерживать инструкции, которые тебе будут нужны. GPU этот тот же CPU, только гораздо тупее, но зато в нём куча ядер.
Потому GPU ты можешь использовать только для мат. операций в основном.
Чатгопота говорит, что не используют из-за того, что передача данных из главной памяти в GPU и обратно очень долгая и из-за этого время выполнения задачи может быть дольше чем на CPU даже если сама задача идеально подходит для GPU (параллельная, простые математические операции).
Плюс он написал мне код пример и там на эту операцию сравнения нужно создать шейдеры, скомпилировать шейдеры, создать текстуры для массивов данных, создать opengl программу куда передать шейдеры и текстуры, а потом ещё создать текстуры для выходных данных и это всё может упасть в любой момент, поэтому после каждого шага проверка на ошибки в буфере и откат всего сделанного.
В общем, выглядит надежно как швейцарские часы. Тем не менее в моем случае он всё равно выглядит как интересный вариант потому что у меня задачи связанные с обработкой изображений приходящих с камеры и документация намекает, что можно получить доступ к данным которые уже находятся в GPU, то есть без необходимости их передачи туда.
И всё это ради того, чтобы не за 12 мс обрабатывать кадр, а хотя бы за 5 мс.
Ты какой то ебанутый. У видеокарты есть своя память, копируешь их туда (в память текстуры) и обрабатываешь их там, естественно если ты будешь обращаться к массиву в общей памяти никакого выйгрыша не будет, будет только замедление.
Во вторых изрбражения это 2d графика с ней можно делать какие то несложные манипуляции в видеопамяти с вполне себе ускорением. Но если надо накладывать сложные фильтры или делать какие то развороты то надо использовать 3d контекст и писать на GLSL обработку примитивов или как оно там.
Ну и в третьих это вполне себе широко используется даже в браузере (Webgl)
> Ты какой то ебанутый. У видеокарты есть своя память, копируешь их туда (в память текстуры) и обрабатываешь их там, естественно если ты будешь обращаться к массиву в общей памяти никакого выйгрыша не будет, будет только замедление.
Ты какойто ебанутый. На копирование из главной памяти в память GPU и тратится много времени.
Сколько много? В общем времени работы программы сколько занимает, примерно можешь почувствовать?
Не могу, потому что это ответ чатгпт, а не мой. Но если что для соего алгоритма требования к латенси 5 мс, 4-5 MB данных нужно обработать несложными математическими операциями.
P.S. это требования для очень слабого девайса где помимо моего алгоритма ещё будет куча параллельной работы происходить
От нас ты чего хочешь? Рассказать, как ты охуенно первый во всем мире придумал считать на OpenGL? Молодец.
Вау. Если это не подстанова, то я первый раз в жизни слышу настоящую шизофазию. Удивительно как уверенно он говорит совершенно несвязанную информацию.
>только с видеокартамми NVidea. Это не запустить на мобилках, на планшетах, на телевизорах, на десктопах с амд видюхами.
Уж тогда opencl. Ни разу ещё не видел в проде opencl за свои 7 лет тусовки в теме
>несвязанную информацию.
Нормиблядь, спокнись. Как-нибудь выгляни в окошко и оцени этнический состав проходящих по улице дорогих граждан.
Оценил. Русские в основном. В чем твоя проблема?
1. В версии 2.0 на операцию чтения результатов из GPU ушло 200 мс. На саму операцию меньше 1 мс. Попытки как-то ускорить это дело закончились советом чатгопоты использовать фичи из версии 3.0. Было принято решение увеличить версию до 3.0.
2. Несколько часов дебаггинга переписывания и попыток разобраться "что не так". Всё или скатывается к варианту с 200 мс или к нерабочему варианту. При этом ошибок нет. Сообщений каких-то нет. Чатгопота говорит, что не знает в чем проблема и сетует на то, что "наверное драйвера неправильно инициализировались" чтобы это не значило.
3. Понял почему OpenGL не популярен. Дружелюбным его назвать сложно. Шаг влево, шаг вправо, расстрел без объяснений. Чтобы завести даже простой алгоритм это видимо нужно начинать с hello world и постепенно-постепенно его усложнять до необходимого результата.
Пиздос дожили, нейронка не справилась написать простейший код по документации и пишет на двач чтоб помогли.
Блять, ну прекрати ты срать. Опенгл - это апи которое используется всеми и везде, когда нужно нарисовать какое-то говно на экране. Используется если не напрямую, то чкерез какие-то обёртки, игровые движки и т.д. Сейчас замещается вулканом постепенно.
То, что на ххсру тебе выдало мало вакансий, где в описании есть это слово, ни о чем не говорит вообще.
Он ни на чем не программирует и ничего не изучает, а просто использует чатажпт для тупого тролинга.
Не удивлюсь если это все тот же клован с деструкторами, тоже какие то простыни высирал. Короче игнорируй, кода нет идет нахуй.
Ты охуел? Я на корутинах с кудой программирую ваще-то полностью асинхронную программу
Знаю 5+ языков погромирования и выбираю наиболее удобный, пердолинг с крестами на последнем месте, что и тебе рекомендую
>просто использует чатажпт для тупого тролинга.
Вопрос нахуя это делать в треде на 1.5 человека по всеми забытому языку для проганья железок на анонимной борде для геев.
>корутины и куда
>две строчки на петуховене
>Не выкупает троллинга
>5 языков
>пердолинг с ++
верю, чо уж там
> Опенгл - это апи которое используется всеми и везде
Ладно, ты его использовал в своей работе, чтобы запускать параллельные алгоритмы? Поделись своим реальным опытом.
Для параллельных вычислений используют кудудля нвидии Только данных должно быть много. Копирование из памяти хоста в память гпу и обратно - узкое место.
Ну, куда это тиер 1 от мира вычислений на гпу. Меня же интересует опенгл потому что никто в 10 летние девайсы карту от нвидиа не положит, а вычислять как-то алгоритм быстро нужно.
Пошёл нахуй отсюда, нуб-кукаретик
По возврату из процедуры, позиция в оригинальном файловом указателе окажется прежней? Мне кажется - нет, поскольку файловый дескриптор, к которому мапятся и оригинальный указатель, и его копии, единственный на файл, но я не уверен. Увы, нет возможности проверить, может из вас кто-то что знает.
Пик - рендом
Да, позиция изменится, потому что файловый указатель (FILE*) указывает на один и тот же файловый дескриптор, и fseek() изменяет положение для всех его копий.
Какая разница? open file descriptor будет всё также один и на нем будут отражаться все изменения в других дескрипторах file descriptor'ах, что на него ссылаются.
Зачем такой хуйней заниматься? в ридонли фаил можно открывать в сколько угодно потоков.
Как я понимаю фаил не открыт постоянно там в ядре io обработчик обслуживает конкурентный доступ к устройству, тебе дали указатель на структуру в очереди - обрабатывай. Не надо искать способы всех наебать, просто бери и создавай новое чтение.
ах да если вопрос в том как сделать
open()
read(1)
read(2)
test() // внутри read(3)
read(3)
close()
то как то вот так:
f = open(file)
f.read(1)
f.read(2)
tmp = open(file)
tmp.seek(3)
test(tmp) // внутри read(3)
tmp.close()
f.read(3)
f.close()
И если это кажется пиздецово и избыточно, то поздравляю ты трезво взглянул на ваш код/приложение, и его следует переписать понормальному, а не искать как бы так через палку-объебалку всех перехетрить.
Салаж, не путай состояние в ядре (struct file, на которую могут ссылаться несколько fd) и состояние FILE (это надстройка, которая может обходится без fd, а может возвращать закэшированную циферку, которая немножко отличается от lseek, в пределах юзерского буфера).
>чатгпт говорит
Представь что у тебя есть формула P(x), ты подсталвяешь туда слово и получаешь другое слово. Формула может выглядеть как обычные формулы аля P(x)=x^2, только чуть сложнее.
Стал бы ты доверять словам, что эта формула выдает?
Возьми лучше учебник по анализу, линалу, а затем по теории меры, может после поймёшь, что доверять нейросетям не нужно.
Представь, что у тебя есть зависимость цены на лом от веса лома. Засунь это в функцию апроксимации (нейронку). Можно ли доверять тому что выдаёт эта функция апррксимации? Можно конечно, почему нет?
Чатгопота эта та же функция аппроксимации веса лома от его цены, только вместо веса лома вопросы, а вместо цены ответы.
Не вижу причин не доверять её ответам с поправкой на ошибку функции апроксимации.
О бля, а мы и не думали. Надеюсь лечить тебя будет врач которые учился по ответам нейронки и прямо во время операции будет с ней консультироваться
а вообще, то что нейронка может человеку помочь и дать по его специальности ответы на вопросы до которых он сам дойти не может - признак того, что человек дегенерат и ему этим делом заниматься не нужно
Кек, да не рвись ты так. Нейронки отобрали твою работу, да?
так опенгл это именно графика, пробовал искать по другим тегам, которые именно с вычислительными аспектами связаны?
те же cuda opencl и что там ещё
https://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units
Да, с ними проблема, что железо каких-то андроид девайсов имеет поддержку опенсл, другие нет. Опенгл был вариант, который поддерживается любым андроид девайсом.
emacs с LSP