Рубрика «С++»

NCBI Genome Workbench: научные исследования под угрозой - 1Современные компьютерные технологии, технические и программные решения — всё это сильно облегчает и ускоряет проведение различных научных исследований. Зачастую компьютерное моделирование — единственный способ проверки многих теорий. Научный софт имеет свои особенности. Например, такой софт зачастую подвергается очень тщательному тестированию, но слабо документирован. Тем не менее программное обеспечение пишется людьми, а люди допускают ошибки. Ошибки в научных программах могут ставить под сомнение целые исследования. В этой статье будут приведены десятки проблем, обнаруженных в коде пакета программ NCBI Genome Workbench.
Читать полностью »

Работа со строками на этапе компиляции в современном C++ - 1

Если вы программируете на C++, то наверняка задавались вопросом почему нельзя сравнить два строковых литерала или выполнить их конкатенацию:

auto str = "hello" + "world"; // ошибка компиляции

if ("hello" < "world") { // компилируется, но работает не так, как ожидалось
    // ...
}

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

Читать полностью »

Оглавление

    Введение
    1. Специальные функции-члены, создание и удаление объектов
        1.1. Специальные функции-члены
        1.2. Создание и удаление объектов — основные подробности
        1.3. Уровень доступа деструктора
        1.4. Создание и удаление в одном модуле
        1.5. Полиморфное удаление
        1.6. Удаление при неполном объявлении класса
    2. Чисто виртуальные функции и абстрактные классы
        2.1. Чисто виртуальные функции
        2.2. Абстрактные классы
        2.3. Чисто виртуальный деструктор
    3. Интерфейсные классы
        3.1. Реализации
        3.2. Создание объекта
        3.3. Удаление объекта
            3.3.1. Использование оператора delete
            3.3.2. Использование специальной виртуальной функции
            3.3.3. Использование внешней функции
            3.3.4. Автоматическое удаление с помощью интеллектуального указателяЧитать полностью »

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

Бесполезный отложенный неблокирующий обмен сообщениями в MPI: лайт-аналитика и туториал для тех, кто немножечко «в теме» - 1

Наше &laquoДано: &raquo

Итак, суть нашей, в сущности вычислительной задачи, заключается в том, чтобы сравнить во сколько раз программа, использующая неблокирующие отложенные двухточечные передачи быстрее той, что использует блокирующие двухточечные передачи. Измерения будем проводить для входных массивов размерностью 64, 256, 1024, 4096, 8192, 16384, 65536, 262144, 1048576, 4194304, 16777216, 33554432 элементов. По умолчанию предлагается решать ее четырьмя процессами. А вот, собственно, и то, что мы будем считать:

Читать полностью »

В C++20 вот-вот появится возможность работать с корутинами из коробки. Нам в Яндекс.Такси эта тема близка и интересна (под собственные нужды мы разрабатываем асинхронный фреймворк). Поэтому сегодня мы покажем читателям Хабра, как можно работать с C++ stackless корутинами на реальном примере.

В качестве примера возьмём что-то простое: без работы с асинхронными сетевыми интерфейсами, асинхронными таймерами, состоящее из одной функции. Например, попробуем осознать и переписать вот такую «лапшу» из колбеков:
Готовимся к С++20. Coroutines TS на реальном примере - 1

void FuncToDealWith() {
    InCurrentThread();

    writerQueue.PushTask([=]() {
        InWriterThread1();

        const auto finally = [=]() {
            InWriterThread2();
            ShutdownAll();
        };

        if (NeedNetwork()) {
            networkQueue.PushTask([=](){
                auto v = InNetworkThread();
                if (v) {
                    UIQueue.PushTask([=](){
                        InUIThread();
                        writerQueue.PushTask(finally);
                    });
                } else {
                    writerQueue.PushTask(finally);
                }
            });
        } else {
            finally();
        }
    });
}

Читать полностью »

Привет! Сегодня я надеюсь показать вам немного магии. Моим хобби является придумывание всяких казалось бы невозможных штук на С++, что помогает мне в изучении всевозможных тонкостей языка ну или просто развлечься. Оператор in есть в нескольких языках, например Python, JS. Но в С++ его не завезли, но иногда хочется чтобы он был, так почему бы его не реализовать.

	std::unordered_map<std::string, std::string> some_map = 
	{
		{ "black", "white" },
		{ "cat", "dog" },
		{ "day", "night" }
	};

	if (auto res = "cat" in some_map)
	{
		res->second = "fish";
	}

Читать полностью »

Товарищи, добрый вечер!

Вы так здорово разобрали у нас первый тираж книги "С++17 STL. Стандартная библиотека шаблонов" и продолжаете разбирать второй, что мы наконец-то решили изложить здесь и альтернативную точку зрения. Автор сегодняшней статьи — Иван Чукич (Ivan Čukić), перу которого также принадлежит книга "Functional Programming in C++", которая готовится к выходу в издательстве «Manning». Предлагаем оценить его скептические мысли, код и выкладки
Читать полностью »

Предыстория

В начале этого учебного года (17-18) администрация нашего любимого лицея сказала нам: «В конце года каждый из вас должен защитить индивидуальный проект. У тех, кто не защитит проект, останется академ. задолженность и к гоcам (ГИА-9) они допущены не будут». Получается что-то вроде дипломной работы (в 9 классе, просто супер). Примерно с сентября по декабрь мы с моим другом Кириллом (kkirra) опрделялись, что за проект мы будем делать: хотелось что-то не очень сложное в исполнении, но вместе с тем что-то зрелищное и оригинальное. В конце концов мы определились: решили сделать модель человеческой руки, да еще такую, чтобы под управлением андроид устройства (именно в этом году мы с Кириллом случайно поступили в IT-школу Samsung на базе нашего лицея, поэтому хотели обязательно использовать в проекте полученные знания) она переводила введенный текст в язык жестов.
Читать полностью »

Здравствуй!

В процессе своей работы (администрирование активного оборудования) столкнулся с необходимостью оперативного получения онлайн-данных (желательно с графиком) входящего/исходящего трафика на сетевом интерфейсе по SNMP.

При этом всегда попадается такое оборудование, которое либо не заведено в систему мониторинга, либо требует просмотра статистики чаще, чем раз в минуту (как rrdtool).
А в арсенале, зачастую, лишь консоль сервера на Windows или Debian.

Читать полностью »

И снова здравствуйте!

Делимся с вами очередным открытым уроком, который мы проводили в рамках курса «Разработчик C++». На уроке Сергей Кольцов разбирал проблему деинициализации, которая довольно часто возникает в разработке ПО с использованием legacy или native-кода.

Как всегда ждём вопрос и комментарии тут или сегодня на Дне открытых дверейЧитать полностью »