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

Пользователь

Топ-10 докладов конференции C++ Russia 2018: полные видеозаписи, слайды, комментарии

Время на прочтение 7 мин
Количество просмотров 18K
Блог компании JUG Ru Group Высокая производительность *C++ *Компиляторы *Конференции

В этой статье вас ждёт десять лучших докладов от Андрея Александреску, Дэвида Вандервурда, Джона Калба и многих других.


Фичи компилятора C++, асинхронность, многопоточность, параллелизм, модель памяти, алгоритмы и STL, метапрограммирование и рефлекшен, огромное множество тем.



Всё это — записи с конференции C++ Russia, самой большой в истории. Восемь сотен участников, немаленький зал, спикеры с мировым именем. Прошёл год, но большинство докладов ничуть не утратило своей актуальности. Впрочем, и неудивительно — именно такие доклады и попадают в топ по оценке участников.


Формат таков:


  • Обязательное видео на YouTube
  • Слайды, если есть
  • Подробное описание доклада на русском языке
  • Краткая биография докладчика

Плюс у вас есть комментарии Хабра, чтобы обсудить увиденное. Реклама на ютубе отключена, никто не будет мешать. Есть всё, чтобы начать смотреть прямо сейчас.

Читать дальше →
Всего голосов 51: ↑48 и ↓3 +45
Комментарии 13

Корутины в C++20 — что это и как с ними работать

Время на прочтение 20 мин
Количество просмотров 22K
Блог компании Wunder Fund Программирование *C++ *
Перевод

Прим. Wunder Fund: В статье описаны базовые подходы к работе с корутинами в 20м стандарте С++, на паре практических примеров разобраны шаблоны классов для промисов и фьючеров. По нашему скромному мнению, можно было бы реализовать и поизящнее. Приходите к нам работать, если имеете сильные мнения о корутинах хе-хе.

Возникает такое ощущение, что тема реализации корутин в C++20 окутана серьёзной неопределённостью. Полагаю, это так из-за того, что в проекте технической спецификации C++20 сказано, что работа над механизмами корутин всё ещё ведётся, в результате в данный момент нельзя ожидать полной поддержки этих механизмов компиляторами и стандартной библиотекой.Множество проблем, вероятно, возникает из-за отсутствия официальной документации по работе с корутинами. Нам дали синтаксическую поддержку корутин в C++ (co_yield и co_return), но не всё то, что я счёл бы признаками их полной библиотечной поддержки. В стандартной библиотеке имеются хуки и базовый функционал поддержки корутин, но нам приходится самостоятельно встраивать всё это в наши собственные классы. Я ожидаю, что полная поддержка корутин-генераторов появится в C++23.

Если вы — Python- или C#-разработчик и ожидаете увидеть в C++ простую механику работы с корутинами, то вас ждёт разочарование, так как фреймворк общего назначения C++20 недоработан. Учитывая это, можно отметить, что в интернете имеется множество публикаций, в состав кода, обсуждаемого в которых, входит шаблонный класс, поддерживающий корутины-генераторы. В этом материале вы найдёте шаблон корутины, применимый на практике, а также примеры кода. Всё это предваряется общими сведениями о корутинах.

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

О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 17K
Python *Java *C++ *Assembler *

Цель настоящей статьи - изучить лямбда функции: чем они отличаются от обычных функций и изучить, как они реализованы в С++, Python 3 и Java.

На протяжении этой статьи я буду использовать godbolt.org, чтобы компилировать код и изучать машинный код или байт код. Я думаю, что при чтении статьи может быть удобнее смотреть не на приведённый машинный код в статье, а на этом сайте.

Читать далее
Всего голосов 21: ↑18 и ↓3 +15
Комментарии 41

Семафоры в Linux медленно сходят со сцены

Время на прочтение 6 мин
Количество просмотров 25K
Программирование *Системное программирование **nix *Разработка под Linux *
Перевод

С годами подходы к обработке конкурентности в ядре Linux сильно изменились. К 2023 году в арсенале разработчиков ядра появились, в частности, автозавершения, хорошо оптимизированные мьютексы, а также россыпь неблокирующих алгоритмов. Но были времена, когда управление конкурентностью сводилось к использованию обычных семафоров. Дискуссия о внесении небольшого изменения в API семафоров лишний раз свидетельствует, как сильно они изменились за долгую историю ядра.

Читать далее
Всего голосов 57: ↑56 и ↓1 +55
Комментарии 28

Барьеры доступа к памяти в Linux

Время на прочтение 15 мин
Количество просмотров 46K
Системное программирование *
Эта статья — частичный перевод исчерпывающего руководства Дэвида Хоуэлса (David Howells) и Пола Маккени (Paul E. McKenney) распространяемого в составе документации Linux (Documentation/memory-barriers.txt онлайн версия).

Must read для разработчиков ядра/драйверов и очень познавательно для прикладных программистов.
ASCII art и очень много букв
Всего голосов 114: ↑109 и ↓5 +104
Комментарии 33

