C++ — TechCave

C++ — компилируемый строго типизированный язык программирования общего назначения.

C++ — компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.

Стена группы

Загрузка...
1 день назад
#

Усложняя стандартный пример



Стандартная библиотека С++ предлагает не только набор классов, но также определяет способ написания программ. В рамках данной статьи рассматриваются общие требования к реализации программ при помощи STL.

Рассмотрим следующую задачу:

Считать из файла input.txt массив целых чисел, разделенных пробельными символами. Отсортировать их и записать в файл output.txt


Источник
Загрузка...
3 дня назад
#

Иголка в стоге сессий, или Байт-код регулярных выражений





17 млрд событий, 60 млн пользовательских сессий и огромное количество виртуальных свиданий происходят в Badoo ежедневно. Каждое событие аккуратно сохраняется в реляционные базы данных для последующего анализа на SQL и не только.



Современные распределённые транзакционные базы данных с десятками терабайт данных — настоящее чудо инженерной мысли. Но SQL как воплощение реляционной алгебры в большинстве стандартных реализаций пока не позволяет формулировать сложные запросы в терминах упорядоченных последовательностей кортежей.



В последней статье из серии, посвящённой виртуальным машинам, я расскажу про альтернативный подход к поиску интересных сессий — движок регулярных выражений («Поросячий Матчер»), определённых для последовательностей событий.



Виртуальная машина, байт-код и компилятор прилагаются бесплатно!



Источник
Загрузка...
4 дня назад
#

Внутренняя и внешняя линковка в C++



Всем добрый день!

Представляем вам перевод интересной статьи, который подготовили для вас рамках курса
«Разработчик C++». Надеемся, что она будет полезна и интересна для вас, как и нашим слушателям.

Поехали.

Сталкивались ли вы когда-нибудь с терминами внутренняя и внешняя связь? Хотите узнать, для чего используется ключевое слово extern, или как объявление чего-то static влияет на глобальную область? Тогда эта статья для вас.

В двух словах

В единицу трансляции включены файл реализации (.c/.cpp) и все его заголовочные файлы (.h/.hpp). Если внутри единицы трансляции у объекта или функции есть внутреннее связывание, то этот символ виден компоновщику только внутри этой единицы трансляции. Если же у объекта или функции есть внешнее связывание, то компоновщик сможет видеть его при обработке других единиц трансляции. Использование ключевого слова static в глобальном пространстве имен дает символу внутреннее связывание. Ключевое слово extern дает внешнее связывание.

Компилятор по умолчанию дает символам следующие связывания:

  • Non-const глобальные переменные — внешнее связывание;

  • Const глобальные переменные — внутреннее связывание;

  • Функции — внешнее связывание.





Источник
Загрузка...
Den
4 дня назад
#

И снова в космос: как единорог Stellarium посещал



За все время своего существования люди приложили колоссальное количество усилий, чтобы изучить практически всю площадь звездного неба. На сегодняшний день мы рассмотрели сотни тысяч астероидов, комет, туманностей и звезд, галактик и планет. Чтобы увидеть всю эту красоту самостоятельно, не обязательно выходить из дома и покупать себе телескоп. Можно установить на компьютер Stellarium — виртуальный планетарий, и посмотреть на ночное небо, с комфортом лежа на диване… Но с комфортом ли? Чтобы выяснить ответ на этот вопрос, проверим Stellarium на наличие ошибок в компьютерном коде.




Источник
Загрузка...
5 дней назад
#

У Интернета могут быть серьёзные проблемы из-за языков, подобных C и C++, которые способствуют появлению уязвимостей



Привет, Хабр! Представляю вашему вниманию перевод статьи "
Internet aurait de sérieux problèmes à cause de langages comme C et C++ favorisant la survenue de failles" (фр. язык).

Но мало кого из разработчиков это волнует

Один баг затрагивает iPhone, другой – Windows, а третий – сервера, работающие на Linux. На первый взгляд эти баги не имеют ничего общего, так как касаются разных платформ: Android, iOS, macOS, Windows, Linux. Однако, на самом деле, всё иначе, по мнению Алекса Гейнора, инженера по безопасности программного обеспечения в Mozilla, ранее работавшего в USDS (United States Digital Service).

