Как стать автором
Обновить
155.23

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Связь решения СЛАУ и минимума квадратичного функционла. Часть 1

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.8K

В цикле статей под общим названием «Связь решения СЛАУ и минимума квадратичного функционала» постараюсь осветить различные методы решения СЛАУ, которые редко можно встретить в учебниках по линейной алгебре. Основная цель – написать понятный, но в то же время наполненный полезной информацией материал. К каждой последующей статье будет прилагаться соответствующая реализация на языке программирования C++.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии8

Новости

Ответ на «Коротко о том, почему Rust лучше C/C++» или меня не бомбит

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров17K

Собственно ответка на указанную статью.

Решил ответить на претензии автора. А так же рассказать, почему С\С++ именно такой какой есть. Почему приняты такие решения при его создании и развитии. Указать на явные недостатки Rust'а и его инфраструктуры. Язык не может существовать сам по себе. Он должен иметь не только токсичное сообщество, но и быть нужным работодателю.

Поехали
Всего голосов 64: ↑44 и ↓20+24
Комментарии181

Коротко о том, почему Rust лучше C/C++

Время на прочтение7 мин
Количество просмотров17K

Это будет статья-рассуждение о том, почему Rust лучше C/C++. Тут будут затронуты не столько сравнение производительности, сколько сравнение удобства инфраструктуры языка, его темпы развития и актуальность.

Толчком к её написанию были многочисленные «горячие» споры в комментариях под статьями Хабра о том, почему Rust или C/C++ лучше. Я же попробую занять объективно-нейтральную позицию в этом споре, поэтому о минусах тоже будет речь.

Читать далее
Всего голосов 52: ↑19 и ↓33-14
Комментарии91

regexp — большие гонки

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров7K

Так или иначе сталкиваться с регулярными выражениями приходилось большинству разработчиков. Мое первое знакомство произошло с реализацией regex в STL std::regexp. Чаще всего регулярки используются в проверке входных данных, что-то вроде проверки корректности введенного пользователем URL, адреса IPv4, адреса IPv6, телефонного номера и при этом скорость выполнения операции regex не сильно влияет на время отклика от приложения. Но, что если вам приходится проверять сотни, тысячи или даже десятки тысяч правил и все это на постоянно меняющихся наборах входных данных в реальном времени? В этой ситуации вам не просто нужен быстрый алгоритм, вам понадобится лучший из них, вам понадобиться чемпион!

Участвовать в заезде!
Всего голосов 20: ↑21.5 и ↓-1.5+23
Комментарии27

Истории

Проверка игрового движка qdEngine, часть вторая: упрощение C++ кода

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.9K

Ищем баг
В этой статье мы рассмотрим, как статический анализатор PVS-Studio воодушевляет заняться рефакторингом кода. Ведь чем короче, проще и понятнее код, тем меньше в нём ошибок.

Читать дальше →
Всего голосов 5: ↑6 и ↓-1+7
Комментарии2

От советских компиляторов до грязных трюков: что поведают на C++ Russia 2024

Время на прочтение13 мин
Количество просмотров4.8K

Завсегдатаи C++ Russia уже хорошо знают некоторых спикеров и ждут их новых докладов. Например, Антона Полухина @antoshkkaa): в 2020-м все смотрели его «Грязные трюки из такси», а недавно — «C++ трюки из userver». Из необычного — серия докладов Петра Советова об автоматизации программирования в СССР: уже были выступления о теоретических результатах и о трансляторах.

Через месяц начнётся C++ Russia 2024. Там будут и Антон с новыми трюками (в этот раз грязными!), и Пётр с заключительной частью исторической серии. А ещё множество другого — от работы с GPU до новинок грядущего C++26.

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

Программа C++ Russia 2024
Всего голосов 16: ↑17.5 и ↓-1.5+19
Комментарии1

Подборка крутых докладов по С++ за 2023 год

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.3K

Скоро начинается новый сезон конференций, а потому предлагаем вам ознакомиться с лучшими докладами по С++ с прошлого сезона. Эта подборка самых громких докладов за 2023 год поможет вам поглубже узнать С++ и набраться вдохновения.

Вперёд за просвещением!
Всего голосов 11: ↑12.5 и ↓-1.5+14
Комментарии3

Кастиниг, или было у отца четыре сына…

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.6K

Давно, сразу после института, получив нагоняй от лида за круглые скобочки, я решил наконец раз и навсегда разобраться с кастингом. Я написал себе небольшую шпаргалочку. На долгие годы забыв о ее существовании я недавно, разбирая бумаги, наткнулся на нее. Возможно она кому-то пригодится.

