Как стать автором
Поиск
Написать публикацию
Обновить
116.52

C++ *

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

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

WTF?

Время на прочтение2 мин
Количество просмотров43K
PVS-Studio, WTF?
Меня не покидает когнитивный диссонанс. На форумах обсуждаются возвышенные идеи о написании сверх надежных классов, кто-то рассказывает, что его проект собирается с ключами -Wall -Wextra -pedantic -Weffc++. Господи, где все эти достижения науки и техники? Почему я вижу кругом глупейшие ошибки? Может быть, со мной что-то не так?

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

Lock-free структуры данных. 1 — Начало

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

Я надеюсь, что эта статья станет началом цикла заметок о lock-free структурах данных. Я хочу поделиться с хабрасообществом своим опытом, наблюдениям и размышлениями о том, что такое lock-free структуры данных, как их реализовывать, подходят ли концепции контейнеров стандартной библиотеки STL к lock-free контейнерам, и когда стоит (и стоит ли вообще) применять lock-free структуры данных.

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

«Boost.Asio C++ Network Programming». Глава 4: Клиент и Сервер

Время на прочтение12 мин
Количество просмотров72K
Всем привет!
Продолжаю перевод книги John Torjo «Boost.Asio C++ Network Programming».

Содержание:


В этой главе мы собираемся углубиться в создание нетривиальных клиент/серверных приложений с использованием Boost.Asio. Вы можете запускать и тестировать их, и как только вы разберетесь в них, вы сможете использовать их как основу для создания собственных приложений.

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

«Boost.Asio C++ Network Programming». Глава 3: Эхо сервер/клиент

Время на прочтение9 мин
Количество просмотров70K
Всем привет!
Продолжаю перевод книги John Torjo «Boost.Asio C++ Network Programming».

Содержание:


В этой главе мы реализуем небольшое клиент/серверное приложение, которое, вероятно, будет самым простым клиент/серверным приложением. Это приложение эхо-сервер, который возвращает клиенту то, что тот ему написал, а затем закрывает соединение клиента. Сервер может работать с любым числом клиентов. Когда подключается новый клиент, он шлет сообщение. Сервер получает сообщение целиком и посылает его обратно. После этого он закрывает соединение.
Таким образом, каждый эхо-клиент подключается к серверу, посылает сообщение и читает то, что ответил сервер, убедившись, что это то же сообщение, которое он послал, заканчивает общение с сервером.
Сначала мы будем реализовывать синхронное приложение, а затем асинхронное, так что вы можете легко их сравнить:



Здесь будет приводиться не весь код целиком, а только его части, весь код можно посмотреть по ссылке в конце статьи.
Читать дальше →

Russian Code Cup 2013: разбираем задачи финала

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


23 сентября 2013 года состоялся финал чемпионата по программированию Russian Code Cup 2013.

Первое место занял Петр Митричев (кстати, чемпион RCC 2011). Второй приз взял Геннадий Короткевич, третье — Дмитрий Джулгаков.

Сегодня мы публикуем подробный разбор шести задач, которые были предложены финалистам RCC (спойлер: одна из них так и осталась нерешенной). В программе — сортировка невиданной быстроты, борьба с капибарным гриппом, путешествия роботов и многое другое.

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

GCC и Variable-Length Arrays

Время на прочтение2 мин
Количество просмотров21K
Одногруппник прислал C++-код с какой-то ошибкой и вывод компилятора по этому поводу. Но более всего меня удивила не его проблема, а то, что в коде создавался на стеке массив с неизвестной на этапе компиляции длиной. Помнится, в начале изучения языка столкнулся с этим и уяснил, что так делать нельзя. Странно, но других ошибок компилятор одногруппника не выдал…

Где-то читал, что следующий Стандарт C++14, возможно, позволит выполнять такой трюк. Но настоящий говорит, что размер массива должен быть constant expression. Это еще раз уменьшает совместимость с C99, где VLAs давно доступны.
Читать дальше →

Тестовое задание C++, функтор для сортировки

