Вы видите копию треда, сохраненную 16 апреля в 15:55.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat
⚹ Для кусков кода: https://0bin.net/
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый тред: >>2938659 (OP)
Долбоëб, где ты 1000 постов в треде увидел, чтобы перекатывать? Репорт,
Хуй будешь?
... стот ли... к вам вкатываться... ?
зачем нужны указатели ? а указатели на указаители *? Если в методе класса выделяю на объект память я должен освободить память в этом же методе/классе или могу осободить ее из любого места программы? Если из любого, то все переменные что ли глобальные или вы где-то гетаете объект и удаляете его по ссылке/указателю?
это же все безумие, объяснитесь.
> зачем нужны указатели
Чтобы указывать на кусок памяти
> а указатели на указаители *?
Чтобы указывать на кусок памяти в котором лежат другие указатели
> Если в методе класса выделяю на объект память я должен освободить память в этом же методе/классе или могу осободить ее из любого места программы?
Конечно можешь в любом месте
> Если из любого, то все переменные что ли глобальные или вы где-то гетаете объект и удаляете его по ссылке/указателю?
Память может выделятся на куче, она может быть доступна глобальна
Почитай про стак и кучу, тогда более менее понятнее станет что происходит
Ну а про поинтеры, они просто в других языках программирования спрятаны от тебя, но также есть
>росто в других языках программирования спрятаны от тебя
1)Я правильно тебя понял, ссылка на объект в джаве это же просто указатель ⚹?
2)Сам указатель занимает тоже место в памяти и мы можем как бы указать на ссылку ссылкой через ⚹⚹?
3)Разыменование указателя ⚹ через & это же просто получение значения по указателю(оно же ссылка в других языках типа джава)?
4)А что мы получаем при разыменовании указателя на указатель ⚹⚹, просто указатель ⚹, или мы не можем из ⚹⚹р получить что-то через &р?
ты зачем, чертило, до бамплимита тред пересоздал? тебя кто просил? кто твой старший вообще, че это за хуета
Спокуху оформи, хуесос.
>А что мы получаем при разыменовании указателя на указатель ⚹⚹
Значение указателя на которую указыавет указатель.
>или мы не можем из ⚹⚹р получить что-то через &р?
Ничего не понятно. &p вернет тебе адрес указателя на указатель.
Круче плюсовика только плюсовик, который пишет ещё на нескольких языках и отменно знает пару-другую ассемблеров.
> ... стот ли... к вам вкатываться... ?
Тебе нет
> зачем нужны указатели ?
Чтобы иметь возможность работать с переменными.
> а указатели на указаители *?
Просто второй уровень косвенности
>Если в методе класса выделяю на объект память я должен освободить память в этом же методе/классе или могу осободить ее из любого места программы?
Кому должен? Ты можешь её освободить в любом месте, ты можешь её не освобождать, можешь освободить до инициализации, ты можешь даже освободить память одного объекта делая вид что там находится другой.
>Если из любого, то все переменные что ли глобальные или вы где-то гетаете объект и удаляете его по ссылке/указателю?
Так или иначе вся память твоего приложения глобальная, но области видимости есть.
> это же все безумие, объяснитесь.
Хаос прежде всего в голове.
В твоей же чистое поле флуктуаций. Вообще удивительно что ты можешь членораздельно общаться. Хотя письменность у тебя хромает.
Пески времени уже замели следы истерики зазнавшегсоя плюсовичка, когда его опускал Луговский на sql.ru
C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений. Человек, который хорошо в нем ориентируется — это хорошее зубрилко, а не хороший программист. Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современном мире ценится разве что только среди прыщавых сосок. Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
В общем, так: хороший программист обязан знать Си. Хороший программист может знать C++, но это не обязательно уже. Главное, чтоб C и C++ не были единственными доступными программисту инструментами — иначе это адски паршивый программист.
642x526, 0:25
Координаты точек находятся по формулам:
vectorPixelX = round(vectorUnitXscaleX - offsetXscaleX);
vectorPixelY = round(vectorUnitYscaleY - offsetYscaleY);
vectorUnitX, vectorUnitY - вектора реальных значений
vectorPixelX, vectorPixelY - вектора значений в пикселях.
scaleX, scaleY - масштабы по осям
offsetX, offsetY - отступ окна от начала координат в реальных единицах.
Проблема в том что точка не может быть между пикселями, поэтому при масштабировании увеличивается количество пикселей между точек, но увеличивается оно для каждой пары по разному. Из за этого появляются пробелы различной ширины. При маленьком масштабе, когда почти весь спектр черный и без пробелов, видно что почти нет пробелов, потому что масштаб соответствует расстоянию между точками и каждый следующий пиксель изображения закрашен, когда мы начинаем увеличивать масштаб расстояние между точками растёт и мы начинаем видеть больше пробелов. Так как я хочу видеть спектр полностью черным при любых значениях масштаба, я хочу закрашивать эти пробелы. Так же я не хочу обходить массив пол элементно и искать пары чьи дельты пиксельных значений больше либо равны 1 пикселю. Забыл сказать, значения в векторе X идут с определенным шагом, допустим, 23, 46, 69... Зная масштаб и шаг значений в векторе X можно вычислить ошибку шаг ошибки, то через сколько пикселей, появится следующий разрыв. Но вот как вычислить координату самого первого разрыва я не знаю, поэтому пишу сюда. Было бы очень классно если бы я знал, координату самого первого разрыва и зная шаг с которым идут разрывы, бы просто добавил в отрисовку точек, которые бы закрыли разрывы.
... и очень много унесли
Софт, который писался со стандартами c++11 сложно скомпилить под c++17, например, ибо даже throw вынесли нахуй
Тупо депрекейтнули, сказали, что нахуй не нужно
Я если что хотел собрать ogre-next с последним стандартом, в итоге меня компилятор нахуй послал
возможно, мне лучше стоило бы в /gd/ уйти
А блять, ты про спецификацию выбрасываемых исключений?
Ну так она изначально была идеей говна, ведь ничего не гарантировала.
Ну, оно вроде как работает
у опа грязный рот
>Тупо депрекейтнули, сказали, что нахуй не нужно
>Я если что хотел собрать ogre-next с последним стандартом, в итоге меня компилятор нахуй послал
Разрабам было лень обработать сырцы парой регулярок, чтобы привести к новому стандарту? Нахуй такой движок тогда.
Я разрабатываю алгоритм собственной растеризации на CPU и моя цель как можо меньше процессорного времени потреблять, если я буду рисовать лишние пиксели у каждой линии, то смысла тогда не будет. Моя цель состоит в том что бы найти самый первый разрыв, добавить туда точку, сделать шаг равный шагу между разрывами, добавить туда точку и повторять это пока до тех пор пока не заполню все разрывы в массиве точек.
Раздели ширину области отрисовки на количество полос. Если получилась ширина > 1, то у тебя есть разрывы. Далее уж надо думать в зависимости от того как ты что рисуешь. Если слева направо, то:
Округляем ширину линии вниз до целого
Складываем остатки от каждой линии, как только остатки > 1, то ширина этой линии должна быть +1.
Но это какая то хуйня. Не очень понятно что ты решаешь и зачем это делать руками, когда есть готовые решения.
Разрыв заполняется значением Y точки x - 1. То есть линия рисуемая на месте разрыва должна быть высотой с предыдущую.
> Мне хочется сделать так что разрыв заполнялся как на картинке.
> Разрыв заполняется значением Y точки x - 1. То есть линия рисуемая на месте разрыва должна быть высотой с предыдущую.
Ну я тебе вроде такой алгоритм и написал выше.
А красные линии это что?
float delta = (1.0/scaleX) - stepVectorUnitX;
Если патом разделить шаг в векторе Х на на ошибку получим количество пикселей между разрывами.
float countPixel = stepVectorUnitX/delta;
1.0/scaleX: 23.2558
stepVectorUnitX: 23.4375
detla: -0.181687
countPixel: -128.999
Вся задача состоит в том что бы найти координату первого разрыва, без поэлементного обхода массива значений
Как видите на картинке получилось 129 пикселей, что соответсвует округлённому значению countPixel
На картинке: слева от красной линии представлен вариант когда предыдущая линия меньше чем линия после разрыва, справа больше
Не надо тебе ничего искать. Как только у тебя ошибка(дельта) накапливается больше единицы - рисуешь линию толще на пиксель и единицу вычитаешь.
Задумка была такая.
Ищем самый левую точку которая попадает в окно просмотра, и самую правую точку которая попадает в окно просмотра. Как на первой картинке.
Производим преобразование координат с startIndex по
endIndex, как на второй картинке.
Получаем вектор точек в пиксельном пространстве. В этом векторе есть разрывы которые я хотел бы заполнять по вот так
>>013677
То есть добавлять точку с Y равную значению Y у точки X - 1.
Да можно просто следить за ошибкой, и когда ошибка станет >= 1 добавлять точку. Но тогда в цикле придётся писать if(error >= 1). А я хочу написать алгоритм с минимальным количеством if'ов в цикле
Только я во второй картинке не то сфоткал, там vectorUnitX и vectorPixelX должны быть
Там ничего пока особо нет, вся идея пока в голове, вот застопорился на поиске начала разрыва. Могу скинуть код виджета где всё отрисовывается
https://pastebin.com/drVt6NFt
P.S. paintEvent забыл
void Spectrum::paintEvent(QPaintEvent* event)
{
QPainter painter;
painter.begin(this);
painter.translate(0, height() - 1);
painter.scale(1, -1);
painter.setPen(QPen(Qt::black, 1));
for(int i = 0; i < vectorPixelY.size(); i++)
{
painter.drawLine(vectorPixelX, 0, vectorPixelX, vectorPixelY);
}
painter.end();
}
Вечером попробую что нить сделать
Захотелось освоить какой-нибудь хардкорный низкоуровневый язык, знакомый одолжил книжку по C Стивена Прата.
Есть опыт в программировании, есть опыт в си (в вузе 2 семестра изучал, но нихуя не помню кроме указателей на указатели)
Вопрос: насколько сложно будет перейти на с++, при желании? Насколько они отличаются? Есть ли смысл в си? Мой выбор обусловлен только наличием няшной бумажной книжечки.
Ахуеть, микролахта
Скорее всего ты не найдешь работу будучи чисто сишником, для меня это важнейший фактор выбора плюсов
Если не лень - используй. Чаще будешь думать о том, а нужен ли тебе тут инт вообще и влезет ли в него.
>Разрабам было лень обработать сырцы парой регулярок, чтобы привести к новому стандарту? Нахуй такой движок тогда.
Ну тыг графических опен сурсных графических движков с гулькин хуй, а огр со старым стандартом единственный более менее работающий без всяких изъёбов (про bgfx шарю, но он тупо _mem у меня в нулину ебашит при загрузке шейдера), потому придётся страдать
Ну, у меня bgfx тупо не может свои же примеры для демонстрации запустить нормально, лол
Может это проблема из-за невидии, не ебу, может я как-то не правильно собираю (но при этом оно вообще собирается)
Ой бля, не при загрузке, а при создании
Собственно, если бы я искал к себе в проект программистов, то это были бы Си программисты, не осилившие и ненавидящие С++.
И они писали бы на С++ и полюбили бы его.
Звучит как бред? А дело в том, что С++ мультипарадигменный язык. На нём можно писать и как на языке очень высоких абстракций, так и опуститься на уровень железа. Поэтому сишные программисты писали бы на С++ в той парадигме, которую требует проект. И писали бы они без костылей, но и без велосипедов.
Уже давно выбрано за тебя size_t
Это не совсем так, если быть точным.
>А нахуя нужен С++ тред?
Залетные чертилы выясняют для чего нужен указатель на указатель. Местные омеганы радостно отвечают.
>Веб-макаки мне не соседи.
По крайней мере они не являются твоими прямыми конкурентами, отбирающими у тебя краюху хлеба. В отличие от "коллег" и вкатывающихся в этом итт треде, между прочим, которые и являются твоими прямыми конкурентами за место под солнцем.
Одно из важнейших преимуществ с++ перед си. Хотя и на си можно хуярить кодогенерацию на макросах, к примеру. Что довольно полезно, тк ухудшает читательность кода, делает невозможным инструментальную отладку и прочее, что очень хорошо откидывает голодных конкурентов. Ну или эмулировать ооп, хуяря собственные vtable например. Ну или делать собственную компонентную модель на структурах с указателями на фии и pinvoke. Ну или хуярить недо-adt на войд звездочка.
Но с++ все равно нет равных в софтварной обфускации. Это очень хорошо. Потому что вкатуны не нужны, они должны сдохнуть на вахте, сдохнуть в окопе на бомбасе, сдохнуть от передоза в бабкиной хате своего мухосранска. А не пытаться вкатиться в индустрию. С++ тоже в конечном итоге должен сдохнуть. Стать эзотерическим языком для развлечения богатеньких челов.
Вот такие хуесосы и сидят годами в оборонке на гос зарплате. Годами неспособные открыть ебаный учебник чтобы увидеть нужные формулы, изобретая свою какую то хуету, и более того спрашивая "как зделоть" на рандомном форуме.
>Стивена Прата
что сказать
ты сделал первый маленький шажок и уже наступил на кучу коровьего навоза
возможно тебе не стоит начинать заниматься программированием а продолжить мести улицы или грузить палетты в пятерочке или чем ты там занимаешься
для того чтобы возвращать указатель из функции
это материал первого полугодия первого года любого вуза где учат на программистов
И заменят кресты чистые си, ибо самые стабильные по стандарту...
на кого ты так
За это стоит поблагодарить опхуя, перекатившего до 1000 постов.
2ch.ru
Дохуя чего не хватает
В общем я глянул, заставил это работать, и вот что могу сказать:
1) интерфейс твоей хуйни - кал. Какого хуя ты закладываешь то, что внутри рисовалки генеришь какие то вектора? О какой производительности здесь вообще речь?
Ты должен принимать по указателю\ссылке массив константного размера и из него читать значения.
2) Генерится непонятно что. Напиши сначала генератор нормальных данных.
3) Эту всю хуйню если ты действительно производительности хочешь нужно писать на OpenGL, а не внутри ПейнтИвента. Это вообще какая то кринж комедия.
https://github.com/alandefreitas/matplotplusplus
Короче щас выглядит будто ты не понимешь что ты делаешь зачем и почему.
лучше подумай о том что челик уже два года сидит-пердит в своем нии и получает за это зарплату
тебе достаточно немного подумать, сделать правильный запрос в гугл и ты увидишь нужный мат аппарат на выборке на первой странице блядь
включая и необходимый алгоритм из вычмата
1280x720, 0:47
У меня есть нормальный спектр который на вход принимает fft и довольно быстро перерисовывает(быстрее чем готовые решения) изображение. Но код от него я не дам.
То что я тебе скинул это зародыш попытки заново переизобрести спектр. Что бы был ещё оптимизированней. У меня в голове есть наброски и во время реализации возникли трудности, в виде решения проблемы разрывов и несоответствия математической формулы линии брезенхема и алгоритму брезенхема без умножения. Ну если алгоритмом брезенхема можно пренебречь, и использовать DDA алгоритм и при этом я все не выйду за рамки намеченного пути. А вот если забить хуй и обходить массив поэлементно на поиск разрывов, то это уже будет далеко о того идеального спектра что я представлял. С OpeGL не всё так просто. Я брал обычный шейдер который отрисовывает точки и соединяет их линиями. Результаты были не очень впечатляющими, при количестве точек 1024, нагрузка на процессор при рендеринге на CPU была 26%, а на GPU - 16%. Это при 30 кадров в секунду. Да прирост есть, но я думал будет больше. Если писать сректр на OpenGL там тоже не плохо бы посидеть и придумать собственный шейдер.
Ещё раз повторюсь то что я тебе скинул это так визуализация мыслей и отдельных решений, это далеко на окончательный вариант. Я думал тебя интересует природа разрывов и ты хотел посмотреть на неё поэтому я тебе и скинул.
У меня вроде бы там под вектор один раз память выделяется, и патом только перезаполняется, разве нет? Даже если не так, то опять это вообще даже не заготовка, так болванка
Так а что природа разрывов, ты когда генеришь линию четко указываешь где ее пиксели, вместо того чтобы при отрисовке вычислять где она должна быть.
Ну хорошо природа разрывов так то понятна, предсказание в каких пикселях они появятся меня интересует
Понятно ты просто заполняешь квадрат, до ближайшей следующей точки. Но когда я найд решение поиска точек разрыва я буду делать, не так, я буду по получившимся точкам строить полигон, и в ручную массив изображения закрашивать нужным мне цветом, потому что как я понял Qt делает это очень медленно. Потому что разрыв на большом масштабе может быть больше одного пикселя, и тогда мне придётся ещё писать цикл для заполнения разрыва. А я хотел бы добавить точку в начале разрыва, патом все получившиеся точки соединить линией брезенхема, а патом все что ниже линии брезенхема заполнить нужным мне цветом
Давай так:
У тебя есть линия с толщиной 1 в пикселе 0.
И линия с толщиной 1 в пикселе 2.
Как посчитать ширину разрыва и откуда он начнется?
Зачем тебе линии брезенхема при отрисовке вертикальных линий?
В куте для рисования есть классы по типу QGraphicsScene. И да, она в целом медленная. Она затачивалась под отрисовку окон, а не графиков в 30фпс.
Я пока могу только сказать формулу ошибки которая накапливается с каждой отрисованной линией.
Если взять обратное число от масштаба по оси X и вычесть шаг значений в векторе X, получим ошибку на каждый пиксель изображения.
float error = (1.0/scaleX) - stepVectorUnitX;
Здесь мы берём обратное число от масштаба и узнаём сколько единиц у нас в одном пикселе. Вычитаем шаг значений в векторе X, получаем на сколько разнятся шаг значений в векторе X и сколько в одном пикселе единиц.
Если патом шаг значений в векторе X разделить на эту ошибку то получим расстояние между разрывами. Но как найти точку самого первого разрыва, что бы патом в цикле заполнить все разрывы, по формуле: первый разрыв + шаг между разрывами
Ну всё это я писал вот тут
>>013685
Также у меня там ещё будет аппроксимация, тоесть если несколько точек попадает в один пиксель, то рисовать я буду самую высокую из них.
>>016615
Здесь на видео как раз таки сделана эта аппроксимация. Но минус спектра с видео в том что там всё средствами Qt рисуется и поэтому во первых это медленно, во вторых Qt не умеет рисовать линии нормально, там в конце или в начале линии лишние пиксели появляются. Я так понял там какой то корявый алгоритм DDA. В багрепортах Qt до сих пор лежит иссуя об этой проблеме, ещё не пофиксили.
Ещё один минус спектра из этого видео в том что что бы заполнить разрывы мне приходится обходить весь массив точек и смотреть
(vectorPixelX - vectorPixelX[i - 1]) > 1
Если больше то значит разрыв и надо заполнить пустоту.
И да рисование полигоном быстрее чем рисовать линии вертикальные как показала практика
Выглядит, кста, как говно. Почему ты скейлишь график, а не диапазон визуализации? В любом аудио-редакторе никакие графики не скейлятся, блять.
> Понятно ты просто заполняешь квадрат, до ближайшей следующей точки. Но когда я найд решение поиска точек разрыва я буду делать, не так, я буду по получившимся точкам строить полигон, и в ручную массив изображения закрашивать нужным мне цветом
Ну отрисуй линию тем же drawline, а область уменьши и залей любым цветом. Что в этом контексте значит делать в ручную и зачем?
> Потому что разрыв на большом масштабе может быть больше одного пикселя, и тогда мне придётся ещё писать цикл для заполнения разрыва.
Приди к тому, что у тебя не линии, а прямоугольники, с минимальной толщиной в 1 пиксель. И рисуй сразу прямоугольники, а не линии.
> А я хотел бы добавить точку в начале разрыва,
Мы говорим о двумерной плоскости, что здесь значит в начале разрыва? Линию?
> патом все получившиеся точки соединить линией брезенхема, а патом все что ниже линии брезенхема заполнить нужным мне цветом
Тут тоже не понял. Если ты хочешь рисовать линии от точки до точки - рисуй их сразу. Зачем тогда вертикальные от 0 до Y рисовать?
Все так же, рисуй сразу полигоны. За контур отвечает QPen, за заполнение QBrush.
А вообще идея собрать свой рендерер внутри рендерера(Qt сама отлично умеет рисовать объекты) очень странная.
А с чего ты решил что проблема в отрисовщике кути, а не в твоих алгоритмах?
Построй флеймграф, оценить перф.
И если тебя уже не устраивает скорость работы, зачем ты опять Qt взял?
Не было ни единого разрыва, а теперь есть.
Ебать ты шиз конечно, ещё и семёнишь.
Оно было бы грустно, если бы не было так смешно.
Посты твои, к сожалению, как под копирку.
> куча конкретных терминов + салат из слов, описывающих дикие бессмысленные проблемы, возникающие при комбинации этих терминов + как будто бы вопрос аудитории
Ты пидарас. Слышишь? Ты пидараска, брат!
>>016020
Какой, в жопу, НИИ? НИИ по хлебанию мамкиного борща на пенсию по шизе, если смог оформить. Брат хватает по верхам и не осиливает что-то сложнее основ. Когда сталкивается с концепциями посложнее, то отбрасывает их по надуманным предлогам. Оптимизатор существующих N log N решений мамкин блядь.
>>016708
Нахуй ты это ищешь? Что ты думаешь патом лол с этим делать?
>>016728
В целом медленные и неоптимизированные твои когнитивные способности брат. Отсюда тяга всё вокруг оптимизировать и ускорять, когда проблема-то в тебе, в первую очередь. Отсюда же навязчивое желание изобрести что-то новое больше лучше оптимизированное.
— Ну что сына, когда на работу-то устроишься?
— Мааам я делаю гениальные вещи просто никто не понимает, у меня проблема решается разрывов, вот решу разрывы и сразу сделаю максимально оптимизированный в целом не медленный алгоритм отрисовки
— Я ведь уже пожилая. Как ты себя будешь кормить?
— Кормить себя для быдла в продашкане! Я буду творить и бесплодно изобретать бесполезную хуйню, вместо того, чтобы заботиться о своем будущем и помочь тебе в старости. Ведь я умный и не быдло, а вы все пидараски меня не понимаете.
Тьфу бля на тебя, шиз. Реально запомоенный. Пей таблетки и пиздуй нахуй отсюда, долбаёб.
> Также у меня там ещё будет аппроксимация, тоесть если несколько точек попадает в один пиксель, то рисовать я буду самую высокую из них.
А зачем? У тебя же изменение цвета идёт от высоты линии. То есть, оверлаппинг линий тебя вообще не пугает. И можно просто их рисовать в каком угодно порядке в один пиксель.
Ты отметил посты минимум двух разных людей, шиз.
> Нахуй ты это ищешь? Что ты думаешь патом лол с этим делать?
А тебя это ебать не должно
>>016785
> То есть, оверлаппинг линий тебя вообще не пугает.
Как раз таки пугает, на отрисовку ненужных линий тратится время.
Я помню свой спектр из этого поста >>016615 до апроксимации и после, разница в нагрузке колоссальная
>>016781
>А с чего ты решил что проблема в отрисовщике кути, а не в твоих алгоритмах?
На картинках разница между рисованием линий с помощью алгоритма брезенхема и алгоритмом Qt. Там где собственный брезенхем, там лучше рисуется.
Третья картинка, если бы я рисовал с помощью брезенхема, эту же линию, то там был бы пиксель белый на углу, но Qt нормально линии рисовать не умеет, и пикселя там нет.
>И если тебя уже не устраивает скорость работы, зачем ты опять Qt взял?
Ну вот как раз таки собираюсь переехать с растеризации средствами Qt на собственную растеризацию спектра
Вообщем что бы думать над проблемой нахождения координаты самого первого разрыва вы мне предлагаете свои решения, которые ничем не лучше будут чем мой спектр >>016615
Насколько я помню, КуПейнтИвент перерисовывает всю область виджета.
Тогда вычисляй ошибку и дорисовывай линию, в чем проблема то?
Сделаю вечером через ошибку, но какая разница, визуально результат будет одинаковый.
>Насколько я помню, КуПейнтИвент перерисовывает всю область виджета.
Ну перерисовывает, да.
>>013735
>Да можно просто следить за ошибкой, и когда ошибка станет >= 1 добавлять точку. Но тогда в цикле придётся писать if(error >= 1). А я хочу написать алгоритм с минимальным количеством if'ов в цикле
В идеале вообще без if'ов в цикле.
Что бы следить за ошибкой надо начинать откуда то следить, а начинаться следить за ошибкой надо как раз так с момента первой ошибки, то есть с первого разрыва
блять анон, какой же ты крутой ебать, это то что мне нужно, как сделать чтобы твои посты не проебланились? у тебя есть тг?
>Я брал обычный шейдер который отрисовывает точки и соединяет их линиями. Результаты были не очень впечатляющими
Еще бы они были впечатляющими. Тебе вообще все надо рисовать в фрагментном шейдере. Т.е. рисовать весь прямоугольник со спектром, и для каждого пикселя считать цвет точки.
> С OpeGL не всё так просто
так возьми куду, это максимально нативный для неё процесс сравнивать рядом лежащие элементы массива и она запросто может выдать тебе разность соседей
что то я не понимаю?
>Какой, в жопу, НИИ?
Он два года сидит в НИИ, на нормальной для джуна зарплате. И вместо того чтобы просто открыть нужную книжку взяв готовые мат формулы и соответствующие им алгоритмы из вычмата, пытается че то выдумать из своей головы. И нихуя у него не получается само собой. Но чукча не читатель, чукча писатель. Программисты же пишут код, а читают книги только задроты.
Другая проблема в том куда смотрят его старшие товарищи, в принципе у него же должен быть что-то вроде куратора, который ему скажет - заебал страдать хуйней, или открывай такуюто книгу на такой странице и реализуй алгоритм раз ты не способен на самостаятельный поиск.
>Как нарисовать спектр без разрывов
для начала посоветую задать ровно тот же вопрос гуглу или чат джипити
Серьезно? Тебе, наверное, виднее, но я в нём вижу поверхностного шизика и не более того. Ор дикий если эта вафля действительно место научного сотрудника занимает.
Хуесос плохо понимает вообще, с чем он работает. Там столько ляпов в его высерах, фактических, что я орал и хрюкал, когда читал. Например >>3015981 →, там такая каша, что надо ссаными тряпками гнать из любого института. Хуесос не только некомпетентен, но ещё и крайне высокого мнения о себя, одно вот это чего стоит ор дикий бля
>>016843
>>016883
давно так не залупался
Уровневость языков субъективное понятие
Потому что те, кто реально на асме пишут, не особо любят с сырыми данными работать. Зачем себе голову ломать, если можно проще сделать? Так-то с макросами можно сделать вполне высокоуровневый язык.
>asm это высокоуровневый язык?
Это смотря какой. Макрософт очень красивый ассемблер генерит, а на каком-нибудь недомелкоконтроллере, там можно кукухой поехать, если глубоко вникать.
>Потому что те, кто реально на асме пишут, не особо любят с сырыми данными работать. Зачем себе голову ломать, если можно проще сделать? Так-то с макросами можно сделать вполне высокоуровневый язык.
Если что, С и С++ теперь считаются низкоуровневыми.
> С++ теперь считаются низкоуровневыми.
Буквально язык, на котором можно писать что угодно и как угодно.
Язык, который даёт неограниченные возможности, в том числе и сорок способов выстрелить себе в ногу.
Счиьается необучаемыми дибилами, разве что. Что плюсы что си - ящыки высокого уровня.
Такое восприятие давно устарело. Это в 80-х писали программы на ассемблере, компьютеры были простые и программы тоже простые, вот и си и далее считались высокоуровневыми. А сейчас компьютеры слишком сложные, писать на ассемблере нереально, кроме убогих хеллоуворлдов, так что самым низким уровнем является си, то есть самым низким уровнем языка на котором реально писать рабочие программы.
Кстати видел живого долбоеба пишущего на ассемблере, загугли "manhunter блог" и увидишь ебаната который только пальчиком ковыряется в трех строчках кода уровня "лаба1", не программист, а слесарь ковыряльщик-затыкальщик дырок.
Ты пишешь, что си и кресты это ЯП высокого уровня, но если в целом смотреть, то из кроссплатформенных чистый си самый низкоуровневый.
А про ассемблер вставка потому что у каждой архитектуры свой набор команд.
>А про ассемблер вставка потому что у каждой архитектуры свой набор команд
Да ладно. Вот открыл по приколу последнюю свою прогу, как стояло по дефолту 386, так и не менял никогда, нафиг не надо, ведь прога нормальная, а не вычислялка сжигадка проца. Нет смысла даже ставить 486, только совместимость испортишь, а выгоды нет. Так что и на ассемблере в большинстве случаев можно писать под 386 и не париться, пойдет везде.
Ты тот самый хост www.manhunter.ru? Чего обиделся то, сразу перешёл на оскорбления?
Ты разговариваешь с тяжёлым шизом, который любит сыпать бессвязными терминами, разговаривая сам с собой. Может он так остужает горящую от непростых реалий жопу. Не знаю, чему тут удивляться. Я сначала тоже повёлся, когда он начал про обработку сигналов наваливать в соседнем треде (и всё ещё наваливает), пока не понял, что это шезлонг. Ему никак не помочь, потому что он уверен что с ним всё в порядке.
Не думал что для тебя это оскорбление. Врятли таких как ты вообще можно задеть.
Бля какое же ты шизло
>А какой смысл писать на asm в 2k24, если компилятор сам все супер оптимизирует
Только на десктопе, там компиляторы вылизаны до максимума. Под микроконтроллеры часто на асме пишут, потому что стоковые говнокод выдают, плюс на асме проще писать проги, где важны тайминги до такта - там по инструкциям сразу видно сколько времени кусок кода будет выполняться.
ну как вылизаны, они работают без ошибок, но далеко не всё оптимизировано
handle процесса получал через PROCESS_ALL_ACCESS
Оба процесса запущены одним юзером, оба elevated
ProcessExplorer показывает пустое поле Protection у процесса, в котором выделять память пытаюсь.
У экзешника есть цифровая подпись, перезаписал ему
peHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size = 0;
peHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress = 0;
Не помогло, в чем может быть еще проблема?
Не помогло в том плане, что всёеще получаю 5 ошибку.
Сертификат в свойствах экзешника после перезаписи не показывается
Новых языков программирования нет, есть скриптовое говно. Скрипты не программирование, ибо программирование это управление железом, а скрипты работают в виртуалке, это разновидность офисного софта как 1с. Код который пишут без оглядки на железо это не программа, а скрипт, просто другая парадигма в принципе.
Для меня критерием высокоуровневости является наличие абстракций, которые не понимает машина. Вот есть в С функции, машина это не понимает, для нее есть всякие колл и джампы.
вкатывальщик в тындекс
на процессе других программ отрабатывает итак отлично, а тут какой-то хитровыебаный попался
АХАХАХ, есть такое, а что поделать, стажировок нормальных нет, никуда не берут, здесь хотя бы до командного дошел =)
Ну например:
Есть две строки.
Надо за линию дать ответ, можно ли 1 заменой/вставкой/удалением получить из одной другую.
Другая:
Дано массив из К уникальных чисел. Нужно посчитать количество корректных бинарных деревьев.
Бинарных деревьев поиска*
Не алгоритмические, а скорее по самому языку и около темы
У локальной переменной b адрес должен быть меньше, чем у а, потому что стек идет вниз. Но по факту он больше. Сегмент текста и данных по факту находится в старших адресах. При чем сначала идет текст, а потом данные.
Компилер пытается, хотя и не обязан этого делать, поскольку это кресты, чтобы объявленные переменные в памяти подряд шли. Это на случай union struct. То, что ты объявил a и b, это не значит, что ты что-то запушил в стек. Сегменты где хочешь могут вообще оказаться при релокации, операционка еще и адреса рандомно выберет, чтобы вирусописателям посложнее данные было искать. Эта хуйня как-то называется и где-то отключается.
> Где же правда?
> У локальной переменной b адрес должен быть меньше, чем у а, потому что стек идет вниз
Вообще не обязательно и платформозависимо. Надо читать спеки платформы, для х86 растет вниз.
https://stackoverflow.com/questions/664744/what-is-the-direction-of-stack-growth-in-most-modern-systems
Алгособес я то прошел. Мне интересно какие задачи плюсовые могут дать. К примеру на джаве собесе могут дать задачу реализовать безопасный синглтон. Вот какие задачи такого формата могут дать на плюсах?
> Надо за линию дать ответ, можно ли 1 заменой/вставкой/удалением получить из одной другую.
> Другая:
> Дано массив из К уникальных чисел. Нужно посчитать количество корректных бинарных деревьев.
Кашмар, это прям хард задачки с литкода решать придется
В Яндексе ещё и на бумажке это всё делать заставят?
мимо проходил, скоро тоже буду работу искать
Я на стажера иду, у меня была одна техническая секция и одна алгоритмическая. Теперь у меня идут командные собеседования.
Не, решаешь в их блокноте специальном. Код не компилируешь. Харды дают, но не на первом собесе.
Ааа.
Все, я тебя понял.
Командные - это просто общение с командой. Тебе надо себя презентовать, что ты умеешь, и тд.
Но там тоже может быть алгосы. Меня такая хуйня подъебала, пришлось пару минут поступить
Да, там могут и алгосы дать, и просто о жизни поговорить. Но на последних командных собесах меня вопросами душат, я просто ебал их в рот. Я не бездельник, даже 2 первых этапа прошел, почему они не могут просто взять меня на работу?!? НА СТАЖИРОВКУ!!! СТАЖЕРОМ!!!! СУКА.
А что там за вопросы? На знание языка?
Возможно просто смотрят как ты реагируешь на ситуацию когда нихуя не знаешь и нихуя непонятно.
Я пол года работаю, до сих пор нихуя не понятно.
В этом и дело, что разные. Вот была команда по плюсам, начал про умные указатели (легкий вопрос), виртуальный деструктор (тоже легкий), но он не остановился, начал спрашивать про тесты и многопоточку на плюсах. А я ебу что ли, на плюсах продуктовый код никогда нормально не писал, только синтаксис знаю. Про память спросил, про её выделение, не помню точно какой вопрос, помню что неправильно на него ответил. И ЭТО ПРИ ТОМ, ЧТО Я РЕШИЛ ЕГО ЗАДАЧУ))))))) Задача была вот эта https://leetcode.com/problems/string-compression/description/
Я конечно понимаю, что можно лучше знать язык, но блять, я иду на стажера. Быть стажером и знать все нюансы - это странно, нахуй тогда на стажировку идти, почему не пойти сразу джуном? хм.....
Самое дебильное - о команде ты узнаешь нормально только на собесе, поэтому подготовиться к собесу физически не можешь. Если к алгособесу подготовиться было легко, я знал примерно, что там будет, то здесь так не работает.
Так к ним и не надо готовиться по сути. Они спрашивают от балды что считают важным.
По сути ты уже прошел, осталось команду найти, которая тебя решит принять.
Хуево что единственный вопрос который ты заруинил ты не запомнил.
пробовал, там вопросы на уровне "какой размер в байтах у int" и "напишите fizzbuzz". Может я плохо искал, буду рад, если кинешь годноту.
За низкую зп.
А какие там ща вилки и какие медианные?
Рисуешь на экране? Никогда не делай так. Рисуй в буфере, затем средствами графической системы копируй в окно. Выжмешь максимум скорости.
Используй. Сэкономишь силы и время при порте программы на другую платформу или разрядность.
Это не про красоту, это про переносимость.
Вот планы у тебя правильные. Нужна скорость - не откладывай эти планы на будущее.
Тетрис.
Напиши нормальные строко/квадраты как у заводчанина, но на нормальном опенгл/вулкане, а не цпу кути.
А куда идти новичку? На всех других стажировках ебать какая конкуренция. На джун позицию никуда не берут. Вот и остается Яндекс. И давай честно, зарплата нормальная, она невысокая, она нормальная, вот стажером в МСК предлагает от 80к до 120к, это мало? Если да, значит я реально нищук
вкатывальщик в тындекс
Подскажите пожалуйста, почему после прямого вызова деструктора я все еще могу менять поля объекта и вызывать при нем методы? Это компилятор страхует?
struct S {
S(int xx) : x{ xx } { }
int x{ 0 };
void print() { std::cout << "I'm here!\n"; }
};
int main()
try {
S x = new S(10);
std::cout << x->x;
x->~S();
x = S(20);
x->print();
std::cout << x->x;
все значки полетели блять. Должно было быть вот так:
S x = new S(10);
std::cout << x->x;
x->~S();
x = S(20);
x->print();
std::cout << x->x;
Я не знаю почему звездочка пропала, там должно было быть вот так:
*x = S(20)
раскрываю указатель и меняю значение объекта
Чел, у тебя все звездочки полетели нах, поэтому не поймешь ничего. После вызова деструктора, ты можешь что хочешь делать. Можешь еще раз деструктор вызвать, лол. Весь вопрос, в какой момент тебя это приведет к Segmentation Fault. А если не приведет, то еще хуже - жесткий баг останется незамеченным. Если хочешь предотвратить повторный вызов деструктора, то наследуйся от класса, который статиком hash_map объектов и запоминает, какие из них уже деструктнуты. У меня подобное было в гуе, когда onclick на кнопке уничтожал ее нах, а этого дефолтный mouseup пытался ее отрисовать с отжатом состоянии, хотя на ней уже и деструктор и даже delete на указателе отрабатывали. Ничего лучше, чем вести таблицу объектов, не придумал.
Я действительно лалка.
Возможно у тебя тут лайфтайм экстеншион.
Но я бы не надеялся. Напиши деструктор и посмотри когда что у тебя умирает.
Так падажжи.
А что ты хотел?
Ты же не очищаешь память. Ты вызываешь деструктор. Память никто не освобождал.
Ебанько что ли? Тут никто не пишет код за деньги. А графические API - это уровень умения работать с qt, любой дебил сможет, соответственно никто тебя только за это не возьмёт на работку. Тебе как минимум надо с математикой быть знакомым и уметь в HLSL, т.е. в сишку.
Если бы ты не ответил былр бы ок. Но сейчас я в замешательстве. Это такой тролинг тупостью?
Птр = {} нормальный синтаксис, гцц, кланг, мсвц его правильно воспринимают.
Это прав с про отсутсвие работы, но абсолютно не прав с тезисами, вообще не понимает что несет.
Не совсем графика, но в каком-то смысле да. 3D CAD. За полгода набрали около 10 джунов.
>>016782
>>016785
>>016781
>>016677
>>016406
Я тут подумал и понял что шаг в векторе у меня равен
Частота дискретизации/размер бпф = 48000/2048 = 23.4375
Если мы будем переводить это в дискретную систему координат, с округлением в обе стороны, то при масштабе равном 1, по формуле округлить(i x 23.4375) * масштаб мы получим следующий ряд:
0, 23, 47, 70... Уже на третьем элементе у нас разрыв! Между первым и вторым у нас разница 23 пикселя, между вторым и третьим 24. Дело в том что у нас накапливается ошибка в дробной части, и когда эта ошибка станет больше 0.5, то из за округления шаг между точкам станет на 1 пиксель больше чем ожидалось.
Чуть чуть погуглив нашёл такое понятие как не прерывная дробь или же цепная дробь
https://ru.wikipedia.org/wiki/Непрерывная_дробь
Там же описана проблема календаря
Это как раз таки то что мне надо, там тоже разрывы возникают из за накопления ошибки из за того что год на цело не делится 365 дней, нам приходится компенсировать разрывы високосным годом.
Только вот я не знаю что с этой информацией делать. У меня не переносимость математических знаков и формул я когда смотрю начинаю паниковать. Вот там представлен ряд дробей для компенсации календарной ошибки. Как мне сделать нечто такое же для спектра?
На первый взгляд можно поработать с дробной частью 23.4375
Дабы узнать когда накопиться ошибка больше 0.5, надо узнать сколько раз 0.4375 помещается в 0.5. 0.5/0.4375 = 1.1428...
То есть через 1 шаг будет накапливаться ошибка больше 0.5, что так и есть:
0, 23, 47, 70, 94, 117
Как видим
23 минус 0 равно 23
47 минус 23 равно 24
70 минус 47 равно 23
94 минус 70 равно 24
117 минус 94 равно 23
и т.д.
Но это всё при масштабе равном 1. Если же масштаб не равен 1, а например 0.043, то 23.4375 умножаем на масштаб 0.043 получаем 1.00781
Дробная часть равна 0.00781. Если разделить 0.5 на 0.00781, получим 64, что почти соответствует первому разрыву на картинке. На картине 65 пикселей. Но это ещё удачный случай, при разных масштабах ошибка тоже разная
>>016782
>>016785
>>016781
>>016677
>>016406
Я тут подумал и понял что шаг в векторе у меня равен
Частота дискретизации/размер бпф = 48000/2048 = 23.4375
Если мы будем переводить это в дискретную систему координат, с округлением в обе стороны, то при масштабе равном 1, по формуле округлить(i x 23.4375) * масштаб мы получим следующий ряд:
0, 23, 47, 70... Уже на третьем элементе у нас разрыв! Между первым и вторым у нас разница 23 пикселя, между вторым и третьим 24. Дело в том что у нас накапливается ошибка в дробной части, и когда эта ошибка станет больше 0.5, то из за округления шаг между точкам станет на 1 пиксель больше чем ожидалось.
Чуть чуть погуглив нашёл такое понятие как не прерывная дробь или же цепная дробь
https://ru.wikipedia.org/wiki/Непрерывная_дробь
Там же описана проблема календаря
Это как раз таки то что мне надо, там тоже разрывы возникают из за накопления ошибки из за того что год на цело не делится 365 дней, нам приходится компенсировать разрывы високосным годом.
Только вот я не знаю что с этой информацией делать. У меня не переносимость математических знаков и формул я когда смотрю начинаю паниковать. Вот там представлен ряд дробей для компенсации календарной ошибки. Как мне сделать нечто такое же для спектра?
На первый взгляд можно поработать с дробной частью 23.4375
Дабы узнать когда накопиться ошибка больше 0.5, надо узнать сколько раз 0.4375 помещается в 0.5. 0.5/0.4375 = 1.1428...
То есть через 1 шаг будет накапливаться ошибка больше 0.5, что так и есть:
0, 23, 47, 70, 94, 117
Как видим
23 минус 0 равно 23
47 минус 23 равно 24
70 минус 47 равно 23
94 минус 70 равно 24
117 минус 94 равно 23
и т.д.
Но это всё при масштабе равном 1. Если же масштаб не равен 1, а например 0.043, то 23.4375 умножаем на масштаб 0.043 получаем 1.00781
Дробная часть равна 0.00781. Если разделить 0.5 на 0.00781, получим 64, что почти соответствует первому разрыву на картинке. На картине 65 пикселей. Но это ещё удачный случай, при разных масштабах ошибка тоже разная
QtCreator
VSCode + clangd + CodeLLVM + CMake.
Но вообще ты бы задачу назвал. CLion даёт выбрать тулчейн, приятную тонну плагинов и остальные фичи IDE от JB.
VS имхо для разработки только под Винду. В нём удобно настраивать проект по личному опыту. Указать где у тебя зависимости и всё такое без ковыряния доков того же CMake. Опыт опытом но исходя из твоего вопроса: его у тебя нет. Ну и все настройки сейвятся в файле проекта, так что переносимость есть.
А ещё именно под него заточен тот же компилятор Intel и их oneAPI.
Короче, инструмент выбирают под задачи. Хуле нам тебе дилдо советовать если тебе гвоздь забить а не в жопу себя ебать?
>CodeLLVM
*CodeLLDB
быстрофикс
К слову, мне очень нравится как легко вкорячивается Clang и периферия в Винду. Не то что GCC. И при этом функционала больше. Тут тебе и clangd, и clang-format, и прочее.
> легко вкорячивается Clang и периферия в Винду
А шланг хоть сможет собрать код виндовых SDK?
Всё ещё быстрее и экономичнее чем VS Code, который вообще на JavaScript, а не просто Java.
>>023000
> clangd
Не умеет в кучу важных вещей, например даже в базовые фичи типа переход к реализации, или поиск ссылок. А у майкоского экстеншена даже синтаксис С++20 не реализован полностью.
> В нём удобно
В студии каждый час IntelliSense падает и чинится только перезапуском студии, пиздец заёбывает. Или бывает пишешь код и хуяк он отъёбывает, подсветка синтаксиса пропадает и оно просерается только через пару минут. И гуй уже лет 5 не развивается никак, даже нормальной поддержки нейронок нет, только Копилот кое-как костылями пришили через очко. Из настроек там разве что гуй проектов для MSBuild неплох, остальное кал, даже панельки аутлайна нет нормальной.
> под задачи
Задача - писать код и не страдать от IDE.
>>023002
> Clang
Его разве что под mingw имеет смысл использовать. С майковским тулчейном боль сплошная, а из SDK лезут тысячи варнингов. Сомнительное удовольствие.
> CLion или VS с решарпером?
Анончик не знаю даже что ты услышать хочешь
Оба говно, но лучше аналогов нет
Выбирай просто что больше нравится
Идея переодически начинает тупить и это лечится только invalidate cache and restart
Что мешает-то?
Напиши пропозал, тебя обоссут и попутно объяснят.
> IDisposable
Чел, деструкторы тебе для чего?
> try-with
Эксепшены религия не позволяет использовать?
> with
Скобочки, блять, используй. with - это костыль в языках без RAII. Можешь в if затолкать объект с деструктором или сделать макрос на with, если хочется прям как в питоныче.
Так with === {}, не? Выделяем новый скоуп, по выходу из него все само умрет
Лол, через полгода Штирлиц догадался, что Брезенхем работает только с линиями с наклоном не больше 45 градусов. То есть, если зум меньше 1, у тебя будут разрывы по определению. Тебе нужен nearest-neighbor или что-то подобное.
>Не умеет в кучу важных вещей, например даже в базовые фичи типа переход к реализации, или поиск ссылок
Он и не должен этого уметь by design. Он просто синтаксическое дерево строит. Дальше уже должна работать какая-то более высокоуровневая либа, вроде плагина для LSP. Плагин VSCode умеет и переход к реализации и поиск ссылок.
Ааа, ты думаешь это все брезенхемом рисуется от точки к точки. Нет это просто вертикальные линии от нижней границы виджета к точке. Там брезенхемом никаким и не пахнет.
>>023288
Да что вы говорите.
Прикриплейд. Как тут ваши raii и деструкторы-то помогут?
Надо как дебил каждый раз писать 100 уровней try-catch, или как деды - все переменные в началае функции объявлять а потом здоровенный try-catch.
В это же время, в жавах и остальных - ты имеешь синтаксис, который именно для вот такой хуйни предназначен, и позволяет, в любом случае нормально освободить что там у объекта навыделялось.
Он Брезенхемом не линии рисует, а по горизонтали идет, и считает когда на следующий сэмпл в спектре переходить.
А какого хуя ты удаляешь строку над которой не владеешь?
Пикрилейтед говнокод, за который тебя палкой надо ебануть.
> Не использует RAII
> Стреляет эксепшенами
> Это не я еблан, это язык плохой
Ливни с треда, чушпан
> Прикриплейд
И что у тебя на пикрилейтеде, джаваопущ? Ты ведь даже не знаешь крестов, а уже пишешь код. При нормальном RAII у тебя всё будет освобождаться, то что ты вручную выделил память что в нормальном коде запрещено уже давно и не почистил - это твои проблемы, сборки мусора за даунами тут нет. Лучше расскажи как джава справляется c ConcurrentModificationException, всё так же надо делать ручные итерации с .next(), чтоб рантайм не наебнуть?
По скрину же видно, что ты явный неадекват. У нормального человека глаза вытекут от такой темы.
Ды нет, я просто делаю преобразование координат
Для X
float pixelOffsetX = offsetXscaleX;
for(int i = 0; i < vectorPixelX.size(); i++)
{
vectorPixelX = round(vectorUnitXscaleX - pixelOffsetX);
}
Для Y
float pixelOffsetY = offsetYscaleY;
for(int i = 0; i < vectorPixelY.size(); i++)
{
vectorPixelY = round(vectorUnitYscaleY - pixelOffsetY);
}
Затем отрисовываю получившиеся точки
for(int i = 0; i < vectorPixelY.size(); i++)
{
painter.drawLine(vectorPixelX, 0, vectorPixelX, vectorPixelY);
}
Причём тут брезенхем. То что я хочу сделать возможно похоже на работу брезенхема. Я хотел бы вычислять накапливаемую ошибку не в цикле, а по формуле. В брезехеме тоже ошибка вычисляется, но делается это в цикле. Но сейчас, на данном этапе ничего общего с брезенхемом нет
>>023423
>>023441
У плюсовиков настолько все плохо с абстракциями и примерами?
Я просто демонстрирую ситуацию, в которой бы ресурс не освобождается, которая в том же питоне, жаве или шарпе решилась бы конструкциями языка.
В реальности, ну, вот будет у тебя класс TcpConnection, где-то в недрах ебнется какой-нибудь IOException или AppException, тебе надо почистить и вернуть в пулл буфферы, а сокет освободить правильно. Ну и че будете делать? Покажите как это делается на плюсах. А то начали чет щебетать, а показать как делать без устоявшихся уже в остальных языках конструкциях - не хотите.
Я подозреваю, что они просто сами не знают, как сделать это нормально, чтобы не выглядело как ебаный пиздец, и при этом не городя всякие свои велосипеды в духе лайфтаймов или своих GC'шек.
unique_ptr для кого придумали, долбаёб?
А вообще ты явно не из плюсов, потому что все плюсовики знают:
Ты либо не трогаешь руками память нигде, кроме возможно конструкторов/деструкторов и используешь исключения, либо не пользуешься исключениями, так как без RAII это будет работать некорректно.
> Ну и че будете делать?
Чел, выполнится деструктор, эксепшен точно так же выполнит деструкторы у вышедших из области видимости объектов, так же как в твоей джаве. Ты вообще в курсе, что в твоём говнокоде foo делает две аллокации и у обоих RAII не работает?
Я думаю он даже не представляет что такое "Hello world", где он хранится, и какой у него лайфтайм, раз он передает его в объект и пытается удалить.
Это у тебя плохо со знаниями крестов, ты даже не знаешь синтаксиса. В крестах объекты создаются не через new, у этого ключевого слова семантика отличается от джавы. В 2024 года даже IDE тебе варнинги кинет за new, так никто не делает. Убери его и всё будет работать как в джаве. Я уже молчу про то что ты память не выделял, а зачем-то освобождаешь её в деструкторе.
> unique_ptr
Всратый костыль.
Я хочу работать с TcpConnection. Как-бы ООП, все дела. Нахуй мне этот вот юник поинтер, мне нужен объект удовлетворяющий требуемому интерфейсу.
>>023514
> выполнится деструктор
В том коде - деструктор не выполнится.
> Ты вообще в курсе, что в твоём говнокоде foo делает две аллокации
Да. Именно потому я и говорю о нужности какого-то аналога using try-with или with, чтобы в языке в случае вот такой хуйни - была возможность освободить корректно ресурс.
>>023521
Каким образом пример кода, в котором не выполнится деструктор и соответственно - я получил утечку - вообще относится к тому, что я делаю? Серьезно, чел. Еще раз. ЭТО ПРИМЕР. Я просто показываю ситуацию, в которой ты - нихуя сделать не можешь, чтобы корректно освободить выделенные в процессе работы ресурсы.
У тебя так же может остаться висеть в памяти открытый файл, и ты нихуя не сделаешь, потому что ничего, что могло бы его в такой ситуации корректно закрыть и освободить ресурсы не будет вызвано. Только городи костыли, либо как деды - все что надо в начали функции прописывай, потом здоровый try-catch и в конце - руками освобождай.
Ты очень тупой по причине долбаёб. Вы в жаве все такие? Ты знаешь что-то о Эксепшен Сейфити?
Варианты решения твоей проблемы:
1) убрать new.
2) добавить unique_ptr
3) обернуть часть кода, где может быть исключение в try, отловить его и очистить ресурсы.
Буквально 5 секунд ввода кода. Но ты подаёшь это будто это нерешаемая проблема.
Пажди, чел. Че ты вообще несешь?
new - создает выделяет память в хипе и отдает указатель на этот кусок памяти. Че не так-то? Я именно этого и хотел.
Чи с 2010 года, когда я последний раз на плюсах писал - что-то поменялось?
> убрать new.
Мне надо, чтобы объект был в куче
> добавить unique_ptr
Всрытай костыль. Уровня лайфтаймов от жидбрейнсов
> обернуть часть кода, где может быть исключение в try, отловить его и очистить ресурсы
И получить страшную партянку, если у меня много разного создается, что надо осводождать, вместо того, чтобы дать конструкцию языка, которая обернет это за меня.
>>023541
Тут он не нужен, потому что пример синтетический. Он в любом случае не вызовется, так что зачем строчки лишние писать?
> Всрытай костыль. Уровня лайфтаймов от жидбрейнсов
Аргументы будут?
Пока что все намекает что ты зеленый.
Просто вызовом конструктора, внезапно. А new - это аналог malloc, т.е. выделить память на куче, создать в ней объект и вернуть ссылку на него. Естественно RAII не работает, потому что объект за пределами области видимости и не принадлежит тебе.
>>023539
> Че не так-то?
То что так никто не пишет код, уже не нулевые, за такое говно тебя уволят нахуй. В каком-нибудь Unreal Engine вообще память на куче запрещено так просто выделять, можешь посмотреть исходники на гитхабе, увидишь как реальные проекты на современных крестах выглядят.
> что-то поменялось?
Да, есть чёткие гайдлайны как писать на современных креста, а не на сишке с классами. Обратная совместимость позволяет писать код как в 90-х, но это сделано для компиляции легаси, а не чтоб дегроды писали на С++03.
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-resource
Аргумент в том, что я как пользователь какого-то класса, не хочу думать о том как мне его передают.
Я хочу работать, с условным Computer, Connection, TextBox'ом и мне до пизды должно быть, уникальный это поинтер, шарящийся или сишный. Меня это, по хорошему, не должно волновать.
Иначе - начинают протекать слои и я на своем уровне слишком дохуя знаю о том как мне что передается, как оно там управляется.
Сверху, я могу из-за этого быть долбоебом, который полезет в этот юник поинтер я могу вообще сделать какой-нибудь reset и ебитесь как хотите, я в домике, удачного дебага.
>>023558
Ну, т.е. вместо того, чтобы сделать язык удобнее для использования его фич - мы запрещаем одну из основных фич, которая была как раз удобна в С++.
Отличное решение.
Темплейты тоже запрещаем, чи как?
> Иначе - начинают протекать слои
Никуда ничего не протекает.
Во первых - уник птр лишь удалит объект по выходу из скоупа. ты все также можешь передавать свои указатели куда хочешь КАК ОБЫЧНЫЕ указатели.
Во вторых - ссылки гораздо безопаснее, лучше использовать их.
> одну из основных фич, которая была как раз удобна в С++
Что ты вообще несёшь? new всегда был зашкваром, это убогий синтаксический сахар над malloc. О каком удобстве речь, когда ты сам себе стреляешь в ногу, если можно просто не делать этого? Нет почти ни одной адекватной причины зачем тебе делать аллокации на куче вместо стека, куча даже банально по производительности медленнее.
Вот тоже интересно, как он без кучи живёт
Имел ввиду на Вин10?
Не виляй, ты чушь написал. Проблема не в стеке\куче, а в управлении памятью.
В MS DOS памяти всего 640 КБ, стека не хватит даже на десяток вложенных функций. Первая ошибка любой современной кодомакаки будет переполнение стека при запуске его высера даже уровня лаба1.
>В MS DOS памяти всего 640 КБ, стека не хватит даже на десяток вложенных функций.
Ты родился когда компьютеры уже стали 64-битными?
Размерность машинного слова на 8086 была 16 бит - в 4 раза меньше, чем у современных компьютеров/телефонов.
При прочих равных это как 640 * 4.
Просто поумничал, мне пофигу.
Через make_unique/make_shared.
>>023546
Не хочешь "всратый костыль" - обкладывайся тестами под valgrind/msan, убирать за тебя твой мусор в этом языке никто не будет и никто не должен.
> Мне надо, чтобы объект был в куче
Если тебе хватает try-with, то стек тебе тоже сойдёт.
>>023486
>Покажите как это делается на плюсах
Все ресурсы для которых нужна уборка, чистятся в деструкторе.
>>023229
Не можешь сам реализовать scope_exit, спиши из черновиков - https://en.cppreference.com/w/cpp/experimental/scope_exit
>>023577
Ты ёбнутый? UaF давно не дебажил?
Так с чего они неиспользуемые то будут? Ну будет заняты 3гб оперативы не рандомными кусками где-то в памяти, а сразу на стеке, а там дальше ОС размапит как ей удобно.
У тебя в программе минимум два стека, плюс по одному на каждый дополнительный тред.
А так да, ты можешь сделать так чтобы стек рос до тех пор пока не попадёт в область кучи.
Я правильно понял, что у тебя стек хранится где-то в отдельной памяти и поэтому к нему доступ быстрее? А где он хранится можешь подсказать? Вот я на эксешник даблкликаю, что происходит? В L3 кэше 8мб выделяется?
У тебя не может быть активной памяти выделено больше, чем РАМ.
Стек лежит там же, просто по особенностям использования у тебя меньше переходов по указателям и память стека почти всегда в кэшах, за счёт этого стек быстрее.
Ну я и спрашиваю почему не выделить стек 10ТБ и размещать всё на стеке, динамические размеры через какой-то alloca реализовать можно без проблем, я даже реализации под микрожелезки видел.
Стек неразрывный, и там меньше кешмиссов. А где там твой Хип ещё посчитать надо.
Что поэтому? Как количество стеков влияет на их размер? Я запросил у операционки 10 ТБ, она мне дала кусок 1мб, дальше память будет выделяться по мере обращения к адресам. Виртуальное пространство сейчас сколько занимает, 57 битов помоему, на 256 петабайт вроде бы, должно хватить хоть на 32к тредов.
>Почему в плюсы не завезли аналоги всяких IDisposable
технически подобное пока невозможно пока сделать тк в языке нет рефлекции
но конечно же есть другие подходы как управлять временем жизни выделенных ресурсов
>Я мимо пробегал, а как тогда объекты делают в C++?
Если упрощенно то четырьмя способами - конструктор глобального либо локального статического объекта размещается где то в свободной памяти, конструктор локального объекта размещается на стеке, по умолчанию оператор new создает объект в динамической памяти (на куче), форма размещающего оператора (operator new) позволяет поместить объект куда угодно по желанию программиста
Тебе тоже надо читать гайдлайны. Правильное создание объекта на куче - сразу в управляющем объекте, без new.
зависит от машинной архитектуры
в подавляющем большинстве архитектур сегодня стек размещается в оперативной памяти
>У тебя в программе минимум два стека, плюс по одному на каждый дополнительный тред.
Помню, в висте (между xp и семеркой была такая ос), при определенных условиях могло быть то ли 8 то ли аж 16 стеков в однопоточной программе из-за особенностей виртуализации x32 в x64 и особенностей защиты которая там была реализована (это когда всех еще это окошко с разрешением выполнения задалбывало)
>Что за два стека?
user space и kernel space как минимум;
вообще если твоя прога с гуи интерфейсом, с активным вводо-выводом (та же сеть), то считай подавляющее количество процессорного времени твоя прога проведет в kernel space, при этом многие кодеры даже об этом и не знают, хех
это было неточно быстро сформулированное предложение, не передергивай
ну этот же совет говорит типа используйте всякие обертки, внутри то все равно будет где то по итогу вызвана та либо иная форма new
>А так да, ты можешь сделать так чтобы стек рос до тех пор пока не попадёт в область кучи.
Хм, а как ты это можешь сделать? Вроде же размер стека (в винде) указывается когда ты создаешь поток (create thread), а по умолчанию вроде бы мегабайт размер, но этот размер ты где то в реестре можешь так же изменить. И как бы все, дальше размер зафиксирован.
Может, но там будут ворнинги.
>>023102
>переход к реализации
Не проверял, если и так то решение простое: не писать говнокод чтобы надо было смотреть что-то помимо доков/хэдэров. Понятно что в реальной работе без этой хуйни никак.
>В студии каждый час IntelliSense падает
Это рандом, но да, заебывает. Студия вообще жутко кривая, однако она заточена хорошо под разработку на Винде. Я когда в унике win32 и WDK ковырял понял что использовать что-то помимо вижуалки не выйдет. А еще она до тупого проста для новичков и там много удобств именно для настройки проекта. Учитывая что многие туториалы юзают её, это плюс.
>И гуй уже лет 5 не развивается никак
Уже показывали что пишут новый с закосом под стиль 11-ки. Не думаю что они просто внешний вид переделывают.
>даже нормальной поддержки нейронок нет
Тьфу нахуй, максимум время сэкономит.
>Задача - писать код и не страдать от IDE.
Удачи тебе под выбранной утилитой для STM код писать, лол. Или если в конторе скажут что юзают X а ты выбрал Y. Ещё раз, свобода выбора есть далеко не всегда и когда она и есть, лучше отталкиваться от какой-то логики относительно целей.
Вот именно. Внутри, реализации объекта а не рандомно в коде. Когда у тебя вся хуйня требующая особого внимания в конструкторах/деструкторах баги легче искать.
> в конторе
Заебал, никто тут не пишет на крестах за деньги, даже в техподдержке хуи пинать лучше, ещё и за те же деньги.
Довольно спорно, в моей мухосрани почти все вакансии по плюсам, да и я сам с плюсам :0
Нск что ли?
На что компилятор жалуется?
На то что ты пидор считать до трёх не умеешь.
Аргументы, которые ты передаёшь макросу:
1 - obj
2 - {float x
3 - y;}
Препроцессору насрать на фигурные скобки, он не знает, что это такое, видит запятую между x и y и интерпретирует это как разделитель аргументов.
лох
если тебе для заработка, то лучшая стратегия это углублять знания о выбранном тобой яп и платформе, на которой ты зарабатываешь деньги, а не распыляться на что то другое
Си треда больше нет
Чел, для саморазвития первым делом учи функциональщину - Хачкель как теоретический ЯП и Окамл как практическую функциональщину. Потом ассемблер. Всё. Кресты нужны чтоб писать код, а не саморазвиваться, тут ты можешь только развить умение читать легаси. Если хочется увидеть много интересных вещей в ООП - смотри на D.
Зачем учить функциональщину? Она неестественна как для человеческого мозга, так и для машины. Объекты естественнее, проще и понятнее.
> Зачем учить функциональщину?
Чтобы не превращаться в извращенца пидеРаста, пытаясь написать безопасный код.
Особенно актуально когда у тебя мультипарадигменный язык как кресты, а ты бездумно пишешь строго в ООП/процедурном стиле.
Мне не интересно сколько платят дворнику в ДС. В Мухосранях СИ/С++ требуется, зп по региону выше среднего.
Далеко не все хотят уезжать из уютных мухосраней в вонючий ДС.
Раст в этом плане из коробки более функционален чем плюсы лол
"Безопасный код" тогда проще всего на js писать. Зачем хаскелем себя мучать? Функциональщина вообще нигде не взлетела. Даже в HFT, где тупых в принципе не держат, и нет проблем хоть академиков набрать на любую зарплату, все равно пишут на плюсах и джаве.
Можете подсказать, почему компилятор не видит конвертирующий конструктор:
template<typename T, class Deleter = std::default_delete<T>>
class UniquePtr {
public:
/.../
template<std::derived_from<T> U>
UniquePtr(UniquePtr<U, Deleter>&& other) noexcept
: resource{ other.release() },
D{std::move(other.get_deleter()) } { }
/.../
class S {
public:
virtual void bar() { std::cout << "S::bar\n"; }
};
class D :public S {
public:
void bar() override { std::cout << "D::bar\n"; }
};
UniquePtr<D> derived(new D{});
UniquePtr<S> based{ derived }; -- тут пишет что отсутствуют экземпляры конструктора
>В Мухосранях СИ/С++ требуется
Шиза ебаная. Что для тебя мухосрань. Типичный 300к областной/крупный районный центр - и там за небольшим исключением будет 0 (ноль) разработки на крестах локальной.
Попробуй based{ std::move( derived ) } сделать.
Набережные Челны, например, лол. Там Алабуга, которая набирает крестовиков с зарплатами по 500тыр.
>HFT
о да бля ахуенно актуально для россии где на биржах в принципе нету высокочастотной торговли ибо модель торгов другая
> Функциональщина вообще нигде не взлетела.
Взлетела там где нужен гарантированно безопасный код с высоким уровнем абстракций. На Lisp например в НАСА или Боинге под некоторые задачи пишут, OCaml в финансовых корпорациях используется. Понятное дело в вебе или просто педоликам проще хуяк-хуяк на ООП слепить тонну легаси, а когда у тебя в принципе не должно быть легаси в коде - тут уже ООП серит себе в штаны, т.к. какой-нибудь солид требует писать расширяемый код, а не модифицируемый.
чел это не мухосранск
Ну приведи другую область, где функциональщина может в принципе взлететь. Обычный аргумент функциональщиков - ряяя, тупое быдло не осиливает. В HFT тупого быдла нет. В науке тоже тупых мало, но там питон, матлаб, фортран, плюсы. Окамл только на компсаенс кафедрах, и за их пределы не вылезвает.
>На Lisp например в НАСА или Боинге под некоторые задачи пишут
Лисп - это функциональщина уровня js лол. Что-то на лиспе в НАСА писали в 80-х и немного в 90-х на волне АИ хайпа, потом бросили.
>OCaml в финансовых корпорациях используется
Почти нигде не используется. Вакансий нет, историй успеха нет. Чисто академический язык.
А ты не очень умный.
>Взлетела там где нужен гарантированно безопасный код с высоким уровнем абстракций.
"Гарантированно безопасным" будет код только со статической аллокацией. Из функциональных языков такое возможно только в ATS, в остальном на некоторых из них можно только корректность алгоритма доказывать, но для этого обычно используют статические анализаторы.
Потому что не все пишут опен-сорс, и многим надо скрывать имплементацию. Чтобы делать это без хидеров, нужны переносимые модули с универсальным форматом, который будут понимать все компиляторы. Такой сложной штуки комитет и разработчики компиляторов осилить не смогли, поэтому кушаем хидеры.
Майкрософт годную технологию придумала COM - https://learn.microsoft.com/ru-ru/windows/win32/com/component-object-model--com--portal
А у Борланда был (а скорее всего есть и сейчас, но уже у Эмбаркадеры) довольно забавный и весьма весьма мощный TLB-editor.
Но чтобы это осознать, для начала надо признать и принять что CORBA это хуйня из под коня.
COM -технология не идеальна, она overblow, требует наличие большого, единого и неповоротливого реестра, но, ловите мнение эксперта - на сегодняшний день ничего лучше не придумано и скорее всего даже не опубликовано в исследованиях.
>corba
>com
>borland
Скуфидоны, о чем вы вообще? Почитайте современные книжки по плюсам и в целом освежите свои знания. Не надо вскрывать эту тему, борланд это даже не флеш или активеэкс
Это не скуф, это дед. Имей уважение!
Только долбоёбы уверены в том, что Майкрософт похоронила COM, на котором половина Винды основана. И, как оказалось, очень даже хорошо что "мелкомягкие" так старательно присыпали всякой мишурой свою Component Object Model - это чтобы такие как ты туда свои кривые ручонки не запускали.
При чем тут COM вообще? Я хотел пидоров комитетских палкой ткнуть, которые 15 лет изобретали модули, и вышла ненужная хрень, кривая замена PCH.
Неа, мухосрань это город где жизнь остановилась. Типа Вологды или Твери, вообще весь вымирающий "русский север".
Да нигде она не может взлететь лол. Даже в контексте этого треда. Взять хотя бы метапрограммирование на 98 стандарте. Тогда это осуществлялось по сути через функциональный подход, ибо иначе никак - а именно рекурсия, паттерн-матчинг и иммутабельные переменные. И че кто нибудь делал это в продакшене? Да нихуя, чисто state of art код. А в продакшене делали внешнуюю кодогенерацию если надо было. Никто не корячился на шаблонах.
если вкратце - то лишь потому что с++ создавался как надстройка над си
тебе никак модули не позволят скрыть имплементацию
скрыть имплементацию ты можешь только оформив код в динамически загружаемую библиотеку, из которой могут торчать си-совместимые функции и все
в этом то и состоит, кстати, главный посос крестов по сравнению с явкой и шарпом
главнейший посос из-за чего кресты подыхают кстати
и за 20 лет ни одна сука ни на одной конференции про это не заикнулась лол
>>025359
ну дак он и отвечает на пост выше где вякнули про "скрыть имплементацию"
сделать это можно только через дин библиотеку
из нее будут торчать сишные функции и ничего более, и это крайне убого, убого это было уже в начале девяностых а сегодня это просто пиздец по сравнению с тем как подобные вещи делаются в явке или шарпе
как то компенсировать это можно только создав на базе этого (и сохранив совместимость) надстройку, использовав компонентный подход - как раз это com в винде или gobject в линуксе, и тогда это будет еще все более-менее терпимо
либо второй подход - это делать что то глобальней, а именно запиливать систему удаленного вызова процедур/методов/объектов, одной из примеров таких систем и являлся стандарт CORBA
Ты херню какую-то говоришь. Dll с сишными функциями нужны только для связки с другими языками. В C++ хидеры и объектные файлы уже позволяют скрывать имплементацию: можно поставлять хидеры и собранную либу, хоть dll, хоть статическую. Модули теоретически позволили бы не разделять определения и имплементацию в коде, т.е. можно было бы импортировать собранный файл модуля, и компилятор выдавал бы все определения. Как dll в шарпе или jar в джаве.
это ты херню говоришь
стандартизированного экспорта классов в крестах нет
только си-совместимые функции и все
Это проблема из 90-х. Сейчас фактически осталось только два формата библиотек: юниксовый и MSVC, и gcc умеет делать def, чтобы, например, линковать dll собранную MSYS к MSVC. В vcpkg под виндой, например, куча либ через MSYS собирается, и проблем с линковкой нет.
> должен указывать класс_нейм::функ_нейм
И кто тебя заставляет, пердоля? С темплейтами вообще нельзя определение и имплементацию в разных файлах иметь.
> дважды писать одно и то же в разных местах
Так не пиши. Модули уже давно везде работают, даже std на модулях вышла из экспериментальной.
>всем
Отучаемся говорить за всех. Отучил себя - отучит товарища.
http://lurklurk.com/Отучаемся_говорить_за_весь_интернет
Есть штуки в темплейтах, когда реализация должна быть строго в хедерах. И их много. Не назову, потому что не пишу шаблоны.
скуфидон, иди на пенсию уже, дорогу молодым
Я понимаю если бы это был тред для домохозяек или для игродебилов, но будучи разрабом сидеть на винде, если ты не пишешь под винду - это клиника.
возвращаю long long, ожидаю увидеть 2^38 + 1, а вижу 0 + 1
В чем я не прав?
sizeof(long long) == 8
>если ты не пишешь под винду - это клиника.
Ты два раза не прав.
Я пишу кросспалтформу. Всё кроссплатформенное за интерфейсы спрятано. Это раз.
Это тред С++? Тогда ты обязан знать что есть только одна среда разработки для С++ - MS Visual Studio. Всё под всей платформы пишется и отлаживается в ней, а затем переносится на целевые платформы. Так весь мир работает, если ты не знал.
Ну, кроме Торвальдса и и нескольких десятков его подсосов.
>Так весь мир работает, если ты не знал.
Далеко не весь. Во многих конторах можешь на чем хочешь сидеть и любыми тулзами и ИДЕ пользоваться. Но под виндой там как правило самые упертые и консервативные мамонты сидят. Чисто виндовые обычно конторы, которые начинали чисто с виндового продукта и им потом потребовалась кросс-платформа (и они ее делают на отъебись).
В голос с этого спермовода. Компилятор нормальный завезли хотя бы в твою студию?
Алсо, винда настолько удобная, что пришлось встраивать в нее Линукс в виде WSL, чтобы совсем убогими не казаться.
В том что заигрываешь с переполнением
UB UB ГРОБ ГРОБ КЛАДБИЩЕ
>Алсо, винда настолько удобная, что пришлось встраивать в нее Линукс в виде WSL, чтобы совсем убогими не казаться.
При чём тут удобство? Это как раз наоборот, чтобы можно была писать на удобной винде под неудобный линукс без ебли с виртуалками.
>Это как раз наоборот, чтобы можно была писать на удобной винде под неудобный линукс без ебли с виртуалками.
Ты даже не стараешья, поэтому я отказываюсь в этом учавствовать.
Чем виндовс.
Для разработки ануса.
Когда запускаю мне вылетает сообщение от windows - "Невозможно запустить это приложение на вашем ПК. Что бы найти версию для вашего компьютера, обратитесь к издателю приложения". А ?
Если повезёт, то через WSL. Если не повезёт, то вообще никак, хоть убейся, придётся виртуалку с линуксом разворачивать.
Ага. Или обрвтиться к разработчику приложения.
Какой ?
Qt
Нет. Нужно писать либо в текстовом редакторе с подсветкой синтаксиса, а потом компилировать в симейк, либо использовать неудобные или зашкварные IDE. Тот же Clion это зашквар, написанный на java от зашкварной джабаебской компании Jetbrains
>Нужно писать либо в текстовом редакторе с подсветкой синтаксиса, а потом компилировать в симейк
Дед, 90-е давно закончились, сейчас в любом "редакторе с подсветкой синтаксиса" есть все возможности IDE благодаря LSP.
>Тот же Clion это зашквар
Почему? Это в нулевые он тормозил, сейчас он работает норм на любом днищеноуте.
Есть моар картинки с пикрила? Что-то даже и на русском было
Язык без невидимой хуйни, да-да. Дебаггер после cin сразу 0 показывает.
стандартизированного экспорта классов в крестах нет
к сожалению, для разработки, оставшейся в россии, это во многом так
это застарелая проблема крестов, которая так и не была решена
по стандарту 98 было две модели организации исходного кода шаблонов а именно модель включения и модель разделения (через ключевое слово export)
вторая модель так и не была реализована в мейнстрим компиляторах языка
и всегда используется только первая, которая означает что весь код шаблона должен выглядеть так как будто бы он встраиваемый (inline), что на практике означает что весь шаблон должен быть помещен в хедер файл (если код шаблона планируется задействовать в нескольких единицах трансляции, само собой)
Господи мудила, ну посмотри в каком порядке ты аргументы принимаешь и передаешь.
> сейчас в любом "редакторе с подсветкой синтаксиса" есть все возможности IDE благодаря LSP.
Есть такое слово Debug.
Код набирать и в vi можно.
Что меня всегда добивало в пользователях плюсов, так это какой-то панический отказ от scanf, gets и т.д.
С++ это язык, в котором к результату можно прийти 1024 способами, три четверти из которых будут неэффективными, а остальные - весьма эффективными.
>Есть такое слово Debug.
И в чем проблема с дебагом? Виндузятничка пугает консольный GDB? Так есть плагины для большинства редакторов-IDE.
Кажется тебя давно пора кастрировать за тупость.
Тыв вообще понимаешь что такое консоль? Нет, не понимаешь, дегенерат. Консоль это текстовый режим, древнее твоего дедушки, потому что даже в 80-го дах прошщлого века компьютеры вовсю ебашили графику, а так любимый print это вовсе не вывод на экран, а печать на бумаге, и даже не лазерным принтером, и даже не сдохшим древним матричным принтером, а вообще не принтером, а телетайпом - электрической пишущей машинкой которой уже 100 лет стукнуло, которая ебашит свинчатками с буквами по рулону бумаги.
В 2024 году писать программу печатающую на телетайпе так же нелепо как делать автомобиль с лошадью вместо двигателя. Ты просто дегенеративный выродок которых нужно уничтожать.
Консоль это ввод буковками. Чего жы ты аудио сообщением свой ответ не написал, а буковками?
мимо шел
Шиз, таблетки
>Виндузятничка пугает консольный GDB?
Пугает? Ты сам то в нём много времени провёл?
Точку останова без поиска в гугле сможешь поставить?
Без man назовёшь ключ компиляции с отладочной инфой?
Не надо сравнивать удобство отладки в Visual Studio и gdb. Это несравнимые вещи.
>Ты сам то в нём много времени провёл?
Достаточно, и мне в нем удобнее, чем в студии.
>Точку останова без поиска в гугле сможешь поставить?
Смогу, там просто файл и строку указываешь. Но они в любом редакторе из интерфейса ставятся.
>Без man назовёшь ключ компиляции с отладочной инфой?
-ggdb
>Не надо сравнивать удобство отладки в Visual Studio и gdb. Это несравнимые вещи.
Да, в gdb есть суперкрутой принт и скрипты, это ставит его на голову выше студии.
>суперкрутой принт
В visual studio нажимаешь Shift+F9 и 'print' будет ничем не хуже. И тебе нечего на это возразить.
Но фишка в том, что в большинстве случаев чтобы понять что происходит никакой принт не нуже - подвёл мышку к меременной - а она, вижуал студия, рисует тултип со сначением переменной.
Мелочь, а приятно. И когда таких мелочей сотни и ты к ним привык, ничего другого не надо.
А gdb - его приходится использовать на целевой платформе. Как средство для переноса программ между платформами - годен. Но отлаживать в нём так называемую "бизнес-логику" или разбор протоколовов каких. Ну-ну.
Текст можно обрабатывать программно, гуй - можно, но очень сложно. Программист обычно выбирает текст и консоль, макака визжит и трясет ручками, чтобы ей добавили кнопочку в интерфейс.
Вот вот, какие то конструкторы деструкторы, консоли сосноли. Давайте разрывы обсуждать
>И тебе нечего на это возразить.
Принт умеет вызвать функции из кода, просто пишешь выражение как в коде, получаешь результат. Студия тоже умеет, но там это супергеморно.
>подвёл мышку к меременной - а она, вижуал студия, рисует тултип со сначением переменной.
Ну если у тебя все в переменных лежит, на которые мышку можно навести, то удобно, конечно. Если надо какую-то чуть более сложную структуру данных ковырять - то уже не очень.
> Давайте разрывы обсуждать
Тебе нужно понять природу IEEE 754 (IEC 60559)
Для начала. А тогда уже можно и пообсуждать.
>Если надо какую-то чуть более сложную структуру данных ковырять - то уже не очень.
Наоборот - можно даже в тултпиах по спискам бегать, да и не только по спискам, можно сложный структуры данных открывать. Это бомбовая вещь.
При этом на целевой платформе бывают ситуации, когда проще в коде printf'ами отладочной инфомации в консоль/лог навалить, нежели пытаться поймать ошибку в gdb.
дак ты зашел!
Не мог быть. Пердоговно не может быть хорошим, ибо сделано по принципу юниксвей - "мне в падлу делать хорошо, сляпаю огрызок, серану в консоль, и так сойдет, кому надо будет, сам слепит с чем-нибудь другим костылями из соплей".
>к gdb куча фронтендов есть кстати
Разной степени удобства.
Visual Studio это де-факто стандарт разработки. Всякие железячники именно её используют. В мире. В России-то и железячников можно по пальцам пересчитать.
TD386 без труда позволял взламывать игры. Просит тебя игра при первом старте ввести код с упаковки, а ты ей вместо кода Ctrl+Break и пошёл смотреть где она этот код проверяет. Шёлк-шёлк - оба-на, зачем такая сложная проверка, если в конце всё решает один jnz ?
Так что не надо тут рассказывать какой Турбо Дебаггер "говно".
Ты вообще не шаришь и нихуя не понимаешь в компьютерах. Тебе бы помолчать, послушать об чём люди толкуют, а не нести сюда свои убогие суждения.
А ты у народ поинтересуйся, кто лучше отвечает - ты или я :)
Твои посты подобны постам школьника, который услышал об WM_PAINT, скачал с MSDN пример, подправил в нём пару строчек, скомпилировал и увидел "своё первое окно". Ты спешишь поделиться радостью, заскочил в тему и в предверии своего триумфа начал обсирать консоль. Ну охуеть теперь. Вот именно так ты и выглядишь.
Даже страшно представить что ты тут исполнишь, когда узнаешь о существовании пикрелейтед.
Есть так же небольшой шанс что ты автор 1001-ой библиоткуи виджетов и пришёл как говорили в fido7.mo.echo - зашёл жопой рекламировать свою библиотеку.
Ну и не исключён вариант что ты просто "долбоёб". Ты даже не представляешь на какое количество абсолютно разных людей наехал, наехавши на консоль.
Во-первых
>Твои посты подобны постам школьника, который услышал об WM_PAINT, скачал с MSDN пример, подправил в нём пару строчек, скомпилировал и увидел "своё первое окно"
будто что-то плохое
Во вторых: ты чё такой обиженный?
мимо
А нахуя он консоль, мать нашу, обижает? За мать будем ебать!
Это было во первых. А во вторых, я его кажется узнал. Это он где-то умопинал что кастомный диалог выбора фвйла пишет. С вероятностью около 0,75 это один и тот же человек и его агрессия против консоли мотивирована задачей.
И я сам таким бывал, хотя до бреда супротив консоли никогда не доходил.
Ну тогда согласен, консоль надо уважать
Не помогает.
ЦэПлюсПлюс - рассчитывает, что ты уже, как минимум, освоил си на уровне - можешь писать комерческий софт или хотя бы прошивки/драйвера, и теперь тебе надо УЛУЧШИТЬ ЭКСПИРИЕНС.
Соответственно, если плюсы будут первым языком, ты больше будешь ловить себя на "А ПОЧЕМУ ТАК-ТО? ПОЧЕМУ, БЛЯДЬ???" А когда спросишь у кого-нибудь, тебя нахуй пошлют(потому что 95% не знают на самом деле)
Я просто помню, как сука охуенно-то в вузе было.
Вывод кирилицы в консоль: А ТЫ НЕ ЗАБУДЬ setlocale(LC_ALL, "")ю
Число к строке приобразовать itoa/std::to_string
Нормальный форматированный вывод даты - просто иди нахуй, просто иди нахуй.
И вот куча вот этой вот хуйни.
А захочешь чего-то полезного для себя написать, тот же чатик - БУСТ, блядь. Сука. БУСТ, ебучий. Не нравится буст? НУ ТЫ ЛОХ! Ну да ладно, тогда бери винапи а сверху читай маны по линуксам, чтобы ебучие байтики по сети передать. В то время, как на любом другом языке у тебя будет что-то в духе: new TcpServer(new MyConnectionHandler()).Run(); и все, нахуй. Но не в плюсах. В плюсах - либо бери бусты, либо делай велосипед для любой простейшей хуйни.
Сверху. Просто охуитительная система сборки. Ее нет кста. Бери компилятор, бери мейк, прописывай пути к библиотекчкам руками. НЕ ЗАБУДЬ, ЧТО НАДО .CPP .HPP писать как долбоеб. И порядок методов не забудь, А ТО КОМПИЛЯТОР НЕ РАЗБЕРЕТ. Сейчас же, блядь, 2024 год, технологии не дошли до многопроходных компиляторов.
И ради чего? Ради нихуя. Перформанс плюсов в современном мире, только на фоне питона чем-то пиздатым кажется. А если взять ту же джаву, там даже не в 2 раза разница. Зато все есть. Бери. Пользуйся. Кайфуй.
Единственный кейс, где тебе плюсы таки пригодятся - это если тебе хочется поближе к железу, но на уровень ассемблера спускаться боишься(зря боишься, там ничего страшного нет, зато без ебанутых плюсов, все просто-понятно, никакой ебатории). А, ну или ты на завод рвешься, писать прошивки счетчикам, контроллерам и прочему говну.
Советую, если начинаешь, брать нормальный язык. Жава, Питон, Жаваскрипт, на худой конец - шарпы. Ну а если эти крохи перформанса, которые плюсы дают таки хочется - бери раст, там хоть нормальный туллчейн и из коробки есть почти все, что нужно, чтобы что-то полезное писать.
Не помогает.
ЦэПлюсПлюс - рассчитывает, что ты уже, как минимум, освоил си на уровне - можешь писать комерческий софт или хотя бы прошивки/драйвера, и теперь тебе надо УЛУЧШИТЬ ЭКСПИРИЕНС.
Соответственно, если плюсы будут первым языком, ты больше будешь ловить себя на "А ПОЧЕМУ ТАК-ТО? ПОЧЕМУ, БЛЯДЬ???" А когда спросишь у кого-нибудь, тебя нахуй пошлют(потому что 95% не знают на самом деле)
Я просто помню, как сука охуенно-то в вузе было.
Вывод кирилицы в консоль: А ТЫ НЕ ЗАБУДЬ setlocale(LC_ALL, "")ю
Число к строке приобразовать itoa/std::to_string
Нормальный форматированный вывод даты - просто иди нахуй, просто иди нахуй.
И вот куча вот этой вот хуйни.
А захочешь чего-то полезного для себя написать, тот же чатик - БУСТ, блядь. Сука. БУСТ, ебучий. Не нравится буст? НУ ТЫ ЛОХ! Ну да ладно, тогда бери винапи а сверху читай маны по линуксам, чтобы ебучие байтики по сети передать. В то время, как на любом другом языке у тебя будет что-то в духе: new TcpServer(new MyConnectionHandler()).Run(); и все, нахуй. Но не в плюсах. В плюсах - либо бери бусты, либо делай велосипед для любой простейшей хуйни.
Сверху. Просто охуитительная система сборки. Ее нет кста. Бери компилятор, бери мейк, прописывай пути к библиотекчкам руками. НЕ ЗАБУДЬ, ЧТО НАДО .CPP .HPP писать как долбоеб. И порядок методов не забудь, А ТО КОМПИЛЯТОР НЕ РАЗБЕРЕТ. Сейчас же, блядь, 2024 год, технологии не дошли до многопроходных компиляторов.
И ради чего? Ради нихуя. Перформанс плюсов в современном мире, только на фоне питона чем-то пиздатым кажется. А если взять ту же джаву, там даже не в 2 раза разница. Зато все есть. Бери. Пользуйся. Кайфуй.
Единственный кейс, где тебе плюсы таки пригодятся - это если тебе хочется поближе к железу, но на уровень ассемблера спускаться боишься(зря боишься, там ничего страшного нет, зато без ебанутых плюсов, все просто-понятно, никакой ебатории). А, ну или ты на завод рвешься, писать прошивки счетчикам, контроллерам и прочему говну.
Советую, если начинаешь, брать нормальный язык. Жава, Питон, Жаваскрипт, на худой конец - шарпы. Ну а если эти крохи перформанса, которые плюсы дают таки хочется - бери раст, там хоть нормальный туллчейн и из коробки есть почти все, что нужно, чтобы что-то полезное писать.
Пиздос ты поехавший.
> setlocale
> itoa
> вывод даты
Как там на ХР с сишкой и без std? Ты тред не попутал?
> Ее нет кста.
Шзоид, фактический стандарт индустрии на крестах в 2024 - cmake. Там не надо делать ничего из перечисленного тобой. В каком-нибудь CLion ещё и гуй есть, даже в конфиг никогда не придётся заглядывать.
> Сейчас же, блядь, 2024 год
Так ты из 2004 вещаешь, шизик.
> там даже не в 2 раза разница
А в 5-10, когда надо алгоритм написать, джава ещё и памяти сожрёт в десять раз больше.
> Буст
Открой для себя мир кути. Не панацея, но очень годно.
> Системы сборки
Смаке конечно кал, но не надо нам и так долгий компилятор ещё сильнее нагружать. Пусть хоть как то работает
> Раст
Пока что слишком сырой. А так обмазаться опционалами можно и в плюсах.
> Брать нормальный язык
Так плюсы и есть нормальный язык. Со своими фичами и ценой за них. Это вы ненормальные.
Не будет сложно, скорее непривычно что рядом с сахарницей стоит банка с цианидом.
БАЗА
Шизики итт уже начали перекрывать своими нелепыми мувами базу, мол симейк есть (фактически стандарт лол), кути, который не пришей пизде рукав тут вообще. Очень слабо. Давайте по всем пунктам кройте или соснули.
Ещё раз, для тупых, пик 1. Инфа в книжке от создателя языка не соответсвует его поведению. Там написано, что если дать программе неправильный ввод, то будет понятно, что он неправильный, потому что возраст будет -1. Но когда я ввожу точь, сука, в точь как в книге, я получаю 0.
Откуда там 0? Ну же, шизы, эксперты битоёбли, рассказывайте, как ваш "эффективный" язык без GC и прочей "ненужной" хуиты рандомные значения пихает в переменные без моего ведома? Почему 0 вместо -1 и, самое главное, почему попуск на создателе языка об этом не знает. Стандарт указан 14, я коммпилил 14.
Хотя ладно, один раз я получил -1. Когда дал ^Z после ввода первого значения в PS.
Ну, ладно. Я на самом деле зря наверное так вот злобно написал. Просто хотел типа в двачевском стиле.
Так-то да. Я на плюсах активно писал на первых курсах, а было это как раз во времена, когда XP был актуальным.
Но срсли. Личный опыт таки неприятный. Особенно по сравнению с джавой, которую стали к третьему курсу давать.
Если просто вспомню. Одна из тем была: написать компилятор бейсика. И просто чтобы разбить на лексемы входной поток символов плюсах пришлось столько говна нагородить. А потом еще бегать как ебанутый, искать, где ж ты там память не освободил, где то, где это. А потом - ради прикола уже позже на джаве - вот тебе и регулярочки, вот тебе реально удобное апи для работы со строками. Вот тебе то, вот тебе это. И доки при этом - написаны так, что студент, блядь, понимает, а не вот это вот что на прикриплейде. Даже сейчас мне надо секунд 10, чтобы понять, что это за говно и нахуя оно мне надо.
Корче. Я все равно не рекомендую новичку брать первым языком для изучения плюсы. Больше батхерта испытает, по итогу - либо дропнет, либо переключится на более удобный для себя язык.
Одебилевший от шарпа зачерпнет ложку цианида и подохнет. Кто начал со скриптов никогда не поймет программирование, это мертворожденный зомби с тухлой жижей вместо мозгов.
Потому что это либо УБ, либо иди читай спеки ввода и что там при не совпадении типов.
> пишете нейспейс для доступа к имени вместо использования using?
В хэдере это делать нельзя - протечет что не нужно
Целый неймспейс юзать сразу, тоже такое себе, конфликт имён легко словить
Выцеплять каждый пук через using namespace::name, так это только засорить начало файла
(кроме мелкософтных которые скорее всего своё говно и продавили в комитете)
> компиляторов
Шланг поддерживает больше года, MSVC уже три года как.
> систем сборки
cmake и msbuild поддерживают уже давно, нахуй ты пиздишь.
> не слышал
При этом уже std на модулях переписана и зарелизена после трёх лет тестов, ага.
> своё говно
Самая нужная вещь в современных крестах, наконец можно пидорнуть хедеры и писать код в одном месте без ебли с инклюдами. Ещё и std одной строчкой импортится, вместо десятков инклюдов на каждую фичу.
Предлагаешь поесть говна чтобы не пить мочу?
всё, я бросаю плюсы, пойду дальше жсоны перекидывать на жаба скрипте и пить смузи
Легко, но через UB.
Ну тогда:
1) Сканим хип процесса
2) находим наш указатель
3) меняем на следующий
4) чистим память по этому
Если нам нужно убрать значение, то можем заменить текущее на следующее, и удалить следующую ноду. Указатель на след поставить на через одну.
>>027938
Сука, вы реально настолько тупые? В этом и суть примера что после добавления инициализации если пользователь проебется и введёт задом наперед возраст будет -1. Там весь подраздел про инициализацию и почему она должна присутствовать в 99% случаев. Ошибка продемонстрирована намеренно, но когда я её проверил получил другой результат.
Ещё раз с++виньи, почему поведение программы из книги от создателя языка не соответствует реальности?
>>027792
Уже хоть какой-то ответ. Хочешь сказать что реализация cin пихает в числа 0 на символах? Если да то почему об этом не знает создатель языка?
Тот факт что терминал винды на ^Z всё же выдает -1 значение которое там и должен быть, напоминаю намекает что возможно зависит от реализации конкретной ОС. Надо будет в cmd попробовать вместо PS.
Это задача не имеет ответа, без ответа на вопрос - циклический список или нет.
Если список не циклический, то запрошенное действие невозможно.
Если список циклический... ну, вы понЕли.
Вот вам фулл подраздел, для даунов, если не верите.
Так что там по стандартизированному языку, пидорки?
>Ещё раз с++виньи, почему поведение программы из книги от создателя языка не соответствует реальности?
>
Глупая девочка, ты пытаешься спорить со стандартом? Не рекомендую - соснёшь с проглотом.
Твоя задача решается элементарным вводом двух строк и последующим анализом ввода. Всё! И ради такой хуйни ты уже который день ебёшь тут мозги анонам?
Лучше скажи как сюда jpeg7zip цеплять. Или tar попробовать?
Тупая-пизда-вкатун, иди нахуй. Просто развернулась, взяла свою тупую голову в руки и ка-а-а-а-а-ак попиздовала нахуй, чтобы только пятки сверкали.
> из книги от создателя языка
Добро пожаловать, Страуструп долбоеб
который не особо сильно решает в языке
> фулл подраздел
Во-первых, иди нахуй.
Во-вторых, у тебя на пиках говно какое-то, а вот пикрилейтед стандарт. По стандарту для инта вызывается num_get, который возвращает 0, т.к. не смог распарсить число.
> книжке от создателя языка
Что ещё притащишь от создателя языка? Какое он имеет отношение к стандарту?
По итогу мы выяснили только то что ты пидор.
А как ты умудрился натянуть труп страуса на стандарт?
Он язык родил создал, а воспитывают совсем другие люди комитет
А пьет за гаражами он с третьими разработчики компиляторов
Плюс он мог банально ошибиться. Или, что ещё проще, за время существования книги стандарт поменялся.
> Или, что ещё проще, за время существования книги стандарт поменялся.
Там же была изначальная книга от него по С++98. А потом уже неизвестные редакторы, не факт что даже с участием Страуса, апали редакции под новые стандарты, пока не дошли до абсурда с С++20. Хотя очевидно что Страус не знает современного стандарта, С++11 уже без него рожали. Все эти "garbage value" - это дыры в безопасности, естественно их прикрыли в каком-то стандарте.
Примерно поэтому я книги по плюсам и не читаю. Исключение - Мейерс 2014. Отличное введение в современные плюсы после вузовского Си с классами. А все остальное cppref + SO.
Пока выйдут книги по старому стандарту выйдет новый стандарт. Сппкон гораздо полезнее в этом плане. Хотя чё то самые годные 17-18 год будто.
Алсо:
Накидайте годных лекций с сппкона.
Пошёл нахуй, псина.
>>028919
>>028969
>>029018
>>028963
>>029019
Слава богу, хоть кто-то наконец-то понял что я спрашивал. Почему раньше не могли сказать? Я то думал что он там великий авторитет и имеет прямое отношение к разработке стандартов и прочей хуйни, а он лох.
Пересаживаться на Липпмана?
>Там же была изначальная книга от него по С++98.
Ты говоришь о C++ Programming Language которая как справочник по языку и STL как я понял. А это книга Programming Principles and Practices именно для вкатунов, которая есть в двух изданиях: для 11 и 14 стандартов. У меня, естественно, второе.
>>029021
А где тогда учить? Всякие васяны и индусы обычно многое тонкости не упоминают в своих видосиках.
> А где тогда учить?
https://en.cppreference.com/w/
Или хотя бы это, но за качество перевода не знаю:
https://ru.cppreference.com/w/
Кто вообще читает книги по конкретным технологиям, которые меняются каждые несколько лет? Ты вот видел чтоб пидоРасты читали какие-то книги?
>Кто вообще читает книги по конкретным технологиям
Все нормальные люди. Ты не учишь язык по словарю, ты учишь его по учебнику/репетитору/индусу с Ютуба.
С ЯП/фреймворками принцип схож, просто дополнительно придется ознакамливаться с новыми версиями/стандартами языка. В идеале тоже по какой-то небольшой книге с примерами, но если к тому моменту опыт программирования есть то хватит просто почитать статью какую-то, примеры и самому накидать можно будет.
>которые меняются каждые несколько лет?
Синтаксис плюсов практически не менялся с его появления. if он и в 98 стандарте if.
>Ты вот видел чтоб пидоРасты читали какие-то книги?
Раст учится по растбуку, который, исходя из его названия, книжка. Просто они не отстали в развитии и залили его на халяву в удобное видное для всех место. И обновляют. Но там сильно решают удачные на данный момент решения из-за чего переписывать много не приходится + фанатичность комьюнити. Продаются печатные версии кому так удобнее. Правда надо отметить что книга для людей с опытом. Кто никогда не касался кодинга будет испытывать проблемы с пониманием почти наверняка. После изучения базы можно почитать растономикон который книга про некоторые более сложные вещи которые для десктопа не нужны совсем, весьма хуевую книгу по эмбеддед или туториалы по фреймворкам, по факту, тоже книги.
Так что тут я тебя вообще не понял. Раст учится не по документации как ты советуешь. Да, я вижу что на cppreference есть секция по базису языка, но она написана в недружелюбной для вкатунов форме. Скорее что-то чтобы по-быстрому пройтись по синтаксису имея опыт.
Начал читать параллельно Липпмана. Что понял на данный момент: Липпман долбит сам язык. Уже вначале книги рассказывает в подробностях за базовые типы, как указывать тип литералов, не стесняется упоминать Юникод и всё в этом роде.
Страуструп книгу направил именно на вкатунов так как любит пофилософствовать о том как писать программы правильно. Вкратце пояснил за типы, за безопасный и не очень каст а всё остальное либо дальше будет массивы и указатели у него ближе к концу книги, у Липпмана не смотрел но вроде в начале либо тебе оно не надо. Но вообще Страуструп дружелюбнее. Он растекается мыслями часто отходя от плюсов совсем, но в то же время говорит те вещи которые важны для любого ЯП. Та самая хуйня, о которой индусы и не вспоминают даже не работе.
>Кто вообще читает книги по конкретным технологиям
Все нормальные люди. Ты не учишь язык по словарю, ты учишь его по учебнику/репетитору/индусу с Ютуба.
С ЯП/фреймворками принцип схож, просто дополнительно придется ознакамливаться с новыми версиями/стандартами языка. В идеале тоже по какой-то небольшой книге с примерами, но если к тому моменту опыт программирования есть то хватит просто почитать статью какую-то, примеры и самому накидать можно будет.
>которые меняются каждые несколько лет?
Синтаксис плюсов практически не менялся с его появления. if он и в 98 стандарте if.
>Ты вот видел чтоб пидоРасты читали какие-то книги?
Раст учится по растбуку, который, исходя из его названия, книжка. Просто они не отстали в развитии и залили его на халяву в удобное видное для всех место. И обновляют. Но там сильно решают удачные на данный момент решения из-за чего переписывать много не приходится + фанатичность комьюнити. Продаются печатные версии кому так удобнее. Правда надо отметить что книга для людей с опытом. Кто никогда не касался кодинга будет испытывать проблемы с пониманием почти наверняка. После изучения базы можно почитать растономикон который книга про некоторые более сложные вещи которые для десктопа не нужны совсем, весьма хуевую книгу по эмбеддед или туториалы по фреймворкам, по факту, тоже книги.
Так что тут я тебя вообще не понял. Раст учится не по документации как ты советуешь. Да, я вижу что на cppreference есть секция по базису языка, но она написана в недружелюбной для вкатунов форме. Скорее что-то чтобы по-быстрому пройтись по синтаксису имея опыт.
Начал читать параллельно Липпмана. Что понял на данный момент: Липпман долбит сам язык. Уже вначале книги рассказывает в подробностях за базовые типы, как указывать тип литералов, не стесняется упоминать Юникод и всё в этом роде.
Страуструп книгу направил именно на вкатунов так как любит пофилософствовать о том как писать программы правильно. Вкратце пояснил за типы, за безопасный и не очень каст а всё остальное либо дальше будет массивы и указатели у него ближе к концу книги, у Липпмана не смотрел но вроде в начале либо тебе оно не надо. Но вообще Страуструп дружелюбнее. Он растекается мыслями часто отходя от плюсов совсем, но в то же время говорит те вещи которые важны для любого ЯП. Та самая хуйня, о которой индусы и не вспоминают даже не работе.
> Ты не учишь язык по словарю, ты учишь его по учебнику/репетитору/индусу с Ютуба.
Хуёвая аналогия. Надо сравнивать изучение ЯП по книгам с изучением грамматики языков по детским сказкам.
> Синтаксис плюсов практически не менялся с его появления.
Меняется каждый стандарт. Из примеров для С++20 -> С++23: поменялся синтаксис лямбд, поменялся синтаксис ключевых слов this и auto, изменения с consteval - в том числе и синтаксис if поменялся, поменялся синтаксис индексации массивов. Это я перечислил только то что в голову сходу пришло, там ещё десяток мелких изменений. Синтаксис того что я перечислил от С++23 уже не валиден в С++20, хоть обратная совместимость и есть.
> Страуструп книгу направил именно на вкатунов так как любит пофилософствовать о том как писать программы правильно.
Только вот в его книге, как мы выяснили, код нерабочий.
>Только вот в его книге, как мы выяснили, код нерабочий.
Так и должно быть. Как еще определить что ты понимаешь код, а не копипастишь как дебил? Тот кто книгу читал, должен код понимать, понимать что он пишет, а значит исправлять ошибки. А если давать рабочий код. дебилы будут его копипастить совершенно ничему не учась, такая книга не имеет смысла.
последние книжки страуструпа очень плохие
читать стоит "язык с++ третье специальное издание" - изложение в основных главах по стилю (лакончиность, концентированность) напоминает к&r, но 4я часть ("проектирование на с++") выбивается по стилю, там больше рассуждений, возможно не очень удачная часть, которую ему стоило вынести в отдельную статью статьи а не добавлять в книгу, так же по сравнению с k&r не очень удачные дополнения, в то время как "приложение А" k&r я считаю небольшим шедевром в шедевре; самое большое достоинство в книге - это задачки на кодинг в конце каждой главы, задачи офигенные
а самая интересная книга у страуструпа - это "дизайн и эволюция языка"
вообще нужно знать что страутруп последние десятилетия разленился и нихуя не делает и знатно деграднул (типичное поведение удачного европейца кстати, в отличие от англо-саксов которые могут как белки в колесе до смерти крутиться), дохуя лет проработал в морганстенли на символической должности рубая лям баксов в год, а последние года вообще откровенно писал что мол ему больше нравится жрать и бухать в компании своих родственников и друзей чем заниматься чем то полезным
>ему больше нравится жрать и бухать в компании своих родственников и друзей чем заниматься чем то полезным
Потому что так и есть, ребёнок.
Когда взрослеешь - начинаешь понимать, что социальные связи, друзья, прогулки с собакой под приятным солнцем, ужин с друзьями - это жизнь. РАБота, даже если тебе она действительно нравится - часть твоей жизни, которую надо уметь менеджить и совмещать с тем, что я написал выше, например.
Учитывая что страуструп уже принёс довольно много обществу, если опускаться на твой уровень суждений ставя пользу в абсолют с чем я не согласен, довольно инфантльно на мой взгляд
>Когда взрослеешь - начинаешь понимать, что социальные связи, друзья, прогулки с собакой под приятным солнцем, ужин с друзьями - это жизнь.
До скольки надо повзрослеть?
>"Когда взрослеешь - начинаешь понимать, что социальные связи, друзья, прогулки с собакой под приятным солнцем, ужин с друзьями - это жизнь."
>вместо жизни сидит на дваче кукарекает
Баба, говорит одно, делает наоборот.
Хотя бы до возраста страуструпа
>>029585
>>029681
Вы только посмотрите, крестопетухам ИТТ неприятно от того, что их мокнули их петушиной бошкой в реальность.
Я понимаю, сложно её принять (реальность); вдруг осознать что ты ноулайфер-вскукарек, да ещё и из категории крестопетухов - не так-то и просто. Включается коупинг и прочие оправдания.
>бать а напомни кто твое авторитетное мнение по этой теме спрашивал
Это двач сынок, ты тут новенький да?
>Баба
Инцела видно издалека, из глубин подсознания всегда всплывает самое больное
Вы бы так не напрягались! А то и до 30 не доживёте. Сходите лучше проветрите мысли и наконец перекатитесь на нормальный язык уже, жизнь корттка!
>Я понимаю
Ты? Видишь ли, ковырялка, чтобы тебя ебали достойные аноны, это ещё надо заслужить. Проблема в том, что ради удовольствия мало кто хочет тебя ебать - не вышла ни жопой, ни сиськами, ни мордашкой. Остаётся только ебля тебя без смазки, в качестве наказания. На сухую. И даже это лениво. Так съебись уже - ты уныла, ты очень уныла.
Не должно, он примеры показывает. И в книге никто ничего за то что должно происходить если вместо числа пихать строку не написано. Точнее, по факту сказано что должно быть то же самое что и было в переменной изначально.
>>029131
>Надо сравнивать изучение ЯП по книгам с изучением грамматики языков по детским сказкам.
Это уже от книги зависит.
>Синтаксис того что я перечислил от С++23 уже не валиден в С++20, хоть обратная совместимость и есть.
Тем не менее, старый ты знать обязан будешь ещё лет 20 а новый сейчас почти никто пока не использует.
>>029148
Но я не читаю последнюю, я читаю уже десятилетнюю книгу. И задачки в конце разделов там тоже есть.
>а последние года вообще откровенно писал что мол ему больше нравится жрать и бухать в компании своих родственников и друзей чем заниматься чем то полезным
Ну, т.е., нормальный человек, не собирается подыхать за монитором.
>>029187 прав алсо чекай как Стив Жеппс слинял с компании когда понял что сдохнет через полгода.
>>029400
Надо чтобы жизнь не хуйнёй была как у типичного стереотипного двачерка. Иначе тебе будет нравится долбить хуйню потому что тебе больше нечем заняться в жизни.
> потому что тебе больше нечем заняться в жизни.
Тебе сколько лет? А я назову челое число, которое надо вычесть из твоего возраста, чтобы получить мой.
А?
>а скуфы все о хуях
Это точно. Хуй это голова всему. А пизда, она кому кормилица, а кому и обуза.
А хуле пиво-то? Чего бы и не благородного чего? Коньяка там или водочки качественно, а можно и абсентом закинуться.
> Плюсы для умных, с горящими глазами
А хуле умные такое говно сделали?
Хуле у людей с горящими глазами модули из 20 стандарта уже как 4 года это неработающая нечто?
>Вопросы спрашивать
Охуел? Я сюда пиариться пришёл через ответы на вопросы.
Ты кого вкатуном обозвал?
>Плюсы для умных, с горящими глазами
Двачую, иначе вкатиться не в галеру невозможно, спросят что делает мув и после ответа "мувает" быстренько закончат собес. Если вы не готовы потратить полтора-два года на глубокое изучение языка то даже не начинайте, вы максимум вкатитесь в яндекс перекладывать жсоны на userver-е и будете сидеть на одном грейде по 3 года.
> неработающая нечто
Почему-то у всех кто их использует всё работает. В том числе у майков std и виндоаое API на модули переведено. За последние годы уже всё вылизано, как в компиляторах, так и в IDE. А хедеры - это реально кал, из-за них до сих пор имеем header-only либы и cpp-файлы в 10к строчек, от которых страница на гитхабе зависает намертво при попытке навигации в коде.
13 грейд стажер
14-15 грейд - джун
15-16 - мидл
17 - сеня
18 - ведущий разработчик
Что тут более гибкого я не знаю, лол. Такие же стажеры - джуны - мидлы и сеньки.
>А хедеры - это реально кал
Хидеры это заебись.
>и cpp-файлы в 10к строчек
Разве что автосгенерённый.
У нормального разработчика с 1.5К строчек начинается желание декомпозиции, а к 2К строчкам он обычно это желание реализовывает.
И да, никто не заставляет тебя тащить всё в хидеры, достаточно вынести туда некоторые типы данных и интерфейсы.
Хуй поймёшь с чем ты борешься.
Ты же сам промежуточные грейды написал, вот до них и подниматься.
1 год - стажер
1-3 года - джун/премидл
3-5 лет - мидл/пресенька
5+ сенька
В менеджмент по желанию и возможности, или уходить туда где есть грейды повыше типо Staff/Principal
> Хидеры это заебись.
Из них вечно протекает какое-то говно, инкапсуляция нулевая. Когда несколько зависимостей в одном файле ещё надо ебаться с порядком инклюдов, чтоб из одного не текло в другой и код не ломался. Зачем вся эта ебля, когда можно её не иметь.
> Разве что автосгенерённый.
Ты видимо не видел крупных популярных крестовых проектов на гитхабе.
Вот держи проекты с 50к звёзд, причём никого это не смущает, крестовики с основной массе считают это хорошим кодом:
https://github.com/ggerganov/llama.cpp/blob/master/llama.cpp
https://github.com/ocornut/imgui/blob/master/imgui.cpp
Я отлично знаю какие там грейды, вопрос не в этом.
Сколько лет по твоему занимает рост от Джуна до мидла, от мидла до сеньки?
Я же уже расписал. До мидла - 3 года, до сеньки - 5. Это если авераге компанию брать конечно, в нвидии сеньки это 8+ лет опыта, а в гугле сенька с 2-мя годами опыта может быть.
Ну вот я и не согласен, что 5 лет это сенька. На мой взгляд это что то между мидлом и сенькой. Поэтому и грейд в 3 года имхо нормально.
Не знаю, у меня хоть линукс и рабочий ноут, но команд вообще не знаю кроме базы пм мв сп сд греп. И баш немного, чисто рутину снизить.
Кыш отсюда. И не тащи бред.
Плюсы нужны не для написания программ, где нужен юникод. Они нужны, чтобы реализовать этот самый юникод.
>из коробки
Он еще и в нетворкинг без коробки не умеет, тем не менее весь хайлоад на нём живет. Представляю как ты охуеешь когда узнаешь про существование библиотек..
Пиратство.
Захотел наехать на ОПа, мол, зачем ты сюда "китайские мультики" тащишь, мол, тема серьёзная.
Но потом пригляделся к картинке и заметил вот это.
И сразу ничего плохого в "китайских мультках" не вижу. Хорошие мультики.
В 4 это жавая какая нибудь, а питон поди в 40
Сейчас бы обоссаный нонейм на имгуи пиздел лол. Вот потека.
Ну так сессии в вузиках закончилась, хеш-таблицы и сортировки сданы, теперь можно повыёбываться, пока каникулы.
> хеш-таблицы
И эту животинку тоже не надо обижать.
std::map конечно хорош, прекрасен и заебат.
Но для кастомного случая так же пишется кастомный хэш и им можно ебать std::map - насколько бы прекрасно не был написан std::map, но реализованная опытными руками хэш-таблица порвёт в клочья std::map по скорости, простоте и эффективности.
Летом покупал бандл из решарпера, райдера и еще какого-то дерьма.
через своего человечка в ОАЭ. регистрировал мне аккаунт тоже он, со своего айпи
>unordered_map
Ты прав, а я лоханулся.
Но если самому писать, то можно обогнать по скорости и его. В каких-то частных случаях.
Сегодня весь путь на работу бежал за автобусом. Сэкономил 10 рублей. Завтра побегу за такси — экономия еще больше!!!
It depends.
В общем случае ты прав. Нынче экономить биты и такты не нужно.
Но вот есть люди, которые несчастливы, если не сэкономили ни бит, ни такт - день зря прошёл. И изредка такие проекты тоже бывают. Очень редко, но бывают. И иногда такие люди и такие проекты пересекаются.
Не надо ничего писать. Уже есть флэтмап/пхмап которые ебут стдшную. Ну и на си тоже есть пара быстрых
>Не надо ничего писать.
Тоже верно. Достаточно спиздить годную хэш-функцию, а уж использовать её и школьник сумеет.
>Это ты про какой язык? Кресты уже с С++11 имеют поддержку юникода в std.
Ага, особенно на винде.
Да и на винде, ты серишь же. С С++11 есть поддержка как виндового UTF-16, так и обычного UTF-8.
Раз я серю, скинь мне код C++, который выводит вот это сообщение в консоль.
Под виндой консоль юникод не поддерживает из коробки, а не кресты. Переводишь консоль в режим юникода и пишешь туда.
Кто нибудь объясните пж за этот пассаж в cppreference:
If a union contains a non-static data member with a non-trivial default constructor, the default constructor of the union is deleted by default unless a variant member of the union has a default member initializer.
Допустим , есть
union M {
bool var1 {false};
S var2 //нетривиальный дефолтный конструктор
}
Каким образом компилятор понимает, как нужно дефолт конструкировать M m, если я инициализовал только var1? Я понимаю, если бы я инициализировал var2, ведь он то как раз и нетривиальный, разве это не значит что нужно указывать информацию именно о нем?
А оно компилируется???
Что непонятного? Для чего указал дефолт, то и конструируется. Два дефолта для юниона нельзя указать. Если не укажешь дефолт для любого мембера - у юниона дефолтный конструктор будет удалён и надо будет инициализировать юнион вручную.
>>031221
>КАНСОЛЬ ПЛАХАЯ, МАМ, ЕЗЫК ХАРОШИЙ!!!111ЁЁЁ
1) Для теста я использовал ConEmu
2) Все протестированные мной языки - а я специально проверил: Java, Rust, Go, Node.js, Python - не испытали с обеими консолями (стандартный terminal и conemu) никаких проблем
>>031242
>windows.h
>SetConsoleOutput(65001)
Как дела с переносимостью?
> КАНСОЛЬ ПЛАХАЯ, МАМ, ЕЗЫК ХАРОШИЙ
Консоль не часть языка, консоль часть винды, ты тупостью троллишь?
>Консоль не часть языка, консоль часть винды, ты тупостью троллишь?
Ни у одного другого языка с этой консолью проблем нет, ты жопой читаешь?
UTF8 решает эти проблемы. Да и суррогаты это не так уж страшно, как может показаться.
Другое дело что 32 бита для символа это очень удобно на 32х битных архитектурах.
16 бит на символ в Винде вполне объяснимы. Винда начала разрабатываться на Intel 80286. Были такие компьютеры - IBM PC/AT-286. А процессор 80286 - 16-ти битный.
Чему можно удивиться, так это насколько неплохо спроектирована графическая оболочка Винды, что "костыли", заложенное несколько десятков лет назад, живут и здравствуют до сих пор.
> Винда начала разрабатываться на Intel 80286
Какая винда? Ядро NT полностью с нуля переписано.
Ты хочешь сказать что дефолтному конструктору юниона достаточно лишь одного инициализированного члена для создания объекта? А когда их уже двое и больше, то он не может выбрать под какой объект создавать, но при этом если все члены тривиальные, то этой проблемы нет
Т.е.
M m; // создается юнион с активным членом bool
S n; // объект класса с нетрив конструктором
m.var2 = n; //теперь var2 активный член
>Какая винда?
2.xx
Насчёт третьей не помню, вроде тоже на 286 запускалась.
> Ядро NT полностью с нуля переписано.
Я знаю. И это отдельная тема.
А знаешь ли ты что то ядро NT с тех пор не переписывалось ни разу, а к нему лишь добавлялись новые фичи?
Например, в Windows 2000 ввели в драйверах управление питанем и старые драйверы отвалились.
> Как дела с переносимостью?
С переносимостью куда? Ты сначала просишь сделать под виндой, теперь уже под виндой нельзя, шизоид. Тебе уже написали что это проблема терминала, не умеющего выводить юникод, а не крестов. Ну и даже в сишке можешь написать ifdef _WIN32, никто не запрещает делать только под виндой SetConsoleOutputCP, а на линуксе не использовать это. Либо юзер должен поставить галку пикрилейтед, чтоб консолька по умолчанию работала в UTF-8, но это может сломать легаси софт с ХР, выводящий текст в легаси-кодировках типа Windows-1252.
>>031442
WINAPI является легаси уже давно. Так же как и поддержка нормального юникода есть с десятки.
> А когда их уже двое и больше
То код не скомпилируется даже. Ты бы хоть свои фантазии проверял на практике.
>Как дела с переносимостью?
Очень плохо. Можно скзать даже полный пиздец.
Это ж надо в коде такое написать.
#ifdef _WIN32
SetConsoleOutput(65001);
#endif
Я на такое не подписывался! Это ужасно!
> Как дела с переносимостью?
Держи, даже без вызовов WINAPI, если вдруг у тебя нет windows.h.
>Ты сначала просишь сделать под виндой, теперь уже под виндой нельзя, шизоид.
Можно, просто нужно, чтобы и не под виндой нормально отображалось.
>Тебе уже написали что это проблема терминала, не умеющего выводить юникод, а не крестов.
Чел, причем тут терминал? Я тебе в третий раз повторяю, все остальные языки не испытывают никаких проблем с этим терминалом. Безо всякой ебли с #endif'ами и прочими SetConsoleOutput'ами. Ты мне продолжаешь ебать мозг, что у меня не тот терминал. Ты что, дурак?
>Либо юзер должен поставить галку пикрилейтед, чтоб консолька по умолчанию работала в UTF-8
Чел, блять.
>все остальные языки не испытывают никаких проблем с этим терминалом
Все остальные языки неявно вызыват ту самую - SetConsoleOutput(65001);
JFYI
>Не с этим. У них свой терминал и накладные расходы соответствующие.
Что у них там свое, блять? Ты совсем поехавший?
>>031731
>Все остальные языки неявно вызыват ту самую - SetConsoleOutput(65001);
И только в великом C++ в 2024 веке это нужно делать врукопашную, охуенно. Если там простой вывод юникода в консоль организован таким чрезпиздяным изподвывертом, боюсь представить какие сюрпризы меня ждут при написании чего-то сложнее println("Hello World"). Охуенный язык, программирования, ничего не скажешь.
> все остальные языки не испытывают никаких проблем с этим терминалом
Это какие? Раст в консоль на винде пишет в UTF-16, он как раз не поддерживает нормальный юникод, чмоха.
> Безо всякой ебли с #endif'ами
То что у тебя неявно строки конвертятся или вызывается WINAPI по умолчанию, ещё не значит что твои ЯП умеют в юникод на винде просто так.
> акие сюрпризы меня ждут при написании чего-то сложнее println("Hello World")
Нужно явно указывать перевод строки, иначе следующий вывод "Hello World" прилепится к предыдущему. вообще ужас.
> врукопашную
Заебись низкоуровневый язык, дёргающий всё подряд из WINAPI даже не спрашивая тебя. С таким подходом можно и на питоне писать, он за тебя всё сделает.
> Охуенный язык, программирования, ничего не скажешь.
А теперь ор для всего треда - как в расте выводится юникод в консольку винды. Скрин из std пидораста.
Покажи вывод скомпилированных прог на питоне и жаве
Что низкоуровнего в printf? Это же кластерфак мегатонн говна, высочайшего уровня, почти язык программирования со своим синтаксисом. Если нужен низкий уровень, для него есть соответствующие функции, но даже они - обертки для конкретных осей, так что если надо действительно чисто, юзаешь апи оси напрямую. Си позволяют всё, программисту доступны любые уровни, язык за тебя ничего не решает. как в скриптоговне для макак тупых, которые ненавидят думать, вот и привыкли, что за них дядя решает и рвутся от сей где надо своей головой думать и принимать решения имея множественный выбор вариантов.
>Что низкоуровнего в printf? Это же кластерфак мегатонн говна, высочайшего уровня, почти язык программирования со своим синтаксисом.
printf охуенен. Просто охуенен.
Вот у меня в чуланчике припрятана реализация (чужая) snprintf, которая работает без операционной системы. Чисто функция, которая пишет в строку по всем правилам форматирования printf.
Ты часом не Дон Кихот, который воюет с ветряными мельницами?
Пиздуй нахуй, говно.
У меня как раз 2023 стандарт, MSVC вся хуйня
проиграл с тебя, опытный чушок, что ты там напишешь своими потными, волосатыми, заплывшими жиром ручонками? А уж если и напишешь - сразу кидай пулреквест в стдлиб
>сразу кидай пулреквест в стдлиб
Тупая пизда, пущай в твоей наплечной параше, именуемой в народе головой, возникнет хоть одна светлая мысль, а именно - в stdlib/stl не нужны кастомные решения под конкретную задачу.
Заруби себе это на носу!
>Подскажите пожалуйста, как засунуть в сборку картинки для проекта ?
MSVC или GCC? В ресурсы, если MSVC.
Насчёт gcc точно не скажу как, но я обычно пишу программу из 15 строчек, которая переводит двоичные файлы в си-файлы вида
extern "C" const char picture1[3400] = { 0x11, 0xf3,
не сказать, что это красивое решение, но работает идеально.
Возможно что пока топтал этот ответ, кто-то уже по-красоте расписал.
>раст
любая ф-я выполняющая действительно полезную работу, на 3-4 строке: unsafe {
и пошли говнякать
как же я проигрываю с промытых фанатиков
Конечно не называю, ведь плюсовики не умеют складывать...
Какие подводные в такой фиче могут быть?
> std::tuple
ну я имею ввиду менее bloat способ возвращать аргументы
да и разве если я стандартную либу вырублю tuple останется?
Ты совмем отупел со своипи плюсами? Делаешь нужную структуру, функция возвращает структуру . Все.
И под каждую функцию фигачить структуру, которая ещё будет юзеру протекать? Так ещё юзеру каждое поле из структуры доставать и дожить туда куда ему надо?
В том что в некоторых случаях ее использовать нельзя и в проектах ее вырубают, а фичу все равно хочется
Да и странно что фича зависит почему то от состояния стандартной либы
Проиграл с этого оладушка.
Стандартная либа это часть языка, что ты там отключать собрался? Более того, стандартные заголовки могут не быть физическими файлами на диске.
> что ты там отключать собрался
Стандартную библиотеку
> Более того, стандартные заголовки могут не быть физическими файлами на диске.
И что из этого следует?
std::tuple у тебя без стдлиб работает или нет?
если нет, то зачем ты мне вообще это написал?
Пикрилейтед.
>>032758
Если напишешь свою стандартную либу, то конечно будет работать. Синтаксис не поменяется от отсутствия стандартной библиотеки. Но тот кто переписывает std - конченые дегенераты, потому что std даже без ОС работает, нет ни одной причины почему её нельзя использовать, кроме того что ты даун.
Похоже этот чел в нии работает, знаю пару таких, где СТД запрещен.
> потому что std даже без ОС работает
cout у тебя как без ос работать будет, а vector?
> нет ни одной причины почему её нельзя использовать, кроме того что ты даун.
Как будто это я всем запрещаю ею пользоваться, просто по факту это много кто делает
> Если напишешь свою стандартную либу, то конечно будет работать.
А если не буду переписывать стандартную билиотеку, то не будет работать?
> Пикрилейтед.
Ты возвращаешь одно значение
Основной функционал std работает без ОС. И представь себе, динамические аллокации из std будут работать без ОС. В линуксе динамические аллокации предоставляет libc, а не линукс.
> cout у тебя как без ос работать будет
Как обычно, в микроконтроллерах в качестве stdout будет вступать JTAG, в него и будет писать cout.
> а vector?
Тем более нет никаких проблем.
> Ты возвращаешь одно значение
Ты совсем дегенерат, да?
>И что из этого следует?
То что некоторые/часть стандартных заголовков это не просто код в файлике, а часть самого языка.
>The Language Support Library The Language Support Library defines types and functions that will be used implicitly by C++ programs that employ such C++ language features as operators new and delete, exception handling and runtime type information (RTTI).
>>032758
>std::tuple у тебя без стдлиб работает или нет?
Вопрос бессмысленный. Переформулирую: работают ли части языка, если мы их выбросили? Потому-то я с тебя и проиграл, оладушек. Можешь, кстати, еще объяснить как ты собрался либу стандартную отключить, тоже покекаем.
>>032788
> без ос
> в Линуксе
Что прости?
> Ты совсем дегенерат, да?
У тебя из функции возвращается одно значение, что тут не понятного?
> Тем более нет никаких проблем.
Давай я тебе дам голую железку без ос да, даже без линукса, а ты попробуешь на нем вектором воспользоваться
>>032792
> То что некоторые/часть стандартных заголовков это не просто код в файлике, а часть самого языка.
Тапл в этот список входит?
> Переформулирую: работают ли части языка, если мы их выбросили?
Как это может быть частью языка, если тапл сам написан на плюсах?
> Можешь, кстати, еще объяснить как ты собрался либу стандартную отключить, тоже покекаем.
Не линкуешься с ней и все
> Что прости?
Для использования libc тебе не нужен линукс, деб.
> У тебя из функции возвращается одно значение, что тут не понятного?
Ты синтаксис крестов не знаешь? auto [a, b, c] - объявление трёх переменных.
> Давай я тебе дам голую железку без ос да, даже без линукса, а ты попробуешь на нем вектором воспользоваться
Легко, если под микроконтроллер написана std с его поддержкой. На Ардуино вектор работает, ты бы не позорился тут.
> Для использования libc тебе не нужен линукс
А я говорил что это не так?
> auto [a, b, c] - объявление трёх переменных.
Как твои переменные меняют факт того что сигнатура твоей функции возвращает одно значение
> если под микроконтроллер написана std с его поддержкой
А если не написан?
> сигнатура твоей функции возвращает одно значение
А это что, блять? Дай будем учить тебя считать до трёх, как карапуза.
Это типы которыми ты параматризуешь другой тип
Функция у тебя возвращает одно значение типа: std::tuple<int, int, int>
Что собственно в сигнатура и написано, просто ты потом этот тапл распакуешь на несколько значений
Ты реально траллишь тупостью? В любом языке так же будет, тапл - это кусок памяти с несколькими значениями. Как таких дебилов в НИИ держат?
>Пикрилейтед.
Охуенно. В том смысле, что пишу на плюсах со времени Borland C++ под MS-DOS, но от некоторой конструкции в твоём скриноште охуел.
"Дед, ты стандарты не учишь!" - скажете вы. По-е-бать.
Для какого-то проекта будет достаточно скопипастить код со скриншота и не думать. Но!!!
Я утрирую, но когда нужно выебать по скорости всех-всех-всех-всех. Жёстко выебать по скорости, то, я утрирую, делается так:
В main выделяется структура с нужными полями и дальше указатель на неё гонится хоть до 1000-го уровня вложенности.
Функции чего-то там читают/заполняют в полях структуры.
Экономия выходит за счёт минимазии количества параметров, которые кладутся на стек при каждом вызове функции.
Как язык может быть языком, если компилятор плюсов написан на плюсах?
А на чем блять ещё должна быть написана стандартная библиотека? На святом духе?
Во первых для возвращения нескольких значений тебе тапл как структура данных в языке не необходима
Во вторых
> В любом языке так же будет, тапл
Только он не будет частью стандартной библиотеки, а типом встроенный в сам язык
Делай ассемблерную вставку, клади возвращаемые значения в регистры откуда будешь читать.
Либо принимай по ссылке значения для возврата и ничего не возвращай.
>но и С можно пользоваться не используя libc
И С++ тоже. -nostdlib
При этом классическая stl отваливается, но можно найти в Сети её суррогаты, которым OS не нужна.
> Как язык может быть языком, если компилятор плюсов написан на плюсах?
Поэтому компилятор и не часть языка
Ты отпугиваешь адекватных новичков.
Зайдет зелёный в тред, а тут шиз стандартную библиотеку отключает.
> В main выделяется структура с нужными полями и дальше указатель на неё гонится хоть до 1000-го уровня вложенности.
Сколько там будет кэшмиссов из-за того что структура где-то в начале стека валяется?
> Экономия выходит
Нет никакой экономии, в тапле значения лежат радом друг с другом, а в [a, b, c] три ссылки на них. По факту они будут в регистрах лежать, если это примитивные типы, вообще без записи на стек.
> Ссылки
Вообще не факт что ссылки, зависит от способа создания. Мейк тапл делает копии. Для явных ссылко либо студ реф/креф, либо форвард тапл.
> Только он не будет частью стандартной библиотеки, а типом встроенный в сам язык
В крестах он тоже будет работать, но как просто указатель на кусок памяти. Синтаксически будет всё так же как с таплом, но тип другой и нет безопасной работы со значениями.
Про copy elision слышал? Это всё не важно, оно всё равно будет перемещаться. А то что при создании тапла надо копировать что-то - тут уж без вариантов, как ты ещё значения рядом в памяти положишь без копирования. На выходе всё равно получишь кусок памяти и ссылки на значения в ней.
Я тебя не так понял.
Меня такой шизой не отпугнешь, я читал кишки stl'я.
> Стандартная либа это часть языка
> std даже без ОС работает
Весь эмбедед вышел из треда
Два студента посрались опять
Ты хотя бы поясни чем вызвана такая реакция?
Тоже начал вкатываться в айти, в унике проходят с++, но тк это уник и всем на обучение похуй - решил дома самостоятельно изучать. Нагуглил роадмапу, там предлагают Стивена Прату, сел читать его книгу, но по плюсам. Это плохой выбор? Чем он плох и какая есть хорошая замена?
Мимодругойанон.
Вкатуны вообще могут объяснить зачем читать научную фантастику по мотивам приключений страусов, а не cppreference? Я ещё понимаю стандарт тяжело читать, он написал своеобразно чтоб как можно меньше двусмысленности в тексте было, но cppreference сильно проще же. Просто сверху-вниз по разделам читаешь и всё. Да, там многое пропускают из того что в стандарте написано, но как минимум не будет засерания башки высерами книгописак. Даже перевод есть какой-то, если совсем с английским плохо.
>Сколько там будет кэшмиссов из-за того что структура где-то в начале стека валяется?
Приблизительно ноль. В ТLB ззастолибится. Если переключений контекста не много, то кэшмисс вообще можно не рассматривать.
А вот если процессов много и они борятся за процессорное время, тогда твой аргумент принимается.
Есть.
Есть один проектик на Qt, который собираю на андроид. Раньше всё было ок, но в один прекрасный момент компиляция вместо пяти минут стала занимать 30. А всё из-за того, что clang стартует и секунд по 20-30 чего-то ждёт (на скрине как это выглядит). А потом только начинает работать. На другом компе всё ок
Пытался на другой диск сам проект уносить и ndk, но всё равно картина схожая. При этом студия visual studio собирает так же резво, как и всегда
Может у кого-нибудь будут годные советы или идеи, что может быть не так
Проц 24 поточный, поэтому не должно быть проблемой. Но уменьшил до 5 - та же хрень. Точно так же он стартует, несколько секунд ждёт (ну, 20-30 я загнул, но секунд до 10 он ждёт) и потом начинает работать
>Тоже начал вкатываться в айти, в унике проходят с++
Тогда читаешь К&R, обязательно выполняешь все упражнения, обязательно читаешь приложение А и читаешь его до тех пор пока не поймешь.
Далее уже читаешь учебники по структурам и алгоритмам. И прорешиваешь 200-300 алгоритмических задач на любом из контестных сайтов.
Это лучшее что ты можешь сделать для начала своей будущей карьеры.
И второй лучший совет который могу дать - это НЕ изучать с++ в универе, а уже нам ближе к старшим курсам выбрать себе другое направление (хотя бы ту же явку) и специализироваться на нем.
> НЕ изучать с++ в универе
> выбрать себе другое направление (хотя бы ту же явку)
Шило на мыло
second edition
Твои советы неплохи, но K&R style написания функций... Его хоть поддерживают современные компиляторы?
Любитель Мун, тред перекатывается после 1000 постов
Чтобы всякие шизы в тред не заходили
как тот анон выше, который и тут, и в расто треде успевает настрать
Этот тред тому подтверждение
Как видишь срачи с крестовиками у пидорастов, а не у нас. Значит всё нормально.
>K&R style написания функций... Его хоть поддерживают современные компиляторы?
В годболт запихай. Было бы странно, если бы хотя бы гцц и вц не поддердивали этих зубров.
powershell и стоит
Только оригинальные рукописи Кернигана и Риччи.
Кто?
> gcc под виндой в vs code
Шутка дня, не иначе. Поставь CLion, он за тебя сделает всё, даже тупой разберётся куда тыкать в окне настройки тулчейна. А на вскоде гугли как настраивать это говно, можешь найдёшь истории таких же пердоль, я не удивлён что там присутствует ебля под виндой с чем-то отличным от msvc.
Это не пробел, а шрифты у него на микромониторе съезжают, видишь там нет промежутка между символами, е желтит слева.
Ты не только не программист, ты даже программу на винду установить не в состоянии. Тупизна уровня бабы сраки.
вангую не те пути в пас прописались после переустановки
>Шутка дня, не иначе
Для вас может быть и шутка. А вот я действительно не знал где ещё можно удобно работать. Изначально сидел на студии, но в конечном итоге она надоела своей медлительностью. А про какие-то аналоги в виде CLion я не слышал.
>>036904
Разве я сказал, что являюсь профессиональным программистом? Я скорее любитель, и не собираюсь отбирать у тебя хлеб, если ты так об этом беспокоишься. А что касается твоего совета, то ты в принципе оказался прав. Я забыл добавить второй путь до папки с dgb. Теперь всё работает.
Всем спасибо за советы и предположения.
>но в конечном итоге она надоела своей медлительностью
Студияя и медлительность? Что у тебя за железо? Сколько памяти?
У меня ничего не тормозит.
Немного неправильно выразился. По какой-то причине у меня долго прогружаются стартовый экран студии, меню выбора шаблона и подготовка проекта. Всё это обычно занимает 1-2 минуты. Также крайне редко бывают 1-2 секундные прогрузки во время работы, но это уже мелочи. Железо: i5-8400, 16 Гб, 1060 6gb.
Это просто феерический пиздец.
Ты программист или эникейщик?
Ты кому эти советы принёс?
Что ты вообще в этом треде делаешь?
Прочитай внимательно что тебе программа пишет, если не знаешь английский то используй переводчик
он пишет что не может найти файлы по твоим путям
Во первых, зачем ты передаешь в компилятор экзешник?
Во вторых, скорее всего второй файл с исходным кодом он даже найти не может
> это ж вроде самый популярный редактор как-никак
Не для плюсов
Короч отбой нахой, ему амперсанд не понравился в названии пути (k&r), мне компилятор об этом сообщил только тогда когда я код в tasks.json заменил на тот, что у них в мануале
> Не для плюсов
Но хз, я в гайдах постоянно вижу что его юзают, а какой тогда самый популярный? Мне так чисто, из любопытства, я все равно на нем останусь, вернее не только на нем, я еще студию осваиваю.
> Но хз, я в гайдах постоянно вижу что его юзают, а какой тогда самый популярный?
Студия/Clion
> Студия/Clion
Ну VSCode я по любому держать буду, мне еще питончики всякие понадобятся, джаваскрипты и всё такоё, а что касается IDE, я сейчас пока только вкатываюсь, мне другие среды будут только лишним гемороем, не отрицаю, что они вероятно могут быть лучше и удобнее, но считаю, что надо исходить из того, что более популярно в начале пути, по чем быстрее и вероятнее инфу найти когда какая нибудь запара и непонятка случается
> надо исходить из того, что более популярно в начале пути, по чем быстрее и вероятнее инфу найти когда какая нибудь запара и непонятка случается
Студия.
Вообще не понял причины твоего возбуждения.
Та мне просто интересно посмотреть какие команды выполняются под капотом, якобы они как будто печатались прямиком в консоль
>Почему можно как параметр функции указать int p[], но нельзя int p[][] без указания размеров столбцов? Хочется понять логику такого поведения
int p[] - по сути указатель на первый элемент массива.
int p[][] - хуй знает что. Можно было бы сказать что это массив указателей, но нельзя. Потому ччто двухмерный массив в мамяти это просто последовательность элементов. Это просто логическое разделение на строки и столбцы.
Печально это.
При передаче в функцию массив декеится в указатель на тип массива , int p[] становится int star p.
При двойном массиве p[][] данные идут последовательно, но у тебя неизвестен размер внутреннего массива, поэтому невозможна адресная арифметика, и для нормальной работы компилятора надо его указать: например p[][10] сдекеится на указатель на массивы по 10 интов.
Открой его (файл проекта) в редакторе и посмотри.
И .sln тоже посмотри, чтобы убедиться что внутри его только отсылки к проектам.
Далее. Посмотреть на процесс компиляции можно окне Output. А именно - компиляция каждого изменённого файла, а затем их линковка.
ну хочешь смешное почитать скину
https://ledas.com/post/857-how-to-hack-c-with-templates-and-friends/
Мне просто лень тут сидеть, стабильно одна студентота спрашивающая как очистить вектор. Если хочешь нормальных дискуссий заходи в @ProCxx в телеге.
> Посмотреть на процесс компиляции можно окне Output.
Так а что толку туда смотреть? Ну посмотрел я на имена файлов которые компилируются как на пикрил, мне надо посмотреть на команды подобно этой из которых состоит сборка под капотом:
$ gcc -static myfile.c -L/user/local/math -lmath -o execfile
В настройках свойств проекта, у компилятора и линкера есть страница "командная строка".
Читать означает не произносить буквы, а понимать смысл написанного, думать головой. Тупая башка не может думать, а значит и читать не может, "смотрит в книгу, видит фигу вместо написанного".
Петровско-разумовская, послезавтра в 5 часов, жду тебя с красной розой.
>Читать означает не произносить буквы, а понимать смысл написанного, думать головой.
Ну это, если бы точным, не всегда так. Например, вот:
나는 한국어를 읽을 수 있지만 읽은 내용을 이해하지 못합니다.
Всегда. написанное это не буквы и не слова, а мысль которую написавший хотел донести до читателя. Автор что-то подразумевал, и задача читающего правильно понять что. Это мыслительный процесс - чтение. Дебил читать не может, ибо не думает, а тупо произносит буквы и слова не думая о смысле.
Представим: есть контейнер с структурой, у структуры К полей. Как наиболее идеоматично собрать новый вектор по одному из полей?
>Мне вообще пофиг какой там код генерится.
Вот это и печалит. Не понимаю тогда зачем тебе нужен С++. Потому что это модно было 20 лет назад?
Потому что мне платят за код на нем? Тем более что всю эту хуйню в язык тащат. Надо же пользоваться, а то буду как деды с НИИ сидеть ныть.
Да и мало языков, которые позволяют такую хуйню делать.
Завтра может скину годболт, щас мне уже лень. Честно говоря думаю там ничего страшного не будет.
>Завтра может скину годболт, щас мне уже лень.
Чисто из любопыства было бы интересно глянуть. Да и для саморазвития тоже. И вероятно не одному мне.
> а понимать смысл написанного
И каков там смысл написанного? <different options>, различные опции. Что это значит?
Нахуй...
Да вроде одной строкой делается, если не надо более общие случаи обрабатывать.
Согласен, но я хотел принципиально без лямбд.
Пусть язык сам да меня это делает.
>>038483
Гляди.
https://godbolt.org/z/qs7q4vEaT
Оптимизации вырубай, а то там ничего не понять(мне)
В с++23 можно будет лучше:
Завезут ranges::to и можно будет говнокодить такое:
ranges::views::transform_view(cont, proj) | ranges::to<vector<int>>()
Это в с++14-17 не идеоматично, а в с++20-23 лямбды для лошков😎
Хмм. Я разделил твой пример на два и сравнил чем же отличается.
Собственно вот на картинке пример, чем отличается первый способ от второго.
Ничем. При -O3
Познавательно.
Ну так и тут не рокет саенс, а просто трансформ вектора
Если бы даже тут что то ломалось, в реальном мире совсем кашмар бы был
Это правда.
Я бы хотел посмотреть что там выведет через трансформ вью и ренжес ту, но этот код нигде ещё не компилируется.
> можно будет
Стандарт уже финализирован и всё это есть реализованное в std как минимум у майков.
Лучше бы они за паттерн матчинг взялись и наконец релизнули <reflection>. Вот тогда бы началась настоящая магия.
Увы, Смаке и гцц пока не релизнули. Да и 23 стандарт ещё не скоро в прод пойдет.
>>037130
Ну и чего вы сидите тут такие высиживаете, вот только что был спор с одним аутистом, объяснял ему что компилятор либо вообще не учитывает локальность кэша, либо если учитывает, то настолько поверхностно, что можно считать, что не учитывает вообще. И ещё пояснял ему за то, что лто ни за что не сравнится с ручным инлайном. А он так и остался в полнейшем неироничном отрицании, я уже начал думать, что он меня троллит, а не, оказывается реально аутист без эмоционального интеллекта, и его стриггерило. Вы же не такие?
Лто вообще выдаст совсем другой двоичный код для геев, если что
> Смаке
Он-то тут причём. Да и поддерживает он всё, недавно они наконец сделали полную поддержку модулей, а не как раньше частичная была. Теперь как белые люди живём, всё из коробки есть. Даже модуль std с cmake работает.
Тогда у нас argc = 2, argv[0] = "имя программы", argv[1] = "qwerty".
Если я верно понимаю, консоль (процесс cmd.exe или, например, bash) в ходе запуска нашей программы передают ей эти аргументы.
Какую именно информацию об этих аргументах получает наша программа?
Получает ли наша программа информацию о точной длине строк argv[0] и argv[1]?
Если получает, то как её нам заполучить и использовать внутри main() {} нашей программы ( чтобы не делать, например, strlen(argv[1]) )?
нахуя плюс зачем
даже если аргумент макаисмальной длины (какой там лимит? 64к?) стрлен измеряется микросекундами
что на фоне старта ебучего процесса не заметно никак
> длине строк
Сишные строки обычно null-terminated. Просто набор байтиков, а в конце ноль.
> как её нам заполучить
Только пройтись по строке и найти ноль.
>Получает ли наша программа информацию о точной длине строк argv[0] и argv[1]
>не делать, например, strlen
Получает, если ты передашь длину строк в аргументах argv[2] и argv[3], например.
Ты собрался передавать эмодзи в аргумент? Тебя любая консольная утилита нахуй пошлёт с таким, такое даже не стоит рассматривать как реальный кейс. В винде на пердоликсе сами проверяйте вместо русских букв 3f в аргументе знаки вопроса, при любых кодировках бинарника/терминала заменяет на них. В винде для получения пути бинарника правильно дёргать GetModuleFileName, чтоб не обосраться с папками на русском, хотя иногда проскакивает софт, где требуют путь установки только на английском - значит там как раз первый аргумент юзают.
Какие аргументы обычно приводят когда говорят, что Qt сильно устарел?
https://youtu.be/9jGpvVGHvso
Котороткий ответ: Любые
Длинный ответ: Ответ дан в басне "Лисица и виноград" - лицензия не очень вкусная.
Наличие ООП.
Отсутствие ООП.
Сап двач
Программировал на си, работал с ним же. Сейчас сменил галеру и в основном дело теперь имею с крестами.
Проблема в том, что С++ знаю 98 стандарта. Собес пройти не помешало, но де факто постоянно натыкаюсь на то, что можно сделать что-то по умному и новому и на проде код впринципе от С++17.
Поэтому реквестирую книжку/курс или что-либо чтобы закрыть пропасть в развитии крестов
> Поэтому реквестирую книжку/курс или что-либо чтобы закрыть пропасть в развитии крестов
Даже хуй знает, посмотрел бы просто ретроспективно что в каждый стандарт добавляли классного, на том же цпп референсе
Плюс если тебе только обзорно можешь глянуть лекции на Ютубе от Константина Владимирова, выборочно по интересующим темам
14 - полировка 11.
Расслабься, челик. Раз руководство решило тебя поставить на этот проЭкт то значит что твой уровень крестов это руководство устраивает. А изучение можешь оставить всяким безработным бичам типа меня. Иди лучше дорогую шлюху выеби или 15ти летнего односолодового виски ебани, чем какие-то книжки читать, ты же не лошара.
Выше мы сумели парой строк без голых циклов конвертнуть один вектор в другой.
Теперь похожая задача:
Есть хеш-мапа<A, B>. Мы хотим получить vec<B>.
Есть ranges::views::values, но возвращаемый им тип ренжа не подходит для ranges::transform
Как какать?
Как-то так, в одну строчку.
Алсо, подсветка синтаксиса вышла из треда, я так и не смог инициализировать мапу без ошибки в IDE, надо всё же вернуться в VS.
Я не он, но это кажется не вскод, а силион
Ты можешь использовать ниблеровскую либу, на которой стандарт и основан. Там нужен 17 или даже 14.
То что запрещено тащить рандомные либы в проект? А если я хочу их официально затащить в утилзы, ебля ещё ебанутее.
Да и я че мудак ради 2ух строк тащить хедер?
Это тебе не лаба1.спп
> и я че мудак ради 2ух строк тащить хедер
Но это можно и на 11 стандарте сделать в одну строчку, просто меньше сахара будет.
Всё это обсуждение уровня "питон эффективнее потому что хелло ворлд на нем короче".
Я действительно хочу больше сахара для работы с контейнерами и не вижу никакой в этом проблемы.
Да и обсуждения никакого нет, питон ты упоминул зачем то
> антипаттерн на антипаттерне
Антипаттерн это мем
> сырые указатели
Как будто что то плохое
> спагетти с полотной комментариев
Комментарии я бы уж точно плохим не считал
> Нахуй нужны эти правила и конвенции если их никто не соблюдает?
Ну так раз их никто не принуждает использовать, то и понятное дело все на них забивают
> почему так
Есть несколько причин:
- плюсы в целом синтаксически не созданы чтобы их удобно читали люди, также они сами по себе не помогают писать хороший код
- у многих плюсовиков в общем нет цели делать код читаемым для других
- в опенсорсе достаточно сложно следить за качеством кода
Бабахает от того, что люди пишут успешные трендовые вещи, а ты нет? Ну бывает, жизнь говна - боль.
Бабахают тут только залётные, мы же выдрачиваем каждую строку, пока не избавимся от всех явных циклов
Явный цикл - любой цикл, совершающий внутри одно действие.
Использование стандартных алгоритмов вместо таких циклов повышает читаемость, безопасность, гибкость кода.
Шиза ... ой шиза.
> повышает читаемость, безопасность, гибкость кода
буквально не делает ничего из вышеперечисленного
Достаточно делать циклы итераторами, а не через i и всё будет безопасно. Если выбирать между лямбдой в монаде и циклом, то цикл приятнее читать.
Так если ты лепишь в монаду лямбду - делаешь что то не так, и цикл действительно лучше.
А если тебе надо как выше странсформить/скопировать/и тд то тебе даже читать не надо, ты видишь название функции, видишь контейнер с которым она работает. Все.
Ну а так да, итераторы база, вот ток ими тяжело пользоваться.
>Использование стандартных алгоритмов вместо таких циклов повышает читаемость, безопасность, гибкость кода.
Скриптошлюху видно издалека.
>это другое
Нет, не другое, скриптошлюха. Заменять простой и ясный цикл из двух строчек на библиотеку это скриптошлюшество чистой воды пикрелейтед >>043073 Библиотека это библиотека, какой бы она ни была, встроенной или скачиваемой, какая разница какой способ приобретения. Тащат библиотеки ради элементарных действий только дебилы скриптомакаки.
Понятно, а теперь водички выпей и полежи дедуль, у тебя аж венка на лбу вздулась
примеры, ссыкли на гитхаб в студию
>Понятно
Вот и хорошо, а теперь смойся обратно в жс/шарп или откуда говно вылезло, а то воняет.
Ахуеешь, но языки которые я знаю это плюсы и луа.
Так что скрипшлюхой я видимо стал в вашем загоне.
>>043451
Итераторы сложно в плане someVarName.begin(); someVarName.end() дохуя многословно получается. Range based for для циклов это решает. Но согласись что тот же
transform(container, out, func)
выглядит гораздо пизже, чем
transform (container.begin(), container.end(), out.begin(), func)
Ptr++ заебись, но это работает только в contiguous последовательностях, а хотелось бы отделить реализацию от знания об устройстве входящего контейнера, если это возможно
база треда
1: потому что студия кал говна.
2: потому что какого хера ты ожидаешь увидеть в своих трех файлах? Индентов не хватает? Симейк он для сборки, а не для рисования отступов. То что у тебя на пик 2 к симейку отношения не имеет, чисто тема иде.
Он видимо про то, что данные, с которыми работают разные потоки, должны быть разнесены в памяти минимум на размер кешлайна, что бы не вызывать синхронизацию кешей разных ядер.
Это 64 байта для современных процессоров.
мимо
И что, реально надо следить, чтобы адреса данных для разных потоков были не слишком близкими? Звучит как бред.
> 1: потому что студия кал говна.
Возможно, ну я пока на ней, других вариантов у меня нету
> какого хера ты ожидаешь увидеть в своих трех файлах?
Методы класса, чтобы по ним переходить кликая по названию как на пик2
> Симейк он для сборки
Sln то же для сборки по факту, ну в этом случае я не sln проект создавал, cmake проект
> То что у тебя на пик 2 к симейку отношения не имеет
На пик 2 там sln сгенерированный через cmake, то есть по сути и там проект, и там проект, просто в разном формате
> чисто тема иде.
VSCode например норм справляется по умолчанию пик
Перечитай мой ответ, а потом свой собственный.
> вскод справился
> это не про симейк, это про иде
Для HPC - надо, а в других случая не надо.
То есть ты хочешь сказать, что VS при создании и открытии cmake проекта никак не заставить таким образом отображать solution explorer?
Не использую симэйк. Проект мультиплатформа. Рядом лежат студийный проект и классический Makefile. Очень хорошо.
Не знаю. И особо не интересно. Версия для Винды на gitlab воркере собирается g++ из Makefile без проблем
>потом через cmake генерировать в нём новый sln проект
Зачем? VS 2022 поддерживает cmake нативно. Генерить надо было в прошлых версиях которые не поддерживали симейк.
Натвино, это я понимаю так, что я тупо создаю cmake проект и работаю с ним без всяких классических sln, правильно?
Ну да, я тупо скачивал с гитхаба проги на симейке, тупо открыл и готово, вот тебе проект, можно компилить и всё такое. Если же ты будешь использовать sln, это и будет sln, а не cmake.
Ну вот смотри, я выше писал уже проблему с которой я столкнулся при создании проекта вот здесь:
>>044586
Решения так ей пока и не нашел.
Мне анон другой там начал писать, что я хуйнёй занимаюсь и cmake для этих задач не применяют, и я вот хз, собствено и назрел мой другой вопрос выше, какое воркфлоу, получается, что тогда надо вести CMakeFileLists.txt как отдельный проект, тупо для распространения, чтобы другим на разных платформах и средах можно было собирать проекты и уже их открывать в том, в чем они пишут. Или я хз, в замешательстве пока каком-то, потому что VS получается не позволяет полноценно использовать cmake проекты как в случае с sln.
Ну так засрать язык это надо постараться.
Что потом? Потом на полку к Фортрану, Алголу и Коболу.
Статическая рефлексия, наконец сможем генерировать Enum to str без костылей.
Хуево это будет выглядеть.
Я бы вообще ее не ждал к 26, хотя Полухин обещает.
А вообще вроде уже есть пропозалы, можешь почитать.
Спойлер: ещё более уебанский синтаксис
Да ясное дело никто в своем уме подобное дермо использовать не будет, как и очень многое что тащат в плюсы. Переключение контекста со своим стеком давным давно реализовано на асм+си.
>Да ясное дело никто в своем уме подобное дермо использовать не будет
Вообще-то наоборот, это очень удобная фигня постоянно используемая в шарпе и прочих скриптах. Только кресты не скрипты, поэтому, да, скриптоговно в крестах это ну, говно, взять язык и изговнить. Какой смысл использовать кресты, чтобы высирать шарпоговно на них? Тогда бери сразу шарп и получишь желаемое. Сование скриптоговна в кресты это прямая диверсия, вредительство, подрыв языка скатыванием его в говно того, чем он не является. В принципе, это не противоречит концепции крестов как мультипарадигменного языка, это проблема скорее людей, макак которые лезут и требуют это говно в языке и кукарекают, что именно на корутинах надо писать, а не как раньше.
>Нахуя тебе Coroutines, например?
Мне как-то реально было проще взять из буста корутины, чем накручивать ебанутую логику с вызовами одной внешней библиотеки. Нахуя ты сюда пишешь работая с задачами уровня хелло ворлда, например?
А ты с какими задачами работаешь? Ни с какими, иначе бы не выбирал С++ когда задача "проще". С++ не проще, дебил, для этого есть языки проще.
- они есть в скриптах (с#)
- это проще, а с++ не проще
Не только корутины, та же скриптовая рефлексия с её метастазами, подрывающая сам принцип С++ как компилируемого машинного языка. Всё это дерьмо лезет от скриптомакак которые хотят чтобы си был как их скрипты, потому что дебиломакак взрастили на скриптах и у них навечно скрипты головного мозга.
какое связывание че ты несешь орунаху
просто чтандартная замена того что сейчас делается анальными костылями типа парсинга __PRETTY_FUNCTION__
Проблема макак, они не понимают разницу между программированием и скриптингов, когда она на самом деле фундаментальная.
Попробуй получать что такое программирование. "Программирование" это как бы существительное, но не совсем, а глагол, обозначает процесс применительно к некоему объекту.
Как "вождение":
- Вождение не бывает просто так, только применительно к автомобилю.
- Вождение НЕ означает его результат (перемещение людей и грузов с места на место).
- Вождение означает процесс управления автомобилем.
- Водитель должен понимать устройство автомобиля и иметь под руками органы контроля узлами автомобиля, и влиять на них в соответствии со своими знаниями об их устройстве и работе.
- Таким образом, например автомобиль у которого в качестве органов управления только навигатор, где тыкаешь по карте куда ехать, и автомобиль едет, это не вождение никакое, потому что ты ничем не водишь, не управляешь никаким устройством, ты просто делаешь запрос в пустоту и ждешь его исполнения.
Вот что такое программирование, это управление компьютером. Программист должен понимать устройство компьютера и иметь язык дающий органы влияния на подсистемы компьютера которыми программист управляет благодаря своим знаниям об устройстве. Короче говоря, программирование это техника. А когда человек не управляет компьютером, а лишь делает запросы в неизвестный черный ящик, ожидая от него результата, это никакое не программирование. Это скриптинг, макакинг. Программирование это управление машиной, а вовсе не получение результата запроса. Последнее называется бюрократия, работа офисного клерка, не имеющая ничего общего с программированием - технической специальностью управления машиной.
Си, и их расширение С++ это машинный язык программирования, а вовсе не офисная система скриптинга из так называемого "ИТ". ИТ это обработка данных, офисная работа, техника программирования тут совершенно ни при чем. Каким дебилом надо быть, чтобы не отличать офисного клерка от механика-водителя?
Дедуль, обеденный перерыв кончился, а тебе ещё библиотеку для твоей ЗА-ЛУ-ПА-1 писать.
Удвою, его поток шизофазии уровня "программист должен знать устройство прибора для печати транзисторов" читать тяжело
К чему ты эту хуйню высрал? Водки с утра налакался и внутренний вахтёр проснулся?
>программист должен знать устройство прибора для печати транзисторов
Это ты так stepper (литограф) обозвал?
Внутри самой современной EUV-машины каждую секунду 50 000 капель расплавленного олова падают через камеру в её основании. Пара высокоэнергетических лазеров на углекислом газе ударяет по каждой капле, создавая плазму, которая, в свою очередь, испускает свет нужной длины волны. Первый импульс преобразует каплю олова в туманную форму блина, так что второй импульс, который является более мощным и следует за ним всего через 3 микросекунды, взрывает олово в плазму, которая светится на длине волны 13,5 нанометров
>А что потом?
Да все уже, движуха выдохлась. Это даже видно по российскому комьюнити языка. Дальше застой будет. Усугубленный еще и тем что сама ниша языка который он занимает уменьшается. Соответственно и интерес пропадает.
>Когда меня будут спрашивать базу для программистов
Базу программистов? Что за база?
Может быть расскажешь как работают аппаратные прерывания на примере сетевой карты?
Ты вообще не понял что я написал и высрал такую простыню.
Хорошо, дедуль, а теперь таблетки и спать.
Не что выбрали, а что нужно было выбирать. А выбирать нужно было Аду, как и раньше. И все делать на ней. И было бы чики-пуки все.
Ты сейчас ему насоветуешь и он иксы (X Window System) напишет.
Если что мне не для взлома, просто я хочу RL агента обучить играть в одну игру а для этого мне нужно получать данные положения юнита на карте каждую секунду.
Уточню: что бы получать данные не одного юнита а массив юнитов, например их может быть сотня, то есть имея под рукой адрес в оперативной памяти можно ли достать массив со всей необходимой информацией? Или это нужно как то парсить?
>Нужно под линух написать два независимых приложения: ui и бэкенд.
Кек, прошивка для сервера, что ни напиши, всё равно получается веб-параша клиент-сервер. Просто написать нормальное приложение? Лолнет, ОС же не завезли.
>Есть одна игра стратегия, возможно ли зная адрес в оперативной памяти, через плюсы доставать оттуда массив с различными данными?
Я тебе подскажу. Подумай, какой адрес ты знаешь - физический или виртуальный.
Только далеко не уходи - разговор долгим будет.
>всё равно получается веб-параша клиент-сервер.
Если он извратится с shared memory и pthread_mutex_lock, то тоже получтся "веб-параша"?
непонятно по какой причине это должны быть у тебя два отдельных процесса
обычно "бэкенд" выделяют в библиотеку либо набор библиотек, а потом уже "фронэнды" используют эти библиотеки либо используя статическое либо динамическое связывание
вчерашний школьник, плиз
дык пиши лучше сразу бота который берет инфу с игры, захватывая картинку и онализиуя ее, а свою работу осуществляет эмулируя мышку и клавиатуру
все равно примерно так делают многие беспалевные боты для сетевых игр, и ты сразу же наберешься нужного опыта
В душе не ебу что такое Cheat Engine и причём тут С++.
>>050684
Это не про веб. В моем случае гуй приложение на малине и второе приложение бекэнд, которое будет делать вещи там же. А дело в том, что гуй скорее всего нахер не упрется и хватит зайти по ссш вызвать команды самому, но спроектировать все надо как если бы была возможность управления этим бекэндом через ui
>>050580
Да, хм, наверное так и сделаю
а ты сам-то давно физический адрес видел? если дрова не пишешь
Да. Какая разница какой протокол, клиент-серверная параша на прошивке для сервера от этого не меняется. Зачем делать сервер и клиент на той же машине? Ты ебанутый? Нет, просто ОС не завели, нормальное приложение сделать не представляется возможным, серверная прошивка поддерживает только сервера.
В игре дохуя спецефектов, юнитиы могут перекрывать друг друга это негативно скажется на обучении РЛ агента, он будет думать что перекрытием уничтожил юнита, ИИ глуп и ему нужно все в лоб объяснять, а значит мне нужно как то из памяти брать данные, такие как фактическое положение юнита то есть координаты, значения здоровья и его название.
> мне обещали, что функции будет выполнять напрямую драйвер.
Ну и пиздец. Феерический. Даже хуй знает что тебе ответить.
И после этого говорят что плюсовику не нужно знакть Си, не нужно знать ассемблер, не нужно знать "кишки". Ну объясняйте тогда сами ему.
Ну и че где в си, в ассемблере че сказано про графику, нихуя. Зато смотрим википедию, так opengl - спецификация, прототипы функций - в GL.h, реализация функций - в драйверах от производителей видеокарт. Если какая-то функция видеокартой не поддерживается, ее реализация лежит на gdi. И чем я не прав, обезьяна?
Пошёл нахуй.
Обезьяна, в этой твоей Википедии тебе пообещали, что спецификация должна сама уметь искать реализацию?
Позорище ебаное.
>наконец сможем генерировать Enum to str без костылей
Лол, я как раз свой в том году написал на макросах. Нет веры комитету.
>та же скриптовая рефлексия с её метастазами, подрывающая сам принцип С++ как компилируемого машинного языка
Иди-ка ты нахуй. Я не хочу класс в XML вручную сохранять. Пусть компилятор работает, он железный.
В opengl.dll только реализация 1.1 версии. Весь новый функционал получается из драйвера через wglGetProcAddress (которая сама лежит в opengl.dll), поэтому тебе надо линковаться с opengl.dll и с либой вроде GLEW, которая через экстеншены настроит современную версию OpenGL.
Чтобы пользоваться функциями из gdi32.dll, user32.dll, kernel32.dll мне ничего линковать не надо, или это другое?
https://pastebin.com/PVM63R3A
Да вижу это я проебался, там что бы добраться до нужного адреса нужно вычитать число а не добавлять.
> реализация функций - в драйверах
Компилятор не имеет ни малейшего понятия что там в драйвере есть и как вызывать это.
>>051872
Можешь без линковки чем угодно пользоваться, но надо тогда вручную загружать dll в рантайме, получать адреса через GetProcAddress и вызывать функции по их адресу. В хедере лежит API, оно никак не поможет компилятору понять что конкретно ты хочешь вызвать во внешней либе. С хедером и dll тебе всегда надо линковать файл *.lib, где лежит макет памяти с адресами функций по которым будет это API вызываться. Во время запуска бинарника по этим адресам будет смаплена твоя dll. А dll ты так или иначе будешь использовать, потому что вызов функций из драйвера геморроен, всегда есть абстракции над этим.
А в каком-нибудь расте вообще пиздец как надо извращаться чтоб dll заюзать, ведь это ансейф. Хорошо если биндген осилит хедер спарсить, а если нет, то пизда.
> gdi32.dll, user32.dll, kernel32.dll
Потому что их линковщик линкует по умолчанию при сборке, у тебя в SDK винды лежат lib-файлы для них.
>>052833
> потому что вызов функций из драйвера геморроен, всегда есть абстракции над этим.
> Потому что их линковщик линкует по умолчанию при сборке,
Спасибо, что пояснил.
вoт в ЖC зaдaeшь пeрeмeннyю, нaпримeр lеt x = 33331 - cкoлькo cимвoлoв ввeл, cтoлькo мecтa oнa и зaнимaeт
вoт в C нyжнo изeбнyтьcя и пoдoбрaть длинy, нaпримeр lоng lоng int = 42743251712343 - и oнo вceгдa бyдeт вecить 8 бaйт (ecли я нe oшибaюcь)
a пoчeмy нeльзя былo cдeлaть кaк в ЖC? В чeм cyть и кaкaя прaктичecкaя пoльзa oт этoй eбaтoрии? Или этo прocтo ycтaрeвшee гaвнo мaмoнтa, oт кoтoрoгo никyдa нe дeтьcя? Aктyaльнee ли вкaтывaтьcя в рacт?
cпacибo
> нaпримeр lеt x = 33331 - cкoлькo cимвoлoв ввeл, cтoлькo мecтa oнa и зaнимaeт
А с чего ты это взял? Js вроде не предоставляет API для работы с памятью.
ну давай разберем по частям тобою написанное)
>cкoлькo cимвoлoв ввeл, cтoлькo мecтa oнa и зaнимaeт
во первых сам сначала поясни что хотел сказать. надеюсь не то что каждая цифра в отдельном байте
так-то в крестах можно написать auto zalupa=42 и будет инт а можно auto zalupa=42000000000 и будет лонг
>А с чего ты это взял? Js вроде не предоставляет API для работы с памятью
Это я так себе представляю, я вобще раньше не задавался такими глубинными вопросами. Насколько я знаю, в расте не нужно задавать. В общем, итоговый вопрос таков: почему размер не задается автоматически с одним словом let
>во первых сам сначала поясни что хотел сказать. надеюсь не то что каждая цифра в отдельном байте
Это я доку читаю https://learn.microsoft.com/ru-ru/cpp/cpp/data-type-ranges?view=msvc-170
вижу что разные размеры в байтах. Видимо в этом смысл и был - оптимизировать вес, собственно и интересно узнать >>053015
Есть ключевое слово auto, появилось только в с++11 стандарте. То есть auto x = 123132; Автоматически подбирается подходящий тип. Но в отличие от let тип данных задается еще на этапе компиляции и не меняется в течение всей жизни программы, потому что в с++ типизация статическая, в js динамическая. То есть, если x родился целым числом, им он и останется до гробовой доски.
не, в жс такие вопросы вобще никого не ебут. я вот и решил базы впитать и не быть обосцаным хипстерком
>вoт в ЖC зaдaeшь пeрeмeннyю, нaпримeр lеt x = 33331 - cкoлькo cимвoлoв ввeл, cтoлькo мecтa oнa и зaнимaeт
В js тоже 8 байт:
The JavaScript Number type is a double-precision 64-bit binary format IEEE 754 value, like double in Java or C#.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_encoding
В BigInt надо явно преобразовывать.
>a пoчeмy нeльзя былo cдeлaть кaк в ЖC? В чeм cyть и кaкaя прaктичecкaя пoльзa oт этoй eбaтoрии?
В том, что процессоры работают с машинным словом, которое в современном мире обычно 16, 32 или 64 бита длиной. Соответственно, типы целочисленных данных С и С++ сделаны так, чтобы нативно поддерживать то, как работает железо. На 8-битном микроконтроллере Number из JS будет работать адски медленно, а int8_t, int16_t - с нативной скоростью.
Ты чё, ебанутый? Тобой перечисленное это программы для реверс-инженерии, дебаггингом через это никто не занимается. Дебаггер плюсов это GDB/LLDB или нативная хуйня от майков.
Если нужен убермощный дизассемблер, то Ghidra.
>>052950
> Aктyaльнee ли вкaтывaтьcя в рacт?
Так там тоже такая же ебатория. Ты то можешь let x = 42; и x будет i32, но если значение не даёшь или хочешь пихать числа требующие или не требующие какого-то количества памяти то let x: u64; придётся писать. Если ты реально не вьезжаешь зачем оно: ты не понимаешь, как работает компьютер под капотом выделение памяти если точнее, а значит плюсы тебе либо рано, либо непонятно нахуя.
Могу объяснить прям подробно, но нужно подтверждение что готов читать. Шатал выдавать мемуары чтобы получить "ниасилил".
Так, теперь вопрос. Правда ли пикрил? Я не понял лично прикола. Если ты знаешь что тебе нужно 100 элементов то пустой вектор будет хотя бы пару раз изменять свою вместимость (а это аллокация + копирование что как бы нихуёво), если указываешь сразу 100 то аллокация одна и никаких копирований. Я знаю что есть std::array для этого, меня просто вот этот абзац немного в ахуй поставил.
array на стеке вроде, вектор на хипе.
>Могу объяснить прям подробно, но нужно подтверждение что готов читать. Шатал выдавать мемуары чтобы получить "ниасилил".
Конечно, готов. Не обязательно простыню, интересно. Другой вопрос - обязательно ли это знать? Может просто принять как данность: Используем длину которая подходит и не выебываемся?
>Так, теперь вопрос. Правда ли пикрил?
>>Написал хуйню на дваче - никто не обратил внимания.
>>Написал хуйню, заскринил, запостил картинку на дваче - 100 ответов обсуждения.
Всегда было интересно, как называется эта болезнь?
Moscow is the capital of Great Britain.
Ей нужен пользователь с хотя бы двузначным интеллектом
Мне тоже надо читать книжки из оп поста? Ну.. как всем?
Или можно срезать углы? Если да, то где?
Я не считаю себя программистом и не хотел бы им быть.
Используй Webpack.
Да что хочешь используй, что то говно, что это
Но симейк это более распространенная вещь, считай что стандарт в индустрии, будет легче зависимости подцеплять
>>054055
Можно срезать углы конечно
Тебе не надо знать про очень многие семантики для начала
А как это делать я наверное не подскажу, сам все по хардкору учил, есть знакомые которые буквально по видосу с Ютуба глянули и прекрасно себя чувствовали
Для самого начала тебе хватит узнать: что такое указатели и референсы, базовые конструкции языка (условия, циклы и ид), классы и ООП в целом, базовые структуры данных из стд (вектор мапа и тд)
Все остальное прям во время работы сможешь изучить
CMake де факто стандарт в разработке на плюсах, все его используют. QMake залупа от которой даже сами Qt отказались
Нюфаг/скриптодураак? Симейк выглядит как измененный си, все базовые принципы соблюдены.
Всякие кумейк/премейк/месоны рядом не стояли.
Хелоу ворл и на симейке выглядит читабельным. А если ты попробуешь тянуть что то посложнее то ты обрыгаешься от кутешного говна, хотя и симейк тащем то не лучше, но им все пользуются, поэтому легко копипасть из гугла любой вопрос, а тебе кажется именно это и важно, и раз уж так получилось что ты ни в том ни в этом не разбираешься, то не начинай с хуйни которая никому не нужна, это странно довольно
И то и то
Понятно
>не начинай с хуйни которая никому не нужна
кстати добро пожаловать в тред хуйни которая никому не нужна
>Нас тут много.
>cmake
>дед
Дух старой школы живет только в автоконфе, говорите открыто и смело в лицо! M4!
Не, с m4 ты перегнул. Кто конфигурил sendmail в прошлом веке, тот будет плеваться.
И да, судя по тому, что ты знаешь что такое m4, ты и сам дед.
p.s. а мне для всего классического make хватает.
>, а хули делать.
Сесть и написать на плюсах ассемблер.
Твой подход хорош для статьи на Хабре, чтобы карму набить.
Ну такого быть не может, потому что разные паузы должны на подумать, иногда не знаешь что писать, иногда вдохновение нахлынет. И 50% времени минимум это дебаггинг и тестирование твоего шедевра.
>Ну такого быть не может
Не знаю почему не может, их дохуя, но конкретно на плюсах не видел, а то что видел бесполезно смотреть
>, настраивает сборку с нуля
Так это разные задачи - писать код и настроить сборку.
Более того, сборка это тоже разные задачи - одно дело написать Makefile, что тоже требует некоторых знаний, и совсем другое дело настроить CI/CD в Гитлабе, что будет посложнее.
>одно дело написать Makefile, что тоже требует некоторых знаний, и совсем другое дело настроить CI/CD в Гитлабе, что будет посложнее.
Чушь. Мейкфайл написать нереально, непонятная хуйня, а сборку на гитхабе спокойно делал с нуля, это банальные команды консоли линукса или винды, ты их и так уже знаешь, а мейкфайл это шизофазия которую надо полностью учить с нуля, что куда сложнее.
У меня вообще нет бекграунда, иначе зачем мне такие видео. А то что просмотр курса по созданию окна на winapi по 20 видео по 2 часа не принезет пользы я понять сам могу
>Мейкфайл написать нереально, непонятная хуйня
Самый простой Makefile - руками написать компиляцию в цели all.
И затем постоянно его усложнять, добавляя регулярки из примеров.
Реально, самый простой Makefile это две строчки. Две!
Т.е. мне нужны шаблоны для языка, надо язык с нуля писать? Нахуя? Взял м4 и доволен как слон.
>Мейкфайл написать нереально
Мэйкфал - это буквально самое первое и простое средство для сборки всего, когда нет специальных вопросиков, буквально стандартный подход во всём, где нужна сборка чего-либо.
Самое первое средство это С++Builder или Visual Studio.
Самое второе средство это Cmake.
Это для полезной работы. А для нитакусечной хипстоты дрочить ради дроча, пойдет одинаково что угодно, кроме перечисленного выше. Понтоваться одинаково удобно чем угодно никому не нужным, и make не исключение.
Как ты с симейком собрался собирать проект без мейка?
Походу ты болен неизлечимо, если крошишь батон на дедушку make.
Даже страшно неприятно думать какие задачи решаешь и за что денюжку получаешь.
Объясните кто нибудь пж, вот есть функция
int& func() { int⚹ x = new int(10); return ⚹x; }
Она возвращает адрес x, получается. Как тогда получается инициализировать x2 и x1 адресом, ведь они принимают значение? Например int y = 10; int y2 = &y -- вот так же нельзя. Почему тогда вот так можно:
int x2 = func();
int& x1 = func();
Выше в треде базу уже давали:
> реыеренс - мистэйк
А твоя функция - говно.
Ретерн тайп замени на указатель. И у ретерна убери разадресацию. И не еби мозги.
MIX
Ебать еблан, как ты условный абстрактный язык_нейм собрался собирать, сам скрипты писать будешь?
>cmake
Эта параша кстати и генерит мэйкфайлы лул.
>понтоваться
Ух еблан ты, конечно. Мэйк - это как ходить.
>Она возвращает адрес x, получается
Нет, она возвращает ссылку на int
>int x2 = func();
Копирование значение из ссылки
>int& x1 = func();
Новая ссылка
>Реально, самый простой Makefile это две строчки. Две!
Как минимум надо еще генерацию файлов зависимостей добавить, чтобы объектный файл пересобирался, когда хидер поменяется. Это еще строчек пять. Плюс если у тебя в проекте есть файлы с одинаковыми именами, надо городить сборку в подкаталогах - это опять же лишний геммор. И так пошло-поехало, твой простой мейкфайл из двух строчек растет как на дрожжах. Симейк в разы проще, там реально несколько строк для простых проектов, но компиляция на маленьком проекте гораздо тормознее будет, конечно.
>Мейкфайл написать нереально, непонятная хуйня
Там очень простой принцип в основе работы, и синтаксис совсем не сложный. Если понимаешь как он устроен, мейк-файлы легко писать. Автомейк - полная жопа, да. Но там тоже можно разобраться.
>Автомейк
Автоконф, автомейк это доп. шняга сбоку, соглашусь авототулз уже СЛОЖНА даже для дедов, не только для зумерков.
вместо memcpy(mapped_data, data, size);
написал memcpy(mapped_data, &data, size);
И это на удивление запустилось и сломалось совсем в другом месте
Вопрос - как такие баги отлавливать? Есть ли возможность в дебаге как то проверять чтобы не обращаюсь ли я к чужой памяти, а если этои случается крашилось и говориле что где и куда протекло?
Никак, значек маленькиц, да подленький. Поэтому у меня недавно появилась идея редактора, где он будет красным цветом обводить те строчки кода, изменение которых может существенно поменять логику программы. Это будет полезно и для тех, кто работает с чужим легаси кодом. Вот смотришь на код, много всего понаписано, а по факту ядро программы это несколько строчек, остальное балласт из свистелок.
Стопудово ты под Линуксом. В Visual Studio она бы тебя мордой лицом ткнула в ошибку. Просто по стеку поднимаешься и видишь проблему.
В юниксах компиляй с ключом -g и запускай
gdb youprogram
где youprogram - имя твоей софтинки.
И как упадёт - смотри стэк.
>Стопудово ты под Линуксом.
Nope, но генератор в симейке ninja
> Просто по стеку поднимаешься и видишь проблему.
у меня ничего не крашилось на самом memcpy, а лишь очень потом если я трогал в шейдере определенный буфер у меня всё зависало и меня выкидывало нахуй VK_ERROR_DEVICE_LOST
Поэтому дебагер вобще нихрена не помогал
помог nvidia insight, но и то я случайно увидел что у меня в буфере мусор валяется
>у меня ничего не крашилось на самом memcpy
А компилятор не ругался ли? Замечания должен был дать.
data - где - в статик, на стеке? динамический аллокированный?
Вообще из практики - обычно падает довольно быстро, на самом memcpy, Особливо если size достаточно большой.
>А компилятор не ругался ли?
А с чего ему, data это был void⚹, а я вместо него передал void⚹⚹ тоже указатель
> динамический аллокированный?
this
Не, _t выглядит не убого.
>вместо memcpy(mapped_data, data, size);
>написал memcpy(mapped_data, &data, size);
Мне иде это полюбас бы рисовало варнинг на полэкрана за неявное приведение типов. Вы там в блокноте чтоле пишете.
О чем это должно нам говорить? Наличие этого типа вообще не гарантируется стандартом.
Бьерн, залогинься
Clang-tidy молчит
Ну тогда инт_леаст32_т.
>Это идельный способ именования типов.
С хуя? Я без _t знаю что это тип, курсором цветом специальным выделяется, или курсор наводишь и видишь что конкретно за тип
1080x1920, 0:19
Начался новый семак короче у меня в универе, подскажите книжку/серию видео для тех кто базу С уже как бы могет а в С++ не рубит ваще.
Я гуглю инфу а мне рассказывают что такое интеджер.
В большинстве проектов типы с большой буквы, переменные - с маленькой.
Ох анончик, это именно то что я искал, как раз таки мою ошибку сразу детектит
Смог кстати даже на msvc запустить
я компилировал программу на си и винапи
там код простой
но вот что не понял
C:\tcc32\tcc.exe main.c -luser32 -lkernel32 -lgdi32 -o main.exe
где хранятся эти >>-luser32 -lkernel32 -lgdi32
библиотеки?
в mingw они в папке lib
а в tcc их нет вообще
откуда он их берёт?
> Я гуглю инфу а мне рассказывают что такое интеджер.
Пропусти те главы где про интеджеры рассказывают, начни со следующих
>Пропусти те главы где про интеджеры рассказывают, начни со следующих
И как он узнает про такое приведение типов?
i=int(0.1);
да эт он
Нет. Она очень хороша. Имплементации могут быть говном, а как технология Bluetooth великолепен.
> как технология Bluetooth великолепен
Нихуя подобного. Лучше бы на основе вафли сделали LE-реализацию. БТ порой даже в метре от приёмника отъебывает при перекрытии мясом, например пользоваться лёжа БТ-калом настоящая боль, если приёмник не в прямой видимости. У меня до сих пор 5 штук приёмников лежат, когда я ебался и пытался заставить их стабильно работать в стоящем на полу ПК. Стоит только параллельно расположенной ноге оказаться между любым устройством и приёмником - идут дикие потери. Как PCI/встроенный в материнку работал как говно, так и юсбишные, 15-сантиметровые антенны не дают никакого результата. В итоге пришёл к единственному рабочему костыльному решению - приёмник поднять над головой через удлинитель юсб. Я ебал такие технологии, плюнул бы в ебало тому кто это придумал. Почему древняя вафля на тех же 2.4 ггц пробивает стены, а этот кал даже в паре метров работает как дрисня? То что БТ жрёт мало - это не оправдание, ведь мне не дают выбора, я страдаю по умолчанию.
>То что БТ жрёт мало - это не оправдание
Не оправдание, это предназначение. Какая-нибудь гарнитура или ручные часы с вайфаем бы сдохли за пол часа, а так работают месяц.
>я страдаю по умолчанию
Ты серешь. Если бы дали выбор, каждый дебил бы врубил полную МОЩЬ и его пиздюлька тут же сдохла, а потом бы орал что устройство говно. Каждый тупорылый хуесос хочет всё и сразу, чтобы не жрало и чтобы стены пробивало. Так не бывает, дебил.
> за пол часа, а так работают месяц
Фантазии приглуши свои. Легко гуглится энергопотребление обоих - у БТ всего в 2-3 раза ниже.
хотя в принципе 5G идет в правильном направлении
Блютус это беспроводной провод. Никто не таскает провод через стены. Стандартный провод около метра всего. Но тупорылые свиньи конечно считают, раз физического провода нет и можно отойти, значит можно отойти и на километр и оно обязано работать. Нет, не обязано, это ты серешь тупостью. Никто не говорил, что блютус это радиостанция для вещания.
А ты с этой технологией работал? Или тебе просто нравятся эйрподсы к фифону подключать?
Технология хорошая только разве что как задумка. Но при этом у нее куча проблем от секурности до физического уровня про который уже писал анон выше. Хотя современные подходы в сетях и помогают нивелировать эти проблемы, но говно здесь закопано действительно в имплементация и поддержке, особенно от вендоров и линукса. Люди банально топы беспроблемных свистков составляют, чего говорить про дурачков которые занимаются в своем гараже имплементацией блюеза. Занимаются, только вот остальным, что они там делают сообщить забыли. И тебе приходится лезть в исходники литературно чтобы его настроить с их наркоманскими дебасами. Не то чтобы я жаловался, ведь на чем пишем забыл что-ли. Но разработка и так состоит из постоянного копания в легаси говне, а когда тебе вставляют еще одну палку, ты просто плюешь и идешь на обед вместо работы понимая что убьешь не один день, как будто других дел нет
все это былоа так замечательно там магически притягательно..
25 лет назад
какой же я дурак
Да, классно было программировать на препроцессоре.
Сначала интерпретатор Форта, затем компилятор.
За вчера сделал половину интерпретатора. Если повезёт, сегодня интерпретатор закончу. Думал за день спраалюсь, но дня на интерпретатор не хватило. Может и двух дней не хватит, а может и хватит. Руки чешутся сделать компилятор Форта.
Задача весьма простая. И немного интересная.
Не спрашивайте зачем - придёт время - покажу и расскажу.
Компилятор-то зачем? В смысле, прикольно, конечно, но форт и так достаточно быстрый для встраиваемого языка. Тупо инлайн прикрутить, и уже ускорение достаточное. Интереснее именно на самом форте писать, ломать устоявшиеся парадигмы в мозгу, что глобальный стейт - это грех, что данные не могут быть кодом, и т.д.
>Компилятор-то зачем?
Расскажу после. Серьёзно. Вероятно к тому времени тему перекатят.
А покамест расскажу как заплутал - когда дошёл до теста вложенного цилка, понял что пошёл не по тому пути, а тут и выходные закончились и навалилась как всегда работа. Сейчас продумываю и буду переписывать по канонам, а не по наитию. Но в принципе - неплохой опыт. Примечательно что ошибки проектирования вылезли когда вот уже "всё почти готово".
Форт в космос летал, в отличие от хаскеля. Да и сейчас - это самый простой способ удобно работать с железом. Без говна с тулчейнами, рекомпиляцией и заливкой билда. Написал форт и асм на том же форте, минимум обвязки - и ты король, все тебе подвластно. Но это язык для одного программиста-энтузиаста, конечно. С современным подходом к разработке далеко не уедешь.
> Без говна с тулчейнами, рекомпиляцией и заливкой билда
Объясни ньюфагу, что это значит? Какие проблемы с железом у стандартных инструментов?
вопросы религии обсуждают в /re
>Какие проблемы с железом у стандартных инструментов?
Проблем нет, есть стандартный цикл: скомпилировал, записал прошивку, запустил-отдебажил, ошибка - все по-новой. Форт позволяет это делать интерактивно, через REPL, что гораздо удобнее.
У Форта достаточно шустрый интерпретатор. Он скорее как транслятор. И при желании программу на Форте можно в ассемблер перегнать. Для Форта кодогенерация раз эдак в 100 проще, чем для Си, а тем более для С++.
>Интерпретатор что ли? Так они тормозные пиздец.
Минимальный ассемблер под машину пишется буквально за вечер. Вот для ARM, например, 400 строк:
https://github.com/forthy42/gforth/blob/master/arch/arm/asm.fs
>достаточно шустрый интерпретатор
Интерпретатор - кошмарно тормозной по определению, любой. Твоя "удобная интерактивная отладка" стоит -100 ~ 1000 раз производительности. Компиляцию и сделали чтобы не тыквить компьютеры днищенскими ограничениями. Так что нихуя твоя ковырялка строчная не лучше компиляции с заливкой нативного кода, потому что области применения совершенно разные. Плюс разве что, если можно поковырять интерпретатор для отладки, а потом скомпилить и залить как следует, тогда да.
Ну ни за вечер, но достаточно просто. Надеюь ты ссылку на свой код дал, который за вечер написал.
Что касается Форта то я тоже его за вечер написал и он даже что-то выполнять начал, от чего я сюда прибежал хвалиться. На деле пришлось перепроектировать и переписывать. За вечер пишутся программы которые как бы работают, а лезешь что-то улучшать/исправлять/дополнять и понимаешьчто спешка хороша при ловле блох, а не в программировании.
Но в принципе, переписать программу - в этом нет ничего плохого. Гораздо хуже когда до последнего держишься за кривой первоначальный дизайн и лепишь костыли, костыли и костыли на костылях. В итоге или бросаешь, или собираешься с силами и переписывешь правильно. Потеряв уйму времени и сил.
И насчёт проектирования тоже мысли есть. Вот его неплохо делать когда уже по граблям прошёлся. На прототипе шишек набил - самое время проектировать.
>самое время проектировать
Пойти на сайт и скачать этот форт не пробовал? Уже всё написано, и получше тебя.
Очень удобно проектировать то, что никому не нужно включая тебя самого. Никто не пользуется, а значит тебя ебалом в проблемы не ткнёт. Можно спокойно лепить говно и ничего тебе за это не будет, воображая себя великим архертехтаром с идеальным кодом.
Вот только программирование это не код, а программы. Программы определяются их пользователями, а не тобой с твоим говнокодом в манямирке.
Поэтому тупые ленивые говнари и не делают ничего реального, а только "переписывают" уже написанное, естественно всегда хуже оригинала, ведь это снимает всю ответственность за высираемое говно. Что может хорошего написать хуесос даже не начавший толком ничего писать, но уже сделавший всё, чтобы прикрыть свою жопу, откосить от работы, от ответственности. Заранее не собирается ничего делать, но идет имитировать дело с гордо поднятой головой. Тупые уроды.
Жёстко ты приложил офисных рабов.
Ты хто? Брысь. Срыгни отсюда.
>Ну ни за вечер, но достаточно просто. Надеюь ты ссылку на свой код дал, который за вечер написал.
Первый раз, с нуля - не за вечер, конечно. Потом подобное уже гораздо быстрее пишется.
>>068818
Нормально жмёт.
a strip ключики имеет. Если заиграться, то можно вырезать чть-нибудь полезное, от чего программа не будет запускаться.
И всё же 20 Мб это как-то много. Может быть библиотеки с отладочной информацией линкуешь? Т.е. компиленное тобой поажто а кьютишные либы не пожаты. Попробуй саму Qt собрать с ключом -Os.
Ну вот и альфа версия интерпретатора Форта заработала. Сырое-сырое, но таки заработала.
Пока в 960 строк поместилась, но не гнался за компактностью.
Большая часть универсальная, поэтому портировать под винду и мсвц было не сложно.
Но встал вопрос, если вдруг захочется внезапно собрать с мингв, то какие буилтины и интринсики использовать - гццсшные или виндовые?
потому как беглый взгляд на сурсы мингв показал что некоторые мсвц буилтины реальзованы, некоторые дергаются из винапи, но так же присутствуют чисто гцц буилтины
Чертова сажа.
чел если ты обмазываешься интринсиками значит уже принял решение прибить прогу к одной платформе и компилеру
Суть в следующем - ВЕСЬ развитый МИР пишет бизнес логику в Вижуал Студии. И из неё переносит на линуксы и встраиваемые системы. Вы пошли другим путём, поэтому страдаете.
Поделись копиумом
>Пост прочесть не способен,
ССЗБ.
Ещё раз - с винды все портируется влёт на любую платформу. В обратную сторону - ебись как хочешь. Что непонятного?
> если бы ты читать умел то понял бы.
Хорошо. Я невнимательно прочитал. Вопрос бы был вот тут:
> Но встал вопрос, если вдруг захочется внезапно собрать с мингв,
Звучит как обмазаться говном.
mingw это лютая хуета и мрезость, к которой лучше не прикасаться.
Нет. Правильно только так:
intel C++ > msvc > clang/gcc
А больше ничего и нет, кроме компилятора для какого-то специализированного железа, типа DSP.
Пошла нахуй дура
>Помогите
Покажи скриншот кода. Если ты много сидишь в дебагере, значит что-то не так с твоим кодом.
Думаешь в C# не приходится сидеть в дебагере? Четырё грёбаных дня просидел в дебагере, решая ДВЕ задачи. Но там и проект вот на картинке, который пишется более десятка лет большой и дружной толпой.
Intel C++ для числодробилок. Оптимизирован под скорость. Давно не интересовался вопросом, но когда последний раз смотрел, он был самый быстрый. Точнее, сгенерированный им код самый быстрый.
Быстрый под чем? Под Интел? Так серваки на амд.
А если нужно действительно быстро считать - fpga.
Да и не понятно нахуя тут вообще тогда плюсы. Си и погнал.
>Вы там совсем ебу дали?
Не буду деанониться, но этим продуктом пол мира пользуется. Если не весь. Причём, давно.
> Четырё грёбаных дня просидел в дебагере, решая ДВЕ задачи.
Да пиздец, заебали джуны, нихуя не делают и ещё денег просят. Увольнял бы вас нахуй, хуже нейросеток, наху.
Плюсы дают тебе больше способов написать хуйню. А когнитивная сложность у плюсов ещё и выше.
Плюсы это вообще нонсенс, числодробилки помноженные на ооп и Энтерпрайз.
Дедуль, спокуху, за таблетками уже пошли
>Но какие нахуй 12 наследований
Поверь, там это к месту.
Это писал основатель компании, который скромно занимает должность технического директора и ебашит в одно лицо столько, как половина разработчиков компании. Нормально спроектировано.
Вот ты можешь так сказать о коде, который пишет твоя компания? Большинство известных мне разработчиков плюются и ругаются на код, с которым работают. А тут всё к месту. Потому что продукт очень сложный. Всё там по уму спроектировано. Так бывает.
И если что - я не тот, основал компанию, не Chief technical officer.
Я хз, я же плюсовик, у нас не принято более 3 уровней наследования. А за множественные вообще по рукам бьют.
Да не, код нормальный. И на ревью ебут.
Так в Сишарпе множественного наследования нет. И это неплохо в принципе. Я и на плюсах отказался от множественного наследования. Один предок и если надо, то интерфейс. Хватает.
А, ну тогда заебись.
У нас это средство уничтожения архитектуры осталось. Нам все опасные игрушки разрешены.
Что ты такое делаешь хоть? Какая область? Дебаггер и си - это что-то низкоуровневое или с кучей оптимизаций вручную (скорее всего уже не нужных в 2024).
> ВЕСЬ развитый МИР пишет бизнес логику в Вижуал Студии.
Весь развитый мир сейчас на маках сидит поголовно. Винда - это специфический мир энтерпрайза и всякого офисного говна. Плюс наследники юникса - это абсолютное большинство систем сейчас, винда - отдельный мир, где все несовместимое и особенное в плохом смысле.
>Весь развитый мир сейчас на маках сидит поголовно.
Чушь. Разработчики не используют маки. Точнее, используют если пишут для Айфонов. Потому что выбора нет. Видишь кого с яблоком - это или девопсина, или какой-то менджер.
Ни один разработчик в здравом уме не выберет Макбук.
>Так в Сишарпе множественного наследования нет.
Сейчас и в шарпе и в джаве добавили реализацию у интерфейсов. Это фактически множественное наследование и есть.
>Ни один разработчик в здравом уме не выберет Макбук.
Торвальдс, например. Он сейчас больше менеджер, конечно, но с кодом работает побольше любого сеньора-помидора.
Давай вспоминать что такое интерфейс c C++:
Интерфейсным классом называется абстрактный класс, не имеющий данных и состоящий в основном из чисто виртуальных функций. Такой класс может иметь обычные виртуальные функции (не чисто виртуальные), например деструктор. Также могут быть статические функции-члены, например функции-фабрики.
>Торвальдс, например.
Кто бы о нём помнил сейчас, если бы IBM не решила припустить Microsoft в своё время. И отомстить за OS/2.
Я про шарп и джаву говорил, там свой мирок. Когда реализация "интерфейса" явно требует определенный стейт от наследника (и разработчики бы стейт добавили, если бы была физическая возможность) - это уже не интерфейс, а миксин, вариант множественного наследования.
Если бы BeOS выстрелила, мы бы тоже в другом мире жили. Но имеем, что имеем. Винда сейчас откровенно гниет под управлением индуса.
Да, специфический мир энтерпрайза, при этом доля рынка пк под 90%.
Бля мне даже вот интересно стало, в какой такой офис плюсовых разработчиков можно зайти и увидеть хоть одного с маком? У нас вообще ни одного нет, хотя когда мне покупали ноут, я задумался не взять ли это говно, спасибо что мои школьные мозги тогда все же не настолько были оплавлены
ну с какого хуя auto копирует значение
Ты к чему это спрашиваешь? Я где то говорил что конструктор копирования что то не то делает?
Что тебе не нравится? auto в данном случае обозначает автоматический выбор конструктора.
Вот на этом месте захотелось его убить.
Классно же
Потрясающая хуйня. Жаль что в 23.
Что можно почитать посмотреть, если такое извращение нравится?
Короче, из реально годного, это игнорирование пробелов между \ и переводом строки. Вот это правильно.
Я правильно понимаю, что сокрытие затрагивает только доступность имен, а по факту тут два разных мутекса, которые корректно делают свою работу?
Или что-то может пойти не так?
мопед не мой, пример из говнокнижки
У раста
читает инт из стандартного ввод, умножает его на 2, выводит в стандартный вывод;
на stl с++98 это можно сделать в одну строку бля
> умножает его на 2,
Только если что то считалось
Если не считалось то ноу интегер
дедуль, пора уже про optional почитать
Руки тянутся и сердце рвётся приступить к генерации ассемблерного кода из Форта, но пока повременю - больше тестов богу тестов.
Нафига мне понадобился Форт? А потому что есть "железка", для которой нет ни одного компилятора. Не существует в природе. Есть только ассемблер. Посему выбор Форта, как второго языка, вполне логичен.
Здесь правильно описан интерфейс? Мне казалось, что интерфейсом называют абстрактный класс с виртуальной функцией, не позволяющий создавать объектов.
Вот когда напишешь, тогда открывай рот. А до тех пор не открывай - залетит что-нибудь.
А насчёт старости - и ты будешь старый.
И ещё пока у меню хуй стоит, но уже не на всех и не всегда.
самое главное продолжай держать нас плотно в курсе
Ещё бы это портанули в VS Code, IntelliSense такое же говно как и clangd.
А зачем писать на устаревшем стандарте? С++23 уже финализирован, в свежей STL много хороших фич есть, те же ranges, например. clangd отъёбывает даже если С++20 используешь со свежей STL, пикрилейтед этого говна - на первом пике clangd, на втором нова.
Допустим у меня есть скомпенлированный файл моего скомпилированного говна. В файле есть какая-то функция pizda() где-то, конечно же я знаю где она и расставил флаги предварительно. Возможно ли мне скомпенлировать отдельно код, взять это скомпелированный код и расширить существующую функцию pizda() кодом который скомпенлировал и всё это без всякой компиляции, просто вставкой двоичного говна куда нужно?
Такое вообще возможно? Звучит вроде как как что-то возможное...
Ты так и не объяснил какой профит сидеть на два стандарта ниже актуального.
>>072930
Пиздец поток сознания. В рантайме можешь вообще любое говно смапить в память процесса куда надо, задать нужные флаги защиты странице памяти в винде вызвать VirtualProtect() с флагом PAGE_EXECUTE_READ и выполнить из него код. Разве что DEP под виндой может не дать выполнить код со стека, всё остальное можно.
Но нормальный человек бы сделал подключение внешних плагинов просто через LoadLibrary и GetProcAddress.
> Пиздец поток сознания.
Разговаривать пиздец разучился, два месяца ебу алгоритмы
> задать нужные флаги защиты странице памяти в винде вызвать VirtualProtect() с флагом PAGE_EXECUTE_READ и выполнить из него код. Разве что DEP под виндой может не дать выполнить код со стека, всё остальное можно.
Где про эту хуйню читать-то вообще? Там ещё глобалы есть, функции должны глобалы жрать.
> Но нормальный человек бы сделал подключение внешних плагинов просто через LoadLibrary и GetProcAddress.
Там стоимость же есть, а у меня симуляция, не хотеть чтобы плагины жрали во время выполнения даже одного лишнего вызова.
> Там стоимость же есть
Так ты сохрани адрес из GetProcAddress при запуске, кастани указатель к функции и вызывай его потом как обычно. У тебя в любом случае будет стоимость динамического вызова при вызове функций плагина. А стоимость чтения плагина с диска такая большая, что вообще похуй как ты его инициализируешь.
> глобалы
Вот от этого избавься. Либо плагину в параметрах передавай указатели на это дерьмо.
> У тебя в любом случае будет стоимость динамического вызова при вызове функций плагина.
Так я всю эту маняидею с перезаписью скомпилированного файла и затеял ради того чтобы нахуй убрать любую стоимость, типо я просто переписываю часть скомпилированного файла и он просто становится расширен каким-то пользовательским кодом, который, офк, тоже скомпенлирован.
Сейчас внезапно понял что позволять юзерам вшивать свои бинари в файл это довольно хуевая идея, кхе-кхе, даже если компилировать на сервере и все проверки на сервере будут проходить.
>Ты так и не объяснил какой профит сидеть на два стандарта ниже актуального.
Хорошо, я тебе объясню. Очень просто объясню. Ты, вот лично ты, со стороны не выглядишь разработчиком ПО. Ты ассоциируешься у меня с преподом колежда/универа, который в жизни не писал ничего сложнее тестовых задачек, не прикасался к реальным проектам. Что, впрочем, не удивительно для российских реалий - тут 3,5 конторы которым действительно нужен С++.
Вот эти все вопросы: "А что ты писал/написал?" Они остались без ответа. Судя по всему - ничего. Но конечно надравичать на новые стандарты это твоё.
Конечно я могу ошибаться, назвав тебя преподом, тем более что быть преподом это даже престижно как-то. Но реально я сильно сомневаюсь что твой код где-то кем-то используется.
> с перезаписью скомпилированного файла
Тебе тогда придётся патчить весь код в рантайме, а не просто подгружать бинарник и вызывать функции. Тебе в ассемблер надо погружаться, а не тут советов спрашивать.
> любую стоимость
Ты бы сначала выяснил какую такую "любую" собираешься оптимизировать. Оптимизации без бенчей и профилирования - это путь в никуда. По нормальному надо сначала написать рабочий код, а потом уже после бенчей думать и оптимизировать.
>>073097
Чел, хватит ныть. Вон zig уже в продакшене используют, хотя это такое серые поделие, что даже working draft позавидует. Твоё фанатичное желание сидеть на протухших технологиях никого не волнует, хоть на сишке сиди. C++20 уже много где в продакшене, начиная от нвидии и их CUDA и заканчивая тем же UE5, С++23 в этом году уже в крупные проекты пойдёт понемногу.
> не прикасался к реальным проектам
Это как раз местные шизики из НИИ или студенты учащие кресты по Страуструпу тут топят за старые кресты. В реальности всё немного не так - приоритет в большинстве случаев перед стандартной либой, а не пердольным либам/самописному говну. Буст это вообще ядерный полигон, где обкатывают фичи перед тем как они попадут в стандарт. Фанатичное нежелание использовать современные кресты - это либо тонна легаси, либо утята-шизики. Во всех остальных случаях нет никаких проблем брать актуальную STL.
Там же потеря производительности будет каждый раз при запросе функции, не?
>>073139
> Тебе тогда придётся патчить весь код в рантайме, а не просто подгружать бинарник и вызывать функции.
Не обязательно в рантайме, например это может быть просто какой-то перезапуск процесса или вроде того.
> Тебе в ассемблер надо погружаться, а не тут советов спрашивать.
Главное понять возможно такое или нет в принципе, прямо сейчас не собираюсь это писать. В зависимость от этого буду уже последующую архитектуру лепить.
> Ты бы сначала выяснил какую такую "любую" собираешься оптимизировать.
Стоимость запуска функций в оснвном.
> Оптимизации без бенчей и профилирования - это путь в никуда. По нормальному надо сначала написать рабочий код, а потом уже после бенчей думать и оптимизировать.
У меня симуляции, нужно оптимизировать всё прежде чем говно писать. Оно впринципе уже довольно неплохо работает, но можно и ещё лучше.
Ты похоже не понимаешь о какой стоимости идёт речь. Операция деления медленнее чем вызов функции.
>C++20 уже много где в продакшене, начиная от нвидии и их CUDA и заканчивая тем же UE5
Знаем, плавали. В паре мест, где можно было обойтись и без новых фич, воткнули модный код, остальные 99.999% кода всё такое же древнее легаси на костылях и бусте вплоть до 98 стандарта.
Так этож с длл функция, не? Там какая-то другая таблица адресации, ещё какая-то хуйня. Мне кажется дороже чем деление, гораздо.
> Там какая-то другая таблица адресации
Какая нахуй разница. У тебя вызов по указателю. Разница лишь в том что оно может быть чуть медленнее когда функция далеко и нет оптимизаций компилятора - он одиночные вызовы часто инлайнит. Ты конечно можешь сделать руками что-то типа такого, но это уже по сути JIT-компилятор с рантайм рекомпиляцией будешь писать.
>один раз при инициализации и потом строго похер.
Оптимизирую до уровня наносекунд, так что не похер.
>>073326
>Разница лишь в том что оно может быть чуть медленнее когда функция далеко и нет оптимизаций компилятора - он одиночные вызовы часто инлайнит. Ты конечно можешь сделать руками что-то типа такого, но это уже по сути JIT-компилятор с рантайм рекомпиляцией будешь писать.
Короче в случае чего я могу засунуть не просто функцию, а прямо инлайн бинарный код в мой говноцикл который запускает все функции, и именно так хуячить "пользовательские расширения". Прямо в скомпилированный файл. Верно понимаю?
А нахуя рекомпилировать-то, я просто какие-нибудь флаги выставлю и всё.
По сути мне просто нужно два бинаря сшить в нужном месте, если то что ты описал работает, то сработает и моя фантазия.
Прост выдумываю разные стратегии, чтобы понять куда архитектуру двигать.
Впринципе теперь понятно, в случае необходимости можно говнокод править во время исполнения в неком псевдожите. Да и вообще, именно таким образом и буду всё что угодно "патчить" и "расширять", нахуя нужно что-то ещё, дллки какие-то, хуйня это всё.
И этот псевдожит не требует хоть каких-то модификаций существующего кода или архитектуры, никакой стоимости во время выполнения.
>>073427
Так рекомпиляция будет один раз, а мне наносекунды нужны во время выполнения цикла симуляции.
Ты хочешь сказать что анрил переписали с нуля с концептами, корутинами и ренджами?
>CUDA
https://github.com/NVIDIA/cccl/blob/main/thrust/thrust/tuple.h#L185
Благо дебичи догадались форкнуть либс++ и траст теперь не нужен.
Неправда, кабаны этого не любят, но обычно инициативные разработчики пытаются бороться с легаси. Избавляются от буста и велосипедов в пользу стандарта и тп
>в случае необходимости можно говнокод править во время исполнения в неком псевдожите.
Сегмент кода ReadOnly. На всех современных операционках. Только полезешь писать туда, сразу словишь CoreDump или "Программа выполнила недопустимую операцию и будет закрыта."
Твои трюки могли бы прокатить во время MS-DOS.
> переписали
Ты траллишь тупостью или что? Речь про то на чём СЕЙЧАС пишут, а не твои попытки в демагогию. Открывай свежие коммиты и смотри что там. Представь себе, фичи С++20 активно используются. Тот же UE5 только под С++20 собирается, в свежем коде и всяких концептов много, рейнджи используют тоже.
почитай как делают плагины на основе динамически загружаемых модулей, хотя бы в том же самом геймдейве;
для энтерпрайза то понятно что во многом тема сдохла, потому что кресты теперь там почти не используют, во многом потому что нет механизма стандартизированной загрузки-выгрузки классов, но это уже немного другая тема
Чел.... Просто не пишешь код в ридонли разделы.... Единственный минус это просирается кэш инструкций, что не есть хорошо.
Лучше будет при запуске просто вносить изменения в ядро. Нашёл уже несколько прототипов программ которые нормально с этим работают и модифицируют код и даже могут читать глобалы.
>>073483
Все эти плагины и модули имеют стоимость при каждом вызове функций. А я хочу чтобы оно прямо в основном цикле симуляции пользовательские расширения были доступны и совершенно никак не нагружали этот цикл, тупо вставка инструкций новых.
>>073564
> Только полезешь писать туда, сразу словишь CoreDump
> Просто не пишешь код в ридонли разделы
Челы, вы первый раз что ли? Никогда не писали инжекторы в процессы? Защита страниц свободно меняется - делаешь read-write память, меняешь что надо, возвращаешь обратно execute-read. Вся эта защита не от того чтобы кто-то не залез туда, а чтоб кривая память случайно или специально из-за переполнения буфера какого-нибудь не полезла куда не надо.
> Никогда не писали инжекторы в процессы?
Ну я не писал, по этому сюда и пришёл.
> Вся эта защита не от того чтобы кто-то не залез туда, а чтоб кривая память случайно или специально из-за переполнения буфера какого-нибудь не полезла куда не надо.
Всё настолько просто? Получается тот анон сверху хуйню полную написал?
Тогда мне вообще можно во время исполнения модифицировать говнокод, инжектить туда что нужно, и не ебать мозги совершенно никак?
>Нашёл уже несколько прототипов программ которые нормально с этим работают и модифицируют код и даже могут читать глобалы.
Покажи.
>>073584
>Никогда не писали инжекторы в процессы?
Не было такой необходимости.
>Защита страниц свободно меняется - делаешь read-write память, меняешь что надо, возвращаешь обратно execute-read.
Это на чём ты так делал? На какой ОС? Покажи API.
>Вся эта защита не от того чтобы кто-то не залез туда, а чтоб кривая память случайно или специально из-за переполнения буфера какого-нибудь не полезла куда не надо.
Это понятно. Ты API покажи.
> можно во время исполнения модифицировать говнокод
Если ты готов писать на ассемблере или написать JIT-рекомпилер. Ты явно не понимаешь что хочешь сделать.
> не ебать мозги совершенно никак?
Лол. Тебе уже сказали что ты просто не осилишь сделать это, потому что там ебли не на один десяток часов.
>>073606
> Ты API покажи.
https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect
>https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect
Нихуяссе ты чёрт! (В хорошем смысле этого слова)
Оно действительно работает. Вот попробовал это код на картинке и записал константу в код.
А под Линуксами тоже такое есть?
> Покажи.
За меня уже показали, суть там примерно такая же.
>>073608
> Если ты готов писать на ассемблере
Не вижу в этом проблемы особой.
> или написать JIT-рекомпилер.
Так понимаю там там какие-то другие таблицы адресации нужно делать, чтобы это завелось нормально, и из-за этого выход из скомпенлированной зоны в зону JIT будет довольно дорогим. Нихотеть.
> Ты явно не понимаешь что хочешь сделать.
Всё что я хочу - понять можно изменять скомпилированную программу, добавляя в неё скомпилированный код.
> Лол. Тебе уже сказали что ты просто не осилишь сделать это, потому что там ебли не на один десяток часов.
Да я в курсе, и не пытаюсь в это вникнуть даже, немного погулил только. Мне важна понять можно ли это сделать или нет. Если такое можно сделать и даже можно не обосраться с кэшем команд - то мне не нужно менять архитектуру и что-то дописывать. Если возможности нет - нужно дописать код и как-то пытаться впихнуть внешние библиотеки и передавать в них глобалы, а не хочу это делать по причине проеб производительности на каждый вызов.
Симуляцию всякого интересного говна про которое не расскажу с циклом на 1-10 кГц. Каждая проебанная наносекунда решает.
Но для этого не нужно самомодифицировать код. Это порочная практика. 10 КГц ты вытянешь на современном компе просто эмуляцией.
> Но для этого не нужно самомодифицировать код. Это порочная практика.
Так мне нужны пользовательские расширения! Понятно дело что это как-то нестандартно звучит, лучше это всё тупо рекомпиляцией всего проекта делать, но рекомпиляция не всегда будет возможна, а совсем без расширений будет тухловато.
> 10 КГц ты вытянешь на современном компе просто эмуляцией.
Там вычислений может быть дохуя, например 2к строк матана или больше. 10кГц это верхний разумный предел, но хотелось бы чтобы он был как можно выше, например 50, да и чтобы это работало на дешманских серверах и процах.
Чего бы тогда не посмотреть в сторону ПЛИСин со встроенной плавающей запятой? Очень дорого, это да, прям неприлично дорого. Но по скорости порвут всё что только возможно и невозможно тоже. Представь как вкусно - ебически длинное выражение, которое конвейеризируется и всё сразу считается непрерывно. Ещё доступ к памяти оптимизируешь.
Ебаная капча постоянно подсовывает названия советских радиоламп. Безумие какое-то.
>Симуляцию всякого интересного говна
Почти все современные "симуляторы всякого говна" работают через dynarec, динамическую рекомпиляцию. Полно готовых решений для JIT и кодогенераторов разной сложности.
>в свежем коде
Я про это и писал, дебич. Формально у нас C++20. Стильно, модно, молодёжно. По факту, это лишь бесполезные фасад, всё самое главное, в глубине, лютое костыльное легаси, на которое дыхнуть боишься, не то что трогать.
>на которое дыхнуть боишься, не то что трогать
То есть у вас попросту некомпетентные макаки вместо программистов, раз не могут разобраться в коде - в своей работе между прочим. Не можешь - вон из профессии, неграмотная хуесосина. Как такие вообще попадают на должности, непонятно. Ваша контора гадюшник некомпетентного говна, всех надо разогнать нахуй, начиная с начальства допустившего этот пиздец.
Ебать порвался
Оно на серверах и пользовательских устройствах должно работать, в этом проблема и ещё пользователи могут пилить свои дополнения и встраивать. Если это будет плис, то у всех жопа порвётся, наверное.
Конечно всё такое на пилсе лучше пилить изначально, в итоге так и будет, но это уже когда-то потом.
>>073724
Короче мою маняфантазию сделать возможно, так же как делают динореки и житы. В случае чего просто напишу авторам какой-нибудь подобной либы. А пока что обойдусь генераторами кода, например, или чем ещё подобным.
Я так и сказал - это ты некомпетентное говно, а не "легаси-код плохой". Зачем хвастаться своей тупостью и свинством публично, вот в чем вопрос. Ты говно сидящее не на своем месте, паразит ворующий деньги и не делающий работу. Зачем ты здесь в треде программирования? Зачем ты тут рассказываешь какое ты говно, а не программист? Чтобы что?
И для неграмотных дебилов, в данном случае обращение "ты" общее ко множеству людей, а не индивидуальное.
Не ну там тредов нет, как бы 11 всё же получше будет. Максимум 17, думаю. 23 конечно стоит рассматривать, но ничего нового там не прибавилось.
Энивай на с++ лучше не кодить.
>А зачем вообще с++23, если в с14 достаточно для всего?
В 17 добавили инициализацию в ифы, можно делать if ( bool ok = foo(); ok ) - очень удобно. Ну и только ради констэкспров можно дальше переползать.
> if ( bool ok = foo(); ok )
Вот это норм, кста.
> констэкспров
А это хуй знает, сомнительно. Шаблоны можно и без этого делать, а мешать шаблонный код с обычным выглядит как не очень хорошая идея.
>> if ( bool ok = foo(); ok )
>Вот это норм, кста.
ЧТо тут норм? Область видимости ok какая???
> констэкспров
>А это хуй знает, сомнительно.
А вот они как раз годнота. Впрочем, я не старался их понять - утащил пример один и пользую его практически во всех проектах для использования строк в switch/case. А мне для большего он и не нужен.
>>074489
> ЧТо тут норм? Область видимости ok какая???
Внутри блока иф очевидно
мимо
Понимаю как не писать говнокод.
>Шаблоны можно и без этого делать
Можно, по 200 строчек нечитаемого леса из угловых скобок вместо одного цикла с constexpr.
Внутри круглых скобок? Не?
а внутри его блока елсе тоже очевидно?
Для них нужно подстраивать архитектуру, т.е. я свой код должен подговнять по какие-то констэкспы. Нахуй это нужно вообще, и без этого проблем дохуя, ещё тут этим заниматься, легче и проще макросами наговнять то же самое.
Не. Тут фишка в другом. Ты в constexpr загоняешь хэш-функцию, и у тебя swich начинает понимать сишные строки. Код становится простой, читаемый, мегаоптимальный, по сравнению со strcmp.
Это масло и вкусная фича. Хрен кто меня заставит теперь откатиться на стандарт, который был до constexpr. Это тупо удобно. Очень удобно. Уж насколько я хейтер всей хуйни, что тянут в плюсы, но constexpr это мегарулёз.
>Тот же UE5 только под С++20 собирается, в свежем коде и всяких концептов много
Ковырялся с UE4-5 на уровне туториалов и примерчиков. Не помню, чтобы там вообще использовали std::
>рейнджи используют тоже
В UE своя модель памяти, со сборкой мусора.
Чисто технически в UE-проекте у тебя конечно есть возможность использовать твой любимый std::vector и наслаждаться всей мощью <algorithm>. Но в контексте UE - это тоже самое, что и в C++23 гонять голые указатели по сырым массивам, а то и хуже.
>загоняешь хэш-функцию, и у тебя swich начинает понимать сишные строки
А потом коллизии хешей и
>"ой, чото глючит, хотя код правильный, но редко и непредсказуемо, наверное компьютер протух, купите новый, или попляшите с бубном в полночь новолуния, мне помогло"
Зато свиномакаке проще высирать говнокод.
>Исходники движка
А что там в исходниках написано именно тобой?
Я тебя мордой тычу в на порядки более распространенный сценарий использования, даунич.
Ты тупостью траллишь, да? В движке активно используют свежие фичи - это факт. То что ты туториалы пишешь в стиле си с классами - лично твои проблемы.
Про сборку мусора в UE5 вообще перл. Выпей таблетки.
> Ты в constexpr загоняешь хэш-функцию
Звучит как шизофрения. Зачем это делать?
> и у тебя swich начинает понимать сишные строки
А это что? Как? Зачем?
> по сравнению со strcmp.
Ну хз конечно чел, но ты уверен что всё правильно и оптимально делаешь?
> Это тупо удобно. Очень удобно.
Если ты в макросы не можешь, то наверное так. Просто погугли как писать макросы.
Ну вот кусочек моей реализации Форта. Выше ты видел скриншоты его работы.
А на скришоте тот самый switch/case со строками.
Уверен ли я что правильно делаю? Более чем уверен. Как ты понимаешь, hash на данном скриншоте это constexpr.
Если ты и это оспоришь, то я хуй знает что тебе ответить. Разве что обвинить тебя в толстом троллинге.
Конечно я мог бы это сделать на макросах, но тогда такое решение сразу проиграло бы и в читаемости, и в скорости.
Ещё раз - я не одобряю всю ту хуету, что тянут в стандарт, но там не всё хуета. Там и годнота тоже есть. И частный пример годноты это constexpr.
Ты имеешь в виду hash у тебя constexpr функция? Так здесь он тебе ничего не даёт. Компилятор не обязан выполнять её во время компиляции. С таким же успехом ты можешь объявить её инлайн.
Специально для таких случаев сделали consteval в 20 стандарте.
Согласен с тобой по поводу плюсов и стандартов, но вот конкретно твой пример констэскпра ниочем, можно тупо констатны твоего хэша использовать, будет то же самое.
То где констэкспр реально ощющается плюсом - иф кжнстэкспр в темплейт функциях.
>можно тупо констатны твоего хэша использовать, будет то же самое.
Можно, кто ж спорит, но это геморрой. Считать константы придётся самому, потому руками их объявлять.
Впринципе да, выглядят будто какие-то ньюфаги-вкатывалщики решили вкатиться в программирование.
>>075190
Шаблоны и код должны разделяться. Нахуя их вообще объединять в одном файле? Чтобы что? Чтобы сложнее было этот бред ебаный читать?
>>075233
Погоди, ты. Тебе просто типо лень писать енум этим ты оправдываешь нахождение там констэкспр? А если тебе в какой-то момент потребуется коды иметь, то тогда что, немного перепишешь? А если будет коллизии?
Да и вообще, нахуя искать хэш строки, если компиляторы всё равно хэшируют строки? Типо. Эээ. Зачем? Реально не понимаю зачем ты всё это делал.
>>075437
> но это геморрой
Избавлю тебя ещё от одного гемороя, анон. Компиляторы хэшируют строки. Пользуйся.
> А если будет коллизии?
Вероятность коллизий в switch/case ничтожно мала - там не так много вариантов в case и коллизией можно пренебречь. И это не такое отвественное приложение, которое приведёт к катастрофе в случае коллизии. Если вдруг кто поймает коллизию, то он просто поменяет слово форт-исходнике и коллизия исчезнет. Возможно напишет автору, мол, смотри - у тебя там коллизия. Но к тому времени автор уже состарится и умрёт, пока сработает эта вероятность.
> и коллизией можно пренебречь
Ты. Ты же в курсе что там не один раз это всё будет вызываться? Ты понимаешь это? Т.е. если программа на форте достаточно большая и компилируется достаточно часто - у тебя будет минимум одна коллизия с достаточно высоким шансом. И никто не будет знать почему его говняк не работает.
Современное программирование нахуй. Ебануться просто. Забористо, конечно. Надеюсь ты свой говнокод пишешь, а потом удаляешь нахуй, чтобы никто не пользовался.
> и компилируется достаточно часто
Даже не компилироваться, а просто вызываться, так понимаю. Т.е. если программа на форте будет достаточно большой - при КАЖДОМ вызове этой хуйни будет довольно существенный шанс что всё обосрётся. А если пользователей будет достаточно много - каждый день у одного из них будет коллизия.
Это же ебануться просто. Вот это шмаль нахуй. Не представляю человека который на самом деле пишет так.
Если ты по маленькой картинке понял как там всё работает, то пиздец ты мегамозг.
Выдыхай, бобёр!
Ну расскажи как это всё работает. Вот я вижу коллизию которая происходит каждый раз при запуске говна на форте. Чем больше размер говно на форте - тем чаще будет коллизия.
Если же форт-кал находится прямо в cpp файле и компилируется при компиляции cpp - так тогда никакие хэши нахуй не нужны, потому что компилятор уже хэширует строки.
Либо это ебейший говнокод с коллизиями, либо незнание работы компилятора.
> Шаблоны и код должны разделяться. Нахуя их вообще объединять в одном файле? Чтобы что? Чтобы сложнее было этот бред ебаный читать?
Каво, какие нах шаблоны
И почему шаблоны и код это какие разные сущности, и схуяли они должны быть раздельно?
>>075572
А вы не очень умные, да?
Эти все коллизии можно вообще с помощью тех же констэкспров поймать на стадии компиляции, с помощью intToType.
Я не говорю даже о том, что можно тесты написать, буквально дело 3 минут.
И такое ощущение что вы, два деда, забыли что такое хеш функция и как работают константы.
Шиз, на первые два вопроса то ответь
Орунах, тесты, intToType, и вся эта шиза нужна просто для того чтобы не писать енум на 10 строчек, а писать какое-то дерьмо с констэкпром.
Тут уже таблеточки нужно принимать.
Дедуль, а стр ту енум кто тебе напишет?
А кто будет следить за актуальностью?
Две строковые константы это геморрой²
В целом я не удивлен твоему заявлению, ведь если вы будете писать поддерживаемый код вас сразу же с работы выпрут, ебаная мебель.
>Ну расскажи как это всё работает
Я лучше покажу на Гитхабе, когда решу что время пришло.
На деанон мне строго похуй.
По сути интерпретатор Форта мне не нужен, мне нужен его компилятор. Интерпретатор нужен только чтобы его отладить.
> Дедуль, а стр ту енум кто тебе напишет?
Он там вообще не нужен, кстати.
Если правильно понимаю, то это говнокод который типо читает форт и выполняет код форта и эта хуйня с хэшем вообще нахуй не нужна, да и свич нужно переписать.
Сравнение всех строк свича (даже если их там 20 или 50) будет быстрее одной функции хэширования, потому что многие алгоритмы в либах, как и компиляторы, используют SIMD и MMX. Если нет доверия к компилятору/либе, то можно самому написать SIMD/MMX, с расчётом на максимальную длину строки, это будет на порядок быстрее идеального хэширования.
Хуй знает про что вы тут вообще визжите, буквально не понимаю причину всех этих визгов. Хэширование, тесты, констрэкспы, ебануться просто вкатуны.
> По сути интерпретатор Форта мне не нужен, мне нужен его компилятор.
Тогда тем более тебе строки нужно сравнивать через SIMD, там быстродействие будет раз в 100 нахуй быстрее вот этого всего. Сравнил строки, создал промежуточный байткод, как это делают многие языки, этот промежуточный байткод уже нормально исполняешь, без всякой ебаной дряни типо хэшфункций.
Для начала хотя бы их
>По сути интерпретатор Форта мне не нужен, мне нужен его компилятор.
Тогда зачем ты экономишь на спичках? В обычном форте вообще тупо посимвольное сравнение строк идет, потому что разница по скорости с хэштаблицей будет видна где-то уже на мегабайтах исходников. Олсо "компиляция" в форте - это режим работы интерпретатора после DOES>, когда ты в слово инструкции пишешь.
> В обычном форте вообще тупо посимвольное сравнение строк идет, потому что разница по скорости с хэштаблицей будет видна где-то уже на мегабайтах исходников.
Да. Но в данном случае мне нравится простота и читаемость.
>Олсо "компиляция" в форте - это режим работы интерпретатора после DOES>, когда ты в слово инструкции пишешь.
В моём случае "компиляция" это ключик в командной строке, который скажет что форт-программу нужно не исполнить, а сформировать ассемблерный файл из неё. Ради этого и заморочился с Фортом.
>Сравнил строки, создал промежуточный байткод, как это делают многие языки, этот промежуточный байткод уже нормально исполняешь
В стандартном форте принцип работы другой, там интерпретация идет сразу во время чтения исходного кода. Он изначально однопроходный, поэтому между определениями функций, нельзя например, циклы или бранчи вставлять. Назад тупо некуда возвращаться, все исполняется прямо вот тут. После ":", определения функции, интерпретатор не сразу исполняет, а переходит в режим "компиляции" слова - заполняет токены в список исполнения. Все очень просто и тупо.
>В моём случае "компиляция" это ключик в командной строке, который скажет что форт-программу нужно не исполнить
Программа в любом случае будет исполняться, там же immediate, [ и ] есть. Тебе надо словарь создать, а потом в какой-то момент его транслировать в бинарник.
Короче никакой хэш там нахуй нинужон, единственное правильное ускорение - компиляция в промежуточный байткод.
>Короче никакой хэш там нахуй нинужон
Можно с хэшем. Просто чуть быстрее поиск по словарю будет идти. Только нюанс в том, что надо сохранять порядок слов - последнее слово из нескольких с одинаковыми именами должно находиться первым.
>единственное правильное ускорение - компиляция в промежуточный байткод
Зависит от того, что тебе нужно. Если цель - метакомпиляция под другую машину, там да, промежуточный байткод, потом код под платформу. Для простых вариантов обычно делают или indirect threading, где выполняемый код - это список токенов каждому из которых соответствует адрес слова (тормозной, но занимает меньше места и возможна интроспекция функций), или самый простой вариант - subroutine threading, где код слова - это просто машинный код вида call addr; call addr; ... ret; возможно с инлайном базовых слов (гораздо быстрее, но код чуть пожирнее выходит, по пять байт на инструкцию на x86, и нужен дизассемблер для интроспекции).
А это надо вообще, деструкторы не оверрайдятся же? Да и функцией не являются в полном смысле слова.
> Можно с хэшем.
Не, это в любом случае будет медленнее чем предварительный проход и какой-то промежуточный байткод. Можешь даже сделать вариант в котором твой свич оператор будет просто брать этот байткод, например, никаких хэшей, никаких проблем.
> Зависит от того, что тебе нужно
Быстро компилировать, например, быстрее исполнять, все операции будут векторными. Хз почему ты вообще читаешь и исполняешь.
Я не автор кода со скрина выше. Он похоже не понимает, как форт работает, думает, что это просто стековый язык вроде постскрипта.
>Быстро компилировать
Ну так оно и так очень быстрое. Обычно файл читается с диска дольше, чем обработка идет.
>Хз почему ты вообще читаешь и исполняешь.
Потому что это в стандарте форта лол. Там на это все завязано. Без этого форт не форт. Внешний интерпретатор, который читает текст и тут же его исполняет или компилирует - неотъемлемая часть системы. Причем обычно программа там постоянно прыгает туда-сюда из режима интерпретации в режим компиляции и нет особого синтаксиса для макросов, и синтаксиса вообще - делай, что хочешь, как хочешь и когда хочешь. Предварительный проход тут в принципе невозможен. Там (, начало комментария - просто функция, которая гонит позицию в файле вперед до закрывающей скобки. Слово ." - вывод строки на печать тоже функция, которая набирает литерал строки из входного файла, пока не дойдет до закрывающей кавычки и компилирует его вывод в консоль. То есть синтаксиса вообще нет, все функции, поэтому и предварительный проход невозможен.
>Нахуя?
Заскучал за изучением синтаксиса, решил дропнуть себе вызов сделать на сишке первое что придет в голову. Доволен как слон ещё зелёный, вылетало куча ошибок в CMake, хоть и делал абсолютно все по мануалу, попутно наебнул vcpkg неведомым образом, по итогу запускаю через студию.
Щас буду сидеть изучать доки библиотеки, чтобы пару приколов вставить и дальше возвращаться к душниловке. Пожелайте удачи.
Ещё - абсолютно нихуя. Но я заставил его работать, и с этим уже можно что-то придумать.
>1. Являются. Все это функции.
В полном смысле слова не являются. Это функции с ограниченным функционалом, со специальными правилами.
Впрочем, в контексте вопроса это не имеет значения.
Меня однажды приложили Стандартом. Я у Самого Страуструпа вычитал про имя деструктора, а по Стандарту, оказывается, у деструктора нет имени.
>2. Не слушай тиди/клази/клангд - они часто ерунду городят.
Спасибо.
Попробовал запустить простые хелоуворды, ситуация хоть и лучше, но тоже говна подлили. И я вот думаю как это все работает?
Часто кстати проверяете свой продакшн код? Или работает, похуй?
Я не работал с Qt. Но знаю что у многих компаний гитовский репозиторий не соответстаует внутреннему.
Блин, четова дизлексия. Короче, я имел в виду что на github.com и на приватном github версии не 100% соответстввют.
>Тебе надо словарь создать, а потом в какой-то момент его транслировать в бинарник.
Спасибо за совет.
Что-то такое вот приблизительно получается.
Достаточно просто не использовать ничего связанного в линуксом и под лицензиями GPL. Сразу легче станет жизнь.
Ну, допустим, перехожу на проприетарщину, мне дали хидеры и скомпиленные, стрипнутые либы. Как мне удостовериться, что там нету всякой хуйни?
Поверить на слово.
помогите сконфигурировать Clang для VS Code
не включается дебаггер lldb
g++ работает, msvc работает, a clang нет(
g++ и Clang установлены через MinGW, ос - Win 11(64)
Тогда должно всё запускаться, иди мануалы читай
Ну или как-то раскрывай свою проблему более подробно, чем просто не запускается
А вот кнопка Run c++ file не работает, и скрин tasks.json
спасибо
вот стоило сюда написать)
Класс а и класс б ребенок а. В родителе есть функции 1 и 2, 2 находится внутри 1. Ребенок наследует эти функции.
Можно ли в ребенке переопределить функцию 2, вызвать родительскую функцию 1 но чтоб она выполнила переопределенную функцию ребенка?
Было бы удобно не переписывать все родительские функции если надо переписать одну.
И компилятор тоже - https://pastebin.com/XFf7FjeQ <==== этот ассемблерный файл сгенерирован из кода с первой картинки.
Две недели ушло. И всё равно ещё сырое.
Вроде простым способом нельзя, ты какую то магию на уровне CRTP хочешь.
Кто-нибудь не подскажет, в типичной реализации виртуальных таблиц используется имплицитно dynamic_cast? Я понимаю, что сначала мы переходим к массиву указателей через _vptr видимый в базовом сегменте, далее находим индекс где лежит адрес метода действительного объекта. Теперь вопрос: как именно происходит его вызов: DerivedMethod(dynamic_cast<Derived*>(this) или как-то по-другому? И откуда берется информация о типе, полагаю из typeinfo в виртуальной таблице?
не используется
Там не надо ничего кастовать, сигнатура методов одна и та же. Просто выбирается разный адрес по которому будет вызов, остальное всё то же самое.
> typeinfo
Никакой инфы о типе там нет, там type erasure происходит, в vtable только адреса методов. Кресты не ООП язык, в рантайме нет никаких объектов. Вот если ты захочешь в рантайме подменить один тип на другой, то тут уже RTTI будет использоваться, т.к. компилятор не знает что ты ему подсовываешь. А в случае с виртуальными методами компилятор всё знает, ему достаточно просто выбирать нужную vtable.
Давай возьмем простой пример:
void foo(Base *ptr)
{
ptr->Multiply();
}
0. На этапе до запуска компилятор определяет все типы, но он не знает какой метод будет вызван. Ок, это значит, что тип будет определяться с помощью таблиц.
1.При запуске программа видит сигнатуру виртуального метода, обращается к vptr, видимого из базового сегмента ptr. Окей, мы перешли в виртуальную таблицу класса D1, нашли индекс метода Multiply, который совпадает по сигнатуре с методом, вызванным через ptr
2.Дальше что? Допустим, сигнатура -- void Multiply().Получается, тут никакого каста нет и программа просто подставляет this в параметр?
> При запуске программа видит сигнатуру виртуального метода, обращается к vptr
В твоём примере *ptr == vptr.
> Дальше что?
call [ptr+offset]
Всё.
> Получается, тут никакого каста нет и программа просто подставляет this в параметр?
Грубо говоря да. Без виртуальных методов будет вызван метод напрямую, с ними будет вызван по индексу из vtable. Всё остальное так же.
Чаю?
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/history/history_item.cpp#L353
Найди все вызовы конструкторов этого класса.
Найди случаи, когда это удовлетворяет твоим условиям.
Добавь проверки и НЕ вызывай конструктор.
А пытаться внутри конструктора отменить его вызов - ну фарш не прокрутить назад.
если тебе сверху эту задачу не спустили, а есть выбор, то можно дать совет встраивать lua а не питон
питон же удобно использовать наоборот, те на си либо крестах писать модули для питона, и потом уже в питоне их использовать
У меня там пара мелких нейросеток. Я сначала хотел на крестах всё сделать через onnx, но когда понял сколько придётся питоновского кода переписать забил хуй.
Всё же смог понять что за дерьмо было, пришлось в коде питона чуть ли не каждую строчку try и принтами обмазать, по какой-то причине куча импортов в дебаге сыпят ошибками, в релизе всё заебись.
Ссылку на репозиторий дам чуть позже. Если не забуду. Надо ещё кой-какие моменты подправить.
Название такое - Yet Another Forth. Гугл по такому поиску находит YAFFA - Yet Another Forth For Arduino. Да и пофиг. Даже неплохо сейчас посидеть в тени.
>>081348
Только один вопрос - насколько хороша эта тема и вообще двачи для анонса? Может быть лучше Хабр, LinkedIn, LOR, ixbt, LiveJournal, etc?
Хотя, думаю что интереса к Форту было бы больше в /ra разделе, нежели в /pr.
>>086068
Ладно, уговорили. Но пока за пределы этой темы прошу не тянуть - сырое ещё очень. Прям очень сырое:
https://github.com/L4OS/yaforth
Плюсовики работают на оборонку, конечно знают! Три проходных, колючая проволока и бойцы с пулеметами!
>зачем нужны статические библиотеки как отдельный формат файлов .a
.a - это просто архив, в котором лежат .o
вот чел берет указатели на содержимое контейнера и искренне удивляется что на реаллокации они отваливаются..
напиши нормально че ты хочешь сделать. что возвращает либа и что ты кладешь в контейнер. и какой контейнер
Задает тип. IntegerArray<5> и IntegerArray<3> будут разными типами, гарантирована ошибка компиляции при недопустимых операциях, в то время как IntegerArray(5) и IntegerArray(3) один и тот же тип. Мало того, что дополнительные проверки надо писать, так еще и семантически это неправильно.
Не нужно хранить дополнительную переменную, отвечающую за размер в каждом экземпляре класса, метод size() реализуешь как return size, где size уже вшит в бинарник. мелочь, а приятно.
Но самое пиздатое, это сочетаемость с шаблонными функциями, например
template <int size> sort(IntegerArray<size>& array);
.lib
Промазал... Это челу выше по ветке.
> плодить новые сущности
Они под капотом плодятся, не влияют на производительность. Единственное что увеличивают незначительно размер бинарника.
> что мне потребуется столько же типов, сколько и экземпляров класса
Ты о чем? массив размера 10 это один тип, у него может быть множество экземпляров.
>код Криты, вроде как большого, серьезного проекта
чисто пет-проджект для воскресного пердоленья, кто то ебет телок и бухает пиво, кто то сидит в mmo по выходных, а 0,00000001% ебанашек от популяции имеют такое хобби типа писать код, вот и высирают gnuшный софт
у тя плохо с арифметикой что ты делаешь в этом итт треде здесь вообще то сидят профессионалы у которых как минимум универсисетский курс матана есть
Да, сразу видно этих "профессионалов", которые учились на платном.
В общем. Я нубан.
Работаю шарпером на заводе.
Вот, недавно подпустили к проекту, на котором матерые C++'еры работали, но на шарпе.
Увидел там нечто похожее на прикриплейд.
Можете объяснить, нахуя и зачем так делать?
Вопрос не по шарпам, а по вот такой вот странной структуре класса.
Потому что по логике остального приложения, это выглядит как описание одной сущности. Задачи, которую надо выполнить
А в коде это работает типа так:
for(int i = 0; i < jobs.Count; i++) {
if(jobs.Status == STARTED)
continiue;
else if(jobs.Status == PENDING)
{
jobs.Started = DateTime.Now;
jobs.Status = STARTED;
jobs.Handler(context);
}
...
}
Но почему-то вместо обычного массива или листа - вот такая странная фигня. В коде шарпанов я такого никогда не видел.
Вот и думал, может быть С++ пояснят зачем так делать и есть ли вообще в этом смысл какой-то.
Блин. Еще и проебался с написанием кода
В коде оно выглядит так:
for(int i = 0; i < jobs.Count; i++) {
if(jobs.Status == STARTED)
continiue;
else if(jobs.Status == PENDING)
{
jobs.Started = DateTime.Now;
jobs.Status = STARTED;
(jobs.Handler)(context);
}
...
}
Матёрые плюсовики решили сэкономить наносекундов на обходе статусов джоб. Ход мыслей таков: идти по массиву джобов, заглядывать в каждую джобу и проверять ее статус будет медленнее, чем идти по массиву статусов и проверять статусы.
Для больших массивов и/или серьезных требований к latency так и есть, в остальных случаях - преждевременная оптимизация и ненужное усложнение кода.
> ненужное усложнение кода
Ненужное усложнение кода - это всякие ООП паттерны, созданные чтоб джун мог мыслить шаблонными конструкциями и не запутаться с 100 строчках кода.
В данном случае джун запутался в 30 строчках кода. Да и структура массивов - вполне себе паттерн во многих сферах.
Чтож тогда с тобой случится, когда ты шаблоны увидишь? Пикрилейтед ещё вполне безобидный шаблон.
Так прикриплейд таки - как раз обычный ООП код с женериками, просто как обычно у плюсов - синтаксис выбрали максимально странный. Могу даже предположить, что это сорт оф обертка создания COM-объектов. Угадал? МБ нет. С++ я все равно не знаю совсем.
А вот тот подход выше, как раз для меня, чет новое. Я ни разу такого раньше не видел.
Погодь. Я вроде не говорил что запутался. Я просто никогда такого не видел и не понимаю, зачем так делать.
Для меня это выглядит как непонятное усложнение. Типа теперь - на разработчика переложена ответственность за тем, чтобы следить, что данные в этой вот штуке согласованы, что кто-то случайно потом не перепутает индекс и не запишет неправильно чего-то. Плюс - работа с этим кодом - усложняется, потому что теперь апи для остальной работы должно не просто объект принимать, а еще индекс той сущности с которой идет работа.
Вот мне и интересно, а зачем это делать. Есть ли от этого профиты какие-то и насколько они существенны.
Этот анон >>088963 сказал что экономится время и что это может дать прирост по перформансу. Это валидная причина, я считаю. Но насколько она экономится и за счет чего? Надо ли мне теперь везде, где я обхожу что-то в цикле - сделать вот такую же штуку, или прирост там 0,0000000000000000000001% а работа с кодовой базой усложнится в разы?
> Но насколько она экономится
Только бенчмарк покажет на твоих объемах.
> и за счет чего?
За счет того, что при чтении данных из оперативки они остаются в кеше не байтиками, а линиями по 64 байта. В эту линию влезет 8 значений int из твоего массива, а если переделать на структурки - то только 2 значения по 28 байт (если зделоть нормально padding). А кеш быстрее оперативы - вот за счет этого и ускорение. Если бы статус был enum: byte, было бы еще быстрее.
> Надо ли мне теперь везде, где я обхожу что-то в цикле - сделать вот такую же штуку, или прирост там 0,0000000000000000000001% а работа с кодовой базой усложнится в разы?
Нет, не надо. Такое нужно только если гонишься за низким latency или hotpath в числодробилках для обсчёта гигабайтных агрегаций/etc. Делай сначала чтоб работало правильно хоть через foreach, хоть через linq, потом оптимизируй (с бенчмарками).
А. Ну у них там статуса - в виде байтиков. Да.
Но из-за твоего описания - мне теперь еще менее понятно, зачем так делать было.
Уже сказал. Завод. Там типа код - для сборщика данных с датчиков. Да, датчиков много, но большую же часть времени, будем не чет на процессоре обрабатывать, а ждать что там в сокет прилетит.
Надо наверное у них пойти и спросить. Но блин, так страшно, посмотрят как на дурака, я потом полгода буду в пол смотреть.
Дурак не знает и знать не хочет. А ты интересующийся.
Тем более для прогеров алгоритмы и архитектура - такой же повод для гордости как и большой хуй.
Using func_type = govno(zalupa)(penis, her)
T::func_type
Так не выйдет?
Накидай минимальный воспроизводимый пример
Так это надо для каждого типа писать такое. А я имею в виду, условно, передать функцию в конструктор, сохранить её тип и потом в методе обращаться к этому типу. С auto при создании инстанса шаблона такой трюк провернуть можно - тогда типы шаблона сами выведутся, но auto нельзя использовать для полей класса - там придётся писать при объявлении поля вот такое говно:
> A<govno()(zalupa, pizda)> a;
При том что этот тип по логике приватный, нахуй он нужен во внешнем интерфейсе класса, где инкапсуляция.
Либо забей на типы параметров нахуй они тебе дались?
template <typename F>
struct huynya
{
using funkziya = F;
huynya(F f) {}
}
либо
template <typename Ret, typename... Args>
struct huynya
{
using funkziya = Ret(*)(Args...);
huynya(Ret f(Args...)) {}
}
Тип функции должен вывестись сам во время вызова конструктора, начиная с 17 стандарта, если не захочет, пиши deduction guide для него.
вообще, вопрос интересный
так или иначе его решали начиная собственно с начала проектирования стандартной библиотеки шаблонов, там была парочка функций-помощьников для этого
потом предлагались различные улучшения, часть из которых была в буст добавлена
ну а потом когда пошли новые стандарты, то почти в каждом стандарте добавлялись какие-нибудь мелочи чтобы улучшить решение данной проблемы
так чтож удачи опу во всем этом разбираться, ибо это интересно и очаровательно бесполезно
> В методах есть частичный/полный вывод типов шаблона, а для классов не завезли - указывай всё явно
>так разве CTAD не про это как раз?
> так чтож удачи опу во всем этом разбираться, ибо это интересно
Я уже на 99% уверен что это невозможно. Т.к. шаблоны не могут хранить никакого состояния, кроме того что находится в списке параметров шаблона. Более того, после того как инстанс шаблона создан, типы в шаблоне не могут меняться, т.е. фактически мы можем только константы хранить в параметрах шаблона. Так что вариант один - прописывать каждый тип, через using или ещё как, и обращаться к этим прописанным типам. Я вчера попердолился с constexpr-функциями, возвращающими тип, но всё хуйня. На момент передачи чего-либо в конструктор все типы шаблона уже выведены и ничего невозможно сохранить. Ждём рефлексию в С++26, там уже можно будет в компайл-тайм типами жонглировать как переменными, может уже в этом году увидим в working draft.
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2996r2.html
жаль а) я нищий б) у ноута всего один слот ссд.
придется отлодить учебу (
так бы купил 8тб ссд м.2
в мегабайт уложишься
> Visual studio
> C++
Тебе ещё компилятор понадобится
ты же не собираешься мсвц использовать, ведь правда?
Если по какой то причине чел хочет под виндой писать, то мсвц лучший выбор лол, и мингв и кланг еще хуже. А так то конечно лучше православного гцц ничего нету.
В чем проблема мсвц? Он бывает на шаблонах ошибается, но в целом им собирают почти все под виндой. Не думаю, что у него будет проект сложнее UE5, что возникнут проблемы.
Просто на плюсах обычно байтики переворачивают, а не сайты делают, неужели там попросят Twitter спроектировать
Теплое с мягким не путай.
Все
Там местами инфа довольно скудная, за полной в стандарт идти надо. По новым фичам там пробелы есть, TS неактуальная по большей части.
> По новым фичам там пробелы есть
Ну это же крайнего только стандарта касается, правильно я понимаю?
На завод иди гайку крутить, где бронь дают, лошара. Может под майскую мобку не попадешь.
Ишь чего он захотел. Бигтех какой то с крестами.
Ну ты же понимаешь, какой размерности у тебя числа на входе в функцию, какой на выходе.
Если нет - то да, плюсовики складывать не умеют.
на х86-64 переполнение знакового не является УБ
Я не читал, но обычно такие книги, которые посвящены конкретному стандарту, рассказывают не про язык в целом, а только про конкретный стандарт. Соответственно для незнающих язык не подходят
Так и должно быть, лалка.
вкатунов куда? в эзотерический язык программирования?
надеюсь у тебя есть две квартиры в собсвенности, чтобы одну сдавать, а во второй жить как монах, посвящая остаток жизни искусству метапрограммирования на крестах или че там придумали в новых стандартах еще такие же шизики
Так ты со шланга спрашивай что за параша у него происходит. Под виндой это не UB.
У меня везде есть контроль на ошибки в асинхронных операциях чтении/записи. Во многих других случаях, и тестах, я не могу повторить это же ошибку. Ошибок на уровне ядра нет.
Парень, который пишет клиента, большой говнокодер, он предположительно дважды может сокет закрыть и т.п., но это точно не должно меня сваливать.
Как диагностировать?
В ассемблере х86 это абсолютно корректная операция. То что шланг зачем-то делает сегфолт при кривых оптимизациях - это вопросы не к х86 и даже не к крестам. То что стандарт разрешает сделать там UB не значит что компиляторописатели должны такое говно вытворять.
У тебя здесь УБ в другом месте:
while (i + 1 > i) эквивалентно while (true) при О3, кмк, а бесконечные циклы без возможности выхода - уб и без оверфлова.
Так что тут да, УБ, но не из-за оверфлова.
Оверфлоу - это UNT_MIN * -1.
Ну вот так, бесконечные циклы без сайд эффектов УБ. Ты конечно можешь заявить что здесь есть сайд эффекты, но кто мешает компилятору выкинуть строку 13(до нее ведь исполнение не дойдет), а в след за ней и все переменные, кроме х? А раз х нигде не используется далее, то и выкинуть весь цикл.
Я бы вообще вывел посмотреть, что там осталось после оптимизаций компилятора.
> Ну вот так, бесконечные циклы без сайд эффектов УБ.
А, ну без сайд эффектов ещё понятно
Я только знал что пустой бесконечный цикл это уб
> в эзотерический язык программирования?
У меня других вариантов нету, мне VST плокенчики надо реализовывать, это не я выбрал плюсы, это они выбрали меня
Да не, там верный код. Я почему то затупил, что в этой ветви лхс всегда отрицательный и андерфлова не будет.
>>095388
Вот чекни ассемблер, который у тебя сгенерится, сильно удивишься. Там действительно не будет ничего, кроме вывода константы в каут.
И не будет именно потому, что компилятор уверен что УБ не бывает и выкидывает цикл нахой.
>Т.к. шаблоны не могут хранить никакого состояния
Вообще могут, хоть стандарт это и запрещает:
https://b.atch.se/posts/constexpr-meta-container/
>на х86-64 переполнение знакового не является УБ
Хуя прогресс плюсах, в C11 чёрным по белому написано:
>If an exceptional condition occurs during the evaluation of an expression (that is, if the result is not mathematically defined or not in the range of representable values for its type), the behavior is undefined.
Exceptional condition переполнение знаковых, например.
Но можно компилятору указать сабсет языка, где переполнение будет опредленным поведением, с помощью инструментального флага.
Чувак, в стандарте пишут абстрактные вещи, чтоб не зависеть от платформы.
Если ты пишешь под конкретную, и знаешь как на ней работает условный ADD, то поведение в случае оверфлоу будет очень даже ожидаемым и определенным.
Оно станет неопределенным при переносе на другую платформу.
>Бро, так не троллят...
Хуя ты тупостью потроллил.
Бранч lhs < 0
Выражение rhs < INT_MIN - lhs эквивалентно rhc + lhs < INT_MIN
Да согласен, читал жопой...
>то поведение в случае оверфлоу будет очень даже ожидаемым и определенным
Да, конпелятор ожидаемо заметит УБ и сделает, как ему будет нужным, а не как ты ожидаешь лол.
В примере выше он абузит не уб, а уверенность в том что уб там нет(ведь в коде на плюсах не должно быть уб)(что i всегда положительно).
Если кстати заменить тип i на size_t все ок.
Именно поэтому сайзт это сайзт, внезапно. А индексировать интами нужно только во всяких сиатик ассертах.
Я должен вообще согласиться с тобой что писать цикл как было выше нельзя, ибо действительно мы полагаемся что уб произойдет, а компилятор может его банально недопустить удалив цикл.
То есть логика такая: на УБ полагаться нельзя.
Но в целом изначальный спор не об этом, а о том как работает ADD в х86-64.
То есть если мы сложим INT_MAX и 1 мы получим гарантированное значение, но нельзя полагаться что компилятор не выкинет всю эту операцию из-за оптимизаций.
Вот именно как на уровне кода реализовывать эти вещи. Чтобы игра шла в 60фпс на ipad и 120фпс на пс4/хбокс
А еще - ДОЖДЬ. Т.е. огни, искры, шлефы, дым и порох будут в В ДВУХ ФИЗИЧЕСКИХ ИПОСТАСИЯХ, при сухом и влажном воздухе, да и не дискретно, а градиентно чтобы менялась физика(ХИМИЯ?!?!?!???) их поведения, в зав-то от интенсивности дождя.
Никак
Да все просто
- учишь с++
- учишь компьютерную графику
- тратишь 10 лет на написание идеального движка
- ещё пять лет на создание игры
Набираешь команду, ищешь финансирование, организуешь процесс разработки, делаешь игру.
Не знаю о каком компиляторе речь, но нормальный гцц ничего не выуидывает,а переполнение интов базированая база используемая в логике.
не отменяет факта что сингед типы в роли индекса использовать глупо
так хочу....
>- тратишь 10 лет на написание идеального движка
вот конкретно что сложного в 2д дыме и порохзе, свете, искре и огне? буквально пара часов написания кода и пара дней полировки и калибровки. нет?
> Чтобы игра шла в 60фпс на ipad и 120фпс на пс4/хбокс
Я не знаю что внутри ipad и иксбокс,
но под Виндой это достигается прямой работой с WinAPI, а под Юниксами прямой работой поверх xlib.
Хуячу так уже несколько лет, но не игры.
Охуеваю с мифа, к созданию которого сильно приложил руку, мол X11 тормозной. Нихуя он не тормозной, а скорость его работы приблизительно равна Windows GDI.
А знаешь откуда взялся этот миф? Да потому что писатели либ, что идут поверх Х11, болваны. Не все, но многие. И потому что пверх Х11 уже несколько слоёв нагородили.
>не отменяет факта что сингед типы в роли индекса использовать глупо
Qt, например, использует. Так арифметика с индексами гораздо логичнее выглядит. Например, for ( int i = 0; i < ar.size() - 1; ++i ) выглядит более естественно, чем for ( size_t i = 0; i + 1 < ar.size(); ++i ). Ну и вообще, у знаковых чисел i - 1 гораздо меньше вопросов вызывает, чем у беззнаковых, не надо думать над каждым вычитанием.
>Огни, искры, шлейфы, дым, порох, туман, чтобы динаимчесики двигались.
Очевидно - спрайтами, если типа Марио. Дёргать OpenGL ради Марио равносильно забиванию гвоздей микроскопом.
Спрайты, спрайты, спрайты, спрайты - в них весь секрет и только в них.
Сейчас весь графоний целиком на видюхе считается, и большая часть физики тоже. От WinAPI и иксов только создание окна берут. Ну и иксы реально тормозные, когда надо полупрозрачность использовать, например.
Какие спрайты лол. Даже на консолях после PS2 уже аппаратных спрайтов давно нет. Все на видюхе рисуется треугольничками.
Так ничего не выкидывает или бесполезные циклы все таки выкидывает, ты определись.
Идея в том, что такой цикл написан с опрой на уб, а компилятор не в курсе что там будет уб и i переполнится.
>Сейчас весь графоний целиком на видюхе считается, и большая часть физики тоже.
Да кто ж спорит? Я это понял, когда несколько (десять?) лет назад запустил пасьянс Косынку из новой винды на каком-то старом железе. И когда это пасьянс безбожно тормозил, то тут и пришло понимание.
>Ну и иксы реально тормозные, когда надо полупрозрачность использовать, например.
Не помню, использовал ли полупрозрачность, но Xft, которая умеет красиво рендерит TTF шрифты, тормозной мне показалась.
Иксы реально тормозят до невозможности их использовать когда терминал и сервер на разных компах находятся. Тогда латентность убивает весь смысл этого протокола, а локально там всё очень даже шустро работает.
Да. Но он заебётся изучать OpenGL.
Ему тогда либа какая-нибудь понадобится.
В итоги он или сделает, или не сделает. Скорее не сделает.
А спрайтами мог бы и сделать. Наскришотить с других игрушек, в фотошопе добавить прозрачность и хуячить, хуячить, хуячить.
>но Xft, которая умеет красиво рендерит TTF шрифты, тормозной мне показалась.
Потому что шрифты как раз на клиенте рисуются через XRender, а для сглаженной линии, например кругленькой обводке на кнопке, приходтися битмепы с клиента на сервер гонять постоянно.
>Да. Но он заебётся изучать OpenGL.
Так или иначе придется под видюху кодить, если он хочет "ебически красивый визуал".
>Не использовать итераторы = ССЗБ
С итераторами обычно код на экран не влезает, и становится абсолютно нечитаемым. Индексы тупо проще и понятнее в большинстве случаев.
Тебе за строчки кода платят как индусам? Я ИРЛ не встречал людей, которым std::distance( v.begin(), it ) проще писать, чем тупо i.
Потому что у меня в контейнерах не опердени лежат, а обычно геометрия: вершины, треугольники и всякие графы, деревья. Там индексы явно надо хранить обычно.
Ну ребят, не ленитесь. Вот я вам перепиисал код даже, чтобы уб было именно в переполнении, в не в цикле без эффектов. Все равно не работает код. С O3 просто беосконечно что то выводится
Причем тут ассемблер?
> это не уб потому что мой один компилятор нормально всё компилит в особых случаях
Самая странная дискуссия в этом треде
Шаг 1 - читаем что такое уб
Шаг 2 - узнаем кто определяет что уб, а что не уб
Шаг 3 - узнаем про взаимоотношения компиляторов и уб
Покажи в каком месте стандарт разрешает переполнению инта крашить рантайм, лол. В стандарте написано что на поддерживаемых архитектурах переполнение должно быть обратимым, т.е. если оно случилось ты можешь задетектить его и пофиксить. Пикрилейтед дебаг билд и релиз, хоть обосрись, но он будет всегда компилить валидное для x86 поведение. Покажи тогда как твой говнокомпилятор скомпилирует код с unsigned int, это по стандарту не UB.
> Читай стандарт.
> принести уже скрин со стандарта
Ору с дауна.
Начни с этого хотя бы: https://eel.is/c++draft/basic.types#basic.fundamental-note-2
Unsigned arithmetic does not overflow. Overflow for signed arithmetic yields undefined behavior
пик 2 - пункт 7.1.4
>>097142
Если не кидать скрин то вы еще треда два спорить будете, ну и в целом когда на стандарт ссылаешься например как тут: "В стандарте написано что на поддерживаемых архитектурах переполнение должно быть обратимым", то не помешало бы сразу прикреплять сурс
сам то читал что мне скинул, где там про обратимость сказано? без упрека, самому интересно почитать о чем ты говоришь
Внезапно захотел проверить свой компилятор, начал копипастить и о осознал что это скриншот. Придётся пальцами колотить.
Да не спорь с ним, очевидно что залетный долбаеб.
в вузике, когда поступил на прогера, на курсе по СиПласПлас препод на полном серьёзе давал лабы с использованием этой либы для для рисования графики (2 курс 2018-2019).
ебало моё имаджинировали? Хотя тогда это казалось чем-то прикольным, но сейчас понимаю, что это архаика и не абсолютно неактуально.
ну как бы да. но альтернатива это опенжл со своими 500 строками на треугольник. вот там ебало твоё имаджинировать посложнее будет
Дебил, под винду писать, надо сначала разобраться со структурой приложения винапи, все эти окна, сообщения, что и как куда идет и как это надо обрабатывать, и это только базовый хеллоуворлд вообще без функционала пустышка. Твоя школота обосрется кровью и сдохнет даже не дойдя до рисования. И такое в любой современной ОС, потому что они уже давно не ДОС с эксклюзивной однозадачностью где можно тупо писать программу без обвязок-соглашений с чем-то.
Для совсем хлебушков есть обёртка Win2D, часть виндового SDK. Там на WinUI формошлёпишь окошки в визульном редакторе, потом в событие Draw элемента интерфейса/окошка просто пишешь типа такой хуйни:
> args.DrawingSession().DrawEllipse(155, 115, 80, 30, Microsoft::UI::Colors::Black(), 3);
> args.DrawingSession().DrawText(L"Hello, world!", 100, 100, Microsoft::UI::Colors::Colors::Yellow());
Всё.
Хлебушек, речь про учебу. Что толку формошлепить говно, чему ты научишься? Только формошлепить говно. От такого только тупеют, а школа предназначена учить людей понимать как устроены вещи, программирование в данном случае, делать учеников умнее. Школа не курсы где натаскивают на РАБОТУ "не думай, делай". Школа это про ДУМАТЬ, ПОНИМАТЬ. Нельзя ничему научить заставляя учеников делать то что они не понимают. А обертки говна или тем более ковыряние мышкой СКРЫВАЮТ как оно работает, ты делаешь магическую хуйню совершенно не понимая что делаешь, от такого только тупеют. А школа нужна не для выращивания дебилов.
Таким образом, учебная программа обязана быть явной, понятной ученику, чтобы он видел как это работает. А такое просто может быть только в простой системе как ДОС, а в современных системах это очень сложно. Самая базовая пустышка хеллоуворлда сложна и требует квалификации программиста, то есть уже сформированного специалиста, а школы нужны делать наоборот, учить тех у кого нет квалификации, и вовсе не делать работу, а понимать что такое программы, программирование. Школы учат не для того чтобы потом ученики это делали, так же как в школах преподают математику, физику, химию вовсе не потому что ученик потом захочет быть математиком, физиком или химиком. Так и программирование, оно и не должно учить работе, оно должно учить ПРОГРАММИРОВАНИЮ, как оно устроено по сути, чтобы ученик понимал что это такое, как оно работает, а для этого требуется ЯСНОСТЬ, ПРОЗРАЧНОСТЬ, ПОНИМАНИЕ, а вовсе не как проще запилить рисунок.
И дело даже не в одной сложности, а в самой концепции того же рисования, которая отсутствует в современном программировании. Настоящие, старые программы, именно рисовали, вот есть фреймбуфер, туда записываются данные и на экране появляется рисунок. Вот так работает компьютер, это настоящее программирование: записал данные - получил картинку, всё, элементарно, четко и ясно.
А в современном говне совсем не так. В современной сложной ОС рисует не программа, а система, система отвечает полностью за всю графику "магически", о чем программист даже не подозревает. Программист вообще ничего не рисует. Современное рисование практически не применяется нигде, только в очень ограниченных случаях называемых OwnerDraw. Это уже уровень высокой квалификации, отъявленных извращений. Поэтому и современные фреймворки по сути даже не дают инструментов рисования, то есть синтеза графики. Синтез в современных системах по сути выпилен нахуй. Поэтому, по такому говну невозможно учить программированию, можно только учить как на курсах тупых макак типа Офиса, учить пользоваться Вордом и Екселем, просто надрессировал собак выполнять действия, это не учеба никакая.
Хлебушек, речь про учебу. Что толку формошлепить говно, чему ты научишься? Только формошлепить говно. От такого только тупеют, а школа предназначена учить людей понимать как устроены вещи, программирование в данном случае, делать учеников умнее. Школа не курсы где натаскивают на РАБОТУ "не думай, делай". Школа это про ДУМАТЬ, ПОНИМАТЬ. Нельзя ничему научить заставляя учеников делать то что они не понимают. А обертки говна или тем более ковыряние мышкой СКРЫВАЮТ как оно работает, ты делаешь магическую хуйню совершенно не понимая что делаешь, от такого только тупеют. А школа нужна не для выращивания дебилов.
Таким образом, учебная программа обязана быть явной, понятной ученику, чтобы он видел как это работает. А такое просто может быть только в простой системе как ДОС, а в современных системах это очень сложно. Самая базовая пустышка хеллоуворлда сложна и требует квалификации программиста, то есть уже сформированного специалиста, а школы нужны делать наоборот, учить тех у кого нет квалификации, и вовсе не делать работу, а понимать что такое программы, программирование. Школы учат не для того чтобы потом ученики это делали, так же как в школах преподают математику, физику, химию вовсе не потому что ученик потом захочет быть математиком, физиком или химиком. Так и программирование, оно и не должно учить работе, оно должно учить ПРОГРАММИРОВАНИЮ, как оно устроено по сути, чтобы ученик понимал что это такое, как оно работает, а для этого требуется ЯСНОСТЬ, ПРОЗРАЧНОСТЬ, ПОНИМАНИЕ, а вовсе не как проще запилить рисунок.
И дело даже не в одной сложности, а в самой концепции того же рисования, которая отсутствует в современном программировании. Настоящие, старые программы, именно рисовали, вот есть фреймбуфер, туда записываются данные и на экране появляется рисунок. Вот так работает компьютер, это настоящее программирование: записал данные - получил картинку, всё, элементарно, четко и ясно.
А в современном говне совсем не так. В современной сложной ОС рисует не программа, а система, система отвечает полностью за всю графику "магически", о чем программист даже не подозревает. Программист вообще ничего не рисует. Современное рисование практически не применяется нигде, только в очень ограниченных случаях называемых OwnerDraw. Это уже уровень высокой квалификации, отъявленных извращений. Поэтому и современные фреймворки по сути даже не дают инструментов рисования, то есть синтеза графики. Синтез в современных системах по сути выпилен нахуй. Поэтому, по такому говну невозможно учить программированию, можно только учить как на курсах тупых макак типа Офиса, учить пользоваться Вордом и Екселем, просто надрессировал собак выполнять действия, это не учеба никакая.
> чтобы он видел как это работает
Как что работает? Современная графика совсем не так рисуется. Какой смысл в том что ему покажут примитивное рисование пикселями из начала нулевых?
> очень сложно
Тогда не трожь сложные темы, вместо того чтобы заменять их на какое-то бесполезное говно. А потом получаем какой-то кал мамонта в 2024 году, как будто его писал дед после 20-летнего криосна.
>ебически красивый виузал
Для этого не нужно уметь программировать, а нужно уметь в VFX и рисование. В юнити достаточно кастомизируемый рендер пайплайн, Ори его как раз активно использует. Так же юнити кроссплатформа, так что проблем с всякими айпадами быть не должно. Запомни сразу - если ты видишь, что что-то выглядит необычно, то над этим работал либо талант, либо команда профессионалов с хорошим вкусом и многолетним опытом, а сама работа заняла годы. Попробуй хотя бы кубики порисовать от руки на бумаге, думаю дальше этого дело не уйдет.
>>читать полностью, а не выдергивать отдельные слова
>>напрягать извилины отвечая интеллектуально, а если не можешь хотя бы соглашаться с мудростью
Сократа нет на жопы таких дебилов.
Чел, какое ещё рисование пикселей на ЦП в 2024? Immediate рендеринг уже легаси из нулевых, кроме примитивного 2D ни для чего не пригоден, графические пайплайны из Vulkan/DX12 скоро легаси станут и их заменят графами. Если хочешь изучать графику, то надо начинать с актуальных технологий.
> графические пайплайны из Vulkan/DX12 скоро легаси станут и их заменят графами.
Как это все учить вобще
Еле еле вулкан осилил на самом деле нет, так тут ещё что то новое придумали
>какое ещё рисование пикселей на ЦП в 2024
Если что большинство не риалтайм рендереров софтварные и работают на ЦП. Если ты на Дюну 2 ходил то можешь быть уверен, что рендерили ее или в Mantra или в Arnold-е на ферме из цпу.
так удобнее
У софтварных рендереров больше фич. Например Mantra это рендер движок от пакета Houdini, в нем упор сделан на процедурность, и для этого уже есть сотни инструментов. Например процедурно нагенерировать горы, снег, реки, раскидать флору по локации, это все можно сделать чисто на алгоритмах, причем так, что если ты сменишь локацию то все будет выглядить заебись. А теперь представь, что ты разработчик этого пакета и тебе нужно сделать рендер движок - если он будет на цпу то можно весь этот функционал перенести прямо в движок (например сгенерировать дисплейсмент мапы, добавить осколы/декали, сделать нижние этажы зданий более грязными опираясь на Z координаты точек геометрии, менять параметры BRDF по маскам с геометрии и т.д), или же делать рендер движок на ГПУ и весь функционал для него с нуля (и в целом ГПУ более ограниченные). Люди из кино выбрали первое, хотя сейчас пошли на компромисс и постепенно пилят и рендереры на видюхах, например Karma XPU/VRay.
Так же ЦПУ просто дешевле, а время на кадр не особо важно - у тебя задача сделать шот на 3-5 секунд (72-120 кадров), ты просто все настраиваешь, рендеришь 5 кадров, и закидываешь таску на ферму и идешь домой, а утром получаешь готовый шот. Нет особой разницы будет ли оно рендерится 3 минуты на кадр или 15, минут, все равно в пределах суток-двое все отрендерится.
> большинство
Кроме Мантры ничего нет. И то её в кинце 146% не используют.
> Дюну 2 ходил то можешь быть уверен
Хватит срать под себя. VFX-движки - это не финальный рендеринг. В кинце скорее всего будет Redshift или Vray. В сиричах сейчас вообще UE5 используют часто, тот же Мандалорец полностью на UE5 рендерился.
> Arnold
Это GPU-рендерер.
>Почему так?
Потому что кучу вспомогательных алгоритмов и либ там писали еще диды в 80-х на фортране. Все это портировать на GPU просто нереально.
Неужто коллега из VFX? Я бы с тобой подискутировал, но это нерелевантно треду.
>Максимум, что там на фортране
Я про сам гудини. Да и в рендере, если он RenderMan поддерживает, наверняка куча непортируемого кода.
msvc для разработки и отладки, затем портируется повсюду.
А так-то Intel C Compiler, если нужна максимальная оптимизация. Но он дорогой, а триал период короткий.
Ицц ето уже мем. По сути сейчас там кланг со всеми вытикающими. Толку от него нету.
Для винды мсвц, для остального гцц.
Если бы сидел на лине, то мог бы просто шланг или гцц скачать и в vs code (не путать с visual studio) прогать. Потребовалось бы ну очень сильно меньше памяти. Наверное можно как то их на винду затащить, но я не могу подсказать
>msvc для разработки
Только потому что допотопное говно, которое от нормальных компиляторов отстает на пять лет - если на нем собралось, то везде соберется. Там С++17 до конца еще не реализован. Мультилайн регекспов, похоже вообще никогда не будет. Разрабатывать на нем боль, конечно: скорость компиляции там в разы меньше, чем у других, особенно на сложных темплейтах. Поэтому без pch далеко не уедешь. Линкер тоже а разы тормознее даже стандартного ld, не говоря уже про молд и голд.
Даже так.
> которое от нормальных компиляторов отстает на пять лет
Чел, самый отсталый компилятор - это шланг, в котором даже С++20 нет до сих пор. Корутин нет, модулей нет, рейнджей нет. Какой-нибудь UE5 на шланге не собрать, лол.
> Там С++17 до конца еще не реализован.
Хватит бредить, MSVC единственный компилятор с полной поддержкой C++20, и на текущий момент он единственный с полной реализацией STL С++23.
> Мультилайн регекспов, похоже вообще никогда не будет.
Естественно, стандарт надо соблюдать.
Пердодебил, компиляция в разработке занимает последнее место. Разработка это __написание__ кода, а вовсе не компилирование. Как твой сраный пердоговняный компилятор поможет __писать__ код?
>Разработка это __написание__ кода, а вовсе не компилирование.
Чем дольше ты ждешь пока компиляция закончится, тем меньше кода ты напишешь.
>Как твой сраный пердоговняный компилятор поможет __писать__ код?
У clang сообщения об ошибках в разы лучше, чем у MSVC как минимум. Не говоря об тулзах clang, которые сейчас везде абсолютный стандарт для работы с кодом, в том числе в MS.
Там на каждый пункт поддержки "The implementation is sufficient to support c++xx standart" лол. Если хоть как-то экспериментировать начинаешь с новыми фичами, то MSVC сосет вообще всегда, хотя по букве стандарт поддерживается. У них вроде до сих пор только пять кодеров компилятор делают, и то на отъебись.
>Пердодебил
Майки уже сами на винду забили. Это фактическим мертвая ОС, убитая эффективным индусским менеждментом. Но фанаты до сих пор обмазываются несвежей спермой и вспоминают счастливую юность, как они в третьих героев на хрюше играли и смеялись в ЖЖ над красноглазиками вместе с Русланом Кармановым (кстати, где он?).
Сразу видно пердосраль, быдлоюзер компилирующий чужие исходники, сам ничего не пишет. Все кукареки про то, сколько в консольке проходит времени до высера готового продукта. И это говно зачем-то лезет в тред программирования, съеби обратно на свой линук-сру или откуда там вылез компилировать генту, там и сренькай про компиляторы.
Я новенький, хотел поговорить про std::move. Не знаю местного лора чтоб перекатывать.
>В кинце скорее всего будет Redshift или Vray. В сиричах сейчас вообще UE5 используют часто, тот же Мандалорец полностью на UE5 рендерился
Бля не пытайся отвечать по темам, о которых ты слышал из какого-то видосика на ютубе, выглядит максимально комично.
Долбаеб даже не знает что означает virtual production, но уже пытается дискутировать по теме, спешите видеть
Да че тяжело? Спект через дорогу от вузика
хочу скопировать их в массив fullAdress через :
я чо-то вообще не могу как норм это сделать
В скoтoублюдии работа на крестах это проектировать хуи в нии. Оно тебе надо? Ты проснуться не успеешь как очнешься нищим полулысым скуфом с грыжей и огромным биноклем на ебале
Че за переход? Гормональный?
Вы видите копию треда, сохраненную 16 апреля в 15:55.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.