Открыть список
Как стать автором
Обновить
80
Карма
0
Рейтинг
Михаил Зинин @Fyret

Разработчик

  • Публикации
  • Комментарии

Чему равно выражение -3/3u*3 на С++? Не угадаете. Ответ: -4. Приглашаю на небольшое расследование

Совершенный кодC++КомпиляторыIT-стандартыЗаконодательство в IT
Из песочницы

Не уверен, что это будет исправлено.

Небольшое расследование под катом.
Всего голосов 111: ↑97 и ↓14 +83
Просмотры25.3K
Комментарии 172

C++17. Функция стандартной библиотеки std::launder и задача девиртуализации

ПрограммированиеC++
Tutorial

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


Читать дальше →
Всего голосов 70: ↑70 и ↓0 +70
Просмотры12.9K
Комментарии 70

Коты в коробочках, или Компактные структуры данных

Блог компании Mail.ru GroupПрограммированиеАлгоритмыМатематика
🔥 Технотекст 2020 🔥 Технотекст 2020

image


Как быть, если дерево поиска разрослось на всю оперативку и вот-вот подопрет корнями соседние стойки в серверной? Что делать с инвертированным индексом, жадным до ресурсов? Завязывать ли с разработкой под Android, если пользователю прилетает «Память телефона заполнена», а приложение едва на половине загрузки важного контейнера?


В целом, можно ли сжать структуру данных, чтобы она занимала заметно меньше места, но не теряла присущих ей достоинств? Чтобы доступ к хэш-таблице оставался быстрым, а сбалансированное дерево сохраняло свои свойства. Да, можно! Для этого и появилось направление информатики «Succinct data structures», исследующее компактное представление структур данных. Оно развивается с конца 80-х годов и прямо сейчас переживает расцвет в лучах славы big data и highload.


А тем временем на Хабре найдется ли герой, способный пересковоговорить три раза подряд
[səkˈsɪŋkt]?

Читать дальше →
Всего голосов 127: ↑127 и ↓0 +127
Просмотры23.9K
Комментарии 42

ARM и программирование без блокировок

Блог компании ЯндексПрограммированиеC++Процессоры
Перевод


Выпуск ARM-процессора Apple M1 вдохновил меня на то, чтобы написать в Твиттер про опасности программирования без блокировок (lock-free). Этот твит вызвал бурную дискуссию. Обсуждение прошло довольно неплохо, учитывая то, что попытки втиснуть в рамки Твиттера обсуждениие такой сложной темы, как модели памяти центрального процессора, — в принципе бессмысленны. Но у меня осталось желание немного раскрыть тему.

Этот пост задуман не только как обычная вводная статья про опасности программирования без блокировок (о которых я в последний раз писал около 15 лет назад), но и как объяснение, почему слабая модель памяти ARM ломает некоторый код, и почему этот код, вероятно, не работал изначально. Я также хочу объяснить, почему стандарт C++11 значительно улучшил ситуацию в программировании без блокировок (несмотря на возражения против противоположной точки зрения).
Читать дальше →
Всего голосов 59: ↑55 и ↓4 +51
Просмотры15.2K
Комментарии 60

Один совет, благодаря которому я успешно прошёл несколько собеседований

Карьера в IT-индустрии
Перевод
— Что вы скажете, если я попрошу вас разработать сервис, который обрабатывает тысячи запросов в секунду с минимальной задержкой?

— Хм… Я скажу, что у вас в компании возникла такая проблема. Но у вас нет идей и вы обсуждаете её на собеседованиях с кандидатами :)

Именно так я ответил, когда мне впервые задали вопрос по архитектуре. Мы хорошо посмеялись. Но потом интервьюер всё-таки заставил меня спроектировать сервис.
Читать дальше →
Всего голосов 107: ↑101 и ↓6 +95
Просмотры139.5K
Комментарии 222

dynamic_cast на этапе компиляции

C++

Приветствую все читающих.


О чём статья (или задача статьи): практический ответ на вопрос "возможно ли создать большой проект так, чтобы полностью отказаться от dynamic_cast на этапе выполнения?", где под большим проектом подразумевает такой в котором уже нет человека, что бы держал в голове всю кодовую базу проекта целиком.


Предварительный ответ: ДА, это возможно — возможно создать механизм, позволяющий решить задачу dynamic_cast на этапе компиляции, но — едва ли подобное будет применяться на практике по причинам как: (1) с самого начала целевой проект должен строиться согласно наперёд заданным правилам, в следствии чего взять и применить методику к существующему проекту, очень трудоёмко (2) существенное повышение сложности кода с точки зрения удобства его читаемости в определённых местах, где, собственно, происходит замена логики dynamic_cast на предложенную ниже (3) использование шаблонов, что может быть неприемлемым в некоторых проектах по идеологическим соображениям ответственных за него (4) интерес автора исключительно в том, чтобы дать ответ на поставленный вопрос, а не в том, чтобы создать универсальный и удобный механизм решения поставленной задачи (в конце-концов, не нужно на практике решать проблемы, которые не являются насущными).

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры2.2K
Комментарии 1