Время на прочтение6 мин
Количество просмотров24K
image
Для поиска талантливых программистов написал тестовое задание C++. Вкратце, сложность задачи состоит в передачи дополнительных данных в функцию сравнения, которая используется сортировкой из стандартной библиотеки.
Из википедии:
Функциональный объект (англ. function object), так же функтор, функционал и функционоид — распространённая в программировании конструкция, позволяющая использовать объект как функцию. Часто используется как callback, делегат, либо как замена лямбда-выражениям в нефункциональных языках программирования.

Данное тестовое задание не требует знания решения сходу, хотя опытный программист, думаю, запросто так и сделает. Разрешается использовать интернет. Я без подсказки на stackoverflow не мог найти красивое решение. Цель задания — понять, умеет ли соискатель читать код, находить решения поставленных задач.
Читать дальше →

«Boost.Asio C++ Network Programming». Глава 2: Основы Boost.Asio. Часть 2

Время на прочтение15 мин
Количество просмотров69K
Всем привет!
Продолжаю перевод книги John Torjo «Boost.Asio C++ Network Programming». В этой части второй главы мы поговорим про асинхронное программирование.

Содержание:


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

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

Алгоритм выбора STL-контейнера

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


UPD: схема заменена на вариант с контейнерами из С++11, соавторы — в комментариях ниже

Первый вариант схемы - без контейнеров из С++11

Делаем простое удержание курсора в окне Warcraft 3

Время на прочтение5 мин
Количество просмотров20K
Приветствую тебя, читатель. У меня есть хобби — это старый добрый Warcraft 3. На хабре уже был цикл статей, посвященный этой замечательной игре. Хочу поделиться с комьюнити одной утилитой, пригодившейся мне при проведении стримов. Всех заинтересовавшихся прошу пройти под кат.
Читать дальше →

Shed Skin — экспериментальный транслятор из Python в C++

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

Введение



Shed Skin — это экспериментальный транслятор из Python в C++, разработанный для повышения скорости выполнения программ на Python с интенсивными вычислениями. Он преобразует программы, написанные на ограниченном подмножестве языка Python, в C++. Код C++ можно скомпилировать в исполняемый код, который может быть как отдельной программой, так и модулем расширения, легко импортируемым и используемым в обычной программе на Python.

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

Обновился Google Testing Framework

Время на прочтение1 мин
Количество просмотров5.1K
На днях обновился Google Testing Framework до версии 1.7.0.
В новой версии:
* Новая функция: death-тесты поддерживаются на OpenBSD и в IOS Simulator;
* Новая функция: Test :: RecordProperty () теперь может быть использована за пределами тестового метода;
* Новые возможности: — gtest_list_tests теперь печатает параметры-типы и параметры-значения для каждого теста;
* Улучшение: указатели char и массивы символов теперь обрабатываются корректно;
* Улучшение: отчеты об отказах в XML файлах теперь содержат номер строки и файл;
* «Potentially breaking change»: RUN_ALL_TESTS () теперь реализована в виде функцим вместо макроса для того, чтобы лучше работать с Clang;
* Исправления совместимости с C++ 11 и различных платформ;
* и другое.

Оригинал здесь.

Данные переменной длинны — DataSizeVariable (DSV)

Время на прочтение2 мин
Количество просмотров4.3K
Всем привет!

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

Обобщенная тема – эффективная упаковка данных, сериализация и десериализация объектов.
Основная цель – поделиться своими размышлениями по этому поводу и обсудить структуру данных DSV.

Проблема:
Известные мне на текущий момент (2013-09-19 18:09:56) механизмы бинарной сериализации обладают недостаточной гибкостью или избыточность занимаемого пространства. Например:
QString s1(“123”); -> 4 байта размера данных = 0x00000003, 3 байта полезных данных = “123”, эффективность = 3/7;
U32 val1(123); -> 4 байта данных (0x0000007B), 1 байт из которых является значимым = 123 (0x7B), эффективность = 1/4.
Читать дальше →

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