[1]Подробнее —
https://www.usds.gov, здесь и далее прим. переводчика.

Во время третьего «Weakest Link», ежегодного мероприятия, организованного Motherboard Vice,

[2]Подробнее —
https://motherboard.vice.com/en_us

на тему компьютерного взлома и кибербезопасности в будущем, Алекс Гейнор поднял серьезную проблему, которая, по его мнению, может угрожать Интернету, но, как ни парадоксально, оставляет разработчиков совершенно равнодушными.

Гейнор объяснил, что три ранее упомянутые ошибки существуют, потому что программное обеспечение, которое они затрагивают на разных платформах, было написано с помощью языков программирования, имеющих неприятную тенденцию способствовать возникновению ошибок типа «memory unsafety», разрешая доступ к невыделенным областям памяти.

[3]Скорее всего, имелось в виду, что обращение к 6 элементу массива, состоящего из 5 элементов, допустимо, хотя в других языках программирования, более «безопасных», как минимум будет выведено сообщение об ошибке.

Эта категория ошибок может привести к багам и уязвимостям безопасности во время получения доступа к памяти.

Источник
Загрузка...
5 дней назад
#

PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++



PVS-Studio, MISRA C, MISRA C++

Начиная с версии 6.27 статический анализатор кода PVS-Studio может классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.

Источник
Загрузка...
9 дней назад
#

Краткий гид по обучению С++: что, когда и на чём создавать





Недавно у нас на GeekBrains стартовал свежий курс "
Профессия: разработчик C++". Программа позволит всего за 9 месяцев освоить этот непростой язык и стать специалистом уровня junior. А это непростая задача. К примеру, в школах и ВУЗах на изучение С++ уходит минимум 2 года, чаще 4-5. Чтобы показать из чего состоит этот нелегкий путь, мы схематично описали для вас основные этапы.

Источник
Загрузка...
9 дней назад
#

DEV Labs 2018. Онлайн-митап для C++ разработчиков. 15 декабря



testУважаемые коллеги!

Приглашаем вас на финальный митап серии DEV Labs в 2018 году, который состоится 15 декабря и будет посвящён разработке на C++.

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

Подробнее оп программе:

testМногопоточный С++ STL на графических процессорах. Дмитрий Микушин расскажет о том, почему программировать GPU трудно, но нужно и покажет реализацию некоторых подходов с помощью Thrust;

test
Агрегатирование сборки сложного проекта. Андрей Вуколов рассмотрит применимость агрегатированной сборки в проекте с учетом встроенности в существующий ПАК и агрегатирует сборку на примерах qmake и CMake;

test
«Что сейчас произошло?!» Станислав Ивочкин, отвечая на вопрос – «Что происходит после нажатия Enter в строке браузера?», заглянет под капот одного из простейших действий, совершаемых пользователем. Посмотрим на работу парсеров, компиляторов и интерпретаторов, графических фрейворков и системных библиотекю

Источник
Загрузка...
11 дней назад
#

Три вида утечек памяти



Здравствуйте, коллеги.

Наши долгие поиски неустаревающих бестселлеров по оптимизации кода пока дают лишь первые результаты, но мы готовы вас порадовать, что буквально только что закончен перевод легендарной книги Бена Уотсона "
Writing High Performance .NET Code". В магазинах — ориентировочно в апреле, следите за рекламой.

А сегодня предлагаем вам почитать сугубо практическую статью о наиболее насущных видах утечек оперативной памяти, которую написал
Нельсон Ильхейдж (Nelson Elhage) из компании
Stripe.

Источник
Загрузка...
11 дней назад
#

Полное руководство по CMake. Часть вторая: Система сборки





Введение

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



Источник
Загрузка...
12 дней назад
#

0xc00007b или установка драйверов из-под программы



Вступление

