Pull to refresh
0
ilya @bontaread⁠-⁠only

User

Send message

Руководство Google по стилю в C++. Часть 1

Reading time4 min
Views69K
Часть 1. Вступление
Часть 2. Заголовочные файлы
Часть 3. Область видимости
Часть 4. Классы
Часть 5. Функции
Часть 6. Специфика Google
Часть 7. Ещё возможности C++
Часть 8. Именование
Часть 9. Комментарии
Часть 10. Форматирование
Часть 11. Исключения из правил

Изменения 2019-2024


Все мы при написании кода пользуемся правилами оформления кода. Иногда изобретаются свои правила, в других случаях используются готовые стайлгайды. Хотя все C++ программисты читают на английском легче, чем на родном, приятнее иметь руководство на последнем.
Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Это вступительная часть руководства, в которой рассматриваются общие вопросы «Зачем?»
Также после перевода будет несколько ответов на возможные вопросы.
Читать дальше →

О стратегии развития человечества в новом мире искусственного интеллекта

Reading time36 min
Views10K

Мы много слышим от сильных мира сего о том, что появление искусственного интеллекта (далее ИИ) является серьезным испытанием для человечества. Но в чем именно это испытание – информацию найти затруднительно. Целью данной работы является моделирование/прогнозирование изменений в человеческом обществе в связи с развитием ИИ. В работе будут предложены стратегии сохранения ценности человека в условиях господства принятия решений с помощью ИИ.

Читать далее

Основы компьютерных сетей. Тема №5. Понятие IP адресации, масок подсетей и их расчет

Reading time18 min
Views922K


Приветствую вас на очередном выпуске. И сегодня речь пойдет о том, какие бывают IP-адреса, и как ими пользоваться. Что такое маска подсети, как она считается, и для чего она нужна. Как делить сети на подсети и суммировать их. Заинтересовавшихся приглашаю к прочтению.
Читать дальше →

Основы компьютерных сетей. Тема №2. Протоколы верхнего уровня

Reading time29 min
Views643K
И снова всем привет! Сегодня речь пойдет о протоколах верхнего уровня. Разберем, как они работают, из чего состоят и где применяются теоретически и на практике.


Приятного чтения

Каналы на корутинах С++

Reading time14 min
Views8.2K

В предыдущей статье я описал простой путь создания генераторов на корутинах С++. На мой взгляд генераторы неплохо демонстрируют работу с такими объектами как coroutine_handle и promise_type. На этот раз речь пойдет об awaitable объектах — еще одной неотъемлемой части поддержки корутин в С++. А рассматривать мы их будем на примере реализации каналов, аналогичных каналам в GoLang. Как С++ разработчик, я не в восторге от многих решений принятых в GoLang, но в их каналы влюбился с первого взгляда. Итак, приступим!

Читать далее

Зачем С++ в Такси? Доклад Яндекса

Reading time21 min
Views18K
Бэкенд первой версии Яндекс.Такси, которая вышла в 2011 году, был написан на Python. Мы довольно долго не меняли основной язык, но постепенно пришли к идее о необходимости С++ в стеке технологий. Перед вами доклад о том, что мы переписали в первую очередь и почему, а также о трюках С++, которые помогают нам справляться с ростом.

— Добрый день. Меня зовут Александр Голубев, и сегодня я вам расскажу, зачем C++ появился в Такси.
Читать дальше →

Асинхронность в С++20. Доклад в Яндексе

Reading time14 min
Views28K
Привет, это Григорий Демченко из WhatsApp. Мой доклад посвящён использованию сопрограмм в C++20. Я не стал говорить про низкоуровневые примитивы и то, как компилятор поддерживает сопрограммы и преобразовывает соответствующий код. Вместо этого акцент сделан на практическом применении сопрограмм для решения конкретных задач высокопроизводительных масштабируемых систем. Это именно то, ради чего создавались сопрограммы в новом стандарте, и то, с чем разработчик будет иметь дело в процессе проектирования и программирования. Я постарался рассмотреть конкретные примеры и проблемы, с которыми можно столкнуться при использовании полностью асинхронного подхода.

— О чём я сегодня расскажу? Первое — введение в асинхронность. Далее мы рассмотрим примитивы, которые можно использовать в новом стандарте, и интеграцию с планировщиками. Также немаловажным аспектом будет являться работа со старым кодом, если мы пишем новый код с использованием нового подхода. Затем я покажу бонус, достаточно интересный и необычный. И подведём итоги того, что у нас получилось.
Читать дальше →

Ищем дубликаты фотографий с помощью Perl

Reading time4 min
Views5.6K

За 20 лет у меня скопилось несколько тысяч фотографий: праздники, свадьбы, рождение детей, и прочее, прочее... Понятно что снималось всё это на разные цифровики, присылалось почтой, сливалось через ICloud и GDrive, FTP, самба и т.п. По итогу всё это превратилось в дикий хаос папок и что-то найти в архиве можно было только с большим трудом.

