>>1045411 (OP) Опять какой-то петух высрал кириллическую С в заголовок. >>1045343 >- Стабильного ABI Бинарнопетух подъехал. Нахуй надо? Есть ещё один язык, кроме ассемблера и псевдоассемблера, у которого это есть? >>1045350 Надо разделить всю программу на достаточно маленькие для тебя части и везде чекать наличие ошибки. Другого способа получить строго defined-поведение программы нет. Посему у std::thread нету никакого terminate. >>1045369 Ты путаешь ретурн-значение с аварийным завершением. >>1045513 >компилятор машинного кода? У меня тут идея. Надо провести битву самодельных компиляторов для x86, тестируется: - производительность собранных экзешников в разных задачах - производительность экзешников, собранных другими компиляторами-участниками и транслированных в ассемблер. каково блядь, кому только это надо?
>>1045532 > битву самодельных компиляторов для x86 Я только за анон, какие сроки выполнения, условия? Если найдутся еще желающие, чтобы участников было хотя бы 3-4 то можно провести.
Ссылка на базовый класс связана с производным: base& bRef = d, где d - объект производного класса. В производном классе есть метод e(), которого нет в базовом классе. Я делаю каст static_cast<derived&>(bRef).e() и вызываю метод e(). Какого хуя он вызывается, если в базовом классе его нет?
>>1045576 Какое-то странное поведение, если в производном классе создать поле с дефолтным значением и добавить в распечатке в e() его, то static_cast<derived&>(bRef).e() здесь он всегда вместо значения будет 0 пропечатывать.
>>1045576 e() - невиртуальный метод. Компилятор просто взял и подставил вызов функции, без шароебли по vtable. Давай с виртуальной попробуй. А с нулями тебе просто повезло на пустую память по смещении от адреса указателя на объект
>>1045629 Скажи мне, как устроены объекты в крестах? Я так понимаю, ссылки на виртуальные методы лежат прямо в объекте? Как они отделены от данных? Почему бы просто не носить в объекте ссылку на тип?
>>1045640 В vtable лежит ссылка на typeinfo. А если тип не полиморфный то typeinfo статически определяется на этапе компиляции. Больше, собственно, ничего характеризующего тип не лежит. Да и это опционально и отключабельно в компиляторе.
>>1045644 Нет, я имею в виду, что все ссылки на методы класса могли бы лежатьтв одном месте, например, а не таскаться длинной бородой заткаждцм объектом
>>1045645 Так и есть - vtable создаётся одна для класса, в объекте хранится лишь указатель на vtable. В конструкторе, указатель устанавливается на vtable класса, в деструктор к устанавливается в vtable родительского класса перед вызовом деструктора родителя.
Пытаюсь написать функцию, которая находит наименьшее общее кратное. Иду простым лаконичным путем (пик 1) - нихуя не работает, судя по дебаггеру, луп просто игнорируется. Но do-while(true) луп с той же логикой (пик 2) отрабатывает нормально.
>>1045576 На сколько мне известно, смотри: Имеется ссылка класса Base. Потом ссылка Base кастится в ссылку derived, но участок памяти до сих пор ссылается на объект Base. Значит теперь у нас вместо вот этого: Base & bRef = b, вот это derived& bRef = b. А имена функций и члеов начинают искаться из области видимости типа(в нашем случае bRef - у него теперь тип derived, то есть ищется функция или имя в области видимости derived). Вот почему вызвалась e.
>>1045664 Вот тебе как понять. Пример твоего. while(!(true && false)) - это пример как у тебя может получиться. Чтобы работал цикл, нужно чтобы в главных скобках был true. Так как true && false рано false, то отрицание (!) превращает из false в true. Если нужно подробнее, обращайтесь.
>>1045576 > Какого хуя он вызывается, если в базовом классе его нет? Статик каст не проверяет корректность преобразования, это в стандарте написано. Привет UB (или как там?). Используй dynamic_cast, тебе в рантайме это выплюнется. >>1045598 ALO UB ETO TI >>1045784 Нету у G++ такой версии, блядь (или ты про пакет из новой Убунты?).
>>1045784 Найди сторонний PPA репозиторий, если в официальном нет, или на крайняк сам сбилди, кроме --prefix можно вообще не заморачиваться и не указывать опции
>>1045350 Олсо, специально для этого сделаны эксепшены: всё то, что ты считаешь ненадёжным, ты оборачиваешь в try-catch и ловишь, при этом перед каждым вызовом небезопасной функции твои объекты должны быть в валидном состоянии (т.е. у тебя не будет ошибок и утечек, если любая ненадёжная функция завершится). Это достигается абстрагированием.
>>1045926 Ты их используешь, но не до конца понимаешь этого. И я не в плохом смысле о них говорил, паттерны - они везде, как бы ты ни хотел от них избавиться. Правильный дизайн приложения обеспечивает надежность/быстродействие/модифицируемость/тестируемость/защищенность/масштабируемость/робастность/... (нужное подчеркнуть). Некоторые местные петухи кукарекают по поводу экономии лишних байт и тактов процессора, но ты их лучше не слушай. Грамотно составленный скелет приложения (архитектура или конструкция) и правильно выбранные алгоритмы провернут на хую всю их работу над сдуванием пылинок с полированных яиц кота.
>>1045926 Паттерн - это вид взаимодействия между объектами. Ты чаще всего используешь ограниченный набор этих взаимодействий, то есть у тебя в голове какие-то паттены (шаблоны взаимодействия) есть. Где-то можно узнать, как они называются - почитать книгу какую-нибудь.
>>1045925 >всё то, что ты считаешь ненадёжным, ты оборачиваешь в try-catch Это Java-macaque-style. В C++ есть RAII и если ты пишешь try-catch блоки, то значит ты что-то делаешь не так.
>>1045948 Я подумал - ты прав. Если вся иерархия объектов и функций сделана так, что вызов любой ненадёжной функции оставляет их в валидном виде - да, трайкетч для строго определённого поведения не нужен.
>>1045974 не использовать new, но это не делает концепцию исключений менее уебищной (если мы говорим о языке на котором пишем высоконагруженные и надежные системы)
Анон, как можно в двух словах объяснить разницу между указателями и ссылками, упомянув const? Разница в том, что константные объекты не связываются с неконстантными ссылками?
>>1045978 1)слишком implicit. ты не можешь просто посмотрев на код понять где и что может пойти нет так, надо смотреть документацию. Из этого проблемы аля "тут чёто какойто экспшн выпал внезапно, а мы забыли трайкетч написать". В этом плане в Rust всё сделано просто прекрасно, монады, match, просто сказка а не язык. 2) Очень сильно зависит от RAII, а RAII применимо далеко не всегда, я даже элементарно не могу в деструкторе класса File написать close(fd); потому-что при попытке записи временного буфера на диск на этом диске может закончиться место, и что делать непонятно (можно кинуть экспшн из деструктора)))))))))) Сугубо личное мнение, может кому-то эта концепция и нравится
>>1045974 Никак. >>1045980 Константная ссылка - это петросянство. Привести указатель на конст у указателю не на конст без статик-каста или реинтерпрета какого-нибудь ты не сможешь. В этом отличия указателя от ссылки нет.
>>1045980 Ссылки - для стековых объектов, указатели - для хиповых. Не константные - для выходных параметров (т.е. этот параметр изменяется в функции, см. out/ref C#), константные - для входных.
>>1045980 ссылки - алиасы к переменным (еще одно имя), указатель - еще один объект, который модет указывать на другой объект. мы можем биндить конст ссылку к не конст переменной но не наоборот. по конст ссылке мы не можем вызывать не конст методы, но можем их вызывать непосредственно к неконст объекту. А вообще, это с практикой приходит
>>1045980 Принципиальная разница одна - ссылка присваивается один раз при инициализации, и потому нельзя менять куда она ведет (без грязных трюков). В остальном разницы нет.
>>1045981 >ты не можешь просто посмотрев на код понять где и что может пойти нет так, надо смотреть документацию. Просто пиши так, чтобы код был exception-neutral.
> Из этого проблемы аля "тут чёто какойто экспшн выпал внезапно, а мы забыли трайкетч написать". трайкетч везде писать не надо, C++ это не Java.
> Очень сильно зависит от RAII, а RAII применимо далеко не всегда, я даже элементарно не могу в деструкторе класса File написать close(fd); потому-что при попытке записи временного буфера на диск на этом диске может закончиться место, и что делать непонятно > В этом плане в Rust всё сделано просто прекрасно Охотно верю, что в Rust сделано прекрасно. На пике демонстрация этого «прекрасно». https://github.com/rust-lang/rust/blob/6ccfe68076abc78392ab9e1d81b5c1a2123af657/src/libstd/sys/unix/fd.rs#L240
>>1046122 > при закрытии. Что дальше? > А дальше месэдж бокс какой нибудь, или ещё что-то, зависит от логики, лал
>>1046126 Я и не говорил что в расте охуительная стандартная библиотека особенно мне нравится момент, когда ты говоришь Vec::push({}), а он паникует)). Имел ввиду, что в расте куда больше возможностей для реализации надежных приложений, чем в С++. Разумеется и на плюсах прекрасно работают сервера, это лишь моя точка зрения)
>>1046132 >А дальше месэдж бокс какой нибудь Файл открывается/закрывается глубоко в кишках какой-то либы, которая о GUI ничего не знает (и знать не должна). Откуда ей знать, что надо показать «месэдж бокс какой нибудь»?
>>1046145 >Колбэки ЛОЛ! Можно перефразировать: «Из этого проблемы аля "тут чёто какая-то ошибка выпала внезапно, а мы забыли колбэк дёрнуть".» Что насчёт асинхронности, реентерабельности и поддерживаемости такого кода?
> Или я что-то не понял? Как писать поддерживаемый софт.
Помогите запустить qtCreator+Cmake+LLVM. Я уже ничего не понимаю в этом процессе сборки программ.
Связка qtCreator+Cmake+MinGW работает. Пытаюсь по аналогии запустить c LLVM. Меняю компилятор с/с++ на llvm, и он жалуется на какой-то сmake generator. Список возможных вариантов на второй картинке и ни один из них не работает и вообще ничерта не понятно что и где нужно прописать, куда что установить, чтоб оно заработало. Что ещё за генератор такой и зачем оно нужно? Компилятор компилирует файлы, CMake говорит что и в какой последовательности этому компилятору компилировать. Разве там есть что-то ещё? Чёрт ногу сломит, что мне прочитать, что мне сделать, чтоб эта хрень стала понятнее?
>>1046271 >CMake говорит что и в какой последовательности этому компилятору компилировать Вот тут-то ты и проебался. Симейк никому ничего не говорит, он просто пилит мейкфайлы за тебя. То есть симейковый мейкфайл + генератор мейкфайлов = сгенерированный мейкфайл под конкретную платформу. Дальше сам разберешься.
>>1046271 что, сучка, столкнулся с первыми реальными задачами и проблемами, отличными от "хелло ворлд" и уже заныл? а? это, блядь, твоя работа, иди сука и копай вглубь
>>1045997 Разве если где-то внутри nothrow функции возникнет исключение которое мы забыли заткнуть кечем, оно не сломает свертку стека, что закрашит программу?
>>1046327 Ты наверное перепутал nothrow с noexcept. nothrow можно передать как аргумент для new, например auto pVar = new (std::nothrow) Type. В случае ошибки new вернёт нулевой указатель. Если указывать noexcept для ф-и, и внутри неё ты захочешь вызвать ф-ю, которая может бросить исключение, то компилятор должен об этом сообщить.
>>1046420 Не должен. программисту лучше знать, что вот конкретно в этих условиях оно по-любому не бросит, отвечаю. Поэтому спокойно зови что угодно, но если что - сам виноват.
>>1046327 Если вызывается std::terminate то никаких гарантий того, что стек будет разворачиваться в обратную сторону и будут вызываться деструкторы объектов нет, потому что это нахуй не нужно зачастую, ведь система подчистит ресурсы мертвого процесса сама. Веселуха будет, если ты кинешь исключение во время обработки другого исключения, например: у класса a есть конструктор и деструктор, второй кидает исключение, есть также класс b, который наследуется от класса a и в конструкторе кидает исключение. Если ты поместишь объект b в область видимости try блока, то сначала вызовется конструктор а, потом вызовется конструктор b и бросит исключение. Стек начинает раскручиваться в обратную сторону, попутно вызывая деструкторы для всего, что успел инициализировать в try-блоке в порядке, обратном их появлению. И тут ... ннна нахуй ... деструктор b вызывает деструктор a и кидает еще одно исключение, вот это неожиданность. Конечно, фактически твоя программа вышла за пределы try блока и поэтому исключение перехвачено не будет, поэтому будет вызвана std::terminate со всеми вытекающими. Так что вот поэтому не рекоммендуется кидать исключения в деструкторах, я еще ни разу не видел, чтобы так делалось.
>>1046571 ну, асм щас нужен реверсерам, в частности вирусным аналитикам, это не программирование, знаний надо дохуища (хотя на работе изо дня в день будешь заниматся монотонной заябывающей рутиной), платят меньше чем кодеру с++, а кодеру крестовику платят меньше чем пхп-обезяне низкоуровневое программирование? это че? если микроконтроллены, то надо знать микроэлектронику, тоже вообще отдельный пласт знаний от программирования, знать надо опять дохуищи всего, чтобы при этом зарабатывать раза в 4 меньше все той же пхп обезяны или низкоуровневое программирование - это драйверописание под линукс или винду? ну чтож, надо потратить 10 лет чтобы смочь написать небажной полноценный драйвер щас, и при том что подобной работы в мире все меньше и меньше, хуй куда устроишься
>>1046811 Прежде всего не каковы причины его утверждения, а истинно ли оно вообще. Пусть тащит статистику. На сколько я могу судить, количество железок с течением времени только растет, под каждую нужно написать софт. Да, он скорее всего будет повторяться, и процесс сведется до тривиального, но кто-то эту работу должен делать?
>>1046811 потому что все написано взять тех же системщиков на линуксе сетевой стек более-менее написали, спиздив многое из bsb-систем файловые системы тоже довели до нормального состояния, во многом позаимствовав идеи у солярки после того как сделали аппаратную поддержку виртуализации на x86 процах (которая уже десятки лет до этого бала на мейнфреймах), сделали и всю инфраструктуру нужную для виртуализации на линуксах, поверх этого сделали инфраструктуру нужную для построения облаков, saas и paas сервисов безопасность доже докрутили, спиздив многое опять же у майкрософт и у коммерческих реализаций юниксовых систем что щас остается системникам? допилились виртуализацию на уровне оперативных систем, в общем докер и все что ниже его крутиться и инфраструктуру поверх само собой, за эти два десятка лет писались драйвера под всяхие железки и щас в принципе почти подо все уже написано и че получается? то что системники под линукс сделали свою работу и большинство может смело послано нахуй а оставшаяся небольшая часть будет уныло дописывать драйверки на время от времени появляющееся новое оборудование
>>1046836 Ты так говоришь, как будто бы все уже сделали до нас, и нам уже ничего не остается. Все равно будут придумывать новые технологии и хуевины, под которые тоже надо писать драйвера
>>1046799 >надо потратить 10 лет чтобы смочь написать небажной полноценный драйвер Чему там 10 лет учиться, функции инициализации устройств наизусть выучивать?
>>1046879 Ну хз, сложно как то. Пару лет назад видел гайд как написать драйвер, но у меня ошибки какие то полезли, в общем не скомпелировалося. Может скинешь какие нибудь видосы по этой теме?
>>1046853 в общем случае, нет любая относительно новая технология имеет свой период в начале становления, когда ей нужны инженеры от которых требуется создавать, улучшать компоненты технологии, а потом уже такие специалисты не нужны становятся, когда уже технология становится зрелой, остается нужда по сути в надсмотрщиках и настройщиках такое происходило с энергетикой, с железными дорогами, да с любой технологией да что там, про это целые книги написаны типа "Блеск и нищета информационных технологий" Николас Карра
>>1045411 (OP) Сап, ищу информацию по функциям. Решил немного побольше изучить как работают функции. Такой вопрос, я правильно понимаю, что прототип функции, определение которой находится после main(), он помогает нам по адресу в момент вызова определить область памяти определения функции (исполняемого кода)? Для этого же нужны прототипы? И если да, то как я понял в данном случае будет происходить одновременно и вызов и само определение?
Сигнатура функции прототип нужна компилятору, чтобы он мог следить за передаваемыми аргументами, и возвращаемым значением. про то, где именно располагается функция думает линкер. Сигнатура функции никак не связана с её конечным адресом в бинарнике, если я правильно понял вопроса
Может кто подсказать когда на gcc файловую систему вытащат из экспериментала? И как с этим дела обстоят на windows? Я пробовал её использовать и там, но что-то не получилось. Вроде файловая система была самой значительной особенностью нового стандарта, но она почему-то до сих пор в экспериментале.
>>1047171 Потомучто компиляторы ещё не до конца поддерживают 17й стандарт. filesystem будет кросплатформенной, под виндой и пингвином будет работать одинаково
>>1045411 (OP) Анон, как препроцессор разворачивает такие макросы #define MAX(a, b) ((a) < (b) ? (b) : (a)) и почему, например, при вызове MAX(1, 2) параметры 1 и 2 подставляются вместо a и b, а не вместо MAX?
Делаю тетрис с библиотекой ncurses. Блоки делаются с помощью окон, но проблема в том, что когда вращаю окно, не сохраняется пропорция ширины/высоты. Обьект который был длинным, становится коротким, но широким при вращении при том, что значения высоты/ширины одни и те же просто поменяты местами. Как сделать пропорцию?
>>1047281 >как препроцессор разворачивает >#define MAX(a, b) ((a) < (b) ? (b) : (a)) Так и разворачивает. Если после этого где-то в тексте будет int t = MAX(3,100), то перед компиляцией он туда поставит int t = ((3) < (100) ? (100) : (3)). Если будет в где-то MAX(sin(1.43xx),"saa2131_asd"), то так и подставит ((sin(1.43xx) < ("saa2131_asd") ? ("saa2131_asd") : (sin(1.43xx)) и выдаст там соответствующие ошибки (а ещё будет считать синус два раза в некоторых случаях). Не совсем понимаю, как он может подставить 1 и 2 вместо MAX, а не вместо a и b. Какой в таком случае вид должно иметь MAX(1,2) после обработки препроцессором?
>>1047078 С помощью STL ты можешь сделать только truncate. С помощью большинства других API ты сможешь сделать только то же самое. >>1047281 >почему, например, при вызове MAX(1, 2) параметры 1 и 2 подставляются вместо a и b, а не вместо MAX? Потому чт осинтаксис, блядь.
Заниматься исключительно вашими должностными обязанностями и не позволять навешивать на себя чужих. Если ваша должность - Software Engineer или Senior Software Engineer, то вы должны и обязаны заниматься разработкой софта. Никакое ручное или полуавтоматизированное тестирование, никакое обучение джуниоров, никакое преподавание в вузе, никакое замещение тимлида в течение двух недель (на время которых вам, кстати, не повысят вашу почасовую ставку), никакое проведение семинаров, никакая уборка помещений, никакие погрузочно-разгрузочные работы не входят в список ваших обязанностей. Современный технический специалист не должен позволять управленцам садиться ему на шею и ездить на нем. Занимайтесь только разработкой софта, делайте свою работу хорошо, становитесь отличным техническим специалистом и безгранично развивайтесь в этом направлении.
Требовать давать вам только те задачи, на которых реально можно стремительно вырасти. Если вы - студент, то требуйте задач уровня миддла. Если вы - миддл, то требуйте задач уровня синиора. Если вы - синиор, то требуйте задач уровня архитектора. Если вы лично считаете, что в течение полугода успешно справлялись с большинством технических задач, то требуйте повышения или уходите в другую компанию на другой проект. К сожалению, у многих программистов есть предубеждение, что если они будут полгода делать задачи своего уровня, то их повысят. Нет, не повысят. Наоборот, тимлиды и менеджеры будут годами использовать вас, как совхозную лошадь, загружая монотонной посредственной работой, и вся ваша карьера превратится в вялотекущий дауншифтинг с работающей бедностью и отсутствием крупных долларовых сбережений на период зрелости и старости.
Легко менять компании, если вы почувствовали, что на текущем месте работы развитие вас как технического специалиста идет недостаточно быстро. Никогда не привязывайтесь ни к работе, ни к работодателю, ни к коллективу. Выходите из зоны комфорта раз и навсегда. Вообще не привязывайтесь ни к людям, ни к работе. Также не тратьте ваше время на женщин, особенно, если они не понимают важности ваших профессиональных интересов, тормозят ваше развитие, расхищают ваше время, внимание, деньги и прочие ресурсы или требуют от вас наличия каких-либо социальных статусов, особого положения в обществе, смены профессии, перехода на управленческие должности и так далее.
>>1047673 >Профсоюзы должны объяснять программистам, что они не должны оказывать бесплатный профессиональный консалтинг на Stack Overflow. >нужно коллективно осуждать тех, кто выкладывает на YouTube самоучители по диагностике и ремонту любых неисправностей материнских плат ноутбуков или диагностике жестких дисков, или профессиональному восстановлению данных, например
Что за бред. Пара хороших советов есть, но в основном какой-то идеалистический бред.
>>1047673 >Вообще не привязывайтесь ни к людям, ни к работе. Зачем жить то тогда? Мне не интересно без этого, в таком случае мотивации не то что на какое-то "развитие вас как технического специалиста" будет не хватать...
>>1047719 В аски или в расширении 8-битном есть еще полностью закрашенный треугольник и закрашенная верхняя и нижняя половины. Но один хрен, если соотношение сторон литерала не 1 к 2, квадратиков не получится.
>>1047722 >если соотношение сторон литерала не 1 к 2, квадратиков не получится А ровный квадратик и не нужен. Главное, чтобы пропорции примерно совпадали, глаз это нормально воспринимает.
есть checkedlistbox1, туда добавляются номера, которые написали юзвери. как предотвратить добавление одинаковых номеров с разным началом? например: +79xxxxxxxxx 79xxxxxxxxx 89xxxxxxxxx
>>1047788 Ну, не 100к, но и не $744k. Я думаю база где-то в районе $300k-$350k. Бонус может превышать базу. Поэтому $744k (в год) вылядит реалистично как полная зарплата.
>>1047773 Хранить длинные номера в международном виде, международный вид подстраивается под локаль. Алгоритм для РФ: если цифр 11 и плюса нет, то это международный формат без плюса если цифр 11 и начинается с 8, то нутыпонел
если цифр 7, например, то хранить в таком же виде. >>1047814 Пульнуть исходники в IDE и посмотреть на литералы/инициализации, например. Loop unrolling увеличивает размер кода, если что.
>>1045411 (OP) Так у меня тут важный вопрос (который попадет в топ вопросов прошлого треда): Как узнать сколько измерений у массива? Инби4: посмотреть в коде; а как ты инициализируешь массив?; тупой вопрос; ты наверное имел ввиду размер массива.
>>1047853 >инби4: посмотреть в коде > без шаблонов никак Да мне хоть методом/классом/конструктором. Мне нужен просто понятный синтаксис/пример на крестах. > а зачем тебе? Задание такое стоит, значит надо (я не спорю про то что оно нужное/ненужное). Нагуглил пока что полтора примера на mdsn но ничего не понял так как я совсем нюфаг в крестах.
>>1047865 Ты должен сделать свой УКАЗАТЕЛЬ public, иначе его никому не видно. >>1047881 >Можешь даже рекурсией, так даже быстрее должно получиться - T(n) = Θ(n lg n) Это даже не смешно.
>>1047901>>1047904 Какая ещё сложнось алгоритма? Сколько по-вашему может быть звёзд у указателя / измерений у массива? Асимптотическая оценка подразумевает что-то охуительно большое, а не то, что измеряется пальцами одной руки в 99,99% случаев. Логарифм там откуда, блядь? n - это длина числа звёзд указателя в разрядах или само число разрядов? Какая операция является основой для определения сложности?
И самое главное - где хоть слово о шаблонном дерьме, в которое надо окунуться для того, чтобы это сделать без использования std::rank?
Я тот ньюфаг что спросил за измерения. Оказалось оно не работает с динамическим массивом. Можно как-то создать статический массив размера существующего динамического (компилятору не нравиться неконстантное значение) (это максимум что я пока придумал) или по другому обойти эту проблему?
>>1047954 Он на то и статический, что размер должен быть известен на этапе компиляции. Вообще можно пощекотать себе анус с использованием alloca, но тебе с таким уровнем рановато ещё.
Можно создать копию текущего динамического массива или просто статический с длинной которой с лихвой хватит на все возможные данные и руками следить за его длинной.
>>1047912 https://ideone.com/KkXRm6 Надо окунуться в шаблоны, и частичные специализации >>1047954 Полная ахинея, статический массив на то и статический, что его размер известен на момент компиляции, размер динамического массива познается лишь на этапе исполнения
>>1047979 >длинной которой с лихвой хватит на все возможные данные и руками следить за его длинной. > А еще можно использовать stl, это же тред про C++
>>1047986 >template<class T, unsigned I> Я тут мимопроходил мимо этих шаблонов, но это же получается, что оно этот шаблон будет разворачивать для всех возможных длин массивов, которые встречаются в коде? Брр, ну и ужасы.
>>1047795 я вообще думал что страуструп на профессорском подсосе (тыщ 50-60 в год) сидит у себя в техасском технологическом (охуенный кстати универ из нераспиареных) а тут вон оно как, бабло зашибает :D
страуструпа вот обычно неуважают и хуесосят всякие молокососы, а но умеет себя пиарить в частности, поддерживает очень давно свой сайт на отдельном домене, не забывает его обновлять всегда все его достижения там указаны, все расписано stroustrup.com такие дела
>>1048018 еще и бабло, кстати, зарабатывать умеет на книжках можно неплохо зарабатывать - оказывается это такой "удобный" доход, книгу написал, а она постоянно издается, переиздается, допечатывается, потом у англо-саксов все нормально с электронными площадками для торговли ебуками, а это еще удобней, с цифры денежки вообще каждый месяц капают в общем, раз написал, а деньги идут всю жизнь, тем более у него там наверное в сумме миллионные тиражи, куча бабла потом случайно попал на влог отдной тетки (реально тетки), уже в "баба ягодка опять" возрасте перекатившейся в америку жить, дак она в видео и проговорилась - типа, что ее все хуесосят в интернете, что у ней понаписано куча неграмотных книг в мягкой обложке типа "как выйти за американца", "разговорный английский для совсем не знающих и прочее", страшные разговорники типа фраза на русском - перевод этой фразы даже не транскрипцией, а в виде "хау ду ю ду", она на это заявила, что у ней они все выложены в амазон и их, блядь, покупают, и у ней каждый месяц денежка с них, баксов 600-700 набирается, и получается что это вроде как настоящее вложение - ты тратишь время, создаешь продукт-книгу, а потом уже получаешь денежку с этого такие дела а у страуструпа наверное гораздо больше денег с книг выходит
>>1048682 Кстати говоря, у меня rand генерирует псевдорандомную последовательность длиной всего 64к (вторая строчка). Даже если будешь заполнять изображение белым шумом, будет мусор повторяющийся. Это линейный конгруэнтный метод. В делфях используется то же самое, но на 32 бита.
>>1047932 Эндл - 4 клацка, портабельно (да я знаю про конверсии всякие), читаемо. Слешэн - 6 клацков. >>1047954 >Можно как-то создать статический массив размера существующего динамического Размерность существующего динамического известна в компайлтайме, блядь. Как ты там написал это, если ты нихуя не знаешь? Кому ты пиздишь? Щас ты покажешь код, и мы все охнем. Могу тебе класс с динамической размерностью накатать. >>1047986 > размер динамического массива познается лишь на этапе исполнения В том-то и дело, что поциенту нужна размерность (известная в компайлтайме). Он нас наёбывает, сейчас увидишь.
Привет. Начал вкатываться в плюсы, хотел скомпилировать простой хеллоу ворд в командной строке, скачал компилятор(g++), установил, в командной строке указал путь к нему в переменной path, затем пишу g++ program.cpp и мне выдает No such file or directory. Как это фиксить? С расположением файла все нормально, я закинул его на рабочий стол и в командной строке же указал путь до него. В чем причина такого поведения компилятора?
>>1048819 >Откуда 6? Два раза шифт. >>1048819 >Что ты имеешь в виду? На маке - \r, на винде - \r\n. Хотя, там же, вроде ,везде конверсия, так что это неважно. >>1048876 > С расположением файла все нормально, я закинул его на рабочий стол и в командной строке же указал путь до него. Если ты раньше с командной строкой дела не имел, то проще всего сделать cd до папки с программой и оттуда уже запустить gcc с именем файла без пути.
>>1048876 >>1048917 уже продумал на что будешь жить следующие 10 лет, тк работу на крестах ты никак раньше не найдешь? богатые родители готовые кормить? может быть крупные суммы в банке, процент с которых позволяет жить? нет?
Как так получается, что стек находится в сегмента стека, куча может занимать хоть всю виртуальную память, стек и куча растут по направлению друг к другу и стек может переполниться? Сколько места занимает стек и почему он может дорасти до границы кучи? Где в памяти располагаются стек и куча?
>>1048916 Я могу сказать тебе только то, что ты написал его неправильно. Как обойти необходимость в изучении кавычек я уже сказал, ты не послушал. >>1048936 > стек может переполниться? Ограничен десятком мегабайт в большинстве популярных ОС. А вообще это не про плюсы вопрос, в стандарте ничего про то, что ты спрашиваешь, нет.
>>1048933 те тупи просто делай все лабы на выбранном тобой языке - явка, js, в общем все что угодно кроме крестов да, в универе любят на нем лабы давать но как для специалиста это будет для тебя путь в никуда
>>1048933 Ну и даун, тут в перезвоним-треде один крестовик устроился на работу с зп 250к. На Java и C# (не говоря уже про PHP и прочее скриптоговно) у тебя таких денег никогда не будет. А через 5 лет веб-разработки ты забудешь все алгоритмы и даже что означает буква O.
>>1048977 >Ну и даун, тут в перезвоним-треде один крестовик устроился на работу с зп 250к. Лол, а еще на бейсике работа есть от 80к https://chelyabinsk.hh.ru/vacancy/21903239?query=basic Даже в мухосранях типа челябинска! Давайте учить бейсик Ты про статистическую выборку не слышал?
>>1048977 >один крестовик устроился на работу с зп 250к Чистые кресты никому не нужны, их и так все знают после универа. Нужны специфические узкие знания. Эмбед, драйвера, сетевой стек, потоковое видео - опыт. За это платят. Сферический Александреску в вакууме без знания предметки никому не нужен.
>>1048977 >Ну и даун, тут в перезвоним-треде один крестовик устроился на работу с зп 250к. Жопа_Хенка.txt >>1049003 >Какие особенности возврата класса по ссылке Особенность в том, что, возвращая по ссылке объект на стеке, ты возвращаешь dangling reference.
Ребята думаю сделать прогу, которая будет расшифровывать пакеты. Например порт, входящий ip, информация о пакете и тд. Но мне кажется что такое уже есть и я буду изобретать велосипед. А если нету, то думаете взлетит?
>>1049415 несомненно! это будет инновационное программное обеспечение, достойное занесения в "Единый реестр российский программ", например ты, как автор, получишь уважение мирового комьюнити, сможешь организовать стартап, монетизирующий проект, выйти на ipo и с продажи опционов получить доходы, обеспечивающие тебя до глубокой старости!
>>1045411 (OP) Да, аноны, скажите, что примерно нужно знать ии уметь чтобы вкатиться джуном? Сейчас имею только одну лабу из шараги, там простая база данных в виде дерева, поиск добавление удаление вершин-ветвей. В стль почти ничего не знаю, кроме основных структур, в бусте и подавно.
>>1049610 Там везде что-то в духе, начальные навыки c++, ни в одной вакансии я не увидел что именно они хотят. Неужели я прямо сейчас могу вписаться джуном?
>>1049605 std::condition_variable есть как способ заблокировать один или несколько потоков до срабатывания какого-то условия в другом потоке, к примеру. Используется все так же с мьютексом, потому что так надо и во всех системах так. Критических секций нихуя нету, так что используй мьютекс с std::lock_guard и тебе не придется потом ебаться по поводу того, какого хуя у тебя все залипло в один момент (кинуло исключение, мьютекс залочен и все ... пиздос) Можешь попробовать неблокирующие методы там используются атомики. Суть, в общем, состоит в том, что треды пытаются в постоянном цикле "захватить" атомарную переременную, записав туда свой идентификатор через compare_exchange, и потом на короткое время выхватить кусок из общего ресурса и высвободить атомарную переменную. Тема хорошая, но не для всего на самом деле. Если собираешься делать какой-нибудь реактор или проактор (на stl хахаха блять, удачки), то лучше пользоваться системными примитивами синхронизациями и condition_variable.
>>1048904 >>Откуда 6? >Два раза шифт. Для '\n' ни разу шифт нажимать не надо.
>>Что ты имеешь в виду? >На маке - \r, на винде - \r\n. Хотя, там же, вроде ,везде конверсия, так что это неважно. Вот именно. std::endl это просто '\n' плюс flush. Так что чем он портабельнее — непонятно.
Ананасы. Поясните мне за биномиальную кучу. Понять нихуя не могу, как там вставляется этот самый единственный элемент. Вот есть такое описание: https://rsdn.org/article/submit/heap/heaps.xml#EFBAE >> Данная операция полностью повторяет логику единичного инкремента. Пусть исходная биномиальная куча состоит из 11 элементов. ... какой-то пример на довичных числах, алгоритма нет нихуя ... Как это работает? Насколько я понял, когда в биномиальную кучу добавляется элемент, он представляется вырожденным случаем биномиального дерева, имеющего только корень. Только вот так если подумать, если сращивать узлы в уже отсортированном порядке, тогда они должны выстроиться в одну длинную цепочку, разве нет?! Что за хуйня?!
>>1050199 В куче же родитель легко находится. Битовый сдвиг вправо на один бит (то есть целочисленное деление на 2) даст тебе индекс родительской ноды. С потомками сложнее, нужно смотреть смещения, хотя там все подчиняется тому же закону.
>все миллионы способов инициализации (value initialization, direct initialization, copy initialization, list initialization, aggregate initialization, reference initialization, default initialization, static initialization, dynamic initialization и наверное ещё куча) >callable >r/l/x/gl/pr-values >SFINAE >ADL >Most Vexing Parse >как инферятся типы в лямдах и просто в функциях >RTTI >std::allocator >perfect forwarding, decay и правила переводов референсов на референсы >даже простые move semantics Я тут подумал, и понял. Блин, реально сложный язык, в которого понапихано слишком много. Как-то не доходило раньше. Зато джоб секьюрити.
>>1050262 Он везде есть, просто нужно проверять __cpp_lib_experimental_string_view или __cpp_lib_string_view и инжектить алиас string_view в std в первом случае. Если совсем старый стандарт — буст/eastl/sgi stl/хуйнянейм все равно тащить придется. Ну или навелосипедить свое, там делов-то на 15 строк. >>1050310 Дык уже давно. >>1050307 Это намного быстрее и гибче. Как минимум именно в качестве параметра вместо строки всегда нужно принимать string_view — ибо это простой слайс (поинтер+длинна), и ты полностью контроллируешь аллокации. В твоём текущем коде при передаче вообще чего угодно у тебя будут создаваться временные объекты, которые твой код повторно аллоцирует и копирует. Олсо, для того же нужен emplace_back() у стдшных контейнеров и perfect forwarding (а еще интрузивные контейнеры) но тебе ещё рано, лол. >>1050332 При чём тут итераторы-то, поехавший?
>>1050385 >Как минимум именно в качестве параметра вместо строки всегда нужно принимать string_view — ибо это простой слайс (поинтер+длинна) Длинна в каких единицах? Давно кресты utf8 поддерживать начали?
>>1050391 >Most Vexing Parse Все с этим сталкивались, когда-нибудь написав new T(). >как инферятся типы в лямдах и просто в функциях Да просто так, честно, запэддить лист
>>1050390 >Длинна в каких единицах? В байтах, в чём ещё в плюсах меряют длинну? Просто так уж сложилось что char = 1 байту, и теперь пойди объясни кто тут верблюд. >Давно кресты utf8 поддерживать начали? Смотря что ты имеешь в виду. Если строковые литералы — u8"דיק" ещё в 11-х завезли. Если просто строки в которые пользователь сможет срать что на иврите, что на китайском — в плюсах, опять же, все измеряется в байтах, так что абсолютно похуй что туда пихать. std::string — обычный вектор с опциональным SSO и рефкаунтом. Другое дело как ты эту хуйню обработаешь. И нахуя с ты перескочил с невладеющих строк к юникоду — ЯННП.
>>1050400 >В байтах И нахуя оно тогда нужно? Чтобы работать с данными все равно нужно 3rd party представление. Твоя хуитка поможет только в случае не-nullterminated строк.
>>1050201 А все, допер по поводу биномиальной кучи. Почему-то мне казалось, что деревья там плоские, как в куче, но потом стал рисовать по объяснению и понял, что все слегка иначе.
>>1050458 >Так передавай const wchar_t* size_t Пиздец просто. Переменная длина utf8 нас не устраивает значит, а вот переменная длина utf16 это совсем другое дело, да? Не хочу совместимую с ASCII кодирование, хочу использовать windows-only решение. Пиздец ты даун. И да, напоминаю, в юникоде один символ может состоять из нескольких знаков, удачи в ковырянии вилкой всего этого добра.
>>1050426 >Чтобы работать с данными все равно нужно 3rd party представление. В 95% случаев вся работа заключается в достал-передал дальше. На самом деле, не так часто нужно что-то со строками ручками делать.
Надо прогу с гуем сделать. Чтение с последовательного порта (виртуального, который с USB, ну да пох), рисование графиков, запись log-файлы и в базу маленько.
Раньше все на дельфи7 делал - на форму мышкой-хуяк-хуяк, компонент нагуглил для com-порта, чтение списка портов с реестра, графики - еще один компонент нагуглил, базы данных - компонент интербейс-коннект и к firebird без установки серверов (портативная версия). Еще и в Excel отчетики если надо. Всё заебись за считанные часы выполняется, всё вместе пять мегабайт. Но дельфи7 же умер, это ведь говно мамонта 2002 года, без юникода, без антиалиасинга, да и вообще, сейчас опенсорс, кросс-платформа, C++14 и прочая хуйня, к тому же мне уже за 30, и пора бы уже вместо меня в этой шаражке взять малолетнего пиздюка, а они про дельфи и не знают небось.
На да ладно. Сперва беру C# конечно же. Ну заебись, разобрался мало-мальски, правда в ini-файлы он что-то не умеет. Но сейчас уже 21 век, xml-костыль конечно же есть. Но, ебана, я ведь скачал Community Edition, а все равно регистрацию просит и посылает нахуй, да и при установке так систему засирает, что не по себе становится.
Ладно, хуй с ней с этой хуитой от микрософт. Тем более всюду (на дваче) посирают, что говно, тяжелое и неповоротное, да и приложения нельзя свои без коммерческой лицензии распространять.
Итак, беру труЪ-опенсорсный CodeLite, wxWidget, ну потрахался (какой же там уебищный GUI-дизайнер), последовательный порт через WinAPI, всё, сука, в ручную, автоподставновка через раз работает, как графики добавить, так и не понял. Хуита какая-то. Сколько гуглишь - На форумах древнее говно мамонта. Стопицот костылей, ничего простого. Либо не рисует, либо криво, либо не понять как ставить на эту версию. Еще напрягает, что установка wxWidget охуеть долгая - библиотеку то компилить надо. Радует хоть, что приложение статически собирается и весит мегайбат 7.
Дальше вот нагуглил, все нормальные пацаны обоссали этот wxWidget и делают на Qt. Окей, качаю последний, 5.9.1 версия. Гуй-дизайнер заебись, редактор кода заебись, сразу есть компоненты последовательно порта и графики, которые через жопу, но вполне юзабельно. Как перенести на другой комп? О_о Ладно есть там windeployqt приблуда. Вот она мне копирнула 45 мб библиотек, кучку из 23 штук (минус папку translations) епта. Да и то три штуки пропустила (которые к mingw). На вин10 работает, на вин7 работает, а на винХР не работает, ёбана. Да, вы тут все модные продвинуетые, на core i7 и прочее. А у меня в цехе несколько десятков компов и обновлять винду там нельзя, т.к. к ним идет оборудования забугорного на миллионы денег и, вообще блядь, лучше не там ничего трогать.
Что-то про статическую сборку пишут. Типа и DLL все в исполняемом файле - так то охуеть конечно, екзешник на писят метров, но зато, должно тогда на winXP запуститься. Третий день читаю форумы - всюду есть тема про старые версии Qt, а про 5.9 нихера. И так пробую, и так - на выходе какие-то компиляции целый час, а толку все равно нет - в сборках пишешь, а оно не работает. Какого хуя это не из коробки? Зачем я должен пердолится с этим?
>>1050693 >Зачем я должен пердолится с этим? Любители ХР должны страдать, да... В новых студиях для компиляции под ХР у компилятора отдельный тулсет есть. Если используешь другой компилятор - хз, попробуй настройки потеребить, может там тоже есть отдельная опция для этого. Еще один вариант, взять dependency walker и просто посмотреть чего бинарнику не хватает под ХР.
>>1050693 >Community Edition, а все равно регистрацию просит Она потому и коммьюнити, что майкрософт получает твой адрес для спама. >CodeLite Он немного забагованный, хоть в целом и работоспособен. > Как перенести на другой комп? Скомпилировать статически. Согласно LGPL ты можешь это сделать, тебе лишь нужно распространять вместе с программой объектные файлы и инструкцию о компиляции. Работа на XP связана не с видом компиляции - статика или нет. Если ты заюзаешь несовместимую функцию, у тебя не либа не подгрузится, а экзешник целиком, или баг где-то вылезет. Чтобы XP поддержать, тебе нужна какая-нибудь полубородатая версия. Последняя версия для висты - 5.6.2, например. https://wiki.qt.io/PlatformSupport И КСТАТИ, ты можешь поставить этот 5.5.* и последний кутыкреактор, и оно будет работать. >>1050701 >Еще один вариант, взять dependency walker и просто посмотреть чего бинарнику не хватает под ХР. Бинарнику под XP не хватает того, что Qt Oy не тестила Qt под XP, импортов не хватает и прочее.
>>1050674 >Пиздец просто. Ебаный дебил, замени на свою любимый char, но смысл ты понял. Нахуй разводить этот троллинг тупостью? пиздец wchar_t у него windows-only, передавай бате что надо было юзать гандоны
>В 95% случаев вся работа заключается в достал-передал дальше. Ты просто нахуй конченный. Как и вся та орда дебилов которая тащит свое говно в стандарт, уже собрались CGI и curses тащить, ага блять.
>>1050727 >пиздец wchar_t у него windows-only А что это не так? Или может быть есть какие-то достоинства использования UTF16 не на windows? С удовольствием послушаю эти охуительные истории >>1050727 >Ты просто нахуй конченный. Ты членораздельно можешь сказать с чем ты не согласен? Нахуя тебе отдельные символы? Что ты с ними собрался делать? >Как и вся та орда дебилов которая тащит свое говно в стандарт, уже собрались CGI и curses тащить, ага блять. В стандарт ничего не тащат - попопок хуевая стандартная библиотека, ни как в дотнете/жабе, покпокпок, могли бы и в стандарт добавить либу чтобы жопу вытирала/окошки рисовала, покпокпок В стандарт добавляют новые либы - покпокпок, они что поехали все это в стандарт тащить, горшочек не вари, спасите-помогите, убивают. Полностью с тобой согласен, братишка, ТОЛЬКО ПРОИГРАЛИ
>Нахуя тебе отдельные символы? Ну я блять даже не знаю нахуй как тебе и объяснить. Это походу особый клинический случай. Если тебе символы не нужны таскай все в voidptr.
>>1050693 Хули ты не смог то там. Для твоего случая, хватит с лихвой WxWidgets или fltk какой. Если ты не хочешь тянуть всего мамонта в лице Qt, придется тебе использовать эти либы. Естественно, нужно хотя бы понимать, как устроен интерфейс. Ведь по сути, генератор форм Qt на выхлопе делает класс виджета с набором объектов, ничего больше. Таким же образом и ты должен создать гуй. Если ты не понимешь ООП и что из себя представляет окно или форма, то тебе надо возвращаться в свой делфи, чтобы там мышкой программировать или все же осилить как создавать виды.
Как ответить на вопрос "в чем самая суть полиморфизма"? Я сказал вот что: - про реализацию различного поведения одной и той же функции у обектов разных типов - про удобство работы с иерархией классов через указатель или ссылку на базовый класс - про рефакторинг: замена условной логики полиморфизмом
>>1050693 И еще, тебя ждет веселье со старыми дровами для твоего драйвера виртуального порта. Когда я работал с CP2101 пришлось специально для ХР отключать автоопределение подключения через винапишные сигналы, глючило дико. Особенно мне нравилось выскакивающее окошко "Устройство не готово; Открыта дверца" при отсоединении кабеля. Кстати, делал такие штуки и на .NET, и на Qt, на первом больше гемора с портом было.
>>1050860 Статически они не слинкуются. Для этого тебе понадобится скачать сорцы, вызвать configure со --static и собрать. Ман http://doc.qt.io/qt-5/windows-deployment.html говорит, что держать две версии в одном месте одновременно не выйдет.
>>1050925 Зайди на сайт кути и прочитай условия. Она бесплатна пока юзер может выковырять и поменять её исполняемые файлы, что при статической линковке без исходников не очень хорошо получается. >>1050904 В одном из прошлых тредов даже кидали выдержку из стандарта, поищи.
>>1050931 >Зайди на сайт кути и прочитай условия. Она бесплатна пока юзер может выковырять и поменять её исполняемые файлы, что при статической линковке без исходников не очень хорошо получается. Сто раз обсосано на форуме qt.io, линковать статически и распространять объектники МОЖНО.
>>1050931 >Зайди на сайт кути и прочитай условия. Как действует LGPL определяют не Qt-шники.
> Она бесплатна пока юзер может выковырять и поменять её исполняемые файлы, что при статической линковке без исходников не очень хорошо получается. Для линковки с другой версией библиотеки достаточно распространять только объектные файлы.
>>1050944 Тебе интересно — ты и ищи их, мне чота влом.
>>1050943 Линковаться статически чтобы тащить с собой хуй пойми сколько неслинкованного дерьма, половина из которого этим самыи линкером ещё и будет вырезана — бесценно.
>>1050853 Скажи интервьюеру что он абстрактный пидарас, либо просто ответь что это дохуя гибко. Что это значит — пусть сам думает с такими вопросами.
>>1051002 >Тебе интересно — ты и ищи их, мне чота влом. В общем, слив защитан.
>Линковаться статически чтобы тащить с собой Ничего тащить с собой не надо. GPL не заставляет распространять исходники с программой, а только предъявлять их по требованию (высылать диск с ними или ссылку давать на то, где они лежат). LGPL, думаю, так же. А ценно или бесценно — похуй, главное ясно, что для статической линковки коммерческая лицензия на Qt не обязательна.
>>1050853 Ты всё о динамическом полиморфизме, подумай о статическом. Полиморфизм - инструмент единоразового описания алгоритмов в отрыве от конкретных применений.
>Every object of type basic_string<charT, traits, Allocator> shall use an object of type Allocator to allocate and free storage for the contained charT objects as needed. The Allocator object used shall be obtained as described in 23.2.1.
Использование статически аллоцированного объекта для оптимизации нарушает гарантию выделения всех строк в переданном аллокаторе.
Да, сорри, я наверно слишком сложно для тебя написал, давай по проще, трактуется это так: не может существовать такого объекта std::string данные которого не находятся в пуле предоставленного аллокатора.
>>1051061 Там такого не написано, не пизди. Написано, что аллокатором нужно выделять память при необходимости (as needed). Пока необходимости нет — выделять не надо.
>>1051062 Я же тебе жирным выделил что every, shall use. Если у объекта есть данные во владении - они needed. Зачем ты продолжаешь защищать свою ошибку?
>>1051063 >Я же тебе жирным выделил что every, shall use. Ну да, каждый basic_string<charT, traits, Allocator> должен использовать аллокатор для выделения и освобождения памяти для charT, при необходимости.
Про "для выделения всех строк", как ты написал в >>1051053 , там не написано. Единственное слово, которое можно было бы перевести как "все" это Every, но оно переводится здесь как "каждый" и относится к объектам типа basic_string<...>, а не к хранимым в них charT.
> Если у объекта есть данные во владении - они needed. Зачем ты продолжаешь защищать свою ошибку?
Зачем ты продолжаешь вырывать фразы и слова из контекста и фантазировать? Написано, что память надо выделять при необходимости (as needed). А не то, что хранимые charT внутри needed.
>>1051065 >но оно переводится здесь как "каждый" Да даже если ты переведёшь как "Все объекты типа basic_string<...>", то по-прежнему "все" будет относиться к basic_string<...>, а не к хранимым там charT.
>>1051066 Естественно, относится к basic_string, которые должны по требованию должны выделять пул предоставленным аллокатором.
А, возможно ты не очень понимаешь какой мета контекст у аллокатора в стандарте:
Containers are objects that store other objects. They control allocation and deallocation of these objects through constructors, destructors, insert and erase operations.
For the components affected by this subclause that declare an allocator_type, objects stored in these components shall be constructed using the allocator_traits<allocator_type>::construct function and destroyed using the allocator_traits<allocator_type>::destroy function (20.8.8.2). These functions are called only for the container’s element type, not for internal types used by the container. [ Note: This means, for example, that a node-based container might need to construct nodes containing aligned buffers and call construct to place the element into the buffer. — end note ]
Unless otherwise specified, all containers defined in this clause obtain memory using an allocator
Попробуй воспринять в этом контексте то что тебе пытались выше объяснить, возможно ты поймешь.
>>1051067 В процитированном тобой [container.requirements.general]/3 говорится про construct и destroy. Что-то запрещает делать construct и destroy в SSO-буфере?
> Unless otherwise specified, all containers defined in this clause obtain memory using an allocator
Список "all containers defined in this clause" прикладываю картинкой. Да даже если бы <string> сюда относился, то тут написано, что получать память нужно с использованием аллокатора. Использовать память внутри объекта это никак не запрещает.
> Попробуй воспринять в этом контексте то что тебе пытались выше объяснить
Не собираюсь воспринимать <string> в контексте, который к <string> не относится.
>>1051070 >Не собираюсь воспринимать <string> в контексте, который к <string> не относится. Твои проблемы. Сколько я понимаю выше по треду ты спрашивал почему нет SSO в мейнстримных имплементациях, пусть останется тайной лол.
>>1051070 Алсо, чтобы у тебя еще остался шанс: >The Allocator object used shall be obtained as described in 23.2.1. Строка не является контейнером (наркоманы, лол), но во всех своих аспектах ссылается на клаузы контейнеров.
>>1051071 >>Не собираюсь воспринимать <string> в контексте, который к <string> не относится. >Твои проблемы. Да нет, твои. Это ты полез тыкать меня в правила, которые относятся к контейнерам в таблице. Где нет <string>.
> Сколько я понимаю выше по треду ты спрашивал почему нет SSO в мейнстримных имплементациях Лолчто? В libstdc++ (GCC) SSO, в libc++ (clang) SSO, в MSVC SSO.
>>1051072 >Строка не является контейнером (наркоманы, лол), но во всех своих аспектах ссылается на клаузы контейнеров. Где необходимо — пусть ссылается. Главное, что глава Containers не ссылается на <string> в таблице контейнеров.
Java боярин itt. Поясните за статический анализ кода на c++, почему в различных ide для c++ нет таких же мощных анализатор как для java/c#? Что думаете насчёт rust?
>>1051088 Так кучи же их, начиная от clang tidy и cppcheck до PVS. Кстати, о каких различных IDE ты говоришь, небось об Idea и VS, так первые с давних времен свою IDE под жабу пилили, так что времени добавить анализатор было предостаточно, а вторые делает майкрософт, который и создавал язык c#, так что неудивительно, что поддержка этого и там есть. А что ты хотел услышать?!
>>1051236 Свой там слабенький да. clang tidy тоже не очень, нужно по коду гонять сторонними утилитами, заточенными специально под это дело, если уж на то пошло.
>>1050938 В пизде, уёбок. https://forum.qt.io/search?term=lgpl%20static%20linking&in=posts&sortBy=relevance&sortDirection=&showAs=posts >>1051063 >Если у объекта есть данные во владении - они needed. Какой упёртый! Если данные можно разместить в объекте, то выделение памяти не needed. >>1051070 >Что-то запрещает делать construct и destroy в SSO-буфере? Какбе объект сам-то знает о том, что строка в нём находится. Это всего лишь деталь реализации, а не гарантированный UB. >>1051088 >Поясните за статический анализ кода на c++ Часть задач анализатора выполняется компилятором и стандартом языка.
>>1051248 Эм. Та же андроид студия - просто набор плагинов. Что изменится если запилить standalone-сборку с Rust-плагином? И как раз в начале августа JetBrains объявила официальную поддержку Rust-плагина (до этого это был типа pet-проект пары чуваков из JB).
Как собрать статическую библиотеку pdcurses при помощи VS2015? Запускаю nmake -f vcwin32.mak и нихуя: nmake не найден. В переменной окружения прописываю путь к nmake, но теперь при компиляции не найдены заголовочники. Редактирую makefile и прописываю пути к папкам include, однако теперь не находится stddef.h. Что за хуйня?
>>1051381 >Если данные можно разместить в объекте, то выделение памяти не needed. В приличных языках за такое ебут раскаленной кочергой пока до кукаретеков не дойдет. Но это кресты, тут всем похуй лол, на фоне общего пиздеца никто и не заметит.
>>1051248 Лолшто? Иди посмотри на плагин для какой нибудь скалы или котлина — там фич больше чем для шарпа у какой нибудь студии, без шюток. И вообще открой, сука, доку по архитектуре идеи — это одна большая платформа для плагинов, в которой даже жаву уже вынесли в плагин, что как бы намекает.
Отдельные иде они выпускают только когда есть конторы которые будут закупать лицензии сотнями и тысячами, чтобы потом выпускать мажорные релизы по 3 раза в год и предлагать обновлять лицензии с 20% скидкой как они это регулярно делают, эти же похуеитрожопее челиков из PVS.
>>1051533 Это называется "абстракция". У объекта есть члены и аллокатор, а что он с ними делает - тебя ебать не должно, если ты не опираешься на UB и ID.
>>1045411 (OP) Решил чуть чуть подкопнуть в сторону ассемблера, чтобы более менее понять как работают функции. Хотел спросить, указатель из записи стека ( второе имя для кадра стека ) и base pointer это одно и тоже?
>>1045411 (OP) Посоветуйте на ведро ньюфагу чтобы код писать, можно даже без компиляции наверное, главное чтобы подсветка была. Мне бы на досуге код писать, а не капчи вводить, или это плохая затея? Ведро 4.4, рут есть
>>1053045 зачем тебе нужны примерные размеры твоих объектов? тебе нужны размеры объектов - объектов, или размер данных которые он попросил у аллокатора?
что не так с needed? про small string optimization не слышали? или если строчка пустая, то она всё-равно должна выделить ровно 1 байт под зиротерминатор?
>>1053175 Ну, давай рассмотрим типовую задачу которая обычная успешная крестомакака может пилить, если она не QT-говноед. Есть очередная биткоин/хуеин или просто биржа где-нибудь в штатах и ты галеришь для нее бек. Тебе надо обеспечить защиту строковых данных от любой коррупции памяти, переполнения и прочего, при условии что ты ее отдаешь в третьи руки, возможно даже в объектник, или того хуже интерпретатор другого языка. Расскажи мне как ты это сделаешь без строкового пула.
>>1053252 А какие вообще задачи ты решаешь с помощью std::string в таком случае? Моя задача более чем типовая судя по StackOverflow и собственному опыту, лол. Мне казалось что кроме обработки данных на крестах/сях писать что-либо уже настолько моветон что и проектов таких нет.
>>1053237 Никакой метод std::string не предусматривает то, что тебе нужно знать про SSO. Задачку рассмотрели, ты опять соснул. >>1053281 >сделать так, чтобы компьютер печатал сам текст? То есть сам нажимал кнопки и шиндоус реагировал. Какой ты мимимишный, абрикосик прям.
>>1053286 SSO абсолютно прозрачна и соответствует стандарту. Если ты можешь найти пример использования string без UB и ID, в котором SSO что-то ломает - заноси.
>>1053229 Сибоярин хоть когда-нибудь смотрел на вывод компилятора в ассмблере и все те охуительные трюки, которые используются для ускорения программ на C? SSO - это название техники, которую применяют компиляторы, и тебе, как пользователю языка, ВООБЩЕ похуй на неё.
>>1053254 >Моя задача более чем типовая судя по StackOverflow и собственному опыту, лол. Охотно тебе верю. А у тех кто программирует графику совсем другие типовые задачи. И у тех кто драйвера для железок. И у тех кто UI. В каждой предметной области есть свои типовые задачи. Какой сюрприз да? Твоя ошибка в том что ты свой опыт распостраняешь на всю индустрию. Это во-первых. Во-вторых, какай у языка лозунг? Не платишь за то что не используешь. Так почему все должны отказаться от удобной оптимизации ради тебя? Ну и в-третьих, даже в твоем случае, это нужно только для части строк, так ведь? Т.Е. по хорошему для часть строк - свой самописный класс с пулом. А другая часть стандартная которой все это не нужно, и которая работает быстрее благодаря SSO.
>>1053456 Все критично, вообще любое повреждение данных. И тебе надо об этом орать в общую шину, что макака сидящая дальше данные портит, иначе тебе пиздец.
Просто память ты можешь отследить (примерно так же как обычный CrtMemoryCheck() в винде), а стек - хуй.
>>1053467 Нет, не для части - для всех. Кстати из всех кого ты перечислил работать с пользовательскими строковыми данными будут и только в дебаге... а хуй знает, может игроделы, в теории, но это должна быть какая то совсем уж унылая шарага где такие вещи в ресурсах не хронятся.
>>1053457 КОНЕЧНО ЖЕ ты можешь показать пример того, как SSO приводит к ошибке в программе, не использующей UB и ID, верно? >>1053459 Сделай утверждение, правильность которого можно проверить, не задавай мне пустые вопросы. Слабо?
Привет анон я дотянул конца за яйца лабы до конца лета и у меня наебнулся ноут, нет возможности поставить VS Анон предлагаю 2000 рублей за 2лабы и 1 игру C++/CLI ООП. Вот сами задания: ------------------- 1. Разработать класс «Множество» на основе массива с полной системой функций, включая интерфейсную функцию просмотра содержимого множества. 2. Используя множество как структуру хранения данных, решить прикладную задачу. Дана последовательность символов. Сформировать множество, представляющее собой частотный алфавит указанной последовательности. --------------------------------------------------- Прикладная задача (использовать хэш-таблицы) Кот Матроскин владеет стадом коров, а также организовал производство молока, сметаны, творога, масла. Ежедневно он учитывает дневной сбыт каждого вида продукции, причем цены товара у Матроскина могут изменяться, и цены ему приходится тоже ежедневно записывать. В конце месяца необходимо подвести итог по результатам торговли, чтобы выяснить, какая продукция пользуется наибольшим и наименьшим спросом, а также какая продукция приносит наибольшую и наименьшую прибыль. В конце года необходимо решить ту же задачу для подведения итогов года. Задание 1. Разработать сущности для сохранения необходимой информации, реализовать необходимые методы. 2. Организовать список записей на основе одного из контейнерных типов Net.Framework, реализовать интерфейс для добавления и отображения записей. Сохранить список в текстовом файле. 3. Реализовать интерфейс для ежедневного ввода данных. Реализовать механизм подведения итогов и вывод результатов, результаты сохранить в текстовом файле -------------------------- Написать программу — игру тренажер клавиатуры «Гонки за хвостом». С нормальным ООП, использовать структуры данных
Кто у умеет писать хороший код на c++/cli и хочет заработать пишите в телегу @totlds нужно как можно быстрее, дедлайн 2 сентября.
>>1053501 STL в большнистве случаев специфична для компилятора, и на совместимость ABI сгружены болты. Да, я назвал оптимизацию, которая должна быть частью STL, оптимизацией компилятора, я жестоко ошибся. Да, ты долбоёб. >>1053961 > c++/cli Нахуй и в пизду.
>>1053961 За 2к ты можешь купить час моего внерабочего времени. За этот час, ты не сможешь даже описать чего именно от тебя хотят. Потому что хуйня вроде "гонки за хвостом" - какая-то местечковая параша в голове твоего препода.
Ананасы, помоите советом. Мне надо написать GUI с ползунком, значение с этого ползунка будут передаваться в консоль игры. нужно, чтобы эта хуйня была в форме экзешника, и при запуске экзешника запускался еще и экзешник игры. Какую либу использовать для гуи, как замутить экзешник? Не обоссывайте, суки
Либо, если игре не нужно принимать текстовые команды вообще, ты можешь поменять режим записи и чтения на бинарный в обоих программах (чтобы \r и \n никогда нигде не конвертировалось) и писать числа по какому-нибудь простому протоколу: https://stackoverflow.com/questions/1598985/c-read-binary-stdin cin и cout получают свои данные через stdin и stdout, поэтому нужно поменять режим в stdin и stdout. Читать из cin надо с помощью cin.read(), писать - с помощью cout.write(), использовать sizeof() в обоих случаях. >>1054387 http://en.cppreference.com/w/cpp/language/memory_model Прочитал. Зачем сраться? Есть модель памяти, которой все придерживаются, и модель параллельного взаимодействия, применение которой минимизирует оверхед, не вижу никакой проблемы в этом. Есть задачи, в которых это неоптимально?
>>1054726 >Прочитал. Зачем сраться? Я имел в виду срач не о самой модели памяти, а о том, чтобы пришёл какой-нибудь ньюфаг с её непониманием и начал молоть ерунду. Было бы весело покормить его г-ном.
>>1054895 зачем в std контейнерах потокобезопасность? почему нельзя сказать "если вы std string в разных потоках используете, это UB, если вы в потоках используете atomic<string> то всё ок"?
>>1054961 Тогда рассказываю. 0) Не бывает абстрактной thread-безопасности для контейнера, может быть лишь конкреный набор безопасных операций с предсказуемым результатом. 1) std::atomic - это инструмент для ускорения параллельных программ. Мьютексы - довольно дорогая операция, и в некоторых случаях ты можешь сделать алгоритм взаимодействия без мьютексов вообще, используя atomic. При этом atomic не использует мьютексы не во всех случаях, а только тогда, когда это возможно. То есть, если ты захочешь сделать atomic<array<char,90001>load(), то внутри будет использован мьютекс почти на всех ЦП. 2) std::atomic<string> - это фингербокс, так как единственная полезная операция, которая становится безопасной по сравнению со string - это swap (exchange). У atomic есть лишь ограниченный набор операций, которые становятся безопасными, читай: http://en.cppreference.com/w/cpp/atomic/ Конкатенация строк? Получаешь UB - перемещается область данных из-за реаллока, за тебя никто это проверять не будет. Хочешь search&replace - получаешь data race, если другой тред пишет в строку. Когда ты пишешь atomic<string>.load(), ты получаешь обычную копию строки, которая использует ту же динамическую область данных. 3) как я уже сказал, просто потокобезности не бывает, есть определённый набор безопасных операций. Потокобезопасность контейнеров максимально примитивна - она означает то, что если разные треды используют строго разные элементы, то нету data race. http://eel.is/c++draft/container.requirements.dataraces#2 Ну и ещё некоторые требования: http://eel.is/c++draft/res.on.data.races которые обозначают самую милипиздрическую потокобезопасность - то есть, ты гарантированно не отстрелишь ногу, пока ты ничего не делаешь.
Анон, такой вот вопрос про наследование. Имеется базовый класс и несколько наследуемых от него. В базовом классе есть функция Touch которая принимает указатель на базовый класс пикрелейтед. В наследниках эта функция как-то определяется по своему. Для кого-то функция не будет делать ничего, например.
Так вот суть вопроса. Можно ли как-нибудь сделать идентификацию типа чтобы избежать динамик_каста? Ну или сделать виртуальную функцию которая бы возвращала имя класса.
>>1055188 >Это инструмент для написания параллельных программ, вот обчитаются такой хуйни и потом городят. Там дальше в посте объяснение этого утверждения, так что иди нахуй. >>1055182 >чтобы избежать динамик_каста? Нахуя? Если ты уже проверил динамический тип, ты можешь использовать статический каст, так как динамический - это проверка RTTI и статический каст. И даже в этом случае - нахуя? >Можно ли как-нибудь сделать идентификацию типа enum class в каждой корневой базе сделай, только компилятор делает примерно то же самое для RTTI, так что ты только свой велосипед городишь.
>>1055437 >enum class в каждой корневой базе сделай, только компилятор делает примерно то же самое для RTTI, так что ты только свой велосипед городишь. Загугли llvm style rtti, у них была статья об этом в их доках в которой рассказывается что и как, и почему ты хуйню сморозил.
>>1055182 Спустя сутки я так и не понял, что ты хочешь сделать. То, что ты говоришь - один в один причина для использования виртуальных функций, где там у тебя динамик-каст-то? Ты хочешь избежать милипиздрического оверхеда виртуальных функций? >>1055572 >Загугли llvm style rtti Загуглил - ёбаная каша для создания багов с максимальной производительностью. Ты хочешь сказать, что то, что я предложил - это оно? Ну и ладно, посыл тот же - вопрос ОПа нихуя не понятен.
>>1055618 Да, это оно. И если разработчики одного из главных (в мире ойти гигиантов — главного) компилятора считают что это может чувствительно просадить перформанс и ради этого месят подобную лапшу (и запрещают в своём кодстайле использовать RTTI c dynamic_сast и прочим, как и гугловцы) — мне кажется они что-то да знают.
Бля, я с этой капчей скоро снова считать без калькулятора научусь, лул.
>>1055149 >std::atomic - это инструмент для ускорения параллельных программ. >>1055188 >Это инструмент для написания параллельных программ Два долбоеба подряд.
>>1055663 >что это может чувствительно просадить перформанс Что угодно может просадить перформанс. >мне кажется Тебе кажется, а в статье конкретно написано, что нужно это для быстрого динамик_каста, для специализации функций под разные динамические типы аргумента это нах не нужно, достаточно свитча по hash_code из type_info и reinterpret_cast (видимо, ОПу вопроса это и нужно, но хуй дождёшься его).
Что там у них за юзкейс, в котором обязательно нужно использовать кучу кода с огромными возможностями для багов (инбифо есть тулза) - хуй знает, рыть исходники я не буду. >>1055703 И тут ты рассказываешь о том, зачем тебе нужны атомарные операции с объектами, которые используются в одном потоке.
>>1055769 >Что там у них за юзкейс, в котором обязательно нужно использовать кучу кода с огромными возможностями для багов (инбифо есть тулза) - хуй знает, рыть исходники я не буду Ну тогда я тебе, гению, подскажу. Они пишут компиляторы, и им нужно AST составлять, причём по которому нужно очень быстро бегать. Когда у тебя только от одного ебаного <iostream> 40+ к нод (попробуй шланг с -ast-dump на хэловорд натравить) — дохуя весело наверно это дело обходить по 5 раз (надеюсь зачем это делать сам догадаешься?).
Хуй знает какие тут могут быть баги. Допустить опечатку в названии енума?
А вообще, я сейчас 5 раз перечитал вопрос того пацан и понял что он ебётся со стеной и ему тупо нужно почитать про паттерн посетитель (благо в плюсах на шаблонах его можно сделать без виртуальных функций, привет буст, гы).
>>1055967 >Хуй знает какие тут могут быть баги. Допустить опечатку в названии енума? Ты сам-то читал статью, блядь? https://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html >Ну тогда я тебе, гению, подскажу. Они пишут компиляторы, и им нужно AST составлять, причём по которому нужно очень быстро бегать. Когда у тебя только от одного ебаного <iostream> 40+ к нод (попробуй шланг с -ast-dump на хэловорд натравить) — дохуя весело наверно это дело обходить по 5 раз (надеюсь зачем это делать сам догадаешься?). О, совсем забыл, я хотел сегодня компилятор написать!
>>1056013 Читал, и не понял нахуя сравнивать с какими-то усреднёнными значениями из енума. Единственный непонятный и спорный момент. >О, совсем забыл, я хотел сегодня компилятор написать! Ну вот ты сам сказал — что ты безграмотное хуйло, ни разу не сталкивавшееся с необходимостью построения кучи древовидного говна, которое встречается почти везде в том или ином виде кроме гуй-кружошлёпства мб. Ведь мало оверхеда от того что эту парашу нельзя ужать в единый массив, и она в памяти растекается как жир итт и примерно никогда не попадает в кэш, нужно ещё виртуальных вызовов и динамик каста насобачить.
>>1055769 Это называется примитивом синхронизации, неуч. Многие параллельные операции можно делать и без синхронизации. Про инструмент и ускорение это какое-нибудь Intel Parallel Studio.
Поясните пожалуйста кто-нибудь залетному, зачем нужно писать везде using namespace std? Я пытался гуглить, но все хором пишут ыыы эээ ето пространство имен. Блядь, пиздос, да оно понятно из названия что это пространство имен, мне уже даже похуй что такое пространство имен, скажите мне что делает конкретно std?
>>1056175 Ну ебана, а как тебе объяснить что оно делает, если ты не понимаешь ничего из того, с чем оно это делает? Пока не пройдешь неймспейсы просто забей хуй и прими как должное - "надо писать это шоб та функция работала, почему - пока хз".
>>1056175 А если совсем грубо объяснять: Вот ты написал класс class Huy, и хочешь, чтобы другие, когда подключали твою йоба-либу, не получали кучу ошибок из-за того, что твой класс конфликтует с их классом, который тоже называется Huy. Поэтому ты используешь неймспейс - namespace HuyLib { class Huy };
Теперь, когда другие подключат твою либу, они не смогут просто сразу писать a = new Huy, потому что там, где они это пишут, нет такого имени - оно в другом пространстве имен. Чтобы оно было, надо либо явно указывать неймспейс каждый раз - HuyLib::Huy (так же, как ты можешь явно писать везде std:: для стандартных функций вместо using), либо просто написать один раз using namespace HuyLib, и теперь все имена из неймспейса становятся видны (если ты уверен, что в твоем файле нет конфликтующих имен и можно просто юзать как есть).
>>1056027 >Читал, и не понял нахуя сравнивать с какими-то усреднёнными значениями из енума. Единственный непонятный и спорный момент. Динамик каст узнаёт, является ли объект запрошенным типом или имеет ли предка запрошенного типа. Числа элементам энума присваиваются строго в порядке следования. Дерево наследования с единственным наследованием ложится на шкалу значений ( порядок определяется обходом в глубину), после этого все производные типы для динамик_каста оказываются в отрезке от базы до последнего наследника, и когда запрашивается динамик_каст в некоторый класса, то статический метод этого класса проверяет, находится ли Kind конвертируемого класса в нужном отрезке.
Если наследование множественное, начинается пиздец - надо сравнивать с несколькими отрезками. >>1056066 Иди-ка ты нахуй, дебил. Примитив синхронизации - мьютекс. atomic можно целиком сделать через мьютексы и не определять никаких специальных операций для объектов вида сложения, инкремента, подмены или ещё чего, они определены только потому, что они довольно часто используются и на некоторых ЦП они МОГУТ быть выполнены без мьютекса. Примитивом атомик не является. >>1056254 фгугл
Двач, делаю для себя небольшой кросплатформенный фреймворк, с помощью него я создаю окно и мне нужно получать от окна состояние нажатых клавиш, состояние этого окна и прочую информацию о состоянии чего либо, как я понимаю в большинстве других фреймворков система хранения и считывания этой информации реализована через события (евенты), не подскажете можно ли мне реализовать что-то другое помимо событий, или лучше просто скопировать эту систему?
>>1056275 >Если наследование множественное, начинается пиздец - надо сравнивать с несколькими отрезками. Вот оно что, михалыч. Спасибо что выше столько капитанской фигни написал, графоман, я ж не осилил бы.
>>1056335 Да. >>1056324 Показываешь место в стандарте, где написано, что atomic - это примитив - покажу, где написано, что mutex - это примитив. >>1056373 Это неконстантный указатель на константный указатель на константный инт. >Принимать должке двумерный массив созданный неизвестным образом Нахуй тогда указатели, делай template. template<typename T> foo(T n) Вот так ты вообще любой массив примешь, включая ассоциативный контейнер (а не только кусок памяти).
>>1056586 Я влез в вашу дебильную беседу только после того, как ты начал пиздеть, что любой атомик можно реализовать на мьютексах. Причём ты не остановился даже после того, когда я явно спросил про atomic_flag. Который должен быть lock-free.
Кто там у вас примитив — это ты выясняй со своими дебильными собеседниками.
>>1056590 >Который должен быть lock-free. У lock-free есть какое-то другое свойство, кроме производительности? Примитив - это то, через что можно сделать всё остальное, атомик флаг пишется на мьютексах и примитивом не является, отличие будет только в производительности.
>>1056597 >другое свойство, кроме производительности У него одно свойство - операции (некоторые) с ним выполняются за один такт. К производительности это никаким краем.
>>1056625 >У него одно свойство - операции (некоторые) с ним выполняются за один такт. Ёбаное гонево. 1) Ты не можешь за один такт сказать всем ядрам процессора о том, что ты сейчас будешь менять один бит. 2) То, что оно сделано за один такт, не означает того, что нету data race. >К производительности это никаким краем. Тогда для чего нужно требование lock-free? Есть другие применения у lock-free-операций?
>>1056629 >Ты не можешь за один такт сказать всем ядрам процессора Зачем мне им это говорить? Для того и ввели понятие "атомарных" операций, чтобы не было пересечений ни по кешам ни по пайплайну. см. >>1056630
>>1056630 >>1056631 О, отлично, попёр конструктив. >>1056630 Никакое свойство mutex не препятствует исполнению atomic_flag через мьютекс (кроме самого требования не делать это через мьютекс). address-free - это о меняемом значении и о том, что оно должно обновиться во всех адресных пространствах сразу. Когда ты залочил буль и пишешь новый буль, это обеспечивается механизмами когерентности кэша физической памяти в ЦП. Когда ты делаешь это с помощью одной инструкции, происходит то же самое, просто очередью управляет процессор без мьютексов - если несколько потоков подряд решат записать в буль в одно время, они либо залочатся на разное время, либо залочатся на большОе время (достаточное для того, чтобы разрулить все ядра в самом худшем случае) - в зависимости от того, как процессор сделан. >>1056631 >Зачем мне им это говорить? >чтобы не было пересечений ни по кешам ни по пайплайну. atomic_flag zalupa; ........ и тут такие 2 треда (которые не на одном ядре выполняются) одновременно решают сделать: result=zalupa.test_and_set();
Если вы не видите причин для улучшения производительности, просто представьте себе, что тред, в котором залочен критический буль (всем нужен, все используют), исчерпал тик и ушёл спать. Пока остальные треды не решат, что этот буль всем им нужен, пройдёт до хрена тактов. Если в ЦП есть нужная атомарная операция с булем, такого никогда не будет.
>>1056754 >У mutex есть гарантия address-free? Мьютекс содержится в памяти - ясен пень, он address-free, это свойство памяти, расшаренной между процессами средствами ОС, блядь. Попробуй найти хоть одну ОС, в которой изменения в расшаренной памяти видны не всем процессам сразу, это естественное свойство расшаренной памяти, она только для этого и нужна. Попробуй найти хоть одну архитектуру ЦП, в которой видимость записи в память зависит от того, какая таблица виртуальной памяти была загружена. >Цитату из стандарта, плиз. http://eel.is/c++draft/atomics.lockfree#4
>>1056779 Щас у меня голова вскипит, ты заебал меня. Это ты так ведёшь меня к тому, что в плюсах мьютексы только для тредов, и что комитет вставил атомик_флаги, но до сих пор не сделал межпроцессные мьютексы обязательными, которые можно запросто написать на тех же инструкциях? Ладно, я всё понял. Да, действительно, с точки зрения STL атомик_флаг - незаменим в строгом смысле. http://eel.is/c++draft/thread#req.lockable.general-1 >An execution agent is an entity such as a thread that may perform work in parallel with other execution agents. [ Note: Implementations or users may introduce other kinds of agents such as processes or thread-pool tasks. — end note ] The calling agent is determined by context, e.g. the calling thread that contains the call, and so on. Здесь говорится, что агент - это тред, процесс и т.д., но не говорится, что процесс должен быть агентом. Грубо говоря, заменимость атомик_флага мьютексом зависит от implementation. >>1056829 Ага, и мемори-фенс у нас за один так выполняется, да? Я уже не говорю о том, что в большинстве процессоров за один такт вообще ничего не выполняется, так как гиперскалярность. В терминологии силён не особо, но этот твой мемори-фенс означает то, что одно ядро должно сказать всем остальным об изменении буля ДО ТОГО, как они тоже попытаются это сделать, сделают и уже выполнят другие инструкции с использованием полученного значения. В этом вы меня не наебёте - из атомарности операции следует не то, что она за такт выполняется, а чаще всего то, что она выполняется одной инструкцией.
>>1056855 >но этот твой мемори-фенс означает то, Нет. Это просто инструкция, которая учитывается при наполнении пайплайна.
>В этом вы меня не наебёте - из атомарности операции следует не то, что она за такт выполняется, а чаще всего то, что она выполняется одной инструкцией. Вопрос терминологии, не более. В ряде случаев обе формулировки верны.
>>1056855 Я вообще не пойму, чего ты так вцепился в мьютексы как примитивы. Ты это в какой-то книжке прочитал?
В общем случае атомики можно выразить через мьютексы, а мьютексы через атомики. (Но это в общем случае. Не в общем есть atomic_flag.) Почему одно примитивнее другого?
>>1047203 imbue для операторов std::wcout, std::wcin, std::cin, std::cout, и посмотри сразу какие там типы данных используются, чтобы потом меньше ебли было.
Как реализовать выпадающий список при вводе строки в консоли? Ну допустим регулярки + ассоциативный список, а внешне это можно как-то стильненько оформить? Типа как поисковая строка у Гугла. Без winapi...в теории можно питон подключить но такое.
Аноны, что с этим кодом не так? Почему при переборе с последнего элемента до первого и с первого до последнего получаются разные числа? Программа должна переводить из десятичной системы в двоичную, если что.
>>1056868 >Почему одно примитивнее другого? Изначально речь шла об std::atomic. >>1056881 >imbue для операторов std::wcout, std::wcin Во-первых это не операторы. Во-вторых wcout и wcin на винде мёртворождены, нету их там. >>1056885 Какой ещё выпадающий список? Откуда выпадает хоть? Питон нахуя для этого? Очевидное очевидно: возьми исходники mintty или другого терминала и прикрути. Без винапи ты это не осилишь, если сам не сделаешь терминал на Qt. >>1056910 >Программа должна переводить из десятичной системы в двоичную, Делается в две строчки с помощью модификаторов вывода. >>1056910 >Почему при переборе с последнего элемента до первого и с первого до последнего получаются разные числа? Потому что int i проходит разные значения, посмотри внимательно на свой for.
> да и под визуалкой работает Она известна своим кривым препроцессором. Чаще он не осиливает валидный код, но тут «осилил» (т.е. выдал ожидаемый результат) невалидный. Считать ли это плюсом? Не думаю.
>>1057422 MinGW и используй. Эта >>1057202 манька судит о новизне компилера по дате модификации топ-левел каталога. А если пройти внутрь этого каталога, то видим пикрелейтед.
Можно ли писать программы на OpenGL без библиотеки glut? Дело в том, что она не входит в комплект MinGW, а на официальном сайте архив только с h файлами без файлов самой библиотеки. Где её брать не понятно.
Сисси-бои, как в Win32 API сделать так, что бы дочернее окно было привязано к нижней границе родительского (главного) окна и чтобы, когда главное окно было не в полном размере, дочернее окно всё равно было на нижней границе. Типа как у MSVS окно вывода ошибок. Спрашиваю не из-за лености, а от отчаяния.
>>1057450 SDL - не рабочая библиотека. Я всё аккуратно скопировал в папки MinGW, подключил библиотеку к проекта и он мне выдают, что в самой библиотеке не может найти функции: c:/MinGW/i686-w64-mingw32/lib/libSDL2.a(SDL_systimer.o): In function `SDL_SetSystemTimerResolution': /Users/slouken/release/SDL/SDL2-2.0.5-source/foo-x86/../src/timer/windows/SDL_systimer.c:57: undefined reference to `_imp__timeBeginPeriod@4' и ещё 100500 аналогичных строчек...
Видимо выкладывают какие-то битые сборки и не проверяют их.
>>1057495 https://github.com/spurious/SDL-mirror Попробуй отсюда ее вытянуть и сбилдить на том же cmake, к примеру, самое простое, что можно придумать. А вообще, если ты решил копошиться под MinGW, то советую лучше вытянуть MSYS2 или Cygwin (второй будет по-жирнее, но и по-лучше, вроде как). MSYS2 самый простой вариант для тебя, как мне кажется. Установишь его и потом pacman-ом поставишь еще sdl и всего-то делов.
>>1057495 >и он мне выдают, что в самой библиотеке не может найти функции: timeBeginPeriod - это функция из винды. Видимо, тебе нужно ручками подключить "Winmm.lib". Я не знаю, есть ли в GCC вообще это автоматическое подтягивание либ, я никогда не видел его. Судя по километрам "-lХУЙПИЗДА" в мефкфайлах, которые я видел - нет. >>1057559 Это часть языка, что значит "нахуя"? От того, что он не может быть перегружен, он не перестаёт быть оператором.
>>1057687 я дебил, соре, не так написал вопрос нахуя в комитете идут разговоры о возможности перегрузки оператора точка? зачем нам перегружать ТОЧКУ БЛЯТЬ, чтобы ещё сильнее язык усложнить?
>>1057818 Хотят сделать компилируемый LISP, небось. Хуй что выйдеет, впрочем. То, что разговоры идут, ничего не значит. >>1057687 > не знаю, есть ли в GCC вообще это автоматическое подтягивание либ, я никогда не видел его. Судя по километрам "-lХУЙПИЗДА" в мефкфайлах, которые я видел - нет. Только что проверил скачанный архив с SDL - там есть pkgconfig, в котором написано всё это: >Libs.private: -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc То есть, всё должно линковаться. Куда ты распаковал архив? Нужно распаковывать так, чтобы папка i686-w64-mingw32 слилась с такой же папкой МинГВ.
>>1057831 Разве что совсем чуть-чуть, я только Схемку знаю немного (там ООП нету, вроде, но есть полноценные макропреобразования). Дело в том, что, имея интерпретатор (с JIT или без - вопрос производительности) можно писать некоторые специфичные вещи так коротко, что на плюсах ты заебёшься писать. Макро в ЛИСПе - это как препроцессинг, только его можно делать в любом месте и использовать состояние программы и все возможности языка, а не только всякие примитивы типа define, #, простой подстановки и так далее. Шаблоны - это то, что приближает C++ к ЛИСПу. Constexpr if, constexpr array и прочее - это перетягивание возможностей языка на сторону компилятора. Для того, чтобы сделать double dispatch - т.е. вызов метода соотв. динамическому типу и вызов метода, соотв. динам. типу аргумента - в плюсах надо городить стену кода из одинаковых методов, так как это единственный способ автоматического выбора перегруженной функции по типу, даже dynamic_cast тебя не может спасти. Некоторые вещи можно добавить в плюсы ПОЧТИ безболезненно (статики создаются в каждом инстансе generic lambda вместо одного на всех, http://coliru.stacked-crooked.com/a/ae480e8cfdf344d1, нахуй это надо?), некоторые - со страшной болью, как constexpr if.
Без встроенного компилятора и возможности записи кода в исполняемую память (привет защите от исполнения в большинстве современных ОС) C++ ЛИСПом не станет, и если это хоть когда-то случится, стандарт языка станет занимать шкаф, а ошибок в стандарте и компиляторах будет море.
>>1057849 Про инстансы статиков - логично, а вдруг static decltype(hui) Ggurda;? тогда без многих инстансов точно не обойтись, а городить проверки "зависит ли тип статической переменной от типа одного из аргументов?" было бы лишним, вот честно
>>1058614 Какие выводы то? аккуратнее с бесконечными циклами без побочных эффектов? юз онли волатайл перменные в вайлах? cl > clang? Не лучшие оптимизации меняют поведение программы? о каких выводах ты говоришь?
>>1058615 >аккуратнее с бесконечными циклами без побочных эффектов? Да, ибо UB.
> юз онли волатайл перменные в вайлах? Это ещё зачем?
> cl > clang? Лол, нет.
> Не лучшие оптимизации меняют поведение программы? Тут UB, так что никто больше не обязан сохранять какое-то поведение программы. О жид аемое ли не о жид аемое.
> о каких выводах ты говоришь? Которые ты должен сделать для себя.
>>1058774 Может потому что std::async это шаблон функции, а std::function это шаблон класса? Почему std::vector v {1, 2, 3} обламывается у тебя тоже вызывает вопросы?
>>1058788 >Может потому что std::async это шаблон функции, а std::function это шаблон класса? Правда, в C++17 будут deduction guides, но для member function не завезли.
>>1058864 Как async догадывается до того, что нужно делать с указателем на метод, и до того, что первый аргумент в списке - это lhs для .*? Где в доках написано, что async принимает указатели на методы таким образом?
>>1058914 >>1058915 >>1058917 Всё, я допедрил. Всего-то навсего комитет не добавил очевидные deduction guidelines, которые прямо следуют из определения Callable.
>>1059087 Ах ты блет! >>1058791 >Правда, в C++17 будут deduction guides, но для member function не завезли. http://en.cppreference.com/w/cpp/language/class_template_argument_deduction > If C is defined, for each constructor (or constructor template) Ci declared in the named primary template (if it is defined), a fictional function template Fi, is constructed, such that > template parameters of Fi are the template parameters of C followed (if Ci is a constructor template) by the template parameters of Ci (default template arguments are included too) > the function parameters of Fi are the constructor parameters > the return type of Fi is C followed by the template parameters of the class template enclosed in <> > If C is not defined or does not declare any constructors, an additional fictional function template is added, derived as above from a hypothetical constructor C() > In any case, an additional fictional function template derived as above from a hypothetical constructor C(C) is added, called the copy deduction candidate. Я правильно понял, что дедукшн для класса определён через дедукшн для функций? Тогда всё есть!
>>1059124 >Я правильно понял, что дедукшн для класса определён через дедукшн для функций? Автоматический — через вывод типов для конструктора. user-defined через функцию спец. вида.
>>1046880 Что там кидать? В ширину: у тебя есть граф из спичек. Выбираешь наугад вершину и поджигаешь ее. Когда огонь потухнет, проверяешь, есть ли не загоревшиеся спички. Если есть, повторяешь операцию. В глубину. У тебя есть граф-лабиринт. Идешь куда хочешь, на каждом ходу помечаешь пройденную вершину. Если некуда идти, возвращаешься назад до первой развилки и идешь в новую сторону. Продолжаешь до тех пор, пока не вернешься к самому началу. Проходишь таким образом каждую компоненту связности. Код есть где угодно.
Есть класс в котором динамически аллоцируется буфер. Память освобождается в дестракторе. Хочу передавать объект такого класса по значению, по цепочке, из внутренних вызовов во внешние и чтобы память освобождалась в деструкторе последнего внешнего объекта. Хочу тупо добавить bool owner class C { ... buf .... bool owner ~C() { if (owner) { free(buf); } }
}
и добавить copy constructor и assignment operator чтобы передавать оwnership C (const C& copy) { this->owner = true; copy.owner = false; this->buf = copy.buf; .... } Проблема в const - его нужно дропнуть, но тогда не будет работать передача в верхние вызовы, так как будет создаваться временный объект типа reference и он обязан быть const.
Двач, есть ли хорошие способы как можно исследовать чужой код? Или хотя-бы подскажите как можно перекатываться по объявлениям и определениям. В данный момент я просто задрачиваю поиск, либо локально на компьютере, либо на гитхабе, в крупных проектах это делать очень долго и сложно.
>>1060934 Для этого в этой иде нужно создавать проект и муторно добавлять туда файлы, не считая других препятствий этих иде. Может быть есть софт, или способ как можно сходу начать исследовать код.
>>1060939 Это embedded, плюсовость должна быть минимальная, даже не с++98, просто C с классами. Нет никаких STL примочек не говоря уже о С++11 rvalue references и тп. А обойти мою проблему можно разными способами - делать deep сopy например и тд. Просто интересно есть ли другие альтернативы сделать вручную без примочек
>>1060954 тогда беда и нужно все усложнять. reference counting какой-нибудь. подразумеваю простой пример где последний owner всегда переживает всех предыдущих>>1060933
>>1060996 да компилятор нормальный, свежий гнусь. я имею ввиду общий стиль заточен под "си с классами" чтобы размер кода минимизировать. никаких string STL, exceptions, даже new желательно избегать. твой пример работает нормально с флагом -std=c++11, спасибо.
>>1061019 >чтобы размер кода минимизировать. С unique_ptr тащится какой-то шмоток кода, который тебе не нужен. Ты можешь сделать свой вариант на буле ручками. Никакого другого оверхеда там нет. Ты просто так написал: >Это embedded, плюсовость должна быть минимальная, даже не с++98, просто C с классами. Нет никаких STL примочек не говоря уже о С++11 rvalue references и тп. как будто там у тебя рили си с классами. rvalue reference - это указатель с другой семантикой, почему ты отмахиваешься от него?
>>1061037 Ну так то ты прав, раз оверхеда нет, надо попробовать. Отмахиваюсь инстинктивно так как привык по старинке. Байтоебство же в основном на голых сях и чуток плюсов для эстетики. В 99% случаях (прочитать сенсоры и кнопочки и включить пимпочку) вполне хватает. Здесь просто особый случай с кучей динамических буферов.
Ананасы, поясните мне за parallelism ts или как его. Что то, похоже, я нашел только то, что замутили reduce с измененной политикой выполнения и добавили аргументы в методы алгоритмов, так? И похуя мне это, если есть OpenMP?!
>>1061914 Ну это не то, чтобы оптимизация... Т.е. конечно это оптимизация, но не в том смысле чтобы луп раскрутить или функцию заинлайнить, а в том, что стандарт явно разрешает её делать.
Пачаны, как запустить лямбду в компайл тайме? без этого 38-я строчка не компилируется по понятным причинам потомучто лямбду до с++17 нельзя пометить constexpr, нужны воркараунды для 14ого стандарта.
>>1062135 дададдаадад, именно это, но там чтобы это работало - надо генерировать класс перед его использованием, у меня же всё без этого, не нужно никакого дополнительного кода перед использованием но в статик ассерт не засунешь без констэкспра https://ideone.com/84nJkZ
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Песенка - https://youtu.be/5EHPETP8lZ8
Прошлый - https://2ch.hk/pr/res/1036675.html