Это копия, сохраненная 22 марта в 23:25.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред >>2847323 (OP)
target_link_libraries(nrj wsock32 ws2_32 -static-libstdc++)
есть хуйня в main():
int main(int argc, char* argv[]) {
std::cout << "ertert" << std::endl;
}
Добавляем SDL2:
set(SDL2_PATH "${CMAKE_SOURCE_DIR}/external/sdl")
set(SDL2_DIR "${SDL2_PATH}/cmake")
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
target_link_libraries(nrj ${SDL2_LIBRARIES} wsock32 ws2_32 -static-libstdc++)
И нет никакого вывода в консольку при запуске. Запустилось, послало нахуй и даже не вышло.
Почему?
sdl кстати ёбнутый, потому что делает так:
#define main SDL2_main
Зачем - не знаю. Но ясно, что они где-то изъебнулись
Хочется в несколько потоков эти файлы обрабатывать.
Как лучше всего организовать конкурентный доступ?
Каким-нибудь потоком watcher подпишись на изменения каталога через какой-нибудь аналог fsnotify для своей ОС, складывай имена новых файликов в какую-нибудь очередь, а какие-нибудь потоки worker'ы пусть их берут из очереди и обрабатывают конкурентно
Точка входа это называется. Они бывают разными, ВНЕЗАПНО.
Какой удел более нигерский? Копаться в кишлаках битов, или навозе из абстракций?
Поддерживаю. Хотя при равных лучше байтосерить.
/thread
Где?
рвуться к власти!
как же он заебал со своей тряской над памятью
ты бы лучше сука основы бы с памятью показал, а не просто дал список лаб и сказал делайте
чтоб ему сука яйца отсохли вместе с мозгом
показываешь работу: мммм ну я бы так не сделал, ой ну тут в иф условии оно тратит память
ТЫ БЛЯТЬ НЕ ДАЛ ДАЖЕ ТЕОРИТИЧЕСКОЙ ОСНОВЫ С КОТОРЫЙ МЫ ДОЛЖНЫ РАБОТАТЬ ЕЩЕ И ЖАЛУЕТСЯ ПРО ПАМЯТЬ
ДЕГЕНЕРАТ СРАНЫЙ
Нажалуйстесь на него вышестоящим, скажи ему что пока он не предоставит теоретических основ, то делать ничего не будешь, старый совковый пидор просто самоутверждается за ваш счёт, это пассивная агрессия копросовка жившего возле параши.
Скажи ему что ресурсы процессора важнее памяти
>Нажалуйстесь
Народили соевых снежком из говна. Зачем учиться, когда можно нажаловаться на учителя и получить автомат.
Да, пусть распишет вариативность исполнения с различной оптимизацией по памяти по времени по небу аллаху по количеству строк кода и хуйне малафье. Пусть научит думать в этой плоскости, и отрывать иногда свою жопу для расписывания на доске и ниписания гайдов в электронном.
А то был у меня один такой вумный старый инфантил правда недолго и не правда, всё истории травил, падла, а знаний никаких.
Хочу прокачаться в программировании и опуститься на уровень ниже, сейчас пишу на джаве и жсе, самоучка. Я же могу начать с плюсов без знаний си?
Опустись на дноассемблер лучше. У меня даже книжка для тебя есть, собака ебучая, JONATHAN BARTLETT - LEARN TO PROGRAM WITH ASSEMBLY FOUNDATIONAL LEARNING FOR NEW PROGRAMMERS. Там под х64 асм, повествование повторяет Programming from the ground up.
Ну тут мнения разделятся.
Кто то считает плюсы отдельным языком, которому изучение С вредит.
Кто то наоборот.
Но если ты действительно хочешь вниз - это С.
Кресты немного не про низ.
ответ будет зависеть от того, что ты подразумеваешь под архивом, обычный архив или сжатый, и второй пункт, начиная с какой версии винды ты хочешь чтобы работало твое решение
Посоветую не распылять свои силы и сосредоточится на одной яве.
Можно, всё равно большую часть C объясняют в первых главах любой книги про плюсы.
> Я же могу начать с плюсов без знаний си?
Конечно нет, плюсы не существуют без си
Поэтому в каждой книге по плюсам, тебе заодно и си объяснят
Zlib и zstd это вообще базейшая база.
Mac OS, neovim, сраный coc.nvim и coc-clangd
За мат извени ,третьи сутки потею уже над этим, подскажите как сделать, это пиздец.
Mac OS, neovim, сраный coc.nvim и coc-clangd
За мат извени ,третьи сутки потею уже над этим, подскажите как сделать, это пиздец.
Mac OS, neovim, сраный coc.nvim и coc-clangd
За мат извени ,третьи сутки потею уже над этим, подскажите как сделать, это пиздец.
Да я уже понял, что никакого полезного ответа тут найти нельзя будет, нахуй писал я не знаю, на что надеялся — тоже
Как же магобог горит со своей тупости
Почему макобок не может себе нанять слугу-сисадмина?
Делаешь сложный месадж брокер, потом упрощаешь
Посмотри на redis например.
Сделай однопоточный in-prosess kv-storage, который умеет только set/get для строк. Потом для списков.
Потом добавь mset/mget.
Потом сделай его многопоточным.
Потом добавь publish/subscribe.
Потом сделай его сетевым.
Ну и тд.
Посмотри как примерно устроена Кафка, сделай похожее, но сильно попроще.
Разберёшься с многопоточкой, хттп, синхронизацией доступа, бустом асио, бист, прог опт. Можешь ещё бд и логи привязать дядь прикола.
Но это нихуя не маленький. На пару недель, может месяц работы, и не подойдёт если ты совсем зелёный.
Ну и консумеров продюсеров сообщений тоже придется написать, но после этого это будет изи.
>>2941891
Да все установлено. Вот на днях в вскоре делал проект, решил обратно на вид пересесть, потратить. Короче как я понял clangd не может разделить где искать библиотеки. Проблема в том, что я попробовал все, какие только мог, директории, толку ноль. Ну sdl2 из фреймворков подхватывает и все. А стандартные библиотеки внезапно не видит.
Попробовал YCM вместо coc.nvim, все то же самое. Но теперь надо не compile_commands заполнить, а какой-то Пайтон-скрипт в корне проекта. Что туда писать я еще не разобрался.
Ты долбоеб. Мб посоветуешь какую-нибудь ОС, где не придется ебаться с какой-нибудь очередной херней? На винде? На линуксе? На бсд? Нет? Вот и иди нахуй, еблан.
в вскоде*
> Либо ты пишешь только под Винду
Пишу спокойно не только под винду
> Да и как IDE - перегруженное говно
Как будто альтернативы есть
Каковы шансы освоить с++ самостоятельно как первый язык программирования? какая последовательность действий?
дебаггер, профайлер, не подыхать в проектах с несколькими миллионами файлов
это как минимум
Перекатился. Передал аргументы, передал аллокатор, компаратор и делитер. Подписался.
>дебаггер, профайлер
просто используешь отладочный вывод, как делают гугловские полубоги в проэкте "хром" а еще они исключения не используют пользуясь двухэтапной инициализацией лол
бери пример с лидеров отрасли
Ну не использовать исключения это достаточно распространенный подход, в куте тоже не принято использовать исключения.
add_executable
// ебаный пиздец у тебя, ну почитай по симейку что нибудь, он с плюсами навсегда и так или иначе придется разобраться
Что бы мне эти 50 строчек какой хуйни должны сказать? Обычный код, который можно чуть править по мелочи вроде цикл на range-based заменить.
Говнокода ты еще не видел блять, обычно это происходит когда диды сишники высирают что то либо какие нибудь вученые дата сатанисты
Плюсы используются либо очень компетентными людьми, которые давно в профессии и им похер на язык, те твой вопрос максимально дебильный, либо всякими заводчанами и кутешными обезьяньими формошлепами такие которые в МВП треде сидят.
Первые уважаемые 700к господа в бигтехе, вторые макаки за соротыжку в нии хуи и прочем кале.
Можешь благодарить, я сэкономил тебе жизнь, но не слишком сильно
Трассировщик лучей или традиционный софтвер-рендерер
Интерпретатор языка Х
Текстовый редактор
Шахматы и змейки
Клиент и сервер хуйни
Эмулятор процессора MOS 6502
всё по теме, премного благодарен, пойду дальше.
Удвою, все так.
Сейчас нахожусь в состоянии перехода с формошлепства на кутях в бигтех. Страшно пиздец.
вот ты прав
не знаю как сейчас, а во времена моей скуфской молодости народ годами надрачивал программирование просто потому, что пёрло, а не чтобы вкатиться. Естественно на момент вката там приличный уровень был, только вот под формат работы надо адаптироваться
просто со времён "войти в айти" понабежало куча народу левого, кому чисто за бабки. Пройти курс какой-нибудь, сделать задания, и типа потом наученный, можно работать.
Конечно тут совсем другой уровень будет, полное его отсутствие.
Хотя уверен, что фанатов и сейчас хватает.
по сравнению с другими яп - нет, и, пожалуй, это будет лучший совет который можно дать человеку который находится на пороге выбра специализации карьеры
читаешь k&r, от корки до корки, обязательно делаешь упражнения, перечитываешь приложение А где дано формальное определение языка раза 3-4
потом уже можешь начать с++ изучать по другим книгам или онлайн-курсам, почему бы нет
>обязательно делаешь упражнения
И сидишь полгода на вступлении, делая "небольшое" учебное упражнение. Бро, не будь идиотом, скипай эту хуйню нахуй. Практику на реальных петах наберешь, а не на этой юзлес консольке.
>оч простые
Тебе кажется. Хотя бы лишь потому, что есть такая прекрасная штука как #define со всеми вытекающими.
Сейчас очень многие проекты делаются в веб на реактах, когда ничего устанавливать не нужно, и достаточно лишь браузера для запуска приложения. Причем, достигается и кроссплатформенность, ведь достаточно на компьютере иметь только броузер.
С другой стороны - тот же броузер/нода/система работает на плюсах. Совсем их не выкинут, конечно.
Сам я хочу байтоебить и делать квейкоподобные движки, и инструменты к ним.
>а насколько кресты будут актуальны в будущем?
так же и будут, риалтаймовые как писали на с/с++ так и будут, ну раст еще может добавится со временем.
Для K&R есть книжка с решениями, в том числе в переводе.
И есть https://clc-wiki.net/wiki/K&R2_solutions с решениями всех задач, часто предлагается несколько вариантов решения и обсуждение.
>И сидишь полгода на вступлении
После Липпмана выдрочил всю K'n'R за неполных два месяца
Не надо ни в коем случае на пол года впадать в заёбы на второстепенных вещах.
Доопредеил задачу исходя из своего видения, пробуешь решить. Решил - сравни свое решение с интернетами. Не решается - попробуй нагуглить решение. Не гуглится - берешь и как можно более конкретно локализуешь, в чем именно состоит твое затруднение. Записываешь эту трудность себе в блокнотик и спокойно двигаешься дальше, ты уже молодец, что знаешь чего именно ты не знаешь.
С задачками по плюсам все еще хуже. Язык сложнее, решения в интернетах если и есть, только для малой части задачек и сомнительного качества.
У того же Страуструпа вообще "правило приличия" такое, что задачи его хронически недоопределены. Нихуя вообще не понятно чё он хочет и куда он клонит.
У Липпмана тоже много таких недоопределенных задач. Но у него кроме задач есть еще контрольные вопросы с ответами и упражнения для прояснения и закрепления пройденного материала. Это именно классический учебник.
У Праты задачки простые. Но они и столь же бесполезны, сколь и просты.
Друзья, я студик, делаю лабу.
Есть траблы в настройкой среды для проекта(использую visual studio code).
Лаба находится на гите, я уже скопировал реп и создал доп ветку(помимо master). В лабе используют Cmake. Cmake я накатил в visual studio code. В репе есть cmake файлы. И вопрос, а как понять, мой проект собирается по cmake или нет? (я до этого никогда не работал с этим)
Не собирается, пишет, что отсутствует исполняемый файл(.exe).
Я как понимаю это значит без cmake.
еще выводит сообщение, что неизвестное обращение к winform.
Vscode сам бтв предложил мне забилдиться под видимый cmake файл(а как делать это руками я не понял).
ваша ошибка заключается в том что вы почему то думаете что здесь сидят какие то "друзья"
Хорошей маркетинговой машиной и собственной сектой, очевидно же. Вот всю жизнь самые крутые, быстрые и сложные штуки делались на языке Х, а тут появился язык У и сразу же за пару лет "убил" язык Х. в голове душевнобольных
А ты модули уже осилил?
Стандартная библиотека все ещё осилить их никак не может
Про симейк вообще молчу
А что не говнящие? Ты можешь показать эти дидам как нужно делать. Я уверен, что они даже сами не против будут.
Или у тебя горит, что кто-то ДЕЙСТВИТЕЛЬНО занимается серьезным трудом, а не тяп-ляп срет, а потом убегает в другое место?
>тяп-ляп срет, а потом убегает в другое место
Есть слово "инфоцыган". Не уверен какое у него значение, но отлично подходит как раз для таких "кочевников информационных технологий", которые не сидят на месте, а прыгают с работы на работу как натуральные цыгане кочуют. И такие же хитрожопые мошенники разводящие на деньги, чтобы съебаться и развести еще кого-нибудь. И вот такую бродячую шваль реально пропагандируют как стиль жизни и успех. Ну не пиздец ли. Какое программирование может быть у таких отбросов? Лично видел, работает языком как боженька, треплет как медом в уши льёт, только руками нихуя не делает, получает огого-бабло за свой важный уверенный вид, чтобы съебать на другую работу через год. Вот кого я зову ифоцыган, бродяга айти.
Ну вот как осилят, так и я осилю.
В модульном связывании не много сложного, просто заучить параметры видимости.
Кабан кабыныч, ну палитесь...
Я не люблю культ раста. Зачем форсят раст? Мне больно. Я питонист.
А тебе то что? Это нас обычно хоронят им.
ну в отдаленое будущее заглядывать бесполезно, но пока, к примеру, есть такая тенденция что яп должен проектироваться так что его компилятор/интерпетатор должен уметь или давать инструментальный доступ к собственным потрохам, к ast и прочему, что позволит уже на основе этого оче быстро запиливать ide, редакторы, отладчики, и кучу других утилит, в общем все окружение языка
>Зачем форсят раст?
Важно не что, а кто. Используются линуксоиды, как и осталные современные маргиналы типа пидоров, как моб для продвижения любой повестки. Маргиналы же тупые и обиженные, а на обиженных как известно воду возят, заливают любое говно им в уши, а те и рады и бегут орут всем надоедают этой парашей.
А зачем, достаточно факта, что это высер гугла, без интернета не работает, привязан к стору барина, язык не имеет никакого отношения к нагенерируемому им реальному исполняемому коду, плюс он ебанутый как парадигма, неудобный для разработки чего-то сложного, код становится нечитаемым.
Да и вообще, самое простое правило, если что-либо форсят пугалками "уязвимостей", это сразу анальный зашквар гулага, ибо самая тупая и стандартная корпоративная методичка. Кто на этот сёр повелся, значит безмозглый дрон, либо холуй корпораций на зарплате.
>если что-либо форсят пугалками "уязвимостей"
Амудепарашу форсили пугалками уязвимостей Интела. Получается, говномуда принадлежит гуглу?
Форси Mojo. Делай культ Mojo. Насмехайся над ржавыми и приплюснутыми, мол, моджа по удобству и простоте уделает их, не уступая по скорости.
Хехе, ещё один неосилятор
У деда уже все смешалось в голове: гугл с мозилой, пидоры с линуксоидами, раст с голангом. Деменция она такая...
наверно он имеет ввиду возможность открыть любой класс в месте использвания и напихать туда чё хошь.
хотя и наследование и миксины и екстеншены это все говно ненужное и признак говнокода.
Это называется мудрость - видеть общие черты у того что не названо одинаковым словом. Важны не слова, а суть вещей, настоящее положение дел, а на словах можно трепать что угодно, реальность от этого не меняется. Наоборот по тому что пиздят враньё видно кто чего добивается, где настоящий рак и говно. Очевидно, что "линукс сообщество" это обычный филиал "сообщества пидоров лгбт", та же самая группа обоссанцев, которыми помыкают большие дяди ради своих грязных целей - всё хорошее загадить и разрушить, ведь в этом и состоит вся современная большая политика.
Таким образом, по тому что кукарекают любые современные маргиналы, прекрасно видно что на самом деле хорошее и нужное - то, против чего они выступают, и соответственно, за что они выступают это говно.
таблетки
https://leetcode.com/problems/find-words-that-can-be-formed-by-characters
Смотря какой у литкода компилятор, у меня кланг не дружит с вьюхами.
Рабочие проекты на C/C++ у меня выглядят примерно так
Windows Internals. Соломон, Руссинович. Евреи фигню не напишут.
Все верно, зачем что то добавлять, когда можно несколько тысяч человеко часов положить чтобы сделать аналог, который возможно будет ещё и хуже
Зато не будет проблем, точнее они будут, просто решать их придется вам, а это ещё работка, а работка это зепешка
Может кто знает, где можно адекватно пошагово поучиться?
В принципе, здравая идея.
Если кто-то попал на унылый скучный проэкт, можно пролоббировать создание своих библиотек якобы под этот проэкт, тем самым заняться тем, что интересно тебе. Плюс строчка в твоем резюме, что ты создатель библиотек, а не только ковырятель вилкой унылых типовых проэктов.
А ещё круче когда этот чел уйдет и сопровождение "весёлых и интересных" библиотек упадет на тебя
Зато своё, домашнее :3
В том что в реальном мире - тебе не одна маленькая хуевинка нужна.
Ну, типа с моей колокольни заводского. Нужны библиотеки вендора для работы с переферией, драйверы, эссДэКа.
Далее - есть всякая промежуточная фигня от крупных игроков рынка, которые какой-нибудь DLMS просят или Zigbee или еще что-нибудь, а клиент еще хочет SNMP, MQTT и чтобы скада могла по Modbus опрашивать, а сбоку еще - для РФ сидят ФСБ и просят свои зонды встроить, чтобы БЕЗОПАСНО))) и прямо говорят, что вот есть два-три конкретных сертифицированных хуя, они за мульт-два-сто вам библиотеку дадут, если мы это библиотеку не увидим, ваш продукт сертификацию не пройдет.
Ну так вот. Нет ресурсов чтобы все это добро разрабатывать, поддерживать, выяснять, что где оно там сломалось. А срок разработки обычный - месяц на версию, ведь менеджеры узнали слова Аджайл и Скрам, и типа - если мы назовем месяц разработки спринтом, но все остальное - как было по ватерфолу, так и осталось, с жесткими сроками, при этом отсутствием сбора требований и ТЗ - то можно ебать мозги, и при этом наваливать говна всякого каждый месяц.
А на заводе, обычно - один человек - один проект. Вот и думай. Каким фигом ты за месяц все это изучешь, вникнешь и реализуешь.
Но я все же думаю Карпов пишет как раз про те случаи, когда существует компактное решение, не требующее сопровождения.
Абсолютно всегда оказывается, что надо что-то там допилить.
Даже в библиотеках уровня isOdd, isEven
>Не могу найти годный вариант чтоб взять файлы из папки и шибануть одним архивом в другую директорию.
Напиши свой простенький псевдоархиватор (без сжатия офк, просто склеивай файлы в один).
Реализация регулярных выражений в несколько десятков строк - то-то я думаю, чего это ПёС-студио так тормозит? Им и невдомёк, что в нормальных либах регулярки векторизованы и тщательно оптимизированы.
Именно про регэкспы меня больше смущает, чем ему STL std:: не понравилось.
>чего это ПёС-студио так тормозит?
Ну она концептуально задумана для работы в фоновом режиме.
Прям вот тормозов от нее я не замечал даже на древнем amd процессоре. Правда я и больших проектов никогда за сиську не трогал.
Обосрался с инжалид дриже.
У меня был перевод x-com 3. Большая часть текста была как-то переведена, но с кнопками был мрак. Up и Down почему-то выглядели как Ур и Дошп.
Старая добрая замена букв, так в 90-е переводили все консольные игры. Играл в одну рпг с кучей текста который был не переведен, а буквы все заменили на русские, так и читал вычислив и выучив замены, вполне бегло между прочим.
Неймспейсы
>В мире плюсов кутовая дока самая ахуенная
Дока по самому Qt терпимая. Говно, но в целом пользоваться можно.
Дока по QML же просто дерьмище. Точнее, может она и заебись, как справочник для тех кто шарит.
А вот для вкатунов кал говна.
Qt это фреймворк. QML это язычок, придуманный Qt-шниками. Я, клепая 5+ лет говнософт на Qt/C++, нихуя в эту QML-парашу без мануала въехать не могу.
Qt это набор либ, куда блять и qmlвские входят, это не нечто отдельное особняком и так же всобачено в доку qt
Я предположу что это из шарпов.
Когда у тебя допустим есть класс.
Он - например, в стандартной библиотеке.
Допустим, тебе часто надо кодировать-раскодировать строки. Ты хочешь что-то в духе var encryptedString = "Hello World".encrypt("AES256", key)
В шарпе - ты можешь сделать метод расширения, который добавит такой метод и ты сможешь вызывать его в своем коде, без необходимости делать новый класс/прокси/адаптер/любая другая ООП херня.
При этом - это выглядит для пользователя, будто это все тот же няшный класс, просто с новыми методами. Доступа к приватной фигне - нету, так что просто так сломать что-то не получится.
В шарпах - удобная фича, потому что позволяет допустим сделать простой интерфейс, а потом расширениями - нафигачить в него всякого разного полезного.
Ну или более простой пример. У тебя есть перечисление, которое в шарпах - число простое. Ты хочешь красиво выводить в консоль значение этого перечисления. Ты можешь конечно сделать logger.Message(Utils.ToNiceString(myEnumValue)), но ведь красивше выглядит так: logger.Message(myEnumValue.ToNiceString())
>Чё там вкатываться?
Непонятно, как корректно сделать "бекенд" на Qt/C++ и наладить взаимодействие с "фронтендом" на QML. Типа как передача и объявление структур данных должны выглядеть, как проект вообще выглядит и прочая хуета. Базовая, замечу, хуета. Открываешь мануал с сайта, там нихуя этого нет. При этом этот мануал носит гордое название пикрелейтед.
>>2948076
>и так же всобачено в доку qt
Ога. Только из этой доки хуй проссышь, как этим пользоваться. Как на Qt или QtWidgets говнокодить разберётся даже даун. В отличие от.
Вообще-то это рак, обфусцирующий левые функции под методы класса. "Красиво" такое выглядит только для дацна. Суть, такой же рак как переопределение операторов - хуета вводящая в заблуждение.
Файл с макросом лежит в переменной macrosPath.
Функция:
void ProjectPracticeDLL::ExcelWork::OutputInExcel(int mas, int numbers, int n, String^ macrosPath)
{
auto XL = gcnew Microsoft::Office::Interop::Excel::ApplicationClass();
XL->Visible = true;
Object^ t = Type::Missing;
auto Workbook = XL->Workbooks->Add(t);
String^ str;
XL->Cells[1, 1] = "Ответы:";
for (int i = 0; i < n; i++)
{
XL->Cells[2, i + 1] = String::Format("{0:f0}", numbers);
XL->Cells[3, i + 1] = String::Format("{0:f0}", mas);
}
}
Вот у меня есть интерфейс вида: IEnumerable<T> у которого есть единственный метод - GetEnumerator, возвращающий IEnumerator<T>
У тебя есть здоровенная библиотека всяких коллекций, которые имплементируют этот интерфейс. Ты хочешь иметь возможность разные IEnumerable<T> приводить к конкретной коллекции.
Что будем делать в случае с методами расширения?
У нас есть хешсет?
Деламе метод расширения
ToHashSet<T>(this IEnumerable<T> self);
У нас появился иммутабельный массив
ToImmutableArray<T>(this IEnumerable<T> self);
У нас появился словарь
Dictionart<TKet, TVal >ToDictionary<T, TKey, TVal>(this IEnumerable<T> self, Func<T, TKey> keySelector, Func<T, TVal> valSelector);
И мы получили это поведение разом для ВСЕХ кто имплементирует интерфейс. Нам не нужно постоянно лазить и расширять интерфейс, классы, которые его имплементируют - нам трогать не нужно.
Что надо будет делать в случае если такого механизма нет? А мы базовый класс должны будем раздуть до неебических масштабов и каждый раз лезть в него, чтобы добавить приведение к новой коллекции. Либо делать кучу ненужных утилитарных методов/классов, которые это делают.
И в заблуждение оно никакое не вводит. В мире шарпов - используется повсеместно. Никто не жалуется. Тем более, что чтобы использовать эти методы расширения - ты должен явно использовать неймспейс в котором они определены. Зато это позволяет расширить поведение тех типов, к которым у тебя нет доступа, позволяет не раздувать интерфейс без надобности.
Почему?
куда берут в РФ по С++?
планирую игру сделать в будущем. или помогать в разработке. поэтому и вкатываюсь.
будущее С# слишком туманным показалось. и кроме работы как в Озоне перспектив не увидел.
озон вообще залупа, устройся туда работать и замкни им сервера, устроив перед этим в опенспейсе бурлеск
Дык куча геймдева, куча мелких производств на каждом углу, но том Qt нужен.
Бигтех: Яндекс, Авито, ВК.
НИИ те же.
геймдев в россии мертв уже 2 года, мертвее твоей столетней бабки
яндекс - голланская компания и никакого отношения к россии не имеет
удивляет то насколько самоуверенно он это заявляет
в том время как в крестах есть три фундаментальные семантики на основе которых строятся важнейшие идиомы и языковые конструкции, а именно пара конструктор-деструктор, шаблоны, и возможность переопределения операторов (включая и форму placement new в том числе)
На завод, лол. Прошивки писать, всякое ПО для микроконтроллеров и прочие очень интересные вещи. ЗП - 30к со старта, с перспективой до 90к-120к подняться через 5 лет.
Не важно, имеет отношение или нет, важно что есть вакансии и офисы внутри России.
Геймдев: удалёнке, инди. Но это не для вкатуна варианты.
Допустим я пишу приложения следующих видов:
- Консольное приложение, которому задаешь команды и оно что-то делает, например совершает преобразование текстовых файлов
- GUI приложение, в котором есть какое-то основное окно, внутри которого все рисуется
- Сервис демон, который работает в фоновом режиме и что-то пишет в лог
Я хотел написать тесты для некоторых функций в этих программах, но столкнулся с некими проблемами. В динамических языках с системами импорта (Python, TypeScript) я могу напрямую импортировать нужную мне функцию и написать на нее тест. На плюсах мне доступны только инклуды, модули из C++20 пока не рассматриваю. То есть получается, что я должен структурировать свой код таким образом, чтобы основное ядро системы можно было собрать как библиотеку, которую потом уже подключать к коду, в котором есть входная точка?
И получается, что в крупном проекте мы напрямую не линкуем все в один исполняемый файл, а создаем множество библиотек, которые уже потом линкуем с исполняемым файлом, так? Я пока только в таком ключе вижу возможность тестирования.
Но это все хорошо, если более-менее изолированно можно тестировать. А как принято писать интеграционные и e2e тесты на плюсах?
> основное ядро системы можно было собрать как библиотеку, которую потом уже подключать к коду, в котором есть входная точка?
Обычно так и делают
Основную логику приложения в отдельную либу
потом сможешь хот релоад делать
Разве тесты используют в приложениях? Я думал это для тырпрайз дрисни разрабатываемой одновременно десятками людей, а значит там архитектура для каждого разработчика изолированный самодостаточный кусочек, естественно между которыми какие-то интерфейсы, вот на них и навешивают тесты. А приложение это одна цельная лапша, какие тесты. Ну городи модули имитируя тырпрайз в одно рыло.
Бро да иди в доту гоблинов погоняй нахрен тебе куда то вкатываться, скажешь тоже
>>2949227
>Дык куча геймдева, куча мелких производств на каждом углу, но том Qt нужен.
каво. я про Смуту только слышал.
никаких мелких компаний впомине не видел.
но если судить по вакам с HH
>Бигтех: Яндекс, Авито, ВК.
ну норм наверн. только ничем кроме авито не пользуюсь раз в полгода...
>>2949258
>яндекс - голланская компания и никакого отношения к россии не имеет
уф. но все ранво ведь у нас широкое распространение имеет?
>>2949285
>На завод, лол. Прошивки писать, всякое ПО для микроконтроллеров и прочие очень интересные вещи
хз. не питал никогда к таким вещам теплотой...
такое подойдет заядлым техникам или нердам, которых последних по пальцам пересчитать.
>>2949477
>Не важно, имеет отношение или нет, важно что есть вакансии и офисы внутри России.
>Геймдев: удалёнке, инди. Но это не для вкатуна варианты.
а где тогда опыт получать?
у меня нет возможности пока даже в миллионник переехать из Мухосрани на 500к (похуй что столько народу всего, вокруг одна ДЕРЕВНЯ блять, городских от силы 200к может наберется а и то меньше; город в топе по бедности состоит.)
Можнасделать:
https://stackoverflow.com/questions/5463009/extension-methods-in-c#answer-5466499
Вообще, UFCS еще в 2020 стандарт хотели добавить, но как-то заглохло.
https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax
Спасибо
зависит от ситуации, то что оно менее производительнее это факт
насколько? беньчмаркай и узнавай
У тебя любое обращение к строке это и так обращение к указателю, если у тебя строка в 4 байта не влезла и ССО не сработал.
std::string_view не подходит?
Это Правда.
Но я думаю что для чела сверху это байтоебство нахуй не нужно и он тратит время на херню.
Да куда с таким опытом возьмут то?
в общем случае операция разыменования это 3 инструкции mov на общих регистрах
>Сильно ли обращение по указателям бьет по производительности?
Может быть в сотни раз медленнее, если массив большой. Потому что кэш любит последовательный доступ к памяти.
> Может быть в сотни раз медленнее, если массив большой.
Серьезно. Но ведь это все еще гораздо быстрее, чем системные вызовы, так? так ведь?
Джаваскрипт не считается.
В плюсах видел вещи и пострашнее
разумеется
в данном случае 2 уровня оптимизации по скорости для написания производительных программ:
первое это минимизировать количество системных вызовов, ведь они ведут к переключению контекста, в случае си это проще понять, тк достаточно легко выяснить какие функции стандартной библиотеки используют системные вызовы
а уже второе это думать о оптимизации доступа к памяти в том числе и заменяя рандомизированный доступ на последовательный
первое может быть значительно больше влиять на общую производительность чем второе, разница может достигать двух порядков
ну и тут не стоит забывать про пограничный случай, так как вообще то фии выделения памяти malloc и new вообще то тоже содержат системные вызовы и приводят к переключению контекста, и поэтому основной оптимизационный прием это выделять память некими чанками, в с++ зачастую для этого используется форма placement new
>так как вообще то фии выделения памяти malloc и new вообще то тоже содержат системные вызовы
вернее, могут приводить к системным вызовам, насколько часто это происходит и в каких случаях будет зависеть от собственно реализации malloc и new
по этой причине было одно время было популярно писать собственные менеджеры динамической памяти типа tcmalloc и подобные
И сейчас так. Любой проект сложнее хелоуварда использует аллокатор/пул памяти.
тут еще наверное стоит уточнить, что процесс переключения контекста в системных вызовах, который приводил к переходу с user-space на kernel-space был неплохо оптимизирован в том смысле что зачастую не приводил к сбросу tlb что значительно ускоряло все это дело
но насколько я помню и если не ошибаюсь (я не спец по безопасности, либо по написанию сверх-быстрого кода) чтобы закрыть уязвимость meltdown как раз и выключили эту оптимизацию лол
не соглашусь
все же достаточно редко принимается решение о замене стандартного менеджера динамической памяти, подавляющее большинство пользуются стандартным который поставляется с компилятором и не паряться
Патаюсь писать игры под вин, движкострой на голом винапи и дыртыксах. Быдло индигемдев.
>__attribute__((noinline))
>смотрите какой хуевый код сгенерил C++, то ли дело раст
Все растопидоры такие пидоры?
У него там "кококо, меня не так поняли" в первом же комменте.
>Все растопидоры такие пидоры?
Да, почти во всех тестах РАСТ VS ЯЗЫК НЕЙМ будет специально подбираться задача, где стандартная реализация хуйни_нейм у раста будет эффективней, либо же прямо во время тестов под смешными предлогами могут поменять структуру данных и сказать что-то в духе "Да это не сильно повлияет на результат. Просто так нужно сделать". Например, видел тест, где сравнивали структру данных из стандартной библиотеки плюсов и структуру данных из левой библиотеке на расте. Ну а хули, на плюсах нельзя же библиотеки писать. А на комменты под видосом от адекватов, которые заметили наеб, сразу налетают сектопетухи и начинают спамить по методичке.
>Любой проект сложнее хелоуварда использует аллокатор/пул памяти.
Только если тебе нужно больше 1М аллокаций в секунду. Такое не так часто бывает. Тот же Qt, где почти все классы с pimpl, вполне тянул таблицы с тысячами строк даже во времена четвертого пентиума и атлона хр.
>Все растопидоры такие пидоры?
У них же это в Code of Conduct прямо написано "язык для пидорасов". Плюс там 90% коммьюнити трансы и всякие небинарные снежинки.
Верю, но таблицы гуя это не про быстрые приложение бро.
Сначала повестку, а уже затем автомат
Ха. Наверное я долго на C# пишу, но на твоём скриншоте какой-то пиздец.
Не, на плюсах у меня тоже иногда такой говнокод получался, но не часто и не везде. Всё же STL нужно использовать с умом, а не по правилу "когда у тебя есть молоток, то всё вокруг кажется гвоздём".
y=3
y=4
То надо вывести, что y=3 не используется. Была идея просто граф сделать и найти такие вершины записи из которых нет путей в чтение. while и if дают цикл и ветвление соответственно. Но меня просят с помощью ДКА решить. Есть идеи, а то я что то не врубаюсь
Это вопрос
Соболезную
>Патаюсь писать игры под вин, движкострой на голом винапи и дыртыксах. Быдло индигемдев.
Используешь визуальню или mingw?
ну бля, челик
это хорошее задание на кодинг, скорей всего ты учишься в хорошем вузе раз вам дают такие задачки на лабы
ну нахуя ты себе сам жизнь портишь? ты забивай на непрофильные предметы, но все что относится к кодингу делай сам, набивай руку бля
особенно алгоритмы
Я не забиваю. Есть простое решение за квадрат, но без дка. И во-первых, я очень сомневаюсь, что быстрее нельзя, а во-вторых, быстрее не придумал. И с ДКА тоже не придумал пока.
Бля, как даун написал. Короче быстрее квадрата не знаю как решить, хотя очень похоже, что можно, да и нахуй тут дка тоже не понял
Надо.
Я опытный прогроммист на компилируемых языках с рантаймами типа JVM, писал маленькие программки на C, патчил большие программки на C/Rust/Zig. В целом я довольно неплохо понимаю как устроен компьютер, как работают компиляторы, как устроены рантаймы.
Собственно вопросы:
1. Как научиться писать на последних плюсах не перепроходя кучи базовых вещей?
2. Какой у вас там есть простой тулинг для сборки и управления зависимостями? По уровню тупизны желательно как package.json в жаваскриптах. Я умею в GNUMake и Nix профессионально, но сложные проекты всё равно обростают CMake-ом, который я искренне ненавижу. Слышал были какие-то удобные тулы, но не помню названий (Conan или ninja или meson или как их там)
3. Какой тулинг для сборки предложите? Что-то тупое типа ctags/lsp и линтеров меня устроит. Я видел что есть 1000 и 1 анализатор для UB и прочей хуеты. Это на начинающем уровне вообще нужно изучать?
4. Хочу писать под юникс. gcc или cmake? или ещё какой-то есть?
пикрандом
s/Какой тулинг для сборки предложите/Какой тулинг для разработки предложите/
квикфикс
s/3. Какой тулинг для разработки предложите?/3. Какой тулинг для разработки предложите?
Не знаю на счёт ДКА, но в компиляторах Dead Code находится построением графа. Либо control flow, либо data flow графа. Я недавно писал Sea Of Nodes, и там такое находилось довольно просто прям после построения графа
Тебе же тут будет достаточно во время построения data flow графа связывать те переменные, которые взаимодействуют (то есть в коде `x = f(y, z)` будет связь `x -> y` и `x -> z`. И вот ты до return построй и потом от каждого return иди и помечай в графе в каких вершинах побывал. Те, которые не пометил, это и есть Dead Code
А, ну и всё это в SSA
Ещё раз. Какое отношение к плюсам? Этой "либе"(апи) 300 лет в обед, она и без плюсов существует, существовала и будет существовать.
Че то пиздец какой то. Думал простая таска, а нет. Ща пойду про финоды читать
Я еще подумаю, может легче будет как то считерить, используя ограниченнось моего языка
Не, короче хуй забью и сделаю за квадрат, как хотел
>Этой "либе"(апи) 300 лет в обед, она и без плюсов существует, существовала и будет существовать.
Да, это тонкий момент)) Две недели тред висит, а никто не обратил внимания))) Не так уж много образованных в наше время)))
Че ты высрал?
Ошибаешься, я программирую на хуйне, про которую ты наверное и не слышал
Так это относительно простая таска. У тебя какие части компилятора готовы? AST уже умеешь собирать? Язык сам какой, мутабельный и процедурный, да, типа C?
AST не сложно собрать. Я дерево разбора построил, теперь надо просто аккуратно куски лишние убрать, да покрутить. Язык процедурный, мутабельный.
Программа это список стейтментов, стейтмент это либо
1) переменная = выражение
2) if <выражение> <список стейтментов> end
3l <выражение> <список стейтментов> end
4) выражение это числа, переменные и арифметика
Надо мне спать идти, а то я уже пишу ч ошибками. 4 пункт, стейтментом не является, конечно.
И в третьем пункте while не дописал
Выше написали же, переведи в SSA, и дальше раскрашивай граф. Обычные dead code elimination/global value numbering. От тебя видимо требуют ну оптимизацию вообще, по книжке, а какую-то узко специальную задачу, если нужны именно конечные автоматы.
Vcpkg используй для скачивания зависимостей, того,чего там нет - грузи как сабиодули в гитек
> Сап плюсач, хочу вкатиться в вашу хуйню.
> Я опытный прогроммист на компилируемых языках с рантаймами типа JVM, писал маленькие программки на C, патчил большие программки на C/Rust/Zig. В целом я довольно неплохо понимаю как устроен компьютер, как работают компиляторы, как устроены рантаймы.
Круто. Тебе или в две конторы писать компиляторы, или перекладывать протобуфы в бигтех.
> Собственно вопросы:
> 1. Как научиться писать на последних плюсах не перепроходя кучи базовых вещей?
Книга модерн спп.
> 2. Какой у вас там есть простой тулинг для сборки и управления зависимостями? По уровню тупизны желательно как package.json в жаваскриптах. Я умею в GNUMake и Nix профессионально, но сложные проекты всё равно обростают CMake-ом, который я искренне ненавижу. Слышал были какие-то удобные тулы, но не помню названий (Conan или ninja или meson или как их там)
В открытом доступе таких нет. Все что есть - кал.
> 3. Какой тулинг для сборки предложите? Что-то тупое типа ctags/lsp и линтеров меня устроит. Я видел что есть 1000 и 1 анализатор для UB и прочей хуеты. Это на начинающем уровне вообще нужно изучать?
Все что есть кал.
> 4. Хочу писать под юникс. gcc или cmake? или ещё какой-то есть?
Оба хороши. Но мне гцц больше нравится, в нем я реже сталкивался с хуйней по типу "бля мы реализовали эту часть стандарта но на 10%, галочку воткнули"
Ты класс в цпп обьявлять будешь?
Если тебе обычная функция нужна, то конечно делай ее только в сорсах, а если конкретно метод класса, то приват это то что нужно
Пиши путь к файлу через прямые слеши, а не обратные
Бля, я там не правильно понял последнюю строку исходного вопроса.
С ней вообще непонятно нахуя это спрашивать.
Чтобы что? Что именно тебе даст то, что у тебя не будет приватной функции класса?
А анимешки мне нравятся, пусть висит.
Не будет лишней функции которая не имеет отношения к логике класса, если речь про какие то специфичные. Например надо проверить, что число простое
В смысле? Ну если неймспейсов никаких нет, то может быть коллизия с фугкцией с таким же названием в другом месте
Возможно, в будущем сделают private_cast, и можно будет вызывать приватные функции, а так их не видно будет.
Отмена приватности будет так или иначе доступна, когда выкатят рефлексию.
План был такой что люди будут писать более хороший неломающийся от опечаток код. Но это всегда бьет по гибкости, ведь когда когда человек пишет какое то апи на плюсах он никогда не представляет что тебе понадобится от его либы
Все проще, даже чем вы описали. Я нашел в книге live-variable analyzis. Даже SSA не нужно. Просто найти по этому алгоритму live-variables, затем пройтись по всем assignmentам и пометить лишними те, для которых переменная не принадлежит live множеству
Ну точнее посмотреть на live множества всех потомков после assignmnt, и если там нет нашей определяемой переменной, то присваивание лишнее. Звучить просто
Да, и это нужно в SSA форме делать. Live анализ для кода
```
y = 3;
y = 4;
return f(y);
```
Скажет что `y` live. И вот потом сиди и думай какой собственно из двух имелся в виду. Поэтому чтобы их отличать ты и делаешь SSA. Причём для твоей задачи даже полностью SSA форму делать не нужно (например ФИ тебе нахуй не нужен)
Ну и да, Live analysis это обход data flow graph, который я выше буквально по пунктам тебе описал.
А вот более качественный Dead Code elimination делается сложнее, дорогой друг. Там надо качественно ебаться и с анализом CFG, чтобы находить ветки, в которые код никогда не попадёт, и всё такое.
Не, конечно можно строить DFG не поверх SSA формы, но собственно говоря удобнее всё-таки поверх SSA формы, чтобы дальше ещё оптимизировать. И в любом случае, построение DFG эквивалентно построению SSA формы, просто после DFG нужно ещё обойти граф поиском в глубину и номер версии для каждой переменной проставить.
>Да, и это нужно в SSA форме делать. Live анализ для кода
>```
>y = 3;
>y = 4;
>return f(y);
>```
>Скажет что `y` live. И вот потом сиди и думай какой собственно из двух имелся в виду. Поэтому чтобы их отличать ты и делаешь SSA. Причём для твоей задачи даже полностью SSA форму делать не нужно (например ФИ тебе нахуй не нужен)
Так я просто пройдусь по присваиваниям
y = 3; live: \empty
y = 4; live: \empty
return f(y); live: y
На первой строчке я смотрю на live из второй, вижу пусто -> y из этой строчки зря определился. На второй строчке я посмотрю на live из третьей, увижу y и пойму, что эта строчка нужна.
> А вот более качественный Dead Code elimination делается сложнее, дорогой друг. Там надо качественно ебаться и с анализом CFG, чтобы находить ветки, в которые код никогда не попадёт, и всё такое.
Пока не надо, поэтому усложнять не буду
> Можно ли не выносить определения методов класса в cpp?
Можно, чтобы одр не нарушилось есть 3 варианта:
1) inline
2) template
3) constexpr хотя тут не уверен
Как дефайны помогут, если все равно в разных cpp будут разные определения одной и той же функции?
Объясни в чем я не прав? Когда компилятор компилирует от ищет определения по всем cpp. Если у нас инклуд в разные cpp инклудится, то в разных cpp будут определения одной и той же функции
В разных цпп делаешь
#include "myheader.hpp"
Но только в одном из них
#define MY_LIB_IMPLEMENTATION
#include "myheader.hpp"
Этот дефайн соответственно, включает все определения, без него будут в хедере будут только заголовки функций
Чекни например stb_image библиотеку, ну или просто загугли любую header only библиотеку
Зависит от того, один это будет по итогу транслейшен юнит или разные.
Если разные то и проблемы нет.
Если один, то дефайны защищают.
А я и не писал как это внутри реализовано, я написал как ими пользуются чтобы одр не сломалось
Но да, внутри ифдефы дефы
>3) constexpr хотя тут не уверен
constexpr функция/метод неявно инлайнится. Можешь быть уверен.
> Когда компилятор компилирует от ищет определения по всем cpp.
Когда компилятор работает над текущей единицей трансляции, ничего вне ее он не ищет.
Не. Я не хочу, чтобы он кидал есепшоны моих типов
Да, способа нет.
>когда применять правило пяти?
Когда класс зохватывает память или любой другой ресурс.
Если тебя не устраивает, например, поведение оператора присваивания по-умолчанию, то скорее всего и все остальное из "большой пятерки" нужно делать вручную.
Если ты один из элементов пятерки делаешь не дефолтным, то должен создать реализацию и остальным.
java - это хлебушек с маслом, теплая телка для ебли под боком;
зачем тебе кресты, не порти себе жизнь
>4. Хочу писать под юникс. gcc или cmake? или ещё какой-то есть?
>gcc или cmake
Это вообще ортогональные вещи, никак не связанные друг с другом.
Это называется аллокаторы, в стандартной библиотеке плюсов они используются давно и серьезно.
Есть файл Tables.cpp:
const int16 Glyphs[] { ... }
Есть второй файл Globals.h, который объявляет на весь проект:
extern const int16 Glyphs[]
Есть звездочка.cpp файлы, который использует этот массив. Как так переписать Tables.cpp или Globals.h чтобы не указывать размер массива каждый раз при добавлении удалении элементов (на стадии компиляции), но везде в других местах можно было бы узнать его размер не прибегая к перебору.
Не определяя сам массив в header'e.
Там все на уровне драйверов, какого-то особого API нет, может внутренняя прослойка есть, но ее снаружи не видно. В GDI наверняка куча окаменелостей со времен S3 Trio, когда только начали 2D ускорение в видюшки добавлять. OpenGL всегда на дровах от видюшки, или чисто софтовый 1.0 от opengl.dll, если дров не найдено. Что конкретно тебе надо?
Ах да, я же забыл ошибку указать.
ErrorC2070 "const int16 []": illegal sizeof operand ..\звездочка.cpp
incomplete types not allowed
Если я правильно понял объявление его как extern bla bla bla []
производит стирание типа, размер массива становится неизвестным использующему ЭТО коду.
Мне сказали что в С++ есть всё! Как исправить чтобы удобно было?
Почему extern не пробрасывает полный тип, как его видит? Если я правильно вообще понимаю причину проблемы*
Делай тогда в .cpp:
int size = ARRAYSIZE(...)
А в .h
extern int size
Компилятор размер массива видит только в месте объявления.
Помогло, спасибо!
> Что конкретно тебе надо?
Я просто хочу разобраться...
> OpenGL всегда на дровах от видюшки
Но дрова-то разные, значит есть какое-то API? или как это вообще работает?
Адреса функций в драйвере. Все. Ну и генерируемый хедер с типами.
когда от одной строчки кода понимаешь что ведь проэкт попахивает говнецом..
std::string str{"abcd"s}; // using namespace std::string_literals
перед
std::string str{"abcd"};
???
блять, просто заведи константу в h-файле, типа
const size_t GLYPH_SIZE и используй её и в определении массива и везде, если работаешь с дефолтными сишными массивами.
> Есть ли на плюсах какая нить современная хуета, которая не позволяет выстрелить себе в башку?
Аналога борроу чекера нет
Есть кор гайдлайны на них всем похуй
Есть статические анализаторы кода
Есть динамические проверки
Быть программистом , ладно хотя бы кодером, а не смузихлебом.
вот есть определенный класс:
template <int n = 1> class kek{}
я хочу создать структуру struct LOL{ kek<> qwe;}
чтобы потом её создавать с произвольными шаблонными классами. Вот только не могу понять, как мне в kek<> задать так, чтобы было не определённое число, а все ещё произвольный int.
Единственное до чего я додумался, так это определить шаблом у структуры как
template<int N> struct LOL{ kek<N> qwe;}
но затем бьюсь об то, что мне нужно эти структуры хранить с векторе, а они не лезут.
Так делать нельзя
> мне нужно эти структуры хранить с векторе, а они не лезут
И не должны, каждый экземпляр шаблона это отдельный тип
Так или иначе, даже если ты приведешь их к общему виду, ты потом этот n достать из типа не сможешь
да этого говнеца всегда было полно в крестах и сишке, другое дело что все это развивается и те средства которые были доступны 30 лет назад теперь заменены на более современные аналоги
статистические анализаторы (те на этапе компиляции или перед ней)
санитайзеры (на этапе выполнения)
+ фаззинг
Те ее почему-то можно без неймспейса использовать, хотя нужный структуры, обтявленные там же рядом, этот неймспейс требуют.
https://pastebin.com/tNcunVD1 это просто С
>не юзается ни pow ни fact
Они вычисляются из значений, накопленных на предыдущих шагах основного цикла
> delimoe=xx;
> delitel=(n(n-1));
> term = term * delimoe / delitel;
Что вобщем-то вполне благоразумно, ибо зачем на ровном месте добавлять n^1 к сложности алгоритма.
imena - moe pochtenie!
(тип *)&...
Как тоже самое сделать, и можно ли, статик кастом а не си-кастом?
Зачем?
Если уж ты балуешься кастами указателей, то пусть оно и выглядит как инфъекция c-like кода, а не маскируется под современный c++.
@ptrks/CMake-avr-example/
Хорошо, какую систему сборки предлагаешь юзать для проектов под AVR?
>несколькими миллионами файлов
Эх, как думаете, аноны, излечится ли мир от этого порожняка когда-то?
Нет.
ето так, ты прав
но новое поколение теперь юзает cmake почти всегда, даже если у проэкта по сути одна платформа
что с этим сделать непонятно, мы к этому пришли
Чтобы потом в случае чего не переписывать же, очевидно
auto newPointer = reinterpret_cast<TargetType⚹>(&object);
или
void ⚹voidPointer = &object;
auto newPointer = static_cast<TargetType⚹>(voidPointer );
Просто так статик кастом сделать этого нельзя, и это неспроста.
Лучше cmake, в нем удобнее делать проекты, где есть разделение кода на либы, экзешники, можно использовать разный тулчейн для разных экзешников, и т.д. Т.е. сначала ты думаешь, что будешь просто светодиодиком моргать, но потом оказывается, что какой-то код удобно не на контроллере тестить, а на десктопе, и ты выносишь его в либу с тестовой прогой под десктоп, проект пухнет, и простой мейк перестается с этим всем справляться.
Задача по программированию. тема строки. С++
Дана строка. Словом, текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: в слове гласные буквы чередуются с согласными. Все остальные слова удалить.
Примерный код программы(Но он выполняет условие не до конца):
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
bool isValidWord(const std::string& word) {
if (word.empty()) {
return false;
}
bool prevIsVowel = std::isalpha(word[0]) && (std::tolower(word[0]) == 'а' || std::tolower(word[0]) == 'е' ||
std::tolower(word[0]) == 'ё' || std::tolower(word[0]) == 'и' ||
std::tolower(word[0]) == 'о' || std::tolower(word[0]) == 'у' ||
std::tolower(word[0]) == 'ы' || std::tolower(word[0]) == 'э' ||
std::tolower(word[0]) == 'ю' || std::tolower(word[0]) == 'я');
for (size_t i = 1; i < word.length(); ++i) {
if (std::isalpha(word)) {
bool currentIsVowel = std::tolower(word) == 'а' || std::tolower(word) == 'е' ||
std::tolower(word) == 'ё' || std::tolower(word) == 'и' ||
std::tolower(word) == 'о' || std::tolower(word) == 'у' ||
std::tolower(word) == 'ы' || std::tolower(word) == 'э' ||
std::tolower(word) == 'ю' || std::tolower(word) == 'я';
if (prevIsVowel == currentIsVowel) {
return false;
}
prevIsVowel = currentIsVowel;
}
}
return true;
}
int main() {
std::string input;
while (true) {
std::getline(std::cin, input);
if (!input.empty() && input.back() == '.') {
break;
}
std::cout « "Нет точки в конце" « std::endl;
}
std::vector<std::string> words;
std::string word;
size_t pos = 0;
while ((pos = input.find(' ')) != std::string::npos) {
word = input.substr(0, pos);
if (isValidWord(word)) {
words.push_back(word);
}
input.erase(0, pos + 1);
}
word = input.substr(0, input.length() - 1);
if (isValidWord(word)) {
words.push_back(word);
}
std::string lastWord = words.back();
words.pop_back();
for (const std::string& validWord : words) {
if (validWord != lastWord) {
std::cout « validWord « " ";
}
}
std::cout « std::endl;
return 0;
}
Помогите пожалуйста с решением.
Для примера, что я ввожу:
адам ева udfsy яблоко бог ева.
Программа выводит: адам яблоко бог
А должна выводить: адам бог ева.
Задача по программированию. тема строки. С++
Дана строка. Словом, текста считается любая последовательность букв русского алфавита; между соседними словами - не менее одного пробела, за последним словом – точка. Найти и сохранить в строке те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: в слове гласные буквы чередуются с согласными. Все остальные слова удалить.
Примерный код программы(Но он выполняет условие не до конца):
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
bool isValidWord(const std::string& word) {
if (word.empty()) {
return false;
}
bool prevIsVowel = std::isalpha(word[0]) && (std::tolower(word[0]) == 'а' || std::tolower(word[0]) == 'е' ||
std::tolower(word[0]) == 'ё' || std::tolower(word[0]) == 'и' ||
std::tolower(word[0]) == 'о' || std::tolower(word[0]) == 'у' ||
std::tolower(word[0]) == 'ы' || std::tolower(word[0]) == 'э' ||
std::tolower(word[0]) == 'ю' || std::tolower(word[0]) == 'я');
for (size_t i = 1; i < word.length(); ++i) {
if (std::isalpha(word)) {
bool currentIsVowel = std::tolower(word) == 'а' || std::tolower(word) == 'е' ||
std::tolower(word) == 'ё' || std::tolower(word) == 'и' ||
std::tolower(word) == 'о' || std::tolower(word) == 'у' ||
std::tolower(word) == 'ы' || std::tolower(word) == 'э' ||
std::tolower(word) == 'ю' || std::tolower(word) == 'я';
if (prevIsVowel == currentIsVowel) {
return false;
}
prevIsVowel = currentIsVowel;
}
}
return true;
}
int main() {
std::string input;
while (true) {
std::getline(std::cin, input);
if (!input.empty() && input.back() == '.') {
break;
}
std::cout « "Нет точки в конце" « std::endl;
}
std::vector<std::string> words;
std::string word;
size_t pos = 0;
while ((pos = input.find(' ')) != std::string::npos) {
word = input.substr(0, pos);
if (isValidWord(word)) {
words.push_back(word);
}
input.erase(0, pos + 1);
}
word = input.substr(0, input.length() - 1);
if (isValidWord(word)) {
words.push_back(word);
}
std::string lastWord = words.back();
words.pop_back();
for (const std::string& validWord : words) {
if (validWord != lastWord) {
std::cout « validWord « " ";
}
}
std::cout « std::endl;
return 0;
}
Помогите пожалуйста с решением.
Для примера, что я ввожу:
адам ева udfsy яблоко бог ева.
Программа выводит: адам яблоко бог
А должна выводить: адам бог ева.
Не понимаю как из условия следует ожидаемый результат.
Я читаю и по мне при таком вводе должно вывестись:
адам ева бог ева
Ну и т.к. я не понимаю, почему результат тот который ты ожидаешь, могу только такое дать.
Перечитал условие.
Если понял его правильно, то подразумевается, что надо найти все "слова", отличные от последнего слова в исходной строке удовлетворяющие тому условию.
Тогда все равно результат должен отличаться и быть:
адам бог
class Mesh {
char memory_block;
vec3 positions;
int* indicies;
};
Что я хочу сделать:
- в memory_block = allocate ( pos_size + ind_size)
- positions = memory_block
- indicies = memory_block + pos_size
Вобщем мне нужно выделить память под две штуки, но я не хочу делать две аллокация, а просто сразу всё в один кусок запихнуть
Как такой класс Mesh написать используя современный с++, а не си с классами
начинаю понемногу с си пересаживаться на плюсы, и с казалось бы такой простой проблемой с памятью не могу разобраться, везде пишут что си с классами это пиздец говнокод, а я по другому даже хзы как сделать нормально
1) Класс сам для себя и выделяет единый, непрерывный кусок памяти и все свое нутро туда укладывает. Не путай инициализацию с выделением памяти (aka allocation).
2) >мне нужно выделить память
Это в любом случае не задача такого класса, как Mesh. Меши отдельно, менеджеры памяти отдельно.
наоборот
> Не путай инициализацию с выделением памяти (aka allocation).
Да я и не путал, я говорил про аллокацию которая будет где то в конструкторе меша
> Это в любом случае не задача такого класса, как Mesh. Меши отдельно, менеджеры памяти отдельно.
Менеджер памяти это аллокатор?
Какое я решение пока что нашел:
- position и indicies засунул в std::span
- мемори блок спрятал от юзера
- в конструктор прокидываю pmr аллокатор которого и прошу сразу большой кусок памяти выделить
- за выравниванием слежу ручками сам
- потом ручками вычисляю где должны находится поинтеры и инициализирую ими std::span'ы
По умолчанию задал
В шаблон пихать не хочу, потому что меши будут разными типами, если разный аллокатор
И я их все в условный вектор запихнуть не смогу
фигней занимаешься
в с++ есть "встроенный" менеджер динамической памяти (вернее предоставляемый его рантаймом), вызываемый через глобальный оператор new
если ты хочешь изменить его поведение для конкретного класса то существует возможность перегрузки этого оператора
для написания классов-контейнеров, реализующих некие структуры данных, очень удобна еще одна возможность языка - а именно особая форма оператора new - placement new, позволяющая отделить механизм управления памятью контейнера от конкретного алгоритма реализующего структуру данных
НО
последние 2 возможности тебе нахуй сейчас не нужны, и вполне возможно даже и не понадобятся никогда, даже если ты будешь писать производительный код, и вообще знают про них только некоторые лошары-задроты
Пик1. Почему переменная sum, после выполнения цикла while поменяла значение? Заметил, что это происходит после считывания определённой строки из инпута (справа). Могу предположить, что это связано с передачей sum в функцию checkNearby (она передаётся по ссылке). Опять же, это всего лишь мои догадки.
Пик2. Почему комментирование массива visited вызывает Segmetnation fault? Массив при этом вообще нигде не используется.
Использую если что VS Code + gcc. До этого сидел на студии и таких приколов ни разу не было
>Почему переменная sum, после выполнения цикла while поменяла значение?
Потому что ты вылез за память на стеке выделенную для input и насрал в память переменных k, sum и visited.
>Почему комментирование массива visited вызывает Segmetnation fault?
Предположу, что если раньше ты срал в стэк до visited, то теперь ты срёшь в стек до line включительно, портя структуру самой строки line. Скорее всего в какой-то момент ты срёшь в указатель на внутренний c_str(), отчего у тебя он начинает смотреть на незамапленную память и page fault
---
1. Проверяй i не на line.size(), а на min(line.size(), n). И в цикле while тоде выходи после n итераций.
2. Сделай лучше input вектором строк, например.
Ну или у тебя во втором случае в k насралось другое число и ты тоже попал в незамапленную память, но тут тебе только ASAN или gdb скажут.
Вот тут неплохое объяснение как устроен стек, как на нём лежат массивы, и как в него можно срать чтобы получать с этого профит - https://xakep.ru/2019/09/20/stack-overflow/
Работает медленнее, чем приложения на GDI?
Как думаете, имеет смысл ознакомиться ньюфагу? Оригинальное издание вышло 25 лет назад.
На лабиринте пишут про эту книгу:
"Очень хочется классику! Таких книг больше нет!
Распечатайте пожалуйста!
Может можно под заказ оформить?"
"Интересно организованный самоучитель. Обычно такого рода книги начинаются с разъяснения синтаксиса языка, типов данных и т.д. Здесь же автор берет быка за рога и начинает сразу с объектно-ориентированного программирования в c++. Подробно изучаются классы, массивы, указатели, ссылки, перегрузка функций и операторов, наследование. Отдельные главы посвящены вводу-выводу, виртуальным функциям, шаблон, обработке исключительных ситуаций, приведению типов, пространству имен, библеотеке стандартных шаблонов. Есть упражнения. Уровень "полупрофи"."
Больше спасибо анон
А если я после этой книги прочитаю что-то поновее?
Просто она в бумажном издании, досталась бесплатно, хочу ознакомиться. Все равно язык тот же самый, базовые вещи там вряд ли поменялись.
> досталась бесплатно
На помойке нашел? Не стоит привыкать к практикам, которые были в ходу до 11 стандарта.
>На помойке нашел?
Не.
>Не стоит привыкать к практикам, которые были в ходу до 11 стандарта
А что там за практики такие были, что их надо избегать?
В шапке треда большинство рекомендованных книг изданы до 2011 года. Шилдт там тоже кстати есть, только не 2000 года, а 2010.
да не читай советы всяких ламеров с двача, ты бы сначал просто научился хотя бы hello world-ы писать а потом уже о чем-то говорил.
тебе С++ учить сейчас как раком для китая, если хочешь реально чему-то научиться сначал надо разобраться с Си, а потом может быть если тебе программировать понравится пойдешь и начнешь изучать плюсы.
>сначал надо разобраться с Си
Половина людей советует сначала разобраться с C, другая половина говорит, что это только помешает вкату в плюсы.
Я уже Питон знаю, если что. Какая-то база есть.
Питон и С++ ну ты сравнил.
Короче, если ты хочешь реально что-то знать, когда ты учишь Си ты должен понимать то как в принципе устроены некоторые моменты аж на уровне железа и ОС.
С++ берет все то что имеет Си и утилизирует это, добавляя сверху синтаксис и семантику, которая в итоге позволяет тебе писать код так чтобы он был близок к коду на чистом Си по производительности, но при этом, тебе не приходилось например работать напрямую с указателями.
Но указатели это чистый Си и ты их в С++ понять не сможешь если не разберешься сначал с Си. Понимаешь в чем проблема?
ImGUI есть
Да я в целом тоже самое хотел ему сказать. Что оно нахуй ему сейчас не нужно.
Так тебе надо просто написать конструктор который будет сам это за тебя делать и да тебе придется дважды обратиться к аллокатору если ты захочешь выделить память под объект. Сначал под класс Mesh, а потом в его конструкторе под indices.
Уточню на всякий случай что имею ввиду, что positions у тебя является вектором скорее всего из трех float поэтому тебе не надо выделять под него память, а можно использовать память со стека, поэтому я и говорю что сначала придется выделить под объект Mesh память, причем не важно со стека или с хипа.
А вообще если вот прям по С++-совски писать то лучше конечно будет вот так.
Поправьте если что-то пропустил.
#include <memory>
struct v3
{
float x;
float y;
float z;
};
class Mesh
{
Mesh(v3& positions, std::unique_ptr<int>&& indicies)
: m_Positions(positions)
, m_Indicies(std::move(indicies)) {}
private:
v3 m_Positions;
std::unique_ptr<int> m_Indicies;
};
А смысл его советовать? Дауны всë равно думают, что в Qt либо плати , либо открывай исходники. LGPL для них пустой звук.
У тебя здесь два указателя на одно и тоже место в памяти, в С++ там в принципе не принято делать
Не на одно место, indices сдвинут относительно начала
positions = memory_block
indices = memory_block + m*4
ну вот ты де сам написал у тебя memory_block в структуре указывает туда же куда указывает positions
Ну да, ну могу потом мемори блок вобще не хранить, просто храню чтобы потом память под ним подтереть удобно
А то вдруг я когда нибудь захочу местами память под positions и indices поменять местами, то не придется код переделывать и думать не сломаю ли я что нибудь этим
Пока что у меня структура как то там выглядит
>за выравниванием слежу ручками сам
тут я долбоёб просто
сам себя запутал, почему то думал что indices может неправильно выравнен быть
ты и есть ламер с двача, мы в одной яме с говном сидим, алсо кинул в тебя какашкой
Почему ты думаешь, что аллокация - такая пиздец дорогая штука? Проще же сделать тупо два вектора, и потом, если оно именно из-за этой лишней аллокации тормозить будет, оптимизировать. Ты эти меши не на каждом кадре создаешь же, а хорошо если один раз в несколько минут. И создаешь их не миллионами, а максимум сотнями. Т.е. экономишь меньше миллисекунды, а геммороя получаешь вагон.
Пилю тензорную либу
Мне нужно чтоб можно было инициализировать тензор при помощи многомерного массива, типа такого:
Tensor<int> t({3, 3},
{{1, 2, 3},
{4, 5, 6},
{7, 8, 9}}
);
Так как у меня тензор хранит все данные в одномерном массиве, то нужно входной многомерный массив вытянуть в одномерный
Вопрос как сделать произвольную вложенность этих самых std::initializer_list, какая сигнатура будет у такой функции
ПОдозреваю, что через параметры шаблона, но все равно не ебу
Грубо говоря, нужно написать конструктор, который способен принять и обработать std::vector произвольной вложенности
не еби себе мозги
просто сделай класс меш, в нем вектор позиций, и вектор индексов
и скорей всего этот самый примитивный вариант удовлетворит тебя по быстродействию
> а геммороя получаешь вагон
Ну вот когда на сишечке это же писал, потратил минут 5 всего, да и в плюсах такая штука не долго пишется, если бы я сразу знал что делать
Это больше учебный пример, просто хочу разобраться как с памятью правильно работать
В плюсах правильно с памятью НЕ РАБОТАТЬ.
За тебя все делают аллокаторы.
Даже new и delete - в современных плюсах этого быть не должно, только обертки над указателями.
> В плюсах правильно с памятью НЕ РАБОТАТЬ.
Мне нужен системный язык, если в дизайне языке предполагается что работа с памятью должно быть болью, тогда у меня вопросы нахуя он такой нужен?
>принять и обработать std::vector произвольной вложенности
Лень обдумывать в подробностях, но я примерно так чувствую, что в языке нет для этого средств.
>чтоб можно было инициализировать тензор
Я бы на твоем месте не выпендривался, а посмотрел бы документацию к математическим библиотекам на предмет того, какие бывают конструкторы у тензоров. Тут даже ставить библиотеки не требуется, просто посмотреть в документации(ях) сигнатуры конструкторов.
>если в дизайне языке предполагается что работа с памятью должно быть болью
Боль - это не работа с памятью, а как раз автоматизация работы с ней. Представь, например, что у тебя не POD элементы, как в сишке, а класс с деструктором и остальным rule of 5 - тебе сразу надо писать как минимум деструктор, мув конструктор для всего контейнера, и это уже не пять минут. Потом в проект приходит новый чувак-олимпиадник и обзывает тебя лохом и сишечным пердуном, потому что на твоем контейнере не работают итераторы из STL, а ими писать модно и молодежно.
В плюсах правильно работать как хочешь, это мультипарадигменный язык, там нет единой парадигмы "как надо". Можешь писать как в сишке, можешь на сишке с классами, можешь на ООП как в жабашарпе, можешь подобие FP как жабаскрипт. Последние два варианта сделаны в угоду моде, я лично не вижу смысла когда есть оригиналы, но раз есть, можешь и воспользоваться если хочешь, наличие лишних опций никогда не есть плохо. Плохо это когда макаки с последних двух вариантов лезут в кресты и кукарекают что надо как они привыкли, а кор-функционал первых опций "плохо и ненужно". Только лишь показывает узколобость макак и как я сказал, по сути ненужность этих модных фич в крестах.
>std::vector произвольной вложенности
А ты точно хочешь, чтобы пользователь твоего тензора был вынужден писать что-то вроде
std::vector<std::vector<std::vector<std::vector<std::vector<std::complex<double>>>>>> tensor_1;
// ...
Tensor tensor_2{tensor_1}
???
Не, он будет передавать либо вектор, как ты написал, либо initializer_list, например {{1, 2, 3}, {4, 5, 6}}, что достаточно удобно. А эта хрень уже будет каститься в вектор
Надо использовать rule of 0. Да и вообще не выебываться и использовать стандартные контейнеры и функции. Это гарант быстрой, надежной и гикбой работы приложений.
> использовать стандартные контейнеры
> Это гарант быстрой, надежной и гикбой работы приложений
Тото их все кому не лень переписывают
Ты лучше создай структуру в которой будет один вектор, а отдельным параметром передавай колличество его измерений.
А потом создай какой нибудь метод, который будет по переданному N колличеству параметров возвращать тебе значение из этой N размерной матрицы.
Для того чтобы реализовать функцию с переменным колличеством аргументов используй variadic template arguments.
Поймал лицом
>>2971281
Предполагается что ты просто делаешь это безопасно, чтобы чел который использует твой код не мог накосячить. То есть ты то можешь написать все что угодно, а вот люди которые будут пользовться могут пострадать.
>>2971699
>>2971127
Бля затупил. В принципе это то о чем я писал выше, но только в STL.
>>2971781
Один умный хер кажется говорил о том, что STL не задезайнин быть быстрым.
>например {{1, 2, 3}, {4, 5, 6}}, что достаточно удобно
Это удобным кажется на простейшем примере.
Начиная с некоторого N количество скобок в таких выражениях станет умопомрачительным.
Простой одномерный массив вполне можно расписать в удобочитаемом виде за счет табуляций и переноса строк не прибегая ни к каким внутренним скобочкам. Больше того, как большой любитель записывать код и в особенности данные в колоночки и таблички, скажу, что внутренние скобки только мешают.
Алсо, в реальном приложении, я предполагаю, тензор будет инициализироваться не магическими числами.
Вы говорили, вам тяжело читать сетевой код с сишными колбеками, да? А мне вот не тяжело совсем. И дело тут не в readability, а в нехватке оперативной памяти у читающих, который в голове не могут удержать пару-тройку раскинутых мест по назначению колбека, его вызова и самой функции назначенной колбеком.
А вот современный супер ASIO c++20 с корутинами, вообще шедевр (пикрил 1), да? Его читать у вас глаза не ломаются?!
И теперь каждый долбоёб, который не хочет тащить ASIO, но хочет юзать корутины, будет писать свои future и promise
Каким же с++ говном становится с каждой пятилеткой.
Костя из интел, согласен?
Есть такая игруля культовая в определенных кругах - Dwarf Fortress, написана на няшной сишечке. На момент анонса в стиме игре было под 20 лет. И в анонсе она провисела года полтора до релиза.
Полтора года на то, чтобы прикрутить к стиму готовый, даже зрелый продукт. Это все, что нужно знать об удобстве няшной сишечки.
Игра в любом случае была уже готова + на стим они выходили при поддержке издательства.
Я без понятия, как прикручивать игры к стимсу. Но тут может быть виновата архитектура. А я тебе говорю о локальных вещах в с++, от которых болят глаза. Да и просто сама уёбищность - через std::variant - определять сработал таймер, или прошло чтение? Пиздец... Это же просто безвкусица. Ну кто-то должен был остановиться и сказать: ну это просто не красиво, товарищи.
Стим-релиз сильно отличался, они нихуёво интерфейс перелопачивали например. Короче он фигню сказал. Дварф фортресс в этом контексте ну никак не связан с тем какой там си язык
>Стим-релиз сильно отличался
В свое оправдание могу сказать, что релиза я так и не дождался.
>Дварф фортресс в этом контексте ну никак не связан с тем какой там си язык
Связан тем, что на сях он написан и продолжает писаться. Причем связан - во всех смыслах этого слова.
с пробуждением
Да этим говном вообще всё пропитано.
https://pastebin.com/DHSYeRHB
Получаю вот такой вывод
Ctor a
Ctor b
Copy Ctor a
Copy Ctor b
Dtor <--- откуда тут взялся деструктор?
=======
Dtor b <- Из вектора удаляется b
Dtor a <- Из вектора удаляется а
Dtor a <-- Почему тут такой порядок? Сначала же создана А потом Б
Dtor b т.е удаляться должо сначла Б потом А
g++ main.cpp -O0 main Компилироваю с флагом -O0 никаких оптмизаций быть не должно.
ca
Полностью согласен.
Добавлю только, что иногда современные фичи оправданы и удобны, иногда. Но по не понятной причине, как будто форс, они пихаются куда ни поподя, литерали с++26ооп головного мозга.
std::string str = std::string("zalupa01234567890123456789") + std::string(const_char_ptr_variable);
Здесь создаются два prvalue объекта, каждый из них вызывает new внутри. Потом они складываются, создавая еще один prvalue объект с вызовом new. Хотелось бы, чтобы вызов new был только у переменной str.
Звучит как работа для string stream
Libfmt
static unsigned char massiv[] = { 0x80, 0x00, 0xa0, 0x34 };
int main()
{
unsigned short w16;
int i = 0;
w16 = (((unsigned short) massiv[++i])<<8) | massiv[++i];
printf("0x%08x\n", w16);
}
Угадайте, что выведет этот тест.
Ты прав, это скорее для того чтоб тестики писать, а так конечно никто инициализировать тензор в коде не будет
Не нужен, но зависимости симейком подхватывать достаточно легко и удобно
выведет что ты долбоеб не знающий про точки следования и что i += i++ + ++i было баяном еще в 2003
У меня программа аварийно завершилась, вывело вот что:
terminate called after throwing an instance of 'std::undefined_behavior_exception'
what(): Undefined behavior invoked.
Если под студией, то sln - лучший вариант. С симейком студия глючно работает.
Если будешь выкладывать свой код на всеобщее достояние, то не помешает сделать симейк файлы.
нет конечно, студийные проекты сильно лучше работают
auto const_char_ptr_variable = "rhs";
std::string str = "zalupa01234567890123456789";
str.append(const_char_ptr_variable);
На днях буквально в книжке modern cpp/c++20 edition наткнулся на почти такое в примере.
Всмысле это был не пример UB, а пример якобы рабочего кода.
как будто я не два инта складываю а ипотеку оформляю
Как думаете, есть смысл сейчас писать меседж брокер на юсервере? Я просто его трогал по работе не Яндекс , но думаю сейчас слишком сложная штука с избытком зависимостей для такой задачи
У меня буквально упрощённое первое задание было на собесе, вот и думай где бесполезная хуйня
Помню когда первую на скрине написал очень радовался за себя. А на вторую по-моему хуй забил лол
залётный пэхэпыня
unsigned char b = 255;
int c = (unsigned char)a + (unsigned char)b;
std::cout << c;
Что выведет?
Проверь сам, сука.
Смейк дефакто стандарт и к нему все уже привыкли. Если ты пользуешься какими то своими ебланскими нонейм тулзами то ты еблан соответственно
Память кучи находится в оперативной памяти?
https://github.com/rncbc/qtractor
Запустил VS, открыл проект через Open Local Folder, что-то там студия ругнулась, что Qt кода не находит, это мне сейчас не важно на данном этапе, компилировать все равно не собираюсь. И вот у меня возник вопрос, что мне нужно сделать, чтобы студия просканировала проект, чтобы у меня в Class View показывало всю структуру классов с их методами, переменными и всем содержимым в открытом в данный момент файле?
Всё находится в оперативной памяти. Стек и куча - это всего лишь абстракции, чтобы программам было удобнее с работать с оперативной памятью. В процессоре находятся только регистры, в одном из которых адрес стека.
почему тогда стэк считается быстрее? как при обращении к памяти так и при её выделении?
выскажу догадку что стек просто чаще оказывается в кэше процессора.
с выделением памяти все понятно - у стека чтобы выделить нужное кол-во памяти это просто прибавить оффсет к адресу верхушки стека. с кучей надо пройти через всю хуйню через вызовы к ОС, чтобы она просканировала память и нашла запрошенное кол-во страниц памяти.
По выделению всё так.
При обращении к стеку достаточно прибавить к адресу стека из регистра известное при компиляции смещение, когда при обращении к куче надо взять из указателя в стеке ещё один адрес и обращаться уже к нему.
Я surfshark использую, но хзы лучший ли он, так как ничего кроме него и не использовал
Ну за 183 рубля в месяц можно взять в принципе, копейки. Ща, если через winsys2 не получиться поставить, то куплю. А ты ны кутях пишешь? Ставится норм он через этот впн, без проблем?
Ну спасибо тебе за совет анончик, будем пробывать
Собери сам из исходников.
Часа два займет.
Исходники на гитхабе.
А так пленет впн.
Ещё попробуй залогиниться и отключить впн, вроде должно будет быстро качать.
> Собери сам из исходников.
Ой, та это пиздец ща будет геморрой с моим нулевым опытом в этом деле, уйдет минимум целый день, еще и выёбывться начнёт, ошибки выдавать, я буду тупить по жетскому, хз что за ошибку, что от меня компилятору нужно, лезть в гуголь, писать на форумы
> пленет впн.
Та он рвёт соединение, я его самым первым попробывал, пишет типа у меня торренты запущенны, хотя я всё по отключал и по закрывал
Попробуй все же залогиниться, начать качать, затем поставить на паузу, отключить впн и продолжить скачивание.
Перестать мучиться с голимой студией и переходить на иде креатор/силион/вскодиум с нормальной поддержкой симейка, которым твой проект и собирается.
Рискну предположить что обращение к памяти в куче медленное из-за того что к ней через pointer indirection надо обращаться. Плюс на стэке всё рядышком лежит и соответственно это более cache-friendly
> креатор
А как в нём открыть? В VS хотя бы есть open folder, а здесь чет нихуя не вижу такого... Пробовал открывать CMakeLists.txt, крашится нахой...
Меня интересует в данный момент либо VS, либо Qt Creator
Неприятно чурка майкрософтовская?
Телепаты в отпуске. Разверни свою гениальную мысль
Клиент серверный круд
Ты только что имгуи.
Undefined behavior.
Нихуя себе
> FIXED-POINT ARITHMETIC
Посмотрим, что скажет аффтар пикчи, когда при написании симуляций или игор у него всё будет тормозить.
Я слышал такую пословицу, что использовать надо всегда вектор, а если юзаешь другой контейнер, то будь добр объяснить почему. Еще видео смотрел, где Страуструп говорил мол предпочитайте вектор листу. Хоть у него вставка в середину линейная, но поскольку все элементы рядышком, вектор хорошо кешируется.
Хэш- таблица вообще гениальный контейнер, но не так часто используется. А в многопоточке любят использовать очереди.
Вот все, что я знаю. Поправляйте и дополняйте, очень важно все это знать.
Т.е. вектор можно юзать вообще без вопросов?
Это так не работает. Надо всегда понимать, почему следует выбрать ту или иную структуру данных, хоть вектор, хоть не вектор.
Изучи основные временные пространственные затраты основных контейнеров и вопросы отпадут.
Задача обойти ключи в коллекции по возрастанию. Хэш-таблица всë ещë лучше всех?
Надо просто на практике смотреть что эффективнее. Почти всегда это вектор, даже если кажется что это не так и несмотря на все теории про сложность и тп, вот и всё.
Новогодний Репертуар/кю - тут и так понятно, LIFO/FIFO.
Ордеред мапа - много дописываем, много ищем, требуется хранить данные в отсортированном виде для обхода.
Анордеред мапа - дописываем редко, создали один раз и пользуемся, много ищем, порядок не нужен, обходить не собираемся.
Stack
надо вспомнить язык, теорию нашел (но буду рад годным советам по источникам, полезной структурированной информации), а вот что писать вообще хз.
помню давно где-то видел типа рулетку, делаешь ролл и пишешь проект соответствующий, но найти не смог
❄️
Сап.
У меня имеется класс Object3D с только одним нас интересующим полем -- position. Оно может меняться через соответствующий сеттер.
К нему можно по идее прикрепить 3д модель/меш, у которой/которого есть атрибут матрицы, отвечающей за её/его 3д трансформацию (то есть за перемещение и т. д.).
Position -- обычный вектор (одномерный массив).
Матрица -- массив векторов.
Суть проблемы.
Если у Object3D нет меша, то изменяется в сеттере только его поле position.
Если у этого класса есть меш, то изменяться в сеттере должны и меш, и позиция.
Нужон самый оптимизированный способ.
Я думал, что можно будет сделать один публичный setter0 и две приватные функции (setter1 & setter2 условно).
Таким образом, при добавлении меша к объекту можно установить публичному сеттеру (просто заголовок метода) адрес нужного приватного сеттера.
Но я где в инете услышал, что такие выкрутасы -- низкопроизводительное дело чушпанов.
Опять преждевременными оптимизациями занимаешься?
Сделай сначала так, как заработает и упрется в перфе в это место спросишь на геймдеве.
Или на ревью тебе скажут что ты Тулуп.
Звучит как плохая идея
Зачем тебе трансформацию хранить то в меше как матрицу, то в объекте как позицию?
Ну вот условно я начну твоим классом пользоваться, начну трогать сеттер, а у меня то одно меняется, то другое
Я бы на твоём месте все трансформации перенес в 3д объект, а не в меш
хотя я не очень понимаю что ты сделать хочешь
1280x720, 1:59
Можешь скочать какой-нибудь проект тысяч на 10 строк, игру например, и попытаться отрефакторить его под ❄️ 20 стандарт.
Так пиши все на сях, ну забрали у тебя пару ключевых слов, сишное подмножество все также работает.
Думаю твой препод, который считает что ❄️ это С с классами, будет очень рад видеть такой код.
Хачу, чтобы Object3D -- был базовым для остальных.
И чтобы юзер мог его просто создать кое-как юзать. А так как он по умолчанию не имеет 3д модели, то, следовательно, и не должен менять матрицу просто так при своём изменении.
>>2980924
Всё на русском:
https://habr.com/ru/post/310790/
http://triplepointfive.github.io/ogltutor/
Олсо https://docs.gl/ .
Кста, чэд, в /gd/ есть трэд по графическому программированию. Я оттуда.
И специально для тебя я ещё свои пиратские архивы расчехлил
https://vk.com/doc552950054_671036801
https://vk.com/doc552950054_665784067
Антибаза
> Хачу, чтобы Object3D -- был базовым для остальных.
Так а как у тебя объект 3д без меша существует?
Спасибо за такую годноту по OpenGL.
Кстати, аноны, мое увлечение дифференциальынми уравнениями, алгеброй, геометрией и ТФКП как сочетается с трехмерной графикой? На стыке этих областей можно создавать что-то интересное?
Просто базовый класс. Точка в пространстве.
На его основе есть другие классы (светильники и т. д.).
>Кстати, аноны, мое увлечение дифференциальынми уравнениями, алгеброй, геометрией и ТФКП как сочетается с трехмерной графикой?
Отлично.
>На стыке этих областей можно создавать что-то интересное?
Можно, но надо быть гением, ибо очень много тем уже избито и которые ты должен будешь знать наизусть и уметь делать.
Дальше классных спецэффектов и красивых фрагментных шейдеров ты вряд ли дойдёшь. Самые тяжёлые математические проблемы 3D графики решены (излучение (как в рейтрейсинге или рэймарчинге), 🎁еризация, фильтрация текстур, трансформации в пространстве, расчёты освещения и прочие магические для быдла штучки).
Главная задача Белый Медведьов GPU -- сделать так, что всё работало быстро. А для таких оптимизаций нужны глубокие познания computer sience:
https://2ch.hk/gd/res/907734. (М)🕛#917484
https://2ch.hk/gd/res/907734. (М)🕛#917487
Тебе до всего этого ещё 🎁и и 🎁и.
перегрузка
а потом подобные ему начинают в миллионный раз реализовывать ооп на коленке вручную пиша vtable или делать adt на макросах, считая себя при этом неебатца крутыми
если в россии, пиздуй в военку, создавать 3d тренажеры для танков и боевых самолетов
gd - нахуй
не троллю
576x1018, 0:13
OpenGL -- относительно простой и эффективный.
D3D 12 & Vulkan -- очень сложное и кропотливое занятие, в которое без опыта лучше не лезть. Это как asm.
>>2981257
Какбе в РФ есть Saber interactive, Белый Медведьатывающая Saber3D, есть ещё Nau engine, Белый Медведьываемый VK Group, и Unigine, с которой всё понятно.
Олсо существуют навигаторы от Яндекса и 2ГИСа, которые ведут набор графических програм_мистов, не говоря уже о gd Застольех, которым нужно править говённые рендереры уринала и унити.
Ну хуй знает чел. (Я если что к гд никакого отношения не имею ибо та еще залупа)
Но ты говоришь что решено, а открытые реализации этого есть? Я говорю хотя бы про кор решения, которые почти всем нужны, или как всегда завезено проприетарно под самую новую карточку за пол лямца пынефантиков?
> Cmakelists
Анон, с ориентируй, а почему в класс-вью при открытии таким способом ничего нету, ну чтоб я мог видеть дерево классов со списком всех функций, переменных?
Весь кор, и даже значительно больше, уже решено.
>открытые реализации этого есть?
Есть и в учебниках, и на Новогодний Выпуске, и в открытый интернет-статях.
>или как всегда завезено проприетарно под самую новую карточку за пол лямца пынефантиков?
Конечно, никакая коммерческая компания не будет никому давать свои наработки, ибо конкуренция.
НО гейдевелоперы, и не только, выпускают в открытый доступ на SIGGRAPH презентации по нанотехнологичным алгоритмам и нанотехнологичным решениям проблем рендереров.
Это кладезь новейших исследований в области 3д
https://advances.realtimerendering.com/
Ты там, конечно, исходный код не увидишь, но подробно узнаешь, что и как работает
То о чем он писал еще кармак порешал в большинсве. Все есть - читай доки. Они кстати рилейтед статьи в научных журналах публиковали и публикуют, а не в игровых.
Я понимаю, что в учебниках есть вообще все, ну кроме реализаций. А трудность как раз в этом, от момента когда вговне моченый напишет книгу до её реализации на конкретной железяке может пройти и 5 и 50 лет, а когда до опен сурса это дойдет и дойдет ли вообще - открытый вопрос.
А что касается твоих статей, знаем мы их. Сам же говоришь, что компании конкурируют, никто в этих статьях тебе ничего не рассказывает кроме:
1 страница: вот у нас есть вот это формула и вот эта, мы че то там сделали и заебись.
2-100 страница: а вот собственно и наше заебись, заебись здесь и здесь, все ссылки в описании.
Я это собственно к чему, ты сказал, что гением нужно быть чтобы там создать что-то, но дело то скорее в реализации, и вот тут то и поле непаханное и можно залетать с двух ног.
Я так кстати, все еще со своей табуретки рассуждаю
Ну я открыл через cmakelists, проект загрузился, а хуле в classview текущего файла нет ничего? Или ты такой же нубас как и я, не в курсе? Хуле тогда сам троллишь?
https://github.com/rncbc/qtractor
у меня в Class View ничего не отображается?
576x1024, 0:10
Верно рассуждаешь, без смехуёчков.
Желаю удачи в бескрайнем мире графического программирования и полёта фантазии.
И не забывай заглядывать в тематический тред в /gd/.
Там тебя радушно примут.
Там такая ж хуйня
чел уже то что тебе с натугой приходится перечислять то что осталось в россии от геймдейва и вообще от кодинга условной 3d графики (за исключением военки) как раз и означает что геймдев в россии мертв
алсо, вообще основная кормушка геймдейва в россии это были мобилки последние несколько лет, а все мобилкоделы сьебали с россии
так чтож спок
А не ты ли мне изначально советовал выкинуть богомерзкий VS и поставить божественный Qt Creator там с этим типа проблем нету?
Это не натуга.
Это андерграунд.
А 3д графоний, за исключением макак-модельеров, всегда был андеграундом.
Я ни слова не понял.
Как же Абу тебя выебал
720x1280, 0:52
Действительно, в чем же проблема
ref используется до объявления. Как это по твоему должно работать?
После объявления же extern int& ref. Но уже не важно, я понял, что extern только для глобальных сущностей.
Использовать нормальный логгер, где такой хуеты не будет
Анончики, как намутить генерацию облака частиц, максимально близкого к реальным облакам?
В играх это как-то реализовано ведь. Следовательно - математическая модель и код есть. А дальше надо лишь разобраться с его сложностью и сделать генератор тех самых облаков.
Пока думаю. что можно сделать случайное распределение, а дальше в виде массива сортировать ячейки по параметру, чтоб ячейки с большими значениями "притягивали" ячейки с маленькими и так перераспределяли пространство.
А в мультиках пиксар?
Инвалид, почему почерк такой убогий?
> мое увлечение дифференциальынми уравнениями, алгеброй, геометрией и ТФКП как сочетается с трехмерной графикой?
Никак почти что.
Алгебру и геометрию достаточно знать в том объеме, чтобы ориентироваться в справочнике для инженеров. Желательно - в англоязычном.
Матан и прочие дифуры нужны постольку, поскольку они суть язык физики (в частности, оптики и физики света).
>На стыке этих областей можно создавать что-то интересное?
Можно, но это уже за пределами собственно три-дэ графики: визуализация, моделирование, симуляция и т. д.
И все интересное, насущное и важное уже создано.
Энивэй, большая часть из этого реализуется и используется на компухтере приблизительным образом, а не в виде аналитических формул. Копай в сторону численных методов и вычислительной математики.
С одной стороны хочется вкатиться в нейронки, но там нужна матан, линал, но на лекциях я смотрел Голубой Огонёки, а на семёнарах, когда нужно было Читать у доски, в основном писал под диктовку препода. От этого есть ощущение, что это всё не моего ума дела и я ниосилю.
С другой, у меня периодически возникает интерес к тому, чтобы задрочить ❄️, а в месте с ним задрочить алгосы и архитектуру компика, сети и остальное из komputer sainc. Но если с матешей я умею матрицы перемножать, то тут вообще пиздец. Я чувствую, что когда я дойду до главы по указателям и не осилю, то просто обоссусь и буду плакать весь день.
Что выбрать из этих двух? Помогите, пожалуйста.
Задания охуенные, но мне сложно что-то архитектуру придумывать.
> Call to consteval function '...' is not a constant expression
В настройках есть галочка с фиксом проблемы с кракозябрами, то ее поискать надо. Чё то в выводе.
Да, такое хуй существует
> 2024
> модули все еще остаются в мечтах
Уже даже не смешно, как будто кто то саботаж по отношению к языку совершает
Надо всю стандартную библиотеку разбить на модули, чтобы их можно было по одному импортировать или я что-то неправильно понял?
А должен работать в с++
Так они есть. Просто все в рот ебали переписывать кучу кода под них.
Ну и выглядят они как говно. Я хотел просто писать import zalupa и не думать о связывании, хуязывании и тому прочем.
> в плюсах настоящие программисты, не то что ваши макаки в вебе
> 4 года не могут сделать рабочие модули
И сразу:
> ря, это все компиляторы виноваты
> ря, это все симек виноват
> ря, это комитет все виноват
Да, интересно язык развивают. Теоретики, которые не умеют программировать, пишут стандарт, а всякие васяны его пытаются реализовать.
>4 года
О них говорят уже лет 20 же, я программирую меньше.
И это не самая простая задача для разработчиков компиляторов, иначе давно бы сделали.
> И это не самая простая задача для разработчиков компиляторов
Но что то у других получается
Если совсем по-тупому, это набор готовых либ и тулз для создания компиляторов.
А зачем нам создавать кучу компиляторов, у нас есть проверенные временем gcc и msvc? Чтобы написать очередного убийцу плюсов?
Не только очередные убийцы плюсов, многие языки юзает какие-то компоненты ллвм, даже динамиаодрисня типа руби.
Компилятор состоит из нескольких больших компонентов, если очень образно - это фронтенд, некоторые выделяют миддл-энд и бэкенд.
Фронтенд занимается анализом твоего говнокода и переделыванием его в некий Intermediate Language, платформо-языконезависимый.
Миддл-энд занимается оптимизацией этого IL, превращая твои охуенные вирши в некий mov eax, 2; ret;
Бэк-енд занимается генерацией полноценного платформозависимого бинарного кода из этого IL.
Вообще все компиляторы (включая МСВЦ и ГЦЦ) устроены по этой схеме, но нюанс в том, что ллвм это миддл и бэк энд отдельно, и он охуенно задизайнен без прибития гвоздями к фронтенду так, что фактически ты можешь реюзать бэкенд и миддлэнд без фронтенда (коим является кланг для крестов).
Итого - если ты решил написать компилятор языка PETOOH - то тебе надо только написать конвертер PETOOH -> LLVM IL, а оптимизацию и генерацию бинаря ты получишь бонусом. В случае с ГЦЦ это реально (опенсорц) но на порядок сложнее, т.к. гцц для этого изначально не предназначен и очень сильно завязан с фронтендом.
Вот мне не хватает какой-то книжки(или курса) типо как Python Cookbook у питонистов. Книжки где будут разбираться по очереди все идиомы и мелкие бест практисы. НО эта книжка обязательна должна быть 20-23 стандарта, потому что как я замечаю, многие вещи уже неактуальны.
Я вот сегодня копался от нехуй делать в расширениях вскода и там нашел расширение со сниппетами всяких стльных алгоритмов, думаю прикольно -- потом смотрю -- последние коммиты 6-8 лет назад. Так эту всю хуйню уже переделывать надо что ли?
Ну вот я думаю, хуй с ними со сниппетами, но мне бы погрузиться нормально в современный идиоматичный код со всеми новинками стл, в идеале чтобы уже и под 23 стандарт, чтобы не устарело пока дочитаю. Есть что-то подходящее?
Куча компиляторов не нужна, нужна куча языков. LLVM это компилятор промежуточного кода в бинарный. Причем этот промежуточный код документирован, таким образом в него несложно преобразовать любой язык, даже выдуманный тобой. Для этого оно и существует, чтобы подмять под себя все языки. Это как игровой движок Unity, на нем легко разрабатывать игры, но все попадают в зависимость от движка, его хозяина барина. Так и тут, легко разрабатывать новый язык и все лезут на халяву, но все языки попадают в зависимость от LLVM. Короче, ловушка с сыром на тупых крыс, думающих, что сыр бывает бесплатным.
Поясни за платность llvm-ного сыра плз. Его и гугл, и майки, и интел используют, и кучка языков под некоммерческими организациями - где ловушка-то?
То есть этот IL был придуман авторами LLVM? Я почему-то думал, что он всегда был и все компиляторы си и плюсов были на нем построены. А так получается у gcc свой IL, у msvc свой. То есть LLVM это фреймворк. Осталось понять почему он называется виртуальной машиной.
Он так называется.
Современный идиоматический код - это С++17.
На 20 начнут писать года через 2-3. На 23 - лет через 5-6.
Мещерин свой самый крайний продвинутый курс начал читать с ориентацией на 20 стандарт. Мне кажется это знак, что сейчас надо под 20 стандарт подбирать материалы.
Про 23 я наверное реально загнул...
Напиши свой ecs движок и простой опенгльный рогалик на его базе. Естественно всё оптимально на шаблонах. Всё на crtp естественно без виртуальных функций.
Ответ неверный!
пасиб анонче
>Лучше винапи ничего нет
кроме экосистемы Mac.
Нет, серьезно.
Стоит лишь преодолеть свой иррациональный страх перед vendor lock и твои волосы станут мягкими и шелковистыми, как Тулуп младенца.
Ограниченный набор инструментов, кроме известных недостатков, все же и решает устраняет огромный ворох проблем. В первую очередь это проблемы выбора, но также и знание о том, с какой конкретно платформой ты работаешь развязывает руки для оптимизаций, невозможных в рамках дроча на кроссплатформенность.
Да, дорогие мои, кроссплатформенность - это тоже рамки, и еще какие.
>на плюсах, всё что угодно можно написать
На голых плюсах пишут библиотеки, фреймворки, API и т. п. Конкретное прикладное пишется уже поверх этого.
Не рылся в его исходниках, честно говоря.
Но даже то, что на пикрил помимо прочего указан C++, надо понимать так, что он писан не на голимых плюсах. Даже если у них там какое-то предубеждение против сторонних библиотек и все на homemade велосипедах, проект такого масштаба практически невозможно реализовать без библиотек как таковых. Как минимум у них самописные велосипеды скомпонованы в библиотеки.
Никуда от этого не уйти.
И это один из первеших вопросов для анона вроде >>2989433 в чем смысл жизни, вселенной и вообще чё я пишу вобще, библиотеку общего назначения или что-то конкретное прикладное?
> не навязывает применение идиом и абстракций
Страуструп и core guidelines настаивает
Просто на него всем похуй
как и ему на язык
Чел, ты хуйню несёшь. Автокад написан на плюсах. Всё. Точка. Дохуя софта написано на плюсах, а не только библиотеки. У меня отец работал над автокадом, когда свалил в сша. Но это другая история
>Автокад написан на плюсах. Всё. Точка.
Инклуды там есть?
Графику они как выводят?
Математика чем считается?
>>2990695
>А как можно "рыться в исходниках" автокада? Он ж не опенсорсный.
Вероятно никак. Но раз уж кто-то додумался именно такой пример привести, то приходится как-то гадать и додумывать исходя из.
Чел ты дурак? Какие инклюды какая графика? Вся математи это си/плюсы. Рендереры на плюсах или си и пишутся. Видео дрова на си. А ты просто серишь.
Да это какой-то зумер, который вкатвыается в АйТи. Решил тут поучить всех
Чел, ты дурак. Я тебе про фому, ты мне про ерему.
Математика, графика и многое другое в плюсах - это библиотеки, еб твою мать.
На плюсах библиотеки или на чем другом, речь вообще не об этом. А об том, что написание библиотеки - это совершенно другой вид программирования и проектирования, чем проектирование и создание прикладной программы с использованием готовых библиотек. Тебя ебалом в букварь ткнуть чтоле?
что я только что прочитал
Конкретно топик стартеру >>2989433 я даю подсказку, что можно не ебать никому мозги про то, что его покинула Муза, а просто взять какую-нибудь небольшую либу и запилить для нее оболочку на современных плюсах.
Для чего и требуется понимание, что ты пишешь либу/оболочку, а не что-то другое.
И такой проект не стыдно будет на гит хабе показать, может даже им станет кто-то пользоваться.
скрин вот
еще блядь как открыть проект на нем? я открываю main.cpp файл, а он его как текстовый редактор считывает и не дает собирать и компилить
>как открыть проект
>открываю main.cpp
мб если хочешь открыть проект надо открывать проект
не знаю чё те ещё посоветовать
ну я создаю консольное приложение (проект без qt), в папке кроме main.cpp пару файлов cmake.
>>2991179
Если у тебя cmake проект, то главный файл отвечающий за него это CMakeLists.txt файл лежащий в руте проекта
А вобще в нормальных ide ты просто открываешь папку со своим проектом и он автоматом всё должен открывать
мужики, если вы на 50 уроке симпл кода в С++ и про qt нихуя не слышали, то не значит, что в нем никто не работает(
делать задачки на codewars вот работа))
а так вообще мимо, это не гос контора, потому что qt заблокирован в Russia
> qt заблокирован в Russia
Как и винда, думаешь все министерства уже пересели на линукс?
> это не гос контора
Извини, тогда негосударственный НИИ\завод
>делать задачки на codewars вот работа
тебе хоть платят за это?
Мне никто не ответил, но я понял, что должен прочитать полностью
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
>Как и винда, думаешь все министерства уже пересели на линукс?
ты реально думаешь, что госки на винде?....
>тебе хоть платят за это?
мужик, открой вакансии C++ и посмотри востребованность владением QT параши и потом задавай вопрос себе "нахуя он нужен", а не мне
>ты реально думаешь, что госки на винде
я тебе больше скажу, я это знаю
может конечно конкретно в вашем НИИ по другому
> открой вакансии C++ и посмотри
сколько из них не НИИ\заводы? очень мало
>я тебе больше скажу, я это знаю
хз, именно по госкам - в последние полгода-год просто на убунту всех пересаживают
>может конечно конкретно в вашем НИИ по другому
я не в НИИ)
>сколько из них не НИИ\заводы? очень мало
qt не требуется:
1) в геймдеве
2) в бэкэнде
о, наконец не школьник, ну просвяти меня в работу в QT
высри хоть что-то дельное, и я реально признаю, что ты тут самый умный
ты норм перечислил, я надеюсь с этим списком никогда в жизни работать не буду, особенно с драйверами и компиляторами)
А чем сейчас занимаешься если не секрет
вкатуну куда? ты в 2к23 году собираешься в плюсы что ли вкатываться? а справка из дурки у тебя есть? бабка оставила квартиру + пенсия по шизе? на что ты жить собираешься?
>мужики
я не мужик, член у меня есть, но я его только чтобы поссать использую, оче удобно
хз к кому ты обращаешся
с++ кстати в отличие от местных чмонь я знаю на уровне
Открой "сборка", там выбери "запуск", открывать в консоли. Кутевый лог не умеет в инпут.
Ну вообще VK и МойОфис ищут кутевиков.
Но да, как кутевик ответственно заявляю: 90% вакансии в НИИ залуп.
>просвяти меня в работу в QT
https://www.youtube.com/watch?v=dxzDtQuHgbg
ну вот интервью с руssким челиком который работал внутри qt, рассказ о текущей обстановочке че там и как
охуенчик, а теперь представь что из этого списка осталось в россии
я тебе скажу - 80% всей этой разработки сьебало за кордон за последние 2 года
СВО как раз сильней всего по крестовикам ударило если что
теперь у нас голое поле, РАБоты нету в принципе
спасибо что напоминаешь о грустном
Кутевик, скажи, что отвечать на собеседовании, когда спрашивают, какими проектами вы занимались?
Какой то глупый вопрос.
Те, которыми и занимался и называешь.
Или ты про мои хочешь услышать? В основном там десктопные круды + утилиты для работы с устройствами через сетевые протоколы/usb.
Например png++ и PNGWriter это c++ оболочки (wrapper) для libpng (написана на сях).
>Про Прату нашёл
Про Прату нашел - найдешь и про остальное. Хотя бы в паре предыдущих тредах поглиди через ctrl f.
А чем прата вообще хорош перед остальными книгами для начинающих, хотя бы перед теми что то же в списке, в чем его фишка?
мимо другой анон, то же нуб
Сделай себе акк на ХХ и смотри резюме кутяшников.
Кто тебе сказал что у меня нету работы и я без денежного обеспечения? Я тебе сказал зачем мне плюсы? Ну вот и иди нахуй, тупое животное, это не JS тред чтобы предсказывать что-то там.
>>2991995
Серьезно? После всех отзывов в инете что у него недостаточно инфы ты напишешь это с надеждой что я прям так и буду читать его? Хоть пару слов бы почему.
>>2992103
Нашёл что Липпманн неплох, а вот по Страуструпу 0. Пара невнятных отзывов и нытьё что ниасилил. А про прошлые треды не подумал, разве так много вкатунов в плюсы? В любом случае, гляну, спасибо за наводку.
>>2991179
CMakeLists.txt или .pro файл открывай, а не файл с кодом.
По поводу вводы ХЗ чё посоветовать, кроме как запускать собранный exe из консоли. Можешь настройки ковырнуть.
Он хорош тем, что я его читал, и он мне понравился.
У Праты всё просто, понятно и подробно.
>мимо другой анон, то же нуб
>Ну вот и иди нахуй, тупое животное
Ебать ты лошара, ирл бы уже лежал в луже крови визжа от боли от заточки в почках, а я поехал бы зону топтать, но это ничего, ведь ты сука сдохнул бы в мучениях.
> зачем читать книги
чтобы обучится писать на с++
> документация
ты про стандарт языка? сколько он тысяч страниц там?
> код можно писать просто читая её
говно код, да
Добавлю ещё, что чат гпт уже существует, через который легче усваивать нужную инфу без графомании и неприкладной хуйни.
>>2993076
>чтобы обучится писать на с++
Хм, наверное я писал на каком-то выдуманном языке свою пету.
>говно код, да
Ах точно, это же всё говнокод)
>>2993197
Двачую по сути.
>>2993283
Толсто чувак. прекращай
М, пожалуй если и читать, то только о том, как именно и почему работают стоковые функции, операторы и т.д. и прочий comp science
> В основном там десктопные круды
Какие БД использовали, были ли ORM или сам запрос писал?
> утилиты для работы с устройствами через сетевые протоколы/usb
Какие классы Qt использовал для написания этих утилит?
> > В основном там десктопные круды
> Какие БД использовали, были ли ORM или сам запрос писал?
Где-то голые запросы, где-то самописная кодогенеративная ОРМ, так же QXOrm, но там не взлетело без покупки. Mssql и postgres.
В мире кути орм стандартной нет, как и мире плюсов, так что чаще всего юзали голые запросы/репозиторий.
> > утилиты для работы с устройствами через сетевые протоколы/usb
> Какие классы Qt использовал для написания этих утилит?
Я только QTelnet и QFtp знаю что древний кал, лучше нету. Ещё писал сокеты на QSocket. Тулзы для юсб писал на питоне и го.
Одиннадцатый стандарт -- это БАЗА, с которой можно спокойно обходиться (как минимум новичку).
Новые стандарты откроешь для себя в специализированных учебниках и на ютабе. Разница в стандартах не прям значительная. К томуж СиПлюсПлюс -- обратно-совместимый.
Соболезную дельфинам и pasскодерам
Забыл где сидишь? Тут если кто-то такое пишет, то только от бессилия, ведь в жизни хуй на улицу выйдет.
Двачер угрожающий расправой это смешно.
язык настоящих базовичков
Есть вот такая хуйня, не обновлялось с марта прошлого года:
https://github.com/MicrosoftDocs/cpp-docs/blob/main/docs/overview/visual-cpp-language-conformance.md
Есть вот такая хуйня в STL майков:
https://github.com/microsoft/STL/wiki/Changelog
С ахуительными приписками к каждой фиче:
> When MSVC and IntelliSense implement this Core feature, this will automatically "light up" the STL's CTAD for them too.
Есть также приписки типа:
> for Clang 17
Но я в тоже время вижу у самого шланга написано про то что до сих пор даже в 18 шланге под Виндой полноценно не работают корутины и модули, это уже прошлый стандарт, если что, лол. У MSVC они точно работают.
Так же есть вот такая хуетень, тоже не понятно как это спроецировать на компилятор MSVC:
Так там инфа из первой ссылки в моём посту, инфа годовалой давности. Видимо они тоже не смогли найти другой, лол.
Просто они поняли, что начиная с 20х крестов что-то пошло не туда. Натащили говна и рады
Самые ламповые плюсы были в C++03. Дальше пошла наркомания.
Если тебе нужны такие масштабы и производительность, что ты начал смотреть на юсервер, то скорее всего в вашей компании уже есть местный велосипед с похожим функционалом и командой поддержки.
Если нет, то он тебе и не нужен.
если ты думаешь что в Яндексе все микросервисы на нем: нет, это совсем не так
Вот тут ты вообще промахнулся. Я живу в пикрилах. Вот сено для нашей коровы, вот горы вокруг. Пью я только парное молоко
Скорее компиляторы пошли не туда. Сейчас кресты фактически голый стандарт без поддержки компиляторами.
Шланг на Винде неюзабелен, до сих пор не может С++20 реализовать, а на пердоликсе вообще кресты не котируются выше C++17. MSVC не понятно на каком свете, у них для IntelliSense используется EDG вместо компилятора - соответственно обе IDE майков вынуждены ждать это говно, а юзеры наблюдать непонятные ошибки IntelliSense и 4 года ждать пока заработает подсветка синтаксиса у модулей, которые компилятор поддерживает уже хуй знает сколько лет.
Систем сборки нет нихуя, одна хуже другой - один только cmake чего стоит, где скрипты на непонятном языке генерируют через ninja проект для студии, такой комбайн даже ради троллинга не придумать.
Стандартизированных либ нет - каждый дрочит как хочет, а бустоёбы вообще в очко ебутся, когда это говно надо собрать на хуй пойми каком компиляторе.
Был бы единый компилятор, реализующий фичи сразу за комитетом и имеющий встроенную системы сборки - был бы идеальный ЯП. А так имеем выбор между говном и мочой - кресты и раст.
Есть ещё неведомая хуита - zig, где пердолики собрались ради самого процесса написания компилятора, а не создания удобного ЯП. Я как-то попробовал "лучшую замену clang" в виде zig cc, какой-то фееричный пиздец с хэллоуворлдом на 800 кб и сборкой по 30 секунд, приправленный отсутствием документации.
>на хуй пойми каком компиляторе
На хуй пойми каком их не соберёшь обычно без заплаток. Но тут сам дуроёб, коли их тащишь, если не уверен в среде сборки и её неизменности
Это восточноевропейская помойка - польша. Карпаты
Блин я 15 лет назад пытался вкатиться в плюсы и плюнул на это дело из-за описанного. Думал что с тех пор что-то изменилось, но видимо нет
В веб очевидно
Я заметил, что почти весь софт в линуксе скомпилен так, что я могу наблюдать название каждой ВНУТРЕННЕЙ функции с помощью nm -D. И то что я попытался написать для gcc тоже экспортирует название функции НЕ в разделяемую библиотеку.
В принципе, можно без этого - gcc -s (striped), но что вообще происходит?
Это связано с ASRL?
А нельзя c ASRL, но без экспорта названий функций?
Зачем так палиться?
Как нынче тогда работает защита коммерческой тайны в сях?
> с помощью nm -D
Ты хоть man nm в консольке бы написал, пердолик. Там в первой же строчке написано откуда он берёт эти названия. Для тупых - не из собранного бинарника.
> Это связано с ASRL?
Нет, конечно. Какое отношение это вообще имеет к твоему вопросу?
> без экспорта названий функций?
Они никогда не экспортируются, если ты сам не делаешь экспорта.
>Они никогда не экспортируются, если ты сам не делаешь экспорта.
но они экспортируются! Я поэтому сюда и пришел спросить
Можешь сам попробовать, если ты из НИИ и у тебя есть не очень старый линукс.
И почему же это происходит?
> экспортируются
Чел, прочитай доки к nm. Нахуй ты тут шизишь, он берёт инфу не из собранного бинарника, а из object-файла, блять.
> И почему же это происходит?
Потому что дегенерат пердоликс поставил, а прочитать что делают команды что он вводит в консольку - нет. Даже локальная нейронка умнее тебя.
И вообще, нахуй ты пишешь в тред крестов про сишку?
Да что ты не можешь проверить у себя чтобы убедиться что я пишу правду?
Окей, пусть тебе не нравится nm. Но почему тогда strings выводит эту функцию, которую я не экспортировал?
Во-первых, собирай с флагом -O3. Во-вторых, удали все object-файлы. Я тебе могут и третий раз написать - он из них берёт инфу, тупой ты дегенерат.
Сделал как ты велел - не сработало. Ну серьезно.
Не хочешь сам проверить?
У тебя какая версия линукса?
может ты и правда в НИИ на оборудовании из 90ых?
Можно, но не тебе.
А зачем тебе вся документация?
Достаточно базы про логические компоненты.
Там уже сможешь схемки собирать, даже кулькуляторы.
На ютабе на телеканале Вектозавр чэд собирает наиэлементарнейшую ЭВМ -- сумматор.
Зачем тебе вся документация, тем более если процессоры разные?
Качни курс Nand to Tetris, там начинаешь с логических вентилей и дальше по нарастающей делаешь регистры, АЛУ, память и тд. Все сначала описывается на hdl, как и вся современная микроэлектроника, а твоя работа проверяется тестами на виртуальной машине.
В общем, мне видимо нужно что-то по синтаксису чисто въехать в язык, ну и дальше фреймворк какой-нибудь для бекенда (вообще не ебу, что у вас самое популярное сейчас).
> думал про го, но чет он тухлый какой-то,
У нас тут потухлее будет
> дальше фреймворк какой-нибудь для бекенда
Писать бэк на плюсах это очень плохая идея
Но если интересно, есть классная штука от Яндекса - userver
> нужно что-то по синтаксису чисто въехать
К сожалению, в плюсах только синтаксисом не обойдешься
Есть несколько семантик которых вообще в других япах нет и как будешь писать код по хорошему их надо учитывать
В смысле, еще тухлее, чем в го? Да быть такого не может. У меня кореш месяцев 9 сидел ботал с нуля с++, вкатился вот недавно на джуна, в го такой трюк не провернуть.
>Есть несколько семантик которых вообще в других япах нет и как будешь писать код по хорошему их надо учитывать
Вот да, я как раз про подводные всякие думал. Нужна литература, которая покрывает такие моменты.
В го такой трюк не провернуть потому что это изначально язык для мидлов.
На мидлов в бэк на го вакансий в 1000 раз больше, и то что ты уже питонист открывает тебе возможность сразу дрочить го.
Сейчас тебя угомоним, зумерок. Погромировать он умеет, а документацию читать - нет. Ор просто.
Тебе с твоим майндсетом тут делать нечего.
Ну точнее нихуя не поймёшь. В плюсах тебе каждый класс, каждая фича, каждый инструмент хочет выстрелить в колено. А если ты неопытный, то решение задач на нем превращается в борьбу с языком.
И да, в России пишут на плюсах бэк только Яндекс и Авито, из того что я знаю.
360x640, 0:35
Помогите плез я заманался уже
этот калькулятор не создан чтобы им пользоваться.
много таких программ понаписали сутулые очкарики.
поэтому и нужна профессия Аналитик.
>Тривиальный тип T можно скопировать в массив значений char или unsigned char и безопасно скопировать обратно в переменную T.
Ебать! А если у меня в поле указатель, мне не обязательно в конструкторе его инициализировать ресурсом, я это и могу и в простом методе сделать.
Да деды наворотили хрени с инициализацией, хрен щас поймёшь что у них в голове в этот момент было
Только вчера в старом ассемблерном коде виде eax xor eax. Обнуляли так регистр.
И что указатель? Это просто число, ты его не ресурсом инициализируешь, а указателем на него. Класс все ещё тривиальный.
А причём удваивание?
То, что в асме делался xor x, x всем известно. Тем более мне, асм-фану
Для асм-фана ты слишком долго соображаешь. Что будет если сделать твой побитовый клон. А потом вас побитово отксорить.
Ты такие вещи не практикуй тут в чате, а то он в голове откомпилирует и потрет всю память
А сейчас в новом ассемблерном коде можно увидеть xor rax, rax.
Разумеется нет.
Нет, у раста весь контрол в ансейф.
Только если перевернуть пикчу. Хачкель даже раст выебать по производительности может, если грамотно использовать ленивые вычисления. Всякие парсеры на современном хачкеле под LLVM ебут всё что возможно. При этом у Раста безопасности явно меньше чем у языков на JIT, а ГОвно надо куда-нибудь за пределы графика убрать - в нём нет ни производительности, ни безопасности.
Да там уже не совсем плюсы.
У тебя там дотнет внутри будет. Лучше жди когда AOT допилят чтоб он мог фреймворки гуя компилить, тогда сможешь кресты вызывать из фронта и иметь нормальный бинарник без JIT и дотнет-кишков.
хз какой твой уровень понимания, но если вкратце то сегодня у майкрософт есть winrt, который, если упрощать, не требует дотнета, по сути это вторая реинкарнация com, эдакий com два ноль, исповедующий его подход
последняя реинкарнация обвязки для того чтобы было удобно под него кодить это "C++/WinRT" (вот именно такое название), оно заменило собой обвязки C++/CX, WRL и прочую парашу которую в майкрософт успели наговнякать до них лол, причем эта последняя обвязка позволяет кодить под winrt как раз на полноценном с++17 (без каких либо расширений самого языка)
если же говорить за кнопкодавство, то есть за формочки, то эта обвязка дает как раз доступ к платформе UWP, к ХАМL и к прочему, в общем ко всему тому что относится к кнопочкам и формочкам
причем все это будет нативное и написанное с использованием с++17
с одной стороны это по настоящему круто (ибо наконец то умные дурачки в майкрософт сделали полный круг и наконец то пришли к тому что им всего лишь то нужен был модернизированный COM, и что вообще компонентный подход рулит)
с другой стороны как бы нахуй уже и не надо, особенно в россии
потому что РАБоты в россии по очевидным причинам ты не найдешь чтобы была необходимость писать под новые версии винды (а вся эта благодать само собой доступна только под новые винды)
а во вторых все то же самое несмотря на все улучшения все же просто делать на дотнет и все
вот еще
C++/CLI - эта хуета была для дотнета, устарела
C++/CX - эта хуета была уже для winrt, устарела
C++/WinRT - последняя обвязочка для крестов под winrt, типа пишите на нем
> по очевидным причинам ты не найдешь чтобы была необходимость писать под новые версии винды
Это какие такие причины? У нас уже принудительно всё на десятку переведено, даже некроговно типа посов с гигом ОЗУ. Наоборот сейчас лучше стало, появилась причина не платить индусам. Раньше ещё ебали за плашки "активируйте винду" везде, а сейчас у нас повсюду стоит неактивированная десятка, поебать. Ну и все кто пишут на дотнете - пишут под актуальные ОС.
ну типа гос-во переходит потихоньку на линукс, слезает с хуйца майкрософт, то же самое делают и корпорации с большим гос участием (типа того же росатома), ну и оборонка само собой..
те рыночек разработки под винду в россии очевидно сокращается
это с учетом того что любой формы разработки для барина на запад типа аутсорса или филиалов западных фирм в россии уже нет и никогда небудет
>хуета, устарела
>хуета, устарела
>не хуета, не устарела <-- вы находитесь здесь
классика микрософт
сначала понаписать хуеты а потом 20 лет хоронить
C++/WinRT - это окончательный вариант
>показываешь работу: мммм ну я бы так не сделал, ой ну тут в иф условии оно тратит память
Скажи ему что именно поэтом он просиживает штаны в универе, а не творит в гугле
Да не, это просто, чтобы залетух было поменьше.
Шалом анония! Вопрос скорее общего характера, так как на практике не сталкивался, но всё-же интересно.
Как происходит замена высокоуровневого кода на ассемблеровский? Допустим вы уже написали программу, но на текущем желез она всё равно не показывает достаточное быстродействие, а математическая оптимизация или аренда более мощного железа недоступна. Можно написать маленькую программу на том-же TASM или MASM, но как её встраивать в программу на C++?
Для примера можно рассмотреть генератор вордлиста или может даже программу для открытия zip/rar архивов. Но если душа жаждит чего-то более сложного, то пусть это будет генератор хэш сумм.
Ты хотя бы флеймграф построил, прежде чем выводы об оптимизации делать?
Все что ты перечислил - ебаные числодробительные задачи, в которых С++ от Ассембера отстаёт на проценты.
Вопрос не "зачем", а "как"? Знаю что есть, не знаю как это делается. Интересно хотя-бы починать или правильно сформировать поисковый запрос.
Примеры привёл лишь чтоб указать, что мне это интересно для ускорения работы, на слабом железе.
Спасибо Анон!
Меня интересуют приёмы, техники, тулзы для работы с ней.
Приёмы отладки и прочие хорошие рекомендации.
Что можно почитать, посмотреть по этой теме?
Многопоточное программирование на С++
Книжку Ульямса я уже читаю (и Грима Райнера, он проще воспринимается).
Хотелось бы почитать что-то вроде книг Майерса, но касательно многопоточки если такие естб
Спасибо
Часто отваливается
Работаю шарпером на заводе.
Вот, недавно подпустили к проекту, на котором матерые C++'еры работали, но на шарпе.
Увидел там нечто похожее на прикриплейд.
Можете объяснить, нахуя и зачем так делать?
Картинку забыл
Это копия, сохраненная 22 марта в 23:25.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.