В какой-то момент мне нечем было заняться это надоело и я за пару дней накидал скрипт, который всё это безумие раскидал по годам->месяцам->дням. Понятно, что и эта задача не такая простая как кажется на первый взгляд, что например делать с фото, у которых дата создания 1970? Но в этой статье я хотел бы рассказать о другом.

Читать далее

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Reading time12 min
Views29K

Этот текст предназначен для тех, кто только осваивает программирование. Я читаю лекции по C++ на первом курсе местного университета, и в качестве практикума предлагаю запрограммировать любую игру (не выношу проектов типа "софт бронирования книг в местной библиотеке"). Соответственно, чтобы помочь начинающим, я сделал некоторое количество заготовок, с которых можно стартовать свой проект. Например, заготовку олдскульного 3д шутера в 486 строк C++ я уже описывал, а вот тут можно посмотреть, что из неё сделали первокурсники.


В этот раз всё будет ещё проще, я хочу сделать заготовку под простейший платформер, вот так выглядит результат:



На данный момент проект содержит менее трёхсот строчек цпп:


ssloy@khronos:~/sdl2-demo/src$ cat *.cpp *.h | wc -l
296

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


Итак, поехали!

Читать дальше →

C++20 в 2020: Модули

Reading time8 min
Views29K

Разработка C++20 идет полным ходом, и это принесет немало новых возможностей. У нас есть библиотека ranges, корутины, концепции и новая библиотека форматирования строк. Но, возможно, самой большой потенциальной возможностью повлиять на структуру и архитектуру нашего кода являются модули.

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

Немного истории

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

Модули C++ — это попытка уменьшить потребность в одной конкретной директиве препроцессора, #include. #include позволяет нам разделить исходный код на логические части — в частности, интерфейс (обычно расположенный в файле ".h" или "header") и реализацию (обычно расположенную в файле ".cpp" или "source"). Разделение на заголовочный и исходный файлы дает огромное количество преимуществ, включая:

Читать далее

5 любопытных примеров лямбд в C++: рекурсия, constexpr, контейнеры и многое другое

Reading time4 min
Views10K

Пожалуйста, посмотрите мою небольшую статью в блоге, где я покажу вам несколько интересных примеров лямбд. Знаете ли вы, как написать рекурсивную лямбду? Хранить их в контейнере? Или вызывать во время компиляции?

Смотрите в статье.

Читать далее

Проект Altos Labs. Как миллиардеры Кремниевой долины хотят жить вечно

Reading time5 min
Views41K

Джефф Безос и Юрий Мильнер — одни из инвесторов проекта

В октябре прошлого года большая группа ученых приехала в гигантский особняк Юрия Мильнера в холмах неподалеку от Пало-Альто. Они были протестированы на Covid-19 и в масках собрались в театре особняка на двухдневную научную конференцию. Еще несколько сотен ученых присоединились с помощью видеозвонков. Тема конференции: как можно использовать биотехнологии для омоложения людей.


Так при помощи Джеффа Безоса и несколько других миллиардеров была основана Altos Labs — компания, занимающаяся технологиями биологического перепрограммирования. Сейчас она изучает несколько перспективных методов, которые могли бы помочь обратить вспять процесс старения.

Читать дальше →

История HDD, часть II

Reading time11 min
Views19K

Жесткие диски знакомы всем пользователям, без них сложно представить современный компьютер. Конечно, SSD вытеснили жесткие диски в сценариях, где требуется максимальная производительность, например, для загрузочного раздела ОС. Но если нужна максимальная емкость, то без HDD не обойтись.

Сегодня жесткие диски достигли емкости 18 Тбайт, а скоро выйдут и более емкие модели, в том числе и благодаря технологии термомагнитной записи (HAMR). 3,5" форм-фактор жестких дисков сегодня утвердился, однако они не всегда были такими. В нашем цикле статей мы проведем небольшой экскурс в историю жестких дисков.

В первой части мы начали с 50-х годов прошлого века. Сейчас же мы перейдем к эпохе миникомпьютеров, которые появились в 1980-е годы.

Читать далее

WireGuard заработал в режиме ядра WindowsNT

Reading time3 min
Views13K


Разработчик WireGuard VPN Джейсон Доненфельд выпустил новую версию WireGuardNT, которая работает в режиме ядра WindowsNT (7, 8.1, 10, 11, 2012, 2016, 2019, 2022). Перенос всего кода в ядро значительно повышает пропускную способность туннеля практически на любых соединениях, особенно по WiFi.

Примечание. Чтобы запустить свою программу на уровне ядра Windows и не иметь проблем с Microsoft SmartScreen, разработчику требуется приобрести сертификат подписи кода типа EV, который стоит намного дороже, чем обычный сертификат подписи кода — примерно $2000 за трёхлетний. Хорошо, что у опенсорсного некоммерческого проекта WireGuard есть спонсоры.
Читать дальше →