Tree Oriented Programming

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.9K
Ненормальное программирование *Программирование *Совершенный код *ООП *

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

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

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

Что получится, если попытаться описать составной объект? Как ни старайся, ничего другого, кроме древовидной структуры у вас не получится. Отсюда первый принцип:

Читать далее
Всего голосов 25: ↑10 и ↓15 -5
Комментарии 66

Анонимные пространства имен vs. static в пространстве имен

Время на прочтение 6 мин
Количество просмотров 3.1K
Блог компании OTUS Программирование *C++ *
Перевод

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

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

Нужна ли на проекте документация: три признака, что да, ещё три — когда нет

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.4K
Блог компании KTS Анализ и проектирование систем *Управление разработкой *Управление проектами *Управление персоналом *
Аналитика

Подготовка документации — дело затратное. Прежде чем приступать к ней, нужно подумать, действительно ли она нужна, или это делается, потому что «так принято». 

В статье я подробно остановился на ситуациях, когда написать её необходимо. Если в одной из них вы узнаете свой проект, то документация сильно поможет в его реализации.

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 13

Как сделать релиз и не превратить ваш проект в затонувший «Титаник»

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 845
Управление разработкой *Управление проектами *Управление продуктом *
Мнение

Привет, это Антон Павлов — Head of Products в ITSM 365. 

Релизы помогают компаниям повысить лояльность клиентов —  у пользователей появляется ощущение, что продукт развивается, завтра никуда не исчезнет. Добавление новых фич по просьбе клиента создаёт впечатление, что компания слышит пользователей. 

Однако во время релиза легко совершить ошибки и обрушить надолго сервис всем пользователям. Это может перечеркнуть все позитивные аспекты релизов. 

Рассказываю на пятилетнем опыте выпуска релизов для сложных B2B-клиентов, какие меры предосторожности нужно предпринять, чтобы ничего не чинить после обновления.  

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

Хотели как лучше — получилось как всегда: как мы создали бесполезный инструмент в сервисе финучета

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 1.5K
Управление проектами *Развитие стартапа Управление продуктом *Облачные сервисы *
Кейс

«Добавьте выставление счетов» — говорили они. И мы, как молодой и амбициозный сервис финучета для бизнеса, добавили.  Потратили сотни часов на разработку и… все зря. Рассказываю, почему клиентоориентированность иногда играет против компании, что мы сделали не так и как теперь внедряем новые фичи. 

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

Простая Enterprise Architecture. Архитектура компании садоводов

Время на прочтение 9 мин
Количество просмотров 2.8K
Анализ и проектирование систем *Визуализация данных *Управление проектами *

Под грустное рычание,
Под бодрое мычание,
Под дружеское ржание
Рождается на свет
Большой СКЕЛЕТ для маленькой,
Для маленькой такой компании,
Для скромной такой компании
Огромный такой СКЕЛЕТ!

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 10

Дорожная карта навыков разработчика на C++

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 36K
Блог компании «Лаборатория Касперского» C++ *Разработка под MacOS *Разработка под Linux *Карьера в IT-индустрии Разработка под Windows *
Роадмэп
Спецпроект

Джеймс Гослинг как-то сказал, что Java — это C++, из которого убрали все пистолеты, ножи и дубинки, однако практика показывает, что «ножи и дубинки» становятся классным инструментом в руках опытных разработчиков. В общем, немалая часть проклятий в адрес C++ объясняется элементарным «вы просто не умеете его готовить». Мы в «Лаборатории Касперского» умеем готовить «плюсы» и поэтому любим их. C++ — низкоуровневый язык, который позволяет работать с железом и писать быстрый код и при этом содержит массу возможностей. В экосистеме «плюсов» куча проработанных паттернов, best practices и готовых библиотек под разные задачи. Язык динамично развивается — но сохраняет обратную совместимость. 

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

Отправляемся
Всего голосов 46: ↑38 и ↓8 +30
Комментарии 95

Если вы отказались от регулярных выражений, то теперь у вас три проблемы

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 19K
Блог компании RUVDS.com Ненормальное программирование *Программирование *Регулярные выражения *
Аналитика
Перевод

Известная шутка программистов гласит, что если решение вашей проблемы включает в себя парсинг текста при помощи регулярного выражения, то теперь у вас есть две проблемы. Некоторые программисты, прочитав шутку, решают попробовать иной подход. Возможно, регулярные выражения не так уж нужны. Возможно, задачу можно решить простым split строки или чем-то подобным. Однако другие могут задуматься немного глубже и задаться вопросом: «А если я сделаю нечто настолько дерзкое, что в результате получу три проблемы?» Мой пост написан в таком духе!

В нём используется код на Python, однако его легко можно адаптировать под любой язык с поддержкой функций высшего порядка.
Читать дальше →
Всего голосов 69: ↑67 и ↓2 +65
Комментарии 70