В С++ существует четыре оператора, осуществляющих приведение типов. Это static_cast, dynamic_cast, const_cast, и reinterpret_cast.
По наследству из языка C нам еще досталась возможности кастить переменные так называемым C-like кастом, это такие круглые скобочки с типом внутри. За использование такого каста Мартин предлагал сразу отрубать руки, и если-бы менеджмент пошел ему навстречу, то половина нашей фирмы уже давно ходила-бы без рук. Что-бы хоть как-то руки уберечь, рассмотрим по порядку, что нам предлагает C++.

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

const_cast - наш следующий дружок. Он посложнее чем static_cast и несет в себе небольшие грабельки. Как нам сообщает документация, этот вид кастинга существует для того, что-бы сносить константность переменной, например, можно снести константность переменной внутри константного метода. Другими словами такое легальное средство взлома. Скажем получила функция константный this, а мы его хряпнули, и он уже никакой не конст. Не знаю, кому это может понадобиться, надо спросить у Мартина.

Читать далее
Всего голосов 19: ↑9 и ↓10-1
Комментарии61

Как запустить WebRTC на сервере, или как я пилю вебкам

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров6.6K

Всем привет!

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

ДИСКЛЕЙМЕР: это не бескорыстный акт передачи знаний с моей стороны. Я пытаюсь найти инвестиции для своего проекта и создал чат в тг, где буду постить обновления и какие-то мысли касательно его запуска. Так что если интересно, то подписывайтесь, а еще можете поделиться ссылкой с теми, у кого есть лишние бабки =)

Предыстория

Значит решил я создать сервис для одиноких мужчин, где они могут пообщаться с прекрасными дамами, aka вебкам. Соответственно встал вопрос, как организовать видеосвязь в браузере. Обычно для этого используется WebRTC, эта технология позволяет установить p2p соединение между браузерами для передачи видео, звука и прочих данных в реальном времени с минимальной задержкой. Однако была одна проблема: что делать, если приходит жалоба от пользователя, что ему показали не то (или не показали), что он хотел. Поскольку это p2p соединение напрямую между пользователями, у меня как у владельца сервиса нет возможности провалидировать жалобу. Первое, что пришло в голову это вместо WebRTC использовать MediaRecorder API для записи видео небольшими кусочками и отправки их по вебсокету через сервер, попутно сохраняя. Я набросал прототип и столкнулся с тем, что если получатель пропустил первый пакет (там где есть метаданные), то видео у него не воспроизводится. Пришлось поиском определенного набора байт в первом пакете вычленять эти самые метаданные и сохранять их отдельно для отправки первым сообщением только что подключившемуся получателю, и это даже сработало. Вторая проблема этого решения - это задержка в пару секунд, и это только в локальной сети, что приемлемо для односторонней связи, но для двусторонней уже сомнительно. И третья проблема это то что видео у получателя со временем все больше и больше отстает, и нужно регулярно проматывать видео ближе к концу. Костыльность такого решения меня не устраивала, и я решил использовать WebRTC для связи собеседников и параллельно использовать MediaRecorder для отправки записи от модели к серверу. Некоторое время оно так работало, пока я пилил другие фичи, но неэлегантность этого решения все еще не давала мне покоя, т. к. оно повышает требования к интернет соединению модели.

Читать далее
Всего голосов 20: ↑18 и ↓2+16
Комментарии12

Как использовать Singleton и не потерять тестируемость

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.6K

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

Итак, представим, что у нас есть некоторые данные Info, которые можно получить из базы данных. Эти данные используются в разных частях программы и не изменяются во время её выполнения. Похоже, это идеальный кандидат для кэширования с помощью Singleton.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии7

Принципы SOLID, только понятно

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров51K

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

Изучить принципы
Всего голосов 76: ↑66 и ↓10+56
Комментарии94

Сила шифрования или как я выявил недостаток работы Defender’а

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.7K

Внимание! Статья несёт исключительно информативный характер. Подобные действия преследуются по закону!

В наше время цифровая безопасность все более актуальна, поскольку важность защиты конфиденциальной информации и данных не может быть переоценена. Шифрование информации становится все более неотъемлемой частью нашей цифровой жизни, обеспечивая надежную защиту от несанкционированного доступа.

К сожалению, шифрование часто используется не только в хороших, но и плохих целях...

Читать далее
Всего голосов 9: ↑5 и ↓4+1
Комментарии7

Кто реально угрожает C++ (нет, Rust, не ты)

Время на прочтение14 мин
Количество просмотров71K

Привет! Меня зовут Александр Каленюк, и я крепко подсел на C++. Пишу на C++ 18 лет кряду, и все эти годы отчаянно пытаюсь избавиться от этой разрушительной зависимости.

Всё началось в конце 2005 года, когда мне довелось писать движок для симуляции 3D-пространства. В этом движке было буквально всё, чем язык C++ мог похвастаться в 2005 году. Трёхзвёздочные указатели, восьмиуровневые зависимости, C-подобные макросы повсюду. Кое-где – вкрапления ассемблера. Итераторы в стиле Степанова и мета-код в стиле Александреску. В общем, всё. Кроме ответа на самый важный вопрос: зачем?

