Pull to refresh
4
0.2
Anatolii Mamaev@Serpentine

User

Send message

Предположу, что вырубят к концу января 2026, когда рекламный бюджет закончится. Как было с реакциями:

• конец ноября 2024: На Хабре появились Реакции

• конец января 2025: Реакции на Хабре: постмортем

И да, я согласен с предложением @haqreu — нумерация строк в коде гораздо сподручнее ИИ.

кроме значений Кармы и Рейтинга, еще и подсчет количества Банов (у скольких пользователей текущий человек находится в черном списке), то это будет супер полезная информация в самом начале дискуссии.

Вместо того, чтобы смотреть на эти значения, гораздо практичнее будет ознакомиться с несколькими предыдущими комментариями пользователя. А перед этим, понятное дело, прочитать его комментарий и оценить — следует ли (хочется ли) на него отвечать?

Например, ваш ответ может нанести пользу другим людям, которые хотели задать такой же вопрос, но не успели и не стали задавать, т.к. его уже озвучили. Конечно, ситуация, когда отвечаешь на тот же вопрос, но от «уважаемого» человека в следующем комментарии, гораздо комичнее — «Тебе, пёс заминусованый, лычку и билет в ЧС, но вот другому комментатору отвечу».

В части механизма игнора (в т.ч. счетчика) — затея деструктивная, выше уже описали почему. Не раз наблюдал картину, когда грамотные и интересные пользователи были заминусованы, что памятник Ленину голубями.

И, раз пошла такая пьянка, у меня тоже предложение:

2 @Boomburum (пардон, если не по адресу): Я подписан на крутых специалистов и в целом замечательных людей, иногда мне интересны не только их публикации, но и комментарии по разным темам. Хочу получать такие уведомления без танцев с RRS. Можно?

Или вы тролль?

Комментарий выше на ваше утверждение о «-1 → 0» в топике C/C++ — это не троллинг, а вполне адекватная реакция. Не важно, перепутали вы что-то или нет, вы об этом написали и вам на это ответили.

В части правильно/неправильно давать в «руководстве для новичков» подход, который может привести к ошибкам в более сложных случаях, тут уж вам решать. Вы же сами назвали статью «альтернативой» документации и захотели улучшить ее.

По поводу отношения к руководствам по win32 в 2025 году (а их за все время накопилось, хоть попой ешь) скажу так. Примерно раз в год на Хабре случаются выбросы в духе: «Пацаны, сейчас я научу вас писать свой движок на DX12. Часть первая: язык Си создал Деннис Ритчи в 1970 году, вот это указатель, вот так писать на плюсах, а так — создается окно. Вот мы и нарисовали окно, а как рисовать, объясню в следующей части».

Ясен пончик, запал заканчивается, и не то что до рисования — до инициализации DX дело не доходит, т.к. писатели сами вдуплить не могут в те 100500 loc, необходимых для радужного треугольника, либо поняли, что объяснить могут только треть или четверть из всего этого бойлерплейта. И все эти первые части стыдливо стираются самими авторами по прошествии пубертатного периода времени.

Пользователи этот цирк видят, отчего сии опусы у некоторых комментаторов ничего кроме раздражения и желания поострить не вызывают.

А почему собственно не правильный, точней чем?

Вы документацию конкретно по GetMessage() до конца читали? Что она в случае ошибки возвращает?

UPD. Что-то странное с примерами кода:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow)

...

lpCmdLine - аргументы, указанные при 

Это который из четырех?

Имея все пункты, соединяем воедино:

Соединили:
#include <Windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);  //Отправляет сообщение WM_QUIT
        return 0;

    case WM_PAINT:
    {

        return 0;
    }

    // Сообщения, которые мы не обработали, передаем на обработку по умолчанию
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