Сертификации в Agile. Пара слов для HR и для коллег-разработчиков

Agile
Я хочу сразу оговориться что не преследую цели ни пропагандировать сертификации для IT, ни предавать их анафеме. Этот выбор каждый должен сделать для себя. Но как бы то оно ни было — сертификации существуют, сертификации придается значение «за рубежом», и в резюме сотрудников и РФ, Украины и Белоруссии я уже начал встречать упоминания о сертификациях, а значит они есть как реальность уже и в РФ. И неплохо бы понимать что все эти буковки означают. В этой статье я расскажу какие есть популярные сертификации в мире Agile и Scrum и что на самом деле за ними стоит.
Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Просмотры1.7K
Комментарии 9

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

C++
Перевод
Часть 1. Вступление

Часть 4. Классы



Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Читать дальше →
Всего голосов 7: ↑5 и ↓2 +3
Просмотры4.3K
Комментарии 3

Мой маленький Kubernetes: настраиваем тестовый кластер в VirtualBox

МикросервисыKubernetes
Tutorial

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

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

Обычно изучение Kubernetes стоит начинать с minikube - консольной утилиты, которая умеет быстро создавать кластер из одного узла с использованием VirtualBox. Это самый лучший вариант для быстрого старта.

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

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

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

Осторожно, трафик! В статье очень много скриншотов.

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

Что необходимо учитывать при юнит-тестировании фронтенда

Блог компании Издательский дом «Питер»Тестирование IT-системПрограммированиеTDD
Перевод
Привет, Хабр!

Обращаем ваше внимание еще на одну новинку, доступную у нас в предзаказе — книгу о юнит-тестировании.



Автор сегодняшней публикации кратко и доступно рассказывает о достоинствах unit testing и TDD на примере фронтенда.

Приятного чтения!
Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Просмотры2.8K
Комментарии 6

C++20. Coroutines

ПрограммированиеC++
🔥 Технотекст 2020 🔥 Технотекст 2020
Tutorial

В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


image

Читать дальше →
Всего голосов 48: ↑45 и ↓3 +42
Просмотры23.3K
Комментарии 26

Переезд инженера в Нидерланды: рулинг, кеннисмигранты, стоимость жизни

Блог компании gms & g-mateIT-эмиграцияКарьера в IT-индустрии
Недавно мы публиковали несколько статей про переезд разработчиков в Будапешт, Германию и Шанхай. В комментариях писали про переезд в Нидерланды — вернулись с текстом про него.

По версии Mercer, Амстердам (единственный голландский город в списке) занимает 11 место в рейтинге качества жизни за 2019 год, а по статистике OECD Better Life Index, удовлетворенность жизнью голландцев выше средних значений по странам. Мы заметили, что обсуждение переезда в эту страну очень противоречиво: кто-то ругает влажный климат, кто-то — наоборот, одни говорят про развитость IT-сферы, другие — что крупных tech-компаний маловато. Так какие есть возможности в Нидерландах у разработчика? Какие преимущества у иммигрантов? Разбираемся с плюсами и минусами переезда в эту страну.


Читать дальше →
Всего голосов 29: ↑27 и ↓2 +25
Просмотры23.1K
Комментарии 190

std::atomic. Модель памяти C++ в примерах

ПрограммированиеC++

Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы многопоточного программирования, такие как мьютекс, join потока и другие. Особенно это касается модели памяти C++, которая была создана сложной таковой, чтобы обеспечивать оптимальный многопоточный код под множество архитектур процессоров. Кстати, язык программирования Rust, будучи построенным на LLVM, использует модель памяти такую же, как в C++. Поэтому материал в этой статье будет полезен программистам на обоих языках. Но все примеры будут на языке C++. Я буду рассказывать про std::atomic, std::memory_order и на каких трех слонах стоят атомики.

Читать далее
Всего голосов 52: ↑52 и ↓0 +52
Просмотры33.6K
Комментарии 37

Как я научился проходить архитектурные секции

Карьера в IT-индустрии
Архитектурные секции у многих вызывают чувство неопределенности и тревоги: формулировки не изобилуют деталями, как проверить ответ — непонятно. При этом способность пройти архитектурную секцию отличает вчерашнего выпускника от человека, которому можно доверить строить нечто большее, чем обход бинарных деревьев. В определенный момент я решил как следует подготовиться секции по дизайну, потратил на это около пары недель и выработал системный подход, которым хочу с вами поделиться.
Читать дальше →
Всего голосов 45: ↑43 и ↓2 +41
Просмотры19K
Комментарии 18

Опыт инвестиций в акции