Текстовые строки в языках программирования

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 6.3K
Ненормальное программирование *Python *Программирование *C++ *
Мнение
Из песочницы

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

Если вы обратили внимание, то слово "поддерживает" взято в кавычки и как говорил Винипух, это жжж не спроста, ведь с появлением Unicode понятие "символ" в текстовых строках стало не совсем однозначным.

Есть старая статья о проблемах поддержки Unicode в разных языках программирования: The importance of language-level abstract Unicode strings Matt Giuca

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

Читать далее
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 51

Когда один TCP-порт может быть поделён

Время на прочтение 19 мин
Количество просмотров 12K
Программирование *Сетевые технологии *C *Параллельное программирование *Разработка под Linux *
Перевод

Вы замечали, как простые вопросы иногда приводят к сложным вопросам? Сегодня мы попытаемся подступиться к одному из таких вопросов. Категория — наша любимая: сетевые аспекты Linux.

Читать далее
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 6

Неконстантные константные выражения

Время на прочтение 24 мин
Количество просмотров 38K
Ненормальное программирование *Программирование *C++ *
Перевод
// <какой-то код>
 
int main ()
{
        constexpr int a = f ();
        constexpr int b = f ();
 
        static_assert (!= b, "fail");
}

Можно ли в приведенном выше фрагменте вместо комментария вставить такое определение f (), чтобы a получила значение, отличное от b?

“Разумеется, нет!” — скажете вы, немного подумав. Действительно, обе переменные объявлены со спецификатором constexpr, а значит, f () тоже должна быть constexpr-функцией. Всем известно, что constexpr-функции могут выполняться во время компиляции, и, как следствие, не должны зависеть от глобального состояния программы или изменять его (иными словами, должны быть чистыми). Чистота означает, что функция при каждом вызове с одними и теми же аргументами должна возвращать одно и то же значение. f () оба раза вызывается без аргументов, поэтому должна оба раза вернуть одно и то же значение, которое и будет присвоено переменным a и b… правильно?

Еще неделю назад я знал, что это правда, и действительно думал, что невозможно пройти static_assert в приведенном выше фрагменте, не допуская неопределенного поведения.

Я ошибался.
Увиденное под катом уже не развидеть
Всего голосов 61: ↑57 и ↓4 +53
Комментарии 28

Король умер. Да здравствует Nxs-backup v3.0

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 3K
Блог компании Nixys Системное администрирование *Резервное копирование *Разработка под Linux *DevOps *
Обзор

4 года назад наша команда Nixys рассказывала, почему мы решили сделать собственный инструмент для резервного копирования и почему другие инструменты нам не подошли. Сегодня хочу рассказать, какие проблемы и недостатки в старой версии нам мешали, почему мы решили всё переписать и что у нас в итоге получилось. Добро пожаловать под кат.

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

Многозадачность в ядре Linux: workqueue

Время на прочтение 7 мин
Количество просмотров 34K
Блог компании Embox Системное программирование *C *
Продолжаем тему многопоточности в ядре Linux. В прошлый раз я рассказывала про прерывания, их обработку и tasklet’ы, и так как изначально предполагалось, что это будет одна статья, в своем рассказе о workqueue я буду ссылаться на tasklet’ы, считая, что читатель уже с ними знаком.
Как и в прошлый раз, я постараюсь сделать мой рассказ максимально подробным и детальным.

Статьи цикла:
  1. Многозадачность в ядре Linux: прерывания и tasklet’ы
  2. Многозадачность в ядре Linux: workqueue
  3. Protothread и кооперативная многозадачность


Читать дальше →
Всего голосов 68: ↑68 и ↓0 +68
Комментарии 4

Как разработать драйвер Linux с нуля

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 10K
Блог компании Timeweb Cloud Настройка Linux *Программирование *Разработка под Linux *
Туториал
Перевод
image

Недавно я занимался изучением IoT и, так как мне не хватало устройств, при попытках симулировать работу прошивки я часто сталкивался с неимением нужного /dev/xxx. Так что я стал задумываться, а могу ли написать драйвер самостоятельно, чтобы заставить прошивку работать. Независимо от того, насколько сложно это будет, и удастся ли воплотить такое намерение, в любом случае вы не пожалеете, если научитесь разрабатывать драйвер Linux с нуля.
Читать дальше →
Всего голосов 47: ↑41 и ↓6 +35
Комментарии 7

Удивительное рядом. Как устроен буфер обмена в Windows и Linux

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 18K
Блог компании RUVDS.com Системное программирование *Разработка под Linux *Разработка под Windows *Софт
Опенсорсная утилита CopyQ показывает содержимое буфера обмена на всех ОС и сохраняет историю

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

В некоторых случаях данные вообще нигде не сохраняются по нажатию Ctrl+C. И по нажатию Ctrl+V будет возвращён NULL. Shit happens, как говорится…
Читать дальше →
Всего голосов 71: ↑70 и ↓1 +69
Комментарии 19

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность