Асинхронная обработка ошибок – это сложно
Или как я научился не беспокоиться из-за
Любому, кто сталкивался с проектированием API, приходилось мучиться над вопросом, как лучше всего распространять ошибки к вызывателям функций. Эта проблема появилась ещё раньше, чем термин «API». Даже несколько десятилетий назад (скажем, 30+) проектировщики интерфейсов умели отделять возвращаемые ошибки от прочей полезной нагрузки в рамках тех функций, которые доставляют эту информацию вызвавшему их узлу.
Иногда полезно знать, как лучше не делать. Мой любимый пример антипаттерна в рассматриваемой области — прославленная функция atoi() из среды выполнения C, которая преобразует строку в целое число:
https://parallelprogrammer.substack.com/p/asynchronous-error-handling-is-hard
#cpp #programming
👉 @cpp_lib
Или как я научился не беспокоиться из-за
cudaGetLastError()
и просто признал её нежелательнойЛюбому, кто сталкивался с проектированием API, приходилось мучиться над вопросом, как лучше всего распространять ошибки к вызывателям функций. Эта проблема появилась ещё раньше, чем термин «API». Даже несколько десятилетий назад (скажем, 30+) проектировщики интерфейсов умели отделять возвращаемые ошибки от прочей полезной нагрузки в рамках тех функций, которые доставляют эту информацию вызвавшему их узлу.
Иногда полезно знать, как лучше не делать. Мой любимый пример антипаттерна в рассматриваемой области — прославленная функция atoi() из среды выполнения C, которая преобразует строку в целое число:
int atoi (const char * str);
https://parallelprogrammer.substack.com/p/asynchronous-error-handling-is-hard
#cpp #programming
👉 @cpp_lib
❤3👍2🤔1
⁉️Хотите, чтобы интерфейсы ваших приложений выглядели профессионально и динамично, а пользовательский опыт стал на порядок выше?
🎓Qt — это мощный инструмент, а QtStateMachine открывает новые возможности для построения логики и создания сложных анимаций. На открытом уроке мы разберём, как моделировать поведение интерфейса с помощью состояний и переходов, и шаг за шагом создадим несколько анимаций.
Вебинар будет особенно полезен разработчикам, которые уже знакомы с Qt и хотят научиться создавать более интерактивные приложения.
➡️ Регистрируйтесь на открытый урок курса «Разработка прикладного ПО на Qt и ОС „Аврора“» 22 сентября в 20:00. Участники получат скидку на обучение: https://vk.cc/cPBfZ5
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🎓Qt — это мощный инструмент, а QtStateMachine открывает новые возможности для построения логики и создания сложных анимаций. На открытом уроке мы разберём, как моделировать поведение интерфейса с помощью состояний и переходов, и шаг за шагом создадим несколько анимаций.
Вебинар будет особенно полезен разработчикам, которые уже знакомы с Qt и хотят научиться создавать более интерактивные приложения.
➡️ Регистрируйтесь на открытый урок курса «Разработка прикладного ПО на Qt и ОС „Аврора“» 22 сентября в 20:00. Участники получат скидку на обучение: https://vk.cc/cPBfZ5
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Back to Basics: C++ Move Semantics
Andreas Fertig
Семантика перемещения — это тема, которую часто сложно понять. Этот доклад поможет тебе разобраться в ней, развеяв некоторые мифы с помощью нового и необычного способа объяснения концепции перемещения.
Например, ты, вероятно, слышал, что операции перемещения должны быть
Мы также рассмотрим правила использования
Ещё одна важная тема — что такое объект после перемещения (moved-from object) и что с ним можно делать.
Хочешь выжать максимум производительности? Тогда поговорим о ref-квалификаторах и о том, как они помогают избежать лишних потерь в эффективности.
В конце этого доклада ты получишь чёткое понимание семантики перемещения, что позволит тебе писать конкурентоспособный и высокопроизводительный код.
источник
#cpp #programming
👉 @cpp_lib
Andreas Fertig
Семантика перемещения — это тема, которую часто сложно понять. Этот доклад поможет тебе разобраться в ней, развеяв некоторые мифы с помощью нового и необычного способа объяснения концепции перемещения.
Например, ты, вероятно, слышал, что операции перемещения должны быть
noexcept
. В ходе доклада ты узнаешь, почему это так, а также напишешь эффективный конструктор перемещения и оператор перемещающего присваивания.Мы также рассмотрим правила использования
std::move
и std::forward
: когда и в каких случаях применять каждую из этих функций.Ещё одна важная тема — что такое объект после перемещения (moved-from object) и что с ним можно делать.
Хочешь выжать максимум производительности? Тогда поговорим о ref-квалификаторах и о том, как они помогают избежать лишних потерь в эффективности.
В конце этого доклада ты получишь чёткое понимание семантики перемещения, что позволит тебе писать конкурентоспособный и высокопроизводительный код.
источник
#cpp #programming
👉 @cpp_lib
👍4
Санпросвет о плавающей точке, статья первая: компьютеры и числа
Недавно мне понадобилось сэмулировать работу с плавающей точкой только при помощи целочисленной арифметики, поскольку флоаты были недоступны. Полез я было в интернет за готовой библиотекой, и чуть не утонул. Мало того, что я не нашёл того, что искал, это бог с ним. Я обнаружил, что в интернете кто-то неправ. :)
Оказалось, что форумы кишат людьми, которые не до конца понимают, как компьютеры манипулируют числами. Например, мемасик с КПДВ я стянул с реддита (перечеркнул его я). Кто-то настолько был напуган страшными ошибками округления чисел с плавающей точкой, что даже смешную картинку смастерил. Только вот проблема в том, что 0.5 + 0.5 в точности равно 1.0.
Таким образом, я решил засучить рукава, и изобрести велосипед. То есть, написать самую неоптимизированную C++ библиотеку для эмуляции IEEE754 32-битных чисел с плавающей точкой при помощи исключительно 32-битной целочисленной арифметики. Библиотека уложится в несколько сотен строк кода, и в ней не будет никакого битхакинга. Задача написать понятный код, а не быстрый. А заодно хорошенько его документировать серией статей.
Итак, этим полукреслом мастер Гамбс начинает новую партию мебели, или статья первая: поговорим о числах и компьютерах.
https://habr.com/ru/articles/947886/
Мы в MAX
#cpp #programming
👉 @cpp_lib
Недавно мне понадобилось сэмулировать работу с плавающей точкой только при помощи целочисленной арифметики, поскольку флоаты были недоступны. Полез я было в интернет за готовой библиотекой, и чуть не утонул. Мало того, что я не нашёл того, что искал, это бог с ним. Я обнаружил, что в интернете кто-то неправ. :)
Оказалось, что форумы кишат людьми, которые не до конца понимают, как компьютеры манипулируют числами. Например, мемасик с КПДВ я стянул с реддита (перечеркнул его я). Кто-то настолько был напуган страшными ошибками округления чисел с плавающей точкой, что даже смешную картинку смастерил. Только вот проблема в том, что 0.5 + 0.5 в точности равно 1.0.
Таким образом, я решил засучить рукава, и изобрести велосипед. То есть, написать самую неоптимизированную C++ библиотеку для эмуляции IEEE754 32-битных чисел с плавающей точкой при помощи исключительно 32-битной целочисленной арифметики. Библиотека уложится в несколько сотен строк кода, и в ней не будет никакого битхакинга. Задача написать понятный код, а не быстрый. А заодно хорошенько его документировать серией статей.
Итак, этим полукреслом мастер Гамбс начинает новую партию мебели, или статья первая: поговорим о числах и компьютерах.
https://habr.com/ru/articles/947886/
Мы в MAX
#cpp #programming
👉 @cpp_lib
❤4👍4
Сборка мусора: как это делается в системном программировании
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Rus https://habr.com/ru/companies/timeweb/articles/766772/
Eng https://bitbashing.io/gc-for-systems-programmers.html
Мы в MAX
#cpp #programming
👉 @cpp_lib
Давайте поговорим об одной из наиболее критичных по производительности программ, которой вы пользуетесь ежедневно: о вашей операционной системе. Поскольку при каждом разгоне железа вы получаете дополнительную вычислительную мощность, операционная система никогда за этим не поспевает. Поэтому постоянно доводится читать о том, как разработчики ядра и драйверов выжимают последнее из своего кода.
Кроме того, операционные системы должны быть рассчитаны на массовую конкурентность. Дело не только в том, что наша операционная система отвечает за планирование всех процессов и потоков пользовательского пространства, но и в том, что в ядре хватает собственных потоков, а также обработчиков прерываний, нужных для взаимодействия с железом. Требуется минимизировать время, которое тратится на ожидание, так как, опять же, при любой задержке вы воруете время ваших пользователей.
Rus https://habr.com/ru/companies/timeweb/articles/766772/
Eng https://bitbashing.io/gc-for-systems-programmers.html
Мы в MAX
#cpp #programming
👉 @cpp_lib
👍4❤2
⌨️ Ручная компиляция и проекты, привязанные к IDE — это вчерашний день. Если вы хотите уверенно собирать кроссплатформенные C++-приложения и масштабировать проекты, без CMake не обойтись.
🗓 30 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C++ Developer. Professional».
🦾 На открытом уроке мы разберём основы CMake: создадим минимальный CMakeLists.txt, подключим внешние библиотеки и соберём проект из нескольких файлов. Пошагово, на живых примерах.
Вы поймёте, как переводить свои проекты на CMake и почему этот инструмент давно стал стандартом в профессиональной разработке. Эти навыки — must have для любого C++-разработчика, который планирует карьерный рост.
🔗 Ссылка на регистрацию: https://vk.cc/cPHNnB
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 30 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C++ Developer. Professional».
🦾 На открытом уроке мы разберём основы CMake: создадим минимальный CMakeLists.txt, подключим внешние библиотеки и соберём проект из нескольких файлов. Пошагово, на живых примерах.
Вы поймёте, как переводить свои проекты на CMake и почему этот инструмент давно стал стандартом в профессиональной разработке. Эти навыки — must have для любого C++-разработчика, который планирует карьерный рост.
🔗 Ссылка на регистрацию: https://vk.cc/cPHNnB
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Проблема, о которой вы даже не подозревали: print(.1+.2)
Как следует отображать на экране результат деления 3.0 на 10.0 ? Сколько цифр следует вывести, если пользователь не указал точность?
Скорее всего, вы даже не знали, что вывод чисел с плавающей запятой — это сложная проблема, настолько сложная, что по ней написаны десятки научных статей, причём последний прорыв был относительно недавно, в 2016 году. На самом деле, это одна из самых сложных частей поддержки чисел с плавающей запятой в среде выполнения языка.
Давайте продолжим разговор о самой неоптимизированной в мире библиотеке эмуляции плавающей точки при помощи целочисленной арифметики.
https://habr.com/ru/amp/publications/948556/
Мы в MAX
#cpp #programming
👉 @cpp_lib
Как следует отображать на экране результат деления 3.0 на 10.0 ? Сколько цифр следует вывести, если пользователь не указал точность?
Скорее всего, вы даже не знали, что вывод чисел с плавающей запятой — это сложная проблема, настолько сложная, что по ней написаны десятки научных статей, причём последний прорыв был относительно недавно, в 2016 году. На самом деле, это одна из самых сложных частей поддержки чисел с плавающей запятой в среде выполнения языка.
Давайте продолжим разговор о самой неоптимизированной в мире библиотеке эмуляции плавающей точки при помощи целочисленной арифметики.
https://habr.com/ru/amp/publications/948556/
Мы в MAX
#cpp #programming
👉 @cpp_lib
❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
QML и Widgets в одном проекте: решение без костылей
Разработка приложения для настольных или встраиваемых платформ часто упирается в выбор между Qt Widgets и Qt Quick для создания интерфейса. У каждого подхода свои плюсы и минусы. Qt как гибкий фреймворк позволяет комбинировать их разными способами, а выбор способа интеграции этих API зависит от того, чего вы хотите добиться. В этой статье я покажу, как отображать окна Qt Widgets в приложении, написанном преимущественно на Qt Quick.
https://www.kdab.com/display-widget-windows-in-qt-quick-applications/
Мы в MAX
#cpp #programming
👉 @cpp_lib
Разработка приложения для настольных или встраиваемых платформ часто упирается в выбор между Qt Widgets и Qt Quick для создания интерфейса. У каждого подхода свои плюсы и минусы. Qt как гибкий фреймворк позволяет комбинировать их разными способами, а выбор способа интеграции этих API зависит от того, чего вы хотите добиться. В этой статье я покажу, как отображать окна Qt Widgets в приложении, написанном преимущественно на Qt Quick.
https://www.kdab.com/display-widget-windows-in-qt-quick-applications/
Мы в MAX
#cpp #programming
👉 @cpp_lib
👍8❤1
💻 Курс “Программист на C” от OTUS — набор в группу скоро закроется!
Погрузитесь в мощный язык системного программирования.
Почему стоит пройти вступительное тестирование и записаться на курс:
• Глубокое изучение: синтаксис C, архитектура процессоров, управление памятью, ассемблер
• Практика задач уровня Middle для реальных навыков
💡 Кому подходит:
• Разработчикам, желающим углубить знания в C
•Специалистам по интеграции C-библиотек
✅ Итоги курса:
• Создание оптимизированных приложений
• Понимание работы процессоров и памяти
• Навыки системного программирования
👉 Успейте записаться. Пройдите успешно тест и получите спеццену. Подробности уточняйте у менеджера. Места ограничены.
https://vk.cc/cPMh3n
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Погрузитесь в мощный язык системного программирования.
Почему стоит пройти вступительное тестирование и записаться на курс:
• Глубокое изучение: синтаксис C, архитектура процессоров, управление памятью, ассемблер
• Практика задач уровня Middle для реальных навыков
💡 Кому подходит:
• Разработчикам, желающим углубить знания в C
•Специалистам по интеграции C-библиотек
✅ Итоги курса:
• Создание оптимизированных приложений
• Понимание работы процессоров и памяти
• Навыки системного программирования
👉 Успейте записаться. Пройдите успешно тест и получите спеццену. Подробности уточняйте у менеджера. Места ограничены.
https://vk.cc/cPMh3n
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Оптимизация языковой модели Mamba для выполнения на CPU
Большие языковые модели с успехом применяются в биоинформатике. Неудивительно, ведь язык биологических последовательностей – всего лишь часть множества знаковых систем, существующих в природе. Но есть нюанс: осмысленные фразы языка биоинформатики, как правило, гораздо длиннее фраз языков межчеловеческого общения. Популярные языковые модели на основе трансформеров требуют квадратичного увеличения объема вычислений с ростом длины входной последовательности.
https://habr.com/ru/articles/925460/
Мы в MAX
#cpp #programming
👉 @cpp_lib
Большие языковые модели с успехом применяются в биоинформатике. Неудивительно, ведь язык биологических последовательностей – всего лишь часть множества знаковых систем, существующих в природе. Но есть нюанс: осмысленные фразы языка биоинформатики, как правило, гораздо длиннее фраз языков межчеловеческого общения. Популярные языковые модели на основе трансформеров требуют квадратичного увеличения объема вычислений с ростом длины входной последовательности.
https://habr.com/ru/articles/925460/
Мы в MAX
#cpp #programming
👉 @cpp_lib
👍3
486-го хватит всем
В конце технического интервью, если кандидат ответил на вопросы и справился с задачами, у нас есть время для свободных вопросов, которые можно задать команде или кому-то из интервьюеров. Эту практику я переносил из компании в компанию, и она всегда помогала разрядить обстановку или вывести человека на разговор, если он был напряжен во время общения. Вопросы могут быть любые, кроме личных или тех, что под NDA.
Обычно кандидаты задают технические вопросы по стеку, пайплайнам, иногда пытаются задать каверзные вопросы, особенно по плюсам, чтобы проверить нас. Иногда и мы не можем ответить на все из них. Вопросы в стиле Google — например, «почему таблетки круглые?» — тоже встречаются, но недавно на одном из интервью прозвучал вопрос, на который вроде все и знали ответ, но никто сразу не смог его дать. Вопрос звучал так: «Какие общие технологии и решения появились в процессорах с времён 486, которыми мы часто пользуемся?»
https://habr.com/ru/articles/856572/
Мы в MAX
#cpp #programming
👉 @cpp_lib
В конце технического интервью, если кандидат ответил на вопросы и справился с задачами, у нас есть время для свободных вопросов, которые можно задать команде или кому-то из интервьюеров. Эту практику я переносил из компании в компанию, и она всегда помогала разрядить обстановку или вывести человека на разговор, если он был напряжен во время общения. Вопросы могут быть любые, кроме личных или тех, что под NDA.
Обычно кандидаты задают технические вопросы по стеку, пайплайнам, иногда пытаются задать каверзные вопросы, особенно по плюсам, чтобы проверить нас. Иногда и мы не можем ответить на все из них. Вопросы в стиле Google — например, «почему таблетки круглые?» — тоже встречаются, но недавно на одном из интервью прозвучал вопрос, на который вроде все и знали ответ, но никто сразу не смог его дать. Вопрос звучал так: «Какие общие технологии и решения появились в процессорах с времён 486, которыми мы часто пользуемся?»
https://habr.com/ru/articles/856572/
Мы в MAX
#cpp #programming
👉 @cpp_lib
👍5❤1
Пишем игру для NES на C
Всем привет. Я Даг. Добро пожаловать в мой учебник - Как запрограммировать игру NES на C. Вы можете сделать оригинальную игру Nintendo, которая будет играть на настоящей консоли NES (или эмуляторе).
Давайте поговорим о NES.
Выпущена в Японии (Famicom) в 1983 году, в США — в 1985 году.
Процессор — Ricoh 2A03, 1.79 МГц, клон 6502 (без десятичного режима) со звуковой схемой. Чип 6502 был очень популярен в то время и использовался, например, в Apple II и Atari 2600.
https://nesdoug.com/
Мы в MAX
#cpp #programming
👉 @cpp_lib
Всем привет. Я Даг. Добро пожаловать в мой учебник - Как запрограммировать игру NES на C. Вы можете сделать оригинальную игру Nintendo, которая будет играть на настоящей консоли NES (или эмуляторе).
Давайте поговорим о NES.
Выпущена в Японии (Famicom) в 1983 году, в США — в 1985 году.
Процессор — Ricoh 2A03, 1.79 МГц, клон 6502 (без десятичного режима) со звуковой схемой. Чип 6502 был очень популярен в то время и использовался, например, в Apple II и Atari 2600.
https://nesdoug.com/
Мы в MAX
#cpp #programming
👉 @cpp_lib
👍8❤2