PACS-сервер своими руками

Время на прочтение8 мин
Количество просмотров58K
Не так давно наша компания закончила работу над внедрением PACS-сервера (Picture Archiving and Communication System) в один из медицинских диагностических центров нашего города. До этого там стоял PACS-сервер с открытым исходным кодом — dcm4chee, который не блистал высокой скоростью работы, поскольку написан на Java. К тому же одним из требований заказчика было иметь доступ к внутренней структуре сервера. Поэтому было решено написать свой. К тому же в компании имелся опыт подобных разработок как клиентских, так и серверных частей PACS-систем, поэтому компромиссным решением было создать собственный PACS-архив, удовлетворяющий требования заказчика. Большей частью реализации ядра сервера пришлось заниматься мне и за это время был приобретён специфический опыт в этой области, чем и хочу поделиться с хабра-сообществом. Но обо всём по порядку.
Читать дальше →

«Boost.Asio C++ Network Programming». Глава 2: Основы Boost.Asio. Часть 1

Время на прочтение20 мин
Количество просмотров121K
Всем привет!
Продолжаю перевод книги John Torjo «Boost.Asio C++ Network Programming». Вторая глава получилась большая, поэтому разобью ее на две части. В этой части мы поговорим именно про основы Boost.Asio, а во второй части речь пойдет про асинхронное программирование.

Содержание:


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

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

Идем по грибы после Cppcheck

Время на прочтение9 мин
Количество просмотров8.5K
PVS-Studio, OpenMS

После горячих обсуждений про "Большой Калькулятор", мне захотелось проверить ещё что-то из проектов, связанных с проведением исследований. Первое что нашлось, оказался открытый проект OpenMS, связанный с protein mass spectrometry. Этот проект оказалось написан с серьёзным подходом. При разработке используется как минимум Cppcheck. Так что ничего сенсационного ждать не приходилось. Однако был интерес, какие ошибки сможет найти PVS-Studio после Cppcheck. Заинтересовавшихся приглашаю продолжить чтение статьи.

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

Еще один гайд по созданию плазмоида: конфигурация, события и уведомления

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

Dr.Konqi, мы с ним дружим, я его часто вижу %)

Вместо предисловия


Привет!
На хабре уже писали про то, что все плазмоиды нужно портировать на QML/JS, но я все равно продолжаю измываться над трупом CPP и пишу виджеты для плазмы на плюсах. Но, возможно, не все так плохо, %username%?

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

Конвертируем картинку в ANSI

Время на прочтение4 мин
Количество просмотров22K
Не знаю, насколько это будет кому-то интересно, но на днях решил поиграться и сделать следующее:

Дано: Картинка (например, BMP) 640 на 400, шрифт 8 на 16

Надо: Перевести ее в ANSI псевдографику в стандартном режиме 80 на 25 символов, символы и фон могут иметь любой цвет (true color).

image

Благодаря очень хорошим комментариям я обновил версию: ссылка
С ней получаются примерно такие картинки: image

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

Вычисление максимального числа в массиве на этапе компиляции

Время на прочтение3 мин
Количество просмотров8K
Здравствуй хабр!

Не так давно понадобилось вычислить максимальную длину из нескольких заданных строк на этапе компиляции. Нужно выделить память под массив char[], так чтобы в нем уместилась любая строка из заданных. Логично предположить, что если система спроектирована хорошо, никаких вычислений на этапе компиляции не нужно, можно воспользоваться динамическим выделением используя std::auto_ptr или std::string, но это не тот случай. Структура в которой хранится буфер char[] должна быть POD-типом.

По сути задача сводится к определению максимального числа в массиве на этапе компиляции. В данном топике я покажу как это сделать в стандарте c++03 и c++11. В ходе поиска решений нашел две статьи, которые помогли мне решить проблему: habrahabr.ru/post/166201, habrahabr.ru/post/38622.
Узнать как...

Большой Калькулятор выходит из под контроля

Время на прочтение19 мин
Количество просмотров41K
Calculator

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

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