Финансы в IT
Всем привет. Опрос в моем прошлом посте показал, что людям хотелось бы почитать о моем опыте инвестиций. На данный момент мой ИИС открыт 1 год и 3 месяца назад. Инвестировал я 500 000 рублей за это время.
Читать дальше →
Всего голосов 52: ↑40 и ↓12 +28
Просмотры35.2K
Комментарии 165

Первое впечатление от концептов

ПрограммированиеC++


Решил разобраться с новой возможностью С++20 — концептами.

Концепты (или концепции, как пишет русскоязычная Вики) — очень интересная и полезная фича, которой давно не хватало.

По сути это типизация для аргументов шаблонов.

Основная проблема шаблонов до С++20 — в них можно было подставить все что угодно, в том числе то, на что они совершенно не рассчитаны. То есть система шаблонов была совершенно нетипизирована. В результате, при передаче в шаблон неверного параметра возникали невероятно длинные и совершенно нечитаемые сообщения об ошибках. С этим пытались бороться с помощью разных языковых хаков, которые я даже упоминать не хочу (хотя приходилось сталкиваться).

Концепты призваны исправить это недоразумение. Они добавляют в шаблоны систему типизации, причем весьма мощную. И вот, разбираясь с особенностями этой системы, я стал изучать доступные материалы в интернете.

Скажу честно, я немножко в шоке:) С++ и без того сложный язык, но тут хотя бы есть оправдание: так получилось. Метапрограммирование на шаблонах именно открыли, а не заложили при проектировании языка. А дальше, при разработке следующих версий языка, были вынуждены подстраиваться под это «открытие», так как в мире было написано очень много кода. Концепты же — принципиально новая возможность. И, как мне кажется, в их реализации уже присутствует некоторая непрозрачность. Возможно, это следствие необходимости учесть огромный объем унаследованных возможностей? Попробуем разобраться…
Читать дальше →
Всего голосов 50: ↑49 и ↓1 +48
Просмотры9.7K
Комментарии 32

Особенности профилирования программ на C++

Высокая производительностьПрограммированиеC++Серверная оптимизация
🔥 Технотекст 2020 🔥 Технотекст 2020

Временами бывает нужно отпрофилировать производительность программы или потребление памяти в программе на C++. К сожалению, зачастую это сделать не так просто как может показаться.

Здесь будут рассмотрены особенности профилирования программ с использованием инструментов valgrind и google perftools. Материал получился не очень структурированным, это скорее попытка собрать базу знаний «для личных целей», чтобы в будущем не приходилось судорожно вспоминать, «а почему не работает то» или «а как сделать это». Скорее всего, здесь будут затронуты далеко не все неочевидные случаи, если вам есть что добавить, пишите пожалуйста в комментарии.

Все примеры будут запускаться в системе linux.
Читать дальше →
Всего голосов 17: ↑15 и ↓2 +13
Просмотры7.9K
Комментарии 13

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

Совершенный кодПроектирование и рефакторингУправление разработкойУправление проектамиУправление продуктом
Перевод


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


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

Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Просмотры10.3K
Комментарии 20

Вопросы для собеседования — от кандидата к работодателю

Управление персоналомКарьера в IT-индустрии
Все мы привыкли к тому, что на собеседованиях задают много вопросов. Обычно — работодатели кандидатам. Один из таких вопросов — “а у вас есть вопросы к нам?”. Довольно часто кандидаты не готовы к этому. И зря. Задавать вопросы работодателю — это совершенно нормально и даже необходимо. Лучше сразу уточнить все важные для вас аспекты работы, чем потом разочароваться. Более того, вопросы, заданные кандидатом, иногда даже учитываются как одна из характеристик кандидата. О чем спросил кандидат — о технологиях, о продукте или о процессах?
В этой статье я рассмотрю вопросы, часто задаваемые кандидатами разработчиками ПО. Я считаю, что эта статья будет полезна как самим кандидатам, так и рекрутерам, чтобы подготовиться к собеседованию.
Читать дальше →
Всего голосов 21: ↑17 и ↓4 +13
Просмотры13.7K
Комментарии 5

Пишем презентации в LaTeX

LaTeXКонференцииПрезентации
Tutorial

В процессе подготовки доклада на GolangConf'2019 я использовал LaTeX. Несмотря на некоторые устаревшие вещи, немного необычное поведение, скудную или сложную документацию, я внезапно получил удовольствие. Я не стал "гуру" LaTeX, но я смог делать весьма неплохие слайды. И я хочу описать основные точки создания современной презентации на LaTeХ. Особенно это должно "зайти" айтишникам, которые по роду занятий программируют. Программировать свою презентацию — это увлекательно.


Читать дальше →
Всего голосов 62: ↑59 и ↓3 +56
Просмотры29K
Комментарии 116

Информация

В рейтинге
5,830-й
Зарегистрирован
Активность