Читать далее
Всего голосов 224: ↑230 и ↓-6+236
Комментарии361

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Проверка игрового движка qdEngine, часть первая: топ 10 предупреждений PVS-Studio

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров2.3K

Братья Пилоты, qdEngine, PVS-Studio
Баги, которые удалось найти в движке qdEngine, оказались весьма разнообразны, поэтому не хочется мешать всё в кучу в одной публикации. Читатели могут упустить интересные темы, связанные с написанием качественного кода. Поэтому разбор проекта выйдет в виде серии публикаций, первая из которых посвящается наиболее интересным срабатываниям с точки зрения плагина PVS-Studio.

Читать дальше →
Всего голосов 11: ↑12.5 и ↓-1.5+14
Комментарии14

Основные принципы разработки (SOLID, KISS и т. д.)

Уровень сложностиПростой
Время на прочтение21 мин
Количество просмотров9.9K

В данной работе я сосредоточусь на изучении и сравнении ключевых принципов проектирования и разработки программного обеспечения. Моя цель - проанализировать эти принципы, выявить их достоинства, недостатки и области применения.

В общем вас ждет теория, ещё теория, словесные примеры и даже примеры кода (он на С++, но написан понятно).

А еще это полезно знать на собесах :-)

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии9

Проект «Мультиключ». Как мы побеждали контактные ключи Metacom и Cyfral

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров7.3K

Как и обещал в предыдущей статье, пишу о нашем опыте работы с контактными ключами Metacom и Cyfral.

Эти ключи построены на микросхемах 1233KT1 и 1233KT2, которые не сильно друг от друга отличаются и имеют очень схожий принцип работы.

При подаче питания ключ просто выдает свой id. При этом никакие команды ключ не принимает и не посылает, а проверка правильности считывания ключа производится путем повторного считывания. Первым, для определения начала передачи, всегда идет стартовое слово. В отличие от ключей Dallas, они работают не по напряжению, а по току. Это менее распространенные и более дорогие ключи. Таким образом, логические уровни определяются сопротивлением ключа (около 400 Ом и 800 Ом). А значение бита определяется длительностью удержания низкого и высокого значения потребления тока.

Разберем эти ключи по отдельности...

Читать далее
Всего голосов 25: ↑25.5 и ↓-0.5+26
Комментарии15

Удобное управление тестовыми окружениями в docker-compose

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров5.9K

Всем привет, хочу рассказать о своей утилите dcw (Docker Compose Workspace) для удобного управления тестовыми окружениями на базе docker-compose.

Читать далее
Всего голосов 28: ↑30.5 и ↓-2.5+33
Комментарии19

Миллер, Рабин, вектор

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров4.2K

Проверка небольших чисел на простоту - популярная подзадача в спортивном программировании. И тест Миллера-Рабина, пожалуй, наиболее популярный из простых алгоритмов для этого.

У меня давно было желание с ним поиграться, стараясь оптимизировать различными способами. Например, векторизовать и посмотреть, станет ли быстрее.

Читать далее
Всего голосов 27: ↑28.5 и ↓-1.5+30
Комментарии15

Каким может быть алгоритмическое собеседование и как к нему подготовиться

Время на прочтение4 мин
Количество просмотров10K

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

Мы попросили Самсонова Ивана рассказать о его критериях оценки кандидатов, а также поделиться советами по подготовке. На видео Иван выступал в роли тимлида, а в обычной жизни он разработчик со степенью в Computer Science и наставник курса «Алгоритмы и структуры данных».

Смотреть и читать
Всего голосов 17: ↑11 и ↓6+5
Комментарии28

Вы все еще пишете многопоточку на C++ с ошибками синхронизации?

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров23K
Привет, коллеги! В этой статье я покажу свой подход к написанию многопоточного кода, который помогает избежать типовых ошибок, связанных с использованием базовых примитивов синхронизации.

Демонстрация идеи будет проходить на живых примерах кода на современном C++. Большинство описанных решений я применял сначала на собственных проектах, а теперь часть этих подходов уже используется в нашей собственной микроядерной операционной системе «Лаборатории Касперского» (KasperskyOS).

Сразу хочу оговориться, что тема многопоточности — очень большая и серьезная. И эта статья — не полноценный анализ проблем многопоточки, а только частНЫе (но довольно частЫе) кейсы, когда мы вынуждены использовать мьютексы.
Читать дальше →
Всего голосов 55: ↑56 и ↓-1+57
Комментарии147
1
23 ...

Вклад авторов

Работа

Программист C++
110 вакансий
QT разработчик
7 вакансий