const wchar_t* CLASS_NAME = L"MyWindowClass";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow)
{
    // 1. Заполнение структуры класса окна
    WNDCLASSEX wc = { 0 };
    wc.cbSize = sizeof(WNDCLASSEX);           // Обязательно: размер структуры
    wc.lpfnWndProc = WindowProc;              // Указатель на оконную процедуру
    wc.hInstance = hInstance;                 // Экземпляр приложения
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Курсор - стрелка
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // Фон - цвет окна
    wc.lpszClassName = CLASS_NAME;            // Уникальное имя класса

    // 2. Регистрация класса окна
    RegisterClassEx(&wc));

    // 3. Создание окна
    HWND hwnd = CreateWindowEx(
        0,                      // Расширенные стили
        CLASS_NAME,             // Имя класса окна
        L"Test Window",         // Заголовок окна
        WS_OVERLAPPEDWINDOW,    // Стиль окна
        100, 100,               // Позиция (x, y)
        400, 300,               // Размер (width, height)
        NULL,                   // Родительское окно
        NULL,                   // Меню
        hInstance,              // Экземпляр приложения
        NULL                    // Дополнительные параметры
    );

    // 4. Показать и обновить окно
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 5. Цикл обработки сообщений
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;  // Код завершения из WM_QUIT
}

Я нашел 2 причины, почему этот код вообще не скомпилируется. Это нейруха сгенерировала что ли, или просто влом было собирать перед публикацией?

Ну и:

return 0; // Код завершения из WM_QUIT

Нет, это обычный ноль!

статья посвящена самому началу работы с Direct2D

Тогда что она делает в сишном хабе? Нет, если автор покажет рабочий код Direct2D на чистых сях (без костылей на плюсах), это будет номер!

в документации от Microsoft мало что сказано о том, что вообще нужно сделать для создания окна

А это что? Целый учебник с картинками: Get Started with Win32 and C++ (даю линк на английскую версию, т.к. перевод ИИ в MSDN на русский — кровь из глаз).

И почему в затравочном абзаце речь про DX, а тут резко упали до D2D?

структуре класса окна _WNDCLASS. Обратившись к MSDN, получим следующее

Почему WNDCLASSEX в "цитате" из MSDN и в статье обозвали "_WNDCLASS", когда у последнего (сиречь WNDCLASS) полей меньше? И ссылка дана на ansi версию, когда по ходу пьесы у нас вовсю юникод будет?

Про Case Engine тут слышал, две статьи их видел. Очень жаль, что не срослось с разработкой.

Я уверен — ребята клевые, но вот на Хабре статьи не взлетели, т.к. не о том писали — от разработчиков движков (даже начинающих) ждешь какой-нибудь жести и офигительных историй, а не туториалы по VS 2022 и избитые учебные статьи в духе, как писать на плюсах.

Под офигительными историями и жестью я понимаю: «Увидели на конференции такой-то доклад такой-то студии и решили запилить подобную фичу в наш движок. Сначала сделали так <описание во всех красках не очень гениального решения>, но не сложилось, потому что ... А затем мы пошли другим путем <описание во всех красках гениального решения> и всех победили. Вот вам бенчмарки и список литературы.».

Не обязательно же отвлекаться от разработки, тратить время и разжевывать для самых маленьких, как пилить свой движок от А до Я и все его возможности на 100500 статей ради плюсиков на Хабре. Достаточно редко, но метко раз в полгода-год вот такое выдавать.

В целом, желаю удачи.

Александр, мое почтение! Даже если не выстрелит или забьете и приступите к другому проекту — все равно это хороший опыт.

Хотелось бы побольше мяса и подробностей в статье, а также прочее: предыстория разработки фреймворка (курсовая/дипломная работа или другое) или с чего начинали, работали один или с командой, что читали, чем вдохновлялись, на какой он стадии (картинку выводит или нет), к чему хотите прийти и т.д.

Вас понял. Я же не для спора спросил, сам разберусь со временем.

Используя holds_alternative проще и быстрее сразу проверить: содержит ли some_variant значение типа строки (без извлечения этого значения), чем сразу с помощью std::get_if извлекать из варианта нечто и для неудачных исходов обрабатывать nullptr.

Или у вас другое мнение?

могу рассказать о нюансах

Вам несколько раз предлагали вместо вот этого оффтопа в комментах оформить ваш опыт в виде большой и основательной статьи. Предлагали без задних мыслей и желания подколоть. Будет круто, если вы так и поступите, т.к. темы, которые вы затрагиваете, гораздо интереснее, чем очередные пассажи от ЛЛМ о создании Сапера/Змейки на питоне.

это звучит так будто делать движок и 3д игру нереально без движка. 

Нет, это звучит как «данная статья обзорная и в ней приводятся интересные истории о применении разных аллокаторов для разных задач, детали их реализации со всей выкладкой и обоснованием конкретных решений в ней будут лишними — для этого надо писать совершенно другие статьи с другой мотивацией и посылом, а иногда еще с нотариально заверенным разрешением от юридического департамента».

Когда вы пишите движок/игру, вам эта статья (да и вся их серия) может помочь, как вдохновение, источник идей или навигатор по нескольким специфичным аллокаторам, а за реализацией — добро пожаловать в гугл, искать нужный учебник/руководство/вайтпейпер/etc., параллельно воплощая все это в коде.

нейросетевой бред.

С большой долей вероятности нейронка не причислила бы Кернигана к «создателям» Си:

«Язык программирования Си» от создателей С Брайана Кернигана и Денниса Ритчи.

Jijiki, я вас умоляю, не поверхностно, а достаточно для такого рода статьи.

Например, по приведенной в статье ссылке на репозиторий с TLSF содержится ~1K loc на сях. Сферическая публикация с его описанием — это простыня не менее чем 30+ страниц A4, забитых формулами и ссылками на Кнута + пара десятков строчек сишного псевдокода. И все это добро не даст новичку полного понимания для самостоятельной реализации, а через месяц после прочтения — напрочь выветрится из головы.

Тут же вопрос, надо ли это автору и читателям, когда более углубленный материал уже несколько раз написан другими людьми? Чтобы пацаны с уважением головами покивали и некоторые в закладки добавили да забыли насовсем, ибо повод и целесообразность применения может совсем не появиться?

В чём проблема?

Не считая того, что в void myfunc(const int arr[3][2]) компилятор игнорирует 3 и превращает параметр функции в const int arr[][2] (т.е. в обычный указатель на константный массив из 2 интов), ни в чем https://godbolt.org/z/T6q1WdT3G :)

Ваш комментарий и еще один ниже внезапно (!) никак не противоречат приведенной мной цитате. Зато она видимо обидела кого-то.

Зная ассемблер, так то и мне K&R простой показалась бы в свое время. И если что, новичок — это не про возраст. Не противоречит это и утверждению Константина Владимирова, что K&R должна быть первой (не важно в каком смысле «первой») книгой студента — сферический студент кафедры информатики в МФТИ сдецл отличается от сферического новичка в вакууме, ничего о программировании доселе не слышавшем.

Все советуют её первой книгой, и казалось бы, куда ещё?

Кто эти «все» и «кому» они советуют? В аннотации от издательства и в авторском предисловии к K&R чёрным по русскому написано:

Книга не рекомендуется для чтения новичкам; для своего изучения она требует знания основ программирования и вычислительной техники.

Благодарю!

Хэннеси-ПаттерсонComputer Architecture: A Quantitative Approach

Ознакомился наспех с содержанием — да, это то что я хотел в том числе. Спасибо!

Просто комменты профессионалов читаю иногда (вот например), и некоторые слова гуглю, а там такие вещи интересные, которых в общих книгах по CS я не встречал и не догадывался об их существовании. Но системы в этом гуглении нет, хотелось бы не по крупицам знания получать, а последовательно что ли.

Вы уверены, что хотите именно про микроархитектуру, а не про то, как правильно бэнчмаркать и оптимизировать программы?

Ну и правильно (или около того) оптимизировать и бенчмаркать хочу тоже научиться. И те же алгоритмы, чтобы вообще о существовании LRU хотя бы догадываться.

Если что - я почти уверен, что по ссылке не про аппаратный кэш ;)

Это да, но я не сомневаюсь, что unreal_undead2 и в остальном разбирается, поэтому и спросил в рамках оффтопа.

Разрешите тупой вопрос? А есть ли какой букварь/ресурс/цикл для виндузятников-любителей asm/C/C++ по теме оптимизации, чтобы вот слова типа prediction, latency, occupancy, cache miss, TLB, etc. не казались совсем уж магией. Ну еще чтобы про то, как грамотно профилировать, бенчмаркать и пр. было.

Или это только в университетах дают, или в разрозненных статьях/книгах?

1
23 ...

Information

Rating
2,743-rd
Location
Россия
Registered
Activity

Specialization

Программист
C
C++