«Чертовски глупое решение»: история появления языка C

Reading time12 min
Views33K

Как ни сложно в это поверить, C не родился в виде истрёпанного руководства в бумажной обложке.

В том или ином виде, язык C повлиял на формирование практически каждого языка программирования, разработанного с 1980-х. Некоторые языки наподобие C++, C# и Objective C должны были стать прямыми наследниками C, а другие просто переняли и адаптировали его синтаксис. Программист, перешедший с Java, PHP, Ruby, Python или Perl, почти не испытает сложностей с пониманием простых программ на C, и в этом смысле C можно воспринимать как lingua franca программистов.

Однако C не возник из ниоткуда как единый монолит программирования. История C начинается в Англии, с коллеги Алана Тьюринга и программы, игравшей в шашки.

Использование STL для обработки сигналов в реальном времени. Доклад в Яндексе

Reading time23 min
Views7.2K
Компьютерные игры, обработка аудиосигналов в режиме реального времени и другие подобные приложения низкой задержки требуют, чтобы код был не только корректным. Он также должен исчислять требуемый результат надёжно за детерминированный срок выполнения. В этом докладе head of technology в компании Cradle Тимур Думлер timuraudio рассмотрел, в какой степени стоит использовать стандартную библиотеку С++ для создания приложений с подобными «real-time» ограничениями. Какие инструменты из стандартной библиотеки можно применять с уверенностью, что они не будут блокировать поток, ждать освобождения мьютекса, не будут выделять или освобождать память и совершать другие действия с недетерминированной задержкой? Каких средств из набора стандартной библиотеки следует избегать и почему? По пути Тимур обсудил малоизвестные и неожиданные аспекты этих привычных инструментов.

— Всем привет, меня зовут Тимур Думлер. Хочу сказать, что я обычно делаю доклады на английском языке. Это всего второй раз в жизни, когда я докладываю на русском, мне это немножко непривычно. Спасибо большое, что подключились, сегодня мы поговорим про использование стандартной библиотеки C++ для обработки сигналов в real-time.
Читать дальше →

Как можно оптимизировать dot-product и не только. Доклад Яндекса

Reading time18 min
Views4.1K
Разработчик инфраструктуры качества поиска Яндекса Ильнур Хузиев ilnurKh взял простую задачу — скалярное произведение двух векторов — и попробовал выжать все соки производительности кода. Из доклада вы узнаете, как использовать возможности процессора, настройки компилятора (и даже попробовать превзойти его), какой была бы правильная постановка задачи, как выбирать приоритеты и архитектуру. Да, вопрос выбора абстракций может встать даже на примере настолько простой задачи.

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

Новости из жизни Haiku за июль-август 2021

Reading time3 min
Views4.4K

Здравствуйте, дорогие друзья.

Исторически сложилось, что изначально сообщество BeOS/Haiku обитало на qube.ru и Jabber-канале. Но, со временем оно перебралось в телеграмм канал и vk-сообщество, где участники сообщества, кто есть в VK, собирают и обсуждают новости проекта.

И в данном материале я хочу рассказать Вам новости из жизни Haiku накопившееся за июль-часть августа.

Читать далее

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

Reading time4 min
Views16K
image

Подводные каналы связи, пролегающие на дне океанов и морей, — изобретение далеко не современное. Первая попытка проложить трансатлантический кабель телеграфной связи была предпринята в 1857 году. К сожалению, он порвался, так и не принеся пользы. Затем последовало еще несколько проблемных проектов. И только в 1866 году все получилось — кабель смог обеспечить надежную телеграфную связь между Европой и США.

С тех пор по дну океанов и морей были проложены десятки разных кабелей — телеграфных, телефонных, а также интернет-магистралей. К сожалению, иногда кабели все же рвутся, что приводит к сложным ситуациям. Давайте оценим аварии последнего времени и их причины.
Читать дальше →

SerenityOS: Unix-подобная операционная система с кастомным ядром и графическим интерфейсом в стиле 90-х

Reading time5 min
Views27K

Пару лет назад в сети появилась информация о проекте Serenity — Unix-подобной операционной системе для архитектуры x86 с собственным ядром и винтажным интерфейсом. При этом возможности операционной системы заявлялись вполне современные.

Это ОС, написанная с нуля, которая не базируется на коде уже существующих операционных систем. Авторы SerenityOS активно работали над поставленной целью — создание новой операционной системы, пригодной для выполнения большинства привычных нам задач. Код системы пишется на С++. Сейчас проект достиг нового уровня развития — в среде ОС уже можно поработать, составив собственное мнение о SerenityOS. Подробности о новинке — под катом.

Information

Rating
Does not participate
Registered
Activity