Доброго времени суток. Знакомо ли вам исключение 0xc00007b? С момента перевода движка X-Ray под x64 приходило очень много репортов о проблеме 0cx00007b. В 90% случаев, это была проблема с отсутствием 64 битного драйвера OpenAL.



Источник
Загрузка...
Den
14 дней назад
#

CLion 2018.3: удаленная разработка, профилирование кода, быстродействие и не только



Привет, Хабр!

На днях мы выпустили CLion 2018.3. Третий в этом году крупный релиз подытоживает нашу работу по двум важным направлениям развития —
улучшению языковой поддержки и
удаленной разработке.

Кроме того, мы, наконец:

  • добавили средства профилирования кода;

  • переделали команды в редакторе для сборки/пересборки кода на уровне одного файла, нескольких таргетов или всего проекта целиком;

  • вместе с другими IDE на базе платформы IntelliJ добавили поддержку Git submodules и GitHub pull requests;

  • улучшили средства универсального доступа к возможностям IDE (accessibility).



image

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

Источник
Загрузка...
14 дней назад
#

Полное руководство по CMake. Часть первая: Синтаксис





Введение

CMake — это открытый и кросс-платформенный набор утилит, предназначенных для автоматизации тестирования, компиляции и создания пакетов проектов на C/C++. Написав однажды небольшой и понятный всем скрипт, Вы тем самым обеспечите одинаковую сборку Вашего проекта на любых платформах, где доступен CMake.



Язык CMake, будучи транслированным в нативный файл сборки (например, Makefile или Ninja), определяет процесс всего управления проектом. В Вашем распоряжении, с функциональной стороны, есть лишь команды, которые могут образовываться в довольно сложные конструкции. С них мы и начнём.



Источник
Загрузка...
14 дней назад
#

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



Резервуарная выборка (eng. «reservoir sampling») — это простой и эффективный алгоритм случайной выборки некоторого количества элементов из имеющегося вектора большого и/или неизвестного заранее размера. Я не нашел об этом алгоритме ни одной статьи на Хабре и поэтому решил написать её сам.

Итак, о чём же идёт речь. Выбрать один случайный элемент из вектора — это элементарная задача:

// C++
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, vect.size() — 1);

auto result = vect[dis(gen)];


Задача «вернуть K случайных элементов из вектора размером N» уже хитрее. Здесь уже можно ошибиться — например, взять K первых элементов (это нарушит требование случайности) или взять каждый из элементов с вероятностью K/N (это нарушит требование взять ровно K элементов). Кроме того, можно реализовать и формально корректное, но крайне неэффективное решение «перемешать случайно все элементы и взять K первых». И всё становится ещё интереснее, если добавить условие того, что N — число очень большое (нам не хватит памяти сохранить все N элементов) и/или не известно заранее. Для примера представим себе, что у нас есть какой-то внешний сервис, присылающий нам элементы по одному. Мы не знаем сколько их придёт всего и не можем сохранить их все, но хотим в любой момент времени иметь набор из ровно K случайно выбранных элементов из уже полученных.

Алгоритм резервуарной выборки позволяет решить эту задачу за O(N) шагов и O(K) памяти. При этом не требуется знать N заранее, а условие случайности выборки ровно K элементов будет чётко соблюдено.

Источник
Загрузка...
18 дней назад
#

Qt Everywhere: WebAssembly и WebGL стриминг



Qt Everywhere — так именуются архивы с исходниками Qt. В 5.12.0 завезут WebAssembly и WebGL стриминг и everywhere звучит уже по другому. Так и просилось что-нибудь запрототипировать. Был быстро накидан прототип чатика на веб-сокетах, что бы протестировать поддержку сети. Под катом будет инструкция по сборке и запуска проекта на WebAssembly, пример вызова JavaScript из С++.



Источник
Загрузка...
2 3

Авторизация

Пользователи

naikdij88
NewEXE
Георгiй Москвитинъ
Andpyxa Tutunnik
Andrey_fox
Jane linch
genagy
Pasha Radiuk
KotikBSD

Именинники

IvanNik

GeekBrains

Нетология

Нетология