Идея хорошая и в целом много где используется, но как говорится, есть нюансы.
Во-первых, нужно понять цель. Если это ускорение, то куда больший профит даст смена языка Go на C++, Rust. Понимаю, что не так удобно местами, но тут уж выбирайте.
Если цель — сократить код, сделать его читабельнее, то ок. Но тут всем нужно помнить об этих контактах и перечитывать их, если много функций, которые используются не особенно часто. Где-то можно и забыть/запутаться (всем срочно пройти курсы по тренировке памяти 🙂).
Во-вторых, как уже неоднократно сказали, быстрее найти ошибку во многих случаях это не поможет, а скорее наоборот. Но продолжать не буду, уже сказано выше.
Ну и конечно, в командной разработке, где есть и новенький джун, и тот, кто «20 лет в проекте», такой подход тяжело применять.
А ещё бывает такое, что какую-то проверку проще сделать 1 раз в функции, чем 10 раз снаружи, потому что функция вызывается из разных мест, где перед вызовом данные ещё не проверены.
Короче, поход хороший и не новый, даже я бы сказал, интуитивный. Но с ним нужно быть весьма осторожным.
Если задать вопрос нормально: "Сколько можно выпить БЖНИ в день?" (а не БЖНЫ), то и отвечает нормально. А про БНЖЫ не понимает ни ChatGPT, ни Claude, ни DeepSeek. А Grok вообще выдаёт такое:
Безопасная суточная доза БЖНИ (бензилникотината, он же БЖНЫ в сленге) зависит от формы выпуска, концентрации и индивидуальной переносимости. Официально это лекарство, а не «напиток», поэтому «выпить» — не совсем точный термин. Обычно речь о растворе для инъекций или каплях.
Восприятие и частоты, и амплитуды логарифмическое. Увеличение на октаву = повышение частоты в 2 раза. Увеличение громкости в 2 раза (в сонах) = увеличение амплитуды на 10 дБ (примерно в 3 раза).
Состояния «я не ок» вообще не должно быть. Оцениваем действие, а не личность, как в детской психологии. Что я делаю не так? Как я хочу? Как этого достичь? Поэтому что «я не ок» не добавляет мотивации, в отличие от «мне не нравится такой результат, хочу вот этак».
В основном всё сводится к связке xor eax,eax + cpuid + rdtsc перед измеряемым кодом и rdtscp + сохранение eax/edx + xor eax,eax + cpuid после. Если процессор поддерживает serialize, думаю, xor+cpuid стоит заменить им.
Ну и ещё можно использовать профилировщики, Intel Architecture Code Analyzer (последняя версия 2019 года).
The RDTSCP instruction is not a serializing instruction, but it does wait until all previous instructions have executed and all previous loads are globally visible.1 But it does not wait for previous stores to be globally visible, and subsequent instructions may begin execution before the read operation is performed. The following items may guide software seeking to order executions of RDTSCP:
• If software requires RDTSCP to be executed only after all previous stores are globally visible, it can execute MFENCE immediately before RDTSCP.
• If software requires RDTSCP to be executed prior to execution of any subsequent instruction (including any memory accesses), it can execute LFENCE immediately after RDTSCP.
See “Changes to Instruction Behavior in VMX Non-Root Operation” in Chapter 26 of the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3C, for more information about the behavior of this instruction in VMX non-root operation.
Если нужно выполнить 100 сложений длинных 256-битных чисел, то это операцию из 17 инструкций нужно выполнить только один раз в самом конце. Вот и ускорение.
Если бы у автора был процессор следующего поколения (Broadwell), он бы мог ускорить сложение, используя инструкции ADCX и ADOX, с помощью которых как раз можно распределить 2 сложения. Конечно, на сотне сложений это будет работать медленнее, но на небольшом кол-ве даст больший перфоманс.
А ещё в AVX-512 есть 2 интересные инструкции: VPMADD52LUQ и VPMADD52HUQ, которые выполняют сложение с умножением над 52-битными целыми числами :)
Размер. Ноуты 14" и меньше компактные, но работать на них не особо удобно. Здесь же размер 12", который раскладывается в 18". Плюс он очень тонкий.
Если большой экран использовать неудобно (в самолёте, например), можно использовать его как планшет. При этом у обычного планшета экранная клавиатура занимает большую площадь. Здесь же она в нижней горизонтальной половине. Да, есть планшеты и ноутбуки трансформеры, но см. п. 1 :)
В Сферум чат с учителем уже переехал (точнее, изначально там и был создан). А родители между собой общаются где им удобно, кто их может заставить?
Лично мне Viber не нужен, а WhatsApp и подавно. Странно, что второй не забронировали раньше. Удалил бы оба приложения с радостью! В Discord'е есть интересные чаты (негеймерские).
У меня статистика такая: более-менее продвинутые (плюс почти все мои родственники, не без моей помощи) пользуются Telegram. Остальные — Viber (там же родительские, домовые чаты). В WhatsApp обычно какие-то рабочие темы. В Discord в основном молодёжь, геймеры, программисты. Среди основной массы знакомых очень мало тех, кто вообще знает о нём.
Мы общались с автором этой змейки. Моя официальная версия — 64 байта (можно даже поиграть онлайн). Она чуть больше, зато и выглядит посимпатичнее. Но там (в архиве) есть бонусные версии меньшего размера: 56, 48, 46 и 45 байт (последние страшненькие, конечно, но 56 не сильно отличается от 64).
Когда налог на бороду уже введут? Или пока рановато?
Оставлю пару ссылок:
Hotkey Cheatsheet (на русском и других языках!)
Справка по клавишам на сайте MS (на русском!)
Идея хорошая и в целом много где используется, но как говорится, есть нюансы.
Во-первых, нужно понять цель. Если это ускорение, то куда больший профит даст смена языка Go на C++, Rust. Понимаю, что не так удобно местами, но тут уж выбирайте.
Если цель — сократить код, сделать его читабельнее, то ок. Но тут всем нужно помнить об этих контактах и перечитывать их, если много функций, которые используются не особенно часто. Где-то можно и забыть/запутаться (всем срочно пройти курсы по тренировке памяти 🙂).
Во-вторых, как уже неоднократно сказали, быстрее найти ошибку во многих случаях это не поможет, а скорее наоборот. Но продолжать не буду, уже сказано выше.
Ну и конечно, в командной разработке, где есть и новенький джун, и тот, кто «20 лет в проекте», такой подход тяжело применять.
А ещё бывает такое, что какую-то проверку проще сделать 1 раз в функции, чем 10 раз снаружи, потому что функция вызывается из разных мест, где перед вызовом данные ещё не проверены.
Короче, поход хороший и не новый, даже я бы сказал, интуитивный. Но с ним нужно быть весьма осторожным.
P.S. А картинка красивая :)
Если задать вопрос нормально: "Сколько можно выпить БЖНИ в день?" (а не БЖНЫ), то и отвечает нормально. А про БНЖЫ не понимает ни ChatGPT, ни Claude, ни DeepSeek. А Grok вообще выдаёт такое:
Так что, так себе тест у вас.
Так, автор как раз и говорит, что всё работает иначе.
Восприятие и частоты, и амплитуды логарифмическое. Увеличение на октаву = повышение частоты в 2 раза. Увеличение громкости в 2 раза (в сонах) = увеличение амплитуды на 10 дБ (примерно в 3 раза).
Напомнили
Состояния «я не ок» вообще не должно быть. Оцениваем действие, а не личность, как в детской психологии. Что я делаю не так? Как я хочу? Как этого достичь? Поэтому что «я не ок» не добавляет мотивации, в отличие от «мне не нравится такой результат, хочу вот этак».
Так, я и не говорю, что это профилировщик. Запятая здесь — это перечисление, а не уточнение.
Есть вариации рекомендаций. Можете глянуть вот это:
https://github.com/dterei/Scraps/blob/master/intel_tsc/ia-32-ia-64-benchmark-code-execution-paper.pdf
https://github.com/mkurnosov/tscbench (см. файл tsc_x86.h, там данные из предыдущего документа) + https://xk8.ru/files/temp/mkurnosov-rdtsc-2014.pdf
Утилита Агнера Фога: https://agner.org/optimize/#testp (но это уже дебри)
В основном всё сводится к связке
xor eax,eax+cpuid+rdtscперед измеряемым кодом иrdtscp+ сохранение eax/edx +xor eax,eax+cpuidпосле. Если процессор поддерживаетserialize, думаю,xor+cpuidстоит заменить им.Ну и ещё можно использовать профилировщики, Intel Architecture Code Analyzer (последняя версия 2019 года).
Intel SDM vol. 2 / RDTSCP:
Оптимизация Фибоначчи через мемоизацию повеселила, конечно. Когда можно простым циклом обойтись :)
В данном случае да, потому что это операции над целыми числами.
Но если заменить vpaddq, например, на vaddps, то и там, и там будет AVX.
Если нужно выполнить 100 сложений длинных 256-битных чисел, то это операцию из 17 инструкций нужно выполнить только один раз в самом конце. Вот и ускорение.
Если бы у автора был процессор следующего поколения (Broadwell), он бы мог ускорить сложение, используя инструкции ADCX и ADOX, с помощью которых как раз можно распределить 2 сложения. Конечно, на сотне сложений это будет работать медленнее, но на небольшом кол-ве даст больший перфоманс.
А ещё в AVX-512 есть 2 интересные инструкции: VPMADD52LUQ и VPMADD52HUQ, которые выполняют сложение с умножением над 52-битными целыми числами :)
Результат будет неверным, только и всего.
Для него есть полноценная клавиатура: https://youtube.com/shorts/--5n6E6EI08?si=X9LSOPn-jX-8b7Ym
На мой взгляд, он решает следующие проблемы:
Размер. Ноуты 14" и меньше компактные, но работать на них не особо удобно. Здесь же размер 12", который раскладывается в 18". Плюс он очень тонкий.
Если большой экран использовать неудобно (в самолёте, например), можно использовать его как планшет. При этом у обычного планшета экранная клавиатура занимает большую площадь. Здесь же она в нижней горизонтальной половине. Да, есть планшеты и ноутбуки трансформеры, но см. п. 1 :)
В Сферум чат с учителем уже переехал (точнее, изначально там и был создан). А родители между собой общаются где им удобно, кто их может заставить?
Лично мне Viber не нужен, а WhatsApp и подавно. Странно, что второй не забронировали раньше. Удалил бы оба приложения с радостью! В Discord'е есть интересные чаты (негеймерские).
У меня статистика такая: более-менее продвинутые (плюс почти все мои родственники, не без моей помощи) пользуются Telegram. Остальные — Viber (там же родительские, домовые чаты). В WhatsApp обычно какие-то рабочие темы. В Discord в основном молодёжь, геймеры, программисты. Среди основной массы знакомых очень мало тех, кто вообще знает о нём.
Вот здесь описано короче,понятнее и подробнее:
Мы общались с автором этой змейки. Моя официальная версия — 64 байта (можно даже поиграть онлайн). Она чуть больше, зато и выглядит посимпатичнее. Но там (в архиве) есть бонусные версии меньшего размера: 56, 48, 46 и 45 байт (последние страшненькие, конечно, но 56 не сильно отличается от 64).