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

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

Время на прочтение 2 мин
Количество просмотров 17K
Программирование *


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

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

Время на прочтение 1 мин
Количество просмотров 12K
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
Комментарии 20

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

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

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

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

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

В рейтинге языков программирования от TIOBE Software за январь 2023 года С++ обошёл Java

Время на прочтение 1 мин
Количество просмотров 16K
Программирование *Статистика в IT IT-компании


В рейтинге языков программирования от TIOBE Software за январь 2023 года С++ обошёл Java и поднялся на третье место.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 9

Бьёрн Страуструп ответил АНБ США по поводу рекомендации ведомства отказаться от использования языков C и C++

Время на прочтение 3 мин
Количество просмотров 60K
Информационная безопасность *Программирование *C++ *C *IT-компании


Изобретатель языка программирования C++ Бьёрн Страуструп ответил Агентству национальной безопасности (АНБ) США по поводу рекомендации ведомства отказаться от использования языков C и C++, перекладывающих управление памятью на разработчика, в пользу современных языков программирования (C#, Go, Java, Ruby, Rust и Swift), которые обеспечивают автоматическое управление памятью или выполняющие проверки безопасной работы с памятью во время компиляции кода.
Читать дальше →
Всего голосов 74: ↑71 и ↓3 +68
Комментарии 349

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

Время на прочтение 1 мин
Количество просмотров 1.6K
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
Комментарии 60

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

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

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

Время на прочтение 5 мин
Количество просмотров 57K
C++ *

Введение


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

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

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

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

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

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

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

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

Время на прочтение 3 мин
Количество просмотров 1.6K
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
Комментарии 35

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

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

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

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


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

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

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


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

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

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

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

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

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

Время на прочтение 2 мин
Количество просмотров 3.2K
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
Комментарии 14

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

Время на прочтение 1 мин
Количество просмотров 961
Блог компании Softkey.ru
Друзья!

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

image

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

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

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

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

Кодировки

Время на прочтение 6 мин
Количество просмотров 59K
C++ *

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

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

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

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

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

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

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

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

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