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

Вышла версия 6.0 фреймворка Qt

Программирование *


Во вторник, 8 декабря, компания Qt Company обновила свой фреймворк для кроссплатформенной разработки. Если сравнить с пятой версией 2012 года, в Qt 6.0 появились новые API для 3D-графики, улучшенная поддержка С++17 и система сборки cmake. Полный список изменений компания публикует на странице в вики.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 14K
Комментарии 11

Программисты создали проект «Этот код не существует»

Open source *Программирование *C++ *C *Машинное обучение *


23 февраля 2021 года разработчики из MESS Lab (университет Нью-Йорка) открыли в общий доступ проект «Этот код не существует» (this code does not exist). На сайте doesnotexist.codes выводится листинг части кода на C/C++. Пользователю предлагается угадать — это настоящий код или его фрагменты были получены в результате работы нейросети GPT-2, обученной на 774 млн строк кода из 10 тыс. самых популярных пакетов Debian. Настоящие фрагменты кода также были взяты из того же набора пакетов.
Читать дальше →
Всего голосов 24: ↑23 и ↓1 +22
Просмотры 12K
Комментарии 20

VK приглашает студентов в программу Tarantool для работы над исследовательскими задачами

Блог компании VK Программирование *C++ *Учебный процесс в IT Карьера в IT-индустрии

Друзья, мы начали набирать участников в студенческую программу Tarantool. Вы узнаете о методиках разработки ПО и получите опыт работы в технологическом проекте. Решение задач в рамках программы оплачивается.

Программа Tarantool целиком состоит из практики разработки. Участвовать могут студенты со всей страны: программа проходит удалённо. Начало 1 июля. В первую неделю менторы из сотрудников Tarantool познакомят участников с проектом и технологиями, и вы сможете выбрать задачи, с которыми будете работать — средней или повышенной сложности.

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

Один символ ценой в уязвимость

C++ *
Возможно, многие в курсе про недавнюю узявимость в ActiveX компоненте MSVidCtl, которая потенциально могла позволить злоумышленнику выполнить произвольный код используя переполнение буфера. Недавно, в блоге посвященному практике SDL появилось описание ошибки программиста, которая привела к уязвимости защиты.

Ошибка заключается в одном символе, вместо правильного кода:
hr = pStream->Read((void*)pbArray, (ULONG)cbSize, NULL);
* This source code was highlighted with Source Code Highlighter.

программист написал
hr = pStream->Read((void*)&pbArray, (ULONG)cbSize, NULL);
* This source code was highlighted with Source Code Highlighter.

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

Подробнее про эту ошибку, почему ее пропустили и что будет сделано, чтобы подобные ошибки больше не появлялись, можно почитать в блоге там же есть описание и другой ошибки связанной с ATL.
Всего голосов 60: ↑51 и ↓9 +42
Просмотры 1.6K
Комментарии 60

О модульном тестировании на C++ и о CxxTest

Тестирование IT-систем *
Совсем недавно в ходе разработки одного проекта передо мной встала задача поиска удобного средства для написания юнит-тестов на C++. К каким результатам привело моё исследование подробнее в этой статье.
Поехали.
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 56K
Комментарии 29

Многопоточность, общие данные и мьютексы

C++ *

Введение


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

Для блокировки общих данных от одновременного доступа необходимо использовать объекты синхронизации.

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

Неудаление мютекса приводит к утечке памяти, незахват — к некорректным данным, а неосвобождение — к блокировке всех функций, работающих с общими данными.

Ниже рассматривается работа с мютексами в Windows и Unix, подобная идея может быть использована при работе с другими объектами синхронизации.

Эта идея является частным случаем методики «Выделение ресурса — есть инициализация (RAII)».

Далее
Всего голосов 50: ↑38 и ↓12 +26
Просмотры 56K
Комментарии 50

STL Filter — скрипт для лаконичных ошибок STL

C++ *
STL славится своей способностью заполнять метры экранного пространства сообщениями об ошибках. Надоело смотреть на экран и видеть перлы вроде:

testmap.cpp:25: error: no matching function for call to ‘std::map<int, double, std::less, std::allocator<std::pair<const int, double> > >::map(int, int, int)’
/usr/include/c++/4.3/bits/stl_map.h:175: note: candidates are: std::map<_Key, _Tp, _Compare, _Alloc>::map(const std::map<_Key, _Tp, _Compare, _Alloc>&) [with _Key = int, _Tp = double, _Compare = std::less, _Alloc = std::allocator<std::pair<const int, double> >]
/usr/include/c++/4.3/bits/stl_map.h:165: note: std::map<_Key, _Tp, _Compare, _Alloc>::map(const _Compare&, const _Alloc&) [with _Key = int, _Tp = double, _Compare = std::less, _Alloc = std::allocator<std::pair<const int, double> >]


ну и еще пара десятков строк.

Читать дальше →
Всего голосов 40: ↑32 и ↓8 +24
Просмотры 1.5K
Комментарии 35

Разработчик С++ Бьёрн Страуструп

Биографии гиков
Бьёрн Страуструп — родился 11 июня 1950 в датском городе Орхус.
После окончания школы поступил в Университет Ааргус на отделение компьютерных технологий. В 1975 году окончил его и получил степень магистра.
В дальнейшем продолжил свое образование в Кембриджском университете Англии.
В Кембридже, в Вычислительной лаборатории, он занимался проектированием распределенных систем, и в 1979 году ему была присуждена степень доктора философии.
В этом же году Страуструп вместе с семьей переехал в Нью-Джерси (США), где стал работать в Центре компьютерных исследований фирмы Bell Labs. Когда он занимался исследованиями в фирме, Бьёрну Страуструпу потребовалось написать несколько имитационных программ. SIMULA-67 — первый объектно-ориентированный язык для моделирования мог бы быть идеальным для подобных задач, если бы не его сравнительно низкая скорость выполнения программ.
В Нью-Джерси у него рождаестя сын и он начинает больше времени уделять семье.
SIMULA-67 и BCPL(Basic Combined Programming Language) не устраивал Бьёрна и он начинает свою работу над «Си» дополнив его классами.
Первоначально название так и было «Си с классами» (С with classes)
Читать дальше →
Всего голосов 48: ↑37 и ↓11 +26
Просмотры 6K
Комментарии 34

Моя планета Земля

Чулан


Привет всем кто это читает! Хочу рассказать, как с помощью библиотеки OpenGL нарисовать вот такой земной шар.
Здесь я не буду останавливаться на создании окна и контекста устройства отображения, т.к. с это выходит за рамки данного повествования.
Читать дальше →
Всего голосов 62: ↑55 и ↓7 +48
Просмотры 1.7K
Комментарии 21

Основы создания игрового движка: таймер

C++ *
Публикуется по просьбе моего знакомого, если вам понравится статья, можете выслать ему инвайт.
Мыло скажу в ПМ или могу написать здесь же. :)


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

Цель: написать точный таймер для использования в игровом движке (а это значит, что помимо отмерения отрезков времени нам необходимо обеспечить работу событий, возникающих через заданное время).
Читать дальше →
Всего голосов 43: ↑22 и ↓21 +1
Просмотры 7.9K
Комментарии 39

Вход в систему по подключению определенной флешки

Разработка под Windows *
Одним ужасным пятничным вечером мне стало интересно как реализован вход в систему(Windows 7) по отпечатку пальца, так часто использующийся на ноутбуках. Что меня большего всего интересовало – как сделана такая прозрачная интеграция с WinLogon(механизм входа в систему).

С помощью знакомого я узнал что сие называется Credential Provider(по крайней мере начиная с Vista, до неё – был другой механизм). И тут-то я вспомнил что давно хотел сделать чтобы система разблокировалась при подключении одной определенной флешки. Поэтому я захотел быстренько наваять такой проект.
читать дальше
Всего голосов 147: ↑135 и ↓12 +123
Просмотры 22K
Комментарии 63

DSL для boost::MPL, превращаем f(x) в f<x>::type

C++ *
Краткое содержание статьи (для тех кто знаком с boost::mpl), typename опущены для ясности:
a = b;				==>		typedef b a;
f(x)				==>		f<x>::type
f(x) { return x*; }		==>		template<typename x> struct x { typedef x* type; };
f()(x)				==>		f::apply<x>::type
a[x]				==>		mpl::at<a, x>::type
(x ? y : z)			==>		mpl::if_<x, y, z>::type
switch (if_<x, y, z>)		==>		*Уфф*, общая (default) и частичные специализации
{
	case if_<bool_<false>, y, z>: return y;
	default: return z;
}

Под хабракатом есть немного пояснений :)
Читать дальше →
Всего голосов 27: ↑22 и ↓5 +17
Просмотры 3.2K
Комментарии 14

CEE-SECR 2010 ищет таланты

Блог компании Softkey.ru
Друзья!

Спешим сообщить, что сроки приема заявок на выступления с докладами на конференцию CEE-SECR 2010 («Разработка ПО 2010») продлили до 9 августа 2010 г.

image

Хотите поделиться своими знаниями и опытом? Тогда заполняйте специальную форму на сайте CEE-SECR 2010.
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Просмотры 942
Комментарии 2

Проблема глобального переопределения new/delete в C++/CLI

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

Все это мы используем в нашем крупном проекте. Однако у нас есть часть, написанная на C#, которая с помощью C++/CLI взаимодействует с основной частью на C++. И вот тут появились проблемы. У нас получались утечки памяти там, где их быть ну никак не могло.
Читать дальше →
Всего голосов 39: ↑33 и ↓6 +27
Просмотры 6K
Комментарии 20

Кодировки

C++ *

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

Читать дальше
Всего голосов 76: ↑73 и ↓3 +70
Просмотры 56K
Комментарии 61

Как безопасно разрушить объект. И другие мысли

C++ *
Недавно разглядывал вакансии одной известной конторы, задумывался над вопросам (которые, кстати, на всех их вакансиях одинаковые). И решил написать заметку по самому интересному (на мой взгляд) аспекту первого же вопроса. Может быть доберусь и до других, а пока предлагаю задуматься, надо ли делать деструкторы виртуальными?

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

Каким же должен быть полный ответ на вопрос про деструкторы?
Читать дальше →
Всего голосов 67: ↑52 и ↓15 +37
Просмотры 11K
Комментарии 51

О ненависти к С++

C++ *
Перевод
С++ or not C++, C++ или Java/Python/Ruby? Как часто вы задаёте или слышите подобные вопросы? Не хотелось бы поднимать очередной холивар — по моему мнению, умные люди давно должны были бы прийти к выводу, что при выборе языка нет той серебряной пули, которая бы поставила окончательную точку, — у каждого языка есть свои плюсы и минусы и чаще всего проблемы в прокладке между клавиатурой и стулом.

Читать дальше →
Всего голосов 112: ↑87 и ↓25 +62
Просмотры 60K
Комментарии 180

О месте C++

C++ *
Вечер добрый
В последние дни оживился блог С++ и появилась масса новых тем и споров по поводу места С++ в нашей жизни, о его будущем и прошлом. Хочу и я кое что сказать по этому поводу. Пишу я в основном на С под всякие железки типа PIC18 от Микрочипа, но и с С++ тоже знаком. И считаю, что рассматривать С++ в отрыве от возможностей С никак нельзя, хотя-бы потому, что все же он проектировался как наследник С.
В связи с этим хотелось бы задать вопрос всем тем, кто говорит о том что С++ умрет и что аналогичные задачи можно с лёгкостью решать на Python/Java/Haskel итд. Покажите как на вашем любимом языке программирования можно получить старший байт 32х разрядного(к примеру) числа за один такт процессора.
Моё решение на С/C++:
int number;
char mByte=*(((char*)&number)+3);

гарантированно компилируется в однотактную инструкцию практически на любом процессоре «а что у Вас»? Добро пожаловать в комментарии.
Всего голосов 36: ↑11 и ↓25 -14
Просмотры 1.8K
Комментарии 44

Ветвления. Что с ними можно сделать

C++ *
Мой прошлый пост вызвал огромный резонанс. Комментариев было не много, но я получил множество писем, а некоторые читатели выступили даже с открытыми заявлениями (там, правда, преобладают наезды на меня лично и на хабр в целом, но есть и мысли по существу вопроса). Поэтому я решил продолжить писать в жанре «мои мысли по поводу вопросов известной компании». Этим постом я постараюсь решить две задачи: (i) ответить на вопросы и возражения читателей предыдущего поста и (ii) толкнуть в некотором смысле философскую мысль о безIFовом программировании. Букв получилось довольно много, но те, кому интересно только что-то одно из поста, могут пропустить половину.

И ещё: этот топик (как и прошлый) — не наезд ни на кого. Просто интересно порассуждать об интересных вопросах. Здесь нет подтекста, намёка, вызова. Параноиков и сторонников теорий заговоров попрошу расслабиться.

В этот раз хотел бы взглянуть на вопрос 4.
Читать дальше →
Всего голосов 60: ↑49 и ↓11 +38
Просмотры 7.7K
Комментарии 35