Все потоки
Поиск
Написать публикацию
Обновить
192.38

C++ *

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

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

Переосмысление концепции подсчета ссылок и полный отказ от сборщика мусора

Уровень сложностиСложный
Время на прочтение6 мин
Количество просмотров12K


Фундаментальной (по моему мнению) проблемой множества языков программирования является неявное использование ссылок (ссылочных переменных).


И проблема не в том, что с помощью ссылок изменяются какие-то общие данные, а в том, что часто это делается неявным образом, из-за чего программист должен всегда помнить об особенностях таких переменных.


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


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


И если такое будет возможно, тогда постепенно уйдет в прошлое целая эпоха сборщиков мусора с их неожиданными зависаниями программ в произвольные моменты времени и разными мудреными алгоритмами поиска мертвых указателей и циклических ссылок!

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

[sobjectizer] Что нового в SO-5.8.3 и so5extra-1.6.2?

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров691

Недавно была зафиксирована версия 5.8.3 для SObjectizer и версия 1.6.2 для сопутствующего ему проекта so5extra. В данной статье попробую рассказать о том, что и зачем появилось в новых версиях.

Для тех же, кто про SObjectizer слышит впервые, очень кратко: это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP). Основная идея, лежащая в основе SObjectizer, — это построение приложения из мелких сущностей-агентов, которые взаимодействуют между собой через асинхронный обмен сообщениями. Составить впечатление о SObjectizer-е и о so5extra можно вот по этим статьям: SObjectizer: что это, для чего это и почему это выглядит именно так? Взгляд из 2022-го и Краткий обзор библиотеки so5extra с дополнениями для SObjectizer-5.

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

Читать далее

Sentinel C++20. Пишем свой Sentinel

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

О понятии Sentinel говорят мало, особенно в русскоязычном пространстве. Вместе с Юрием Вашинко, опытным тимлидом и спикером нашего курса «С++ разработчик» сегодня рассмотрим, что такое Sentinel и как его использовать:

Читать далее

C++ Дайджест №8 (2 сентября – 8 сентября 2024)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.4K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов по C++ за последнюю неделю.

Приятного чтения!

Читать далее

Устройство системы чит-кодов в The Simpsons: Hit & Run

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.1K

Приветствую всех мододелов и интересующихся!

Сегодня я хочу обсудить внутреннее устройство системы чит-кодов в The Simpsons: Hit & Run 2003.

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

Читать далее

Я на дереве сижу, препроцессинг провожу

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.2K

Согласно описанию,


Tree-sitter — это инструмент для генерации синтаксических анализаторов и библиотека инкрементного синтаксического анализа. Он может создавать конкретное синтаксическое дерево для исходного файла и эффективно обновлять синтаксическое дерево по мере редактирования исходного файла.

Но как Tree-sitter справляется с языками, в которых необходима стадия препроцессинга?

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

И снова клон десктопного клиента Telegram

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

Казалось бы, сколько их уже есть, зачем еще один? Но случилось совпадение многих вещей - у меня было свободное время, желание что-то сделать, неудовлетворенность работой официального клиента и нежелание изучать существующие альтернативные версии и перечень их отличий. В результате я реализовал свой Луна-парк, с нужными мне фичами. Подробнее под катом.

Читать далее

Статический и динамический полиморфизм в C++

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров16K

Привет, Хабр! К сегодняшнему дню написано уже немало учебников и статей по полиморфизму в целом и его воплощения в C++ в частности. Однако, к моему удивлению, при описании полиморфизма никто (или почти никто) не затрагивает тот факт, что помимо динамического полиморфизма в C++ имеется и достаточно мощная возможность использования его младшего брата – полиморфизма статического. Более того, он является одной из основных концепций STL – неотъемлемой части его стандартной библиотеке.

Поэтому в данной статье мне хотелось бы хотя бы в общих чертах рассказать о нём и его отличиях от всем известного динамического полиморфизма. Надеюсь, эта статья будет интересна для тех, кто только начал изучать принципы ООП, и они смогут посмотреть на его “третьего слона” с новой стороны.

Читать далее

С++ вам не нянька! Делайте, что хотите, но виноваты будете сами

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

Поговорили о перспективах С++, его особенностях и востребованности на рынке с Андреем Никитиным, ведущим инженером-разработчиком направления системного программирования Нижегородского подразделения компании «Криптонит».

С++ уже более сорока лет. В чём причина его популярности?

В плане семантики — это универсальный язык, но чаще С++ используется как объектно-ориентированный — с наследованием, интерфейсами и так далее. С++ позволяет строить что угодно — универсальные абстракции, иерархии любой сложности, логические слои, стеки протоколов... Обычно среди сильных сторон упоминают кроссплатформенность, но её нет «по умолчанию». Это не Java, программы на которой транслируются в байт-код и запускаются в виртуальной машине. В C++ нужно сразу писать код под все планируемые архитектуры и операционные системы, учитывать зависимые библиотеки. Всё это требует значительных усилий. Кроссплатформенность в С++ не данность, а отдельное требование, которое нужно учитывать на этапе разработки.

Почему С++ используют в «Криптоните» сейчас, когда есть более современные языки?

У нас в компании есть разные проекты. Некоторые из них начинались много лет назад, когда ещё не были популярны Rust, Golang и другие новомодные языки. При этом нам были важны требования производительности и «близости к железу». С++ был у всех на слуху. Он как раз обеспечивал сочетание высокоуровневого языка и возможность использования низкоуровневых функций. Сейчас мы продолжаем его использовать, потому что нет смысла портировать эти многолетние проекты на другие языки. Всё уже выверено и оптимизировано.

Читать далее

Дневник альтруиста. dfu-util

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров3K

В данной статье я рассмотрю подключение утилиты dfu‑util, написанную на языке С, к С++ проекту на CMake в виде сабмодуля.

Одна из главных целей статьи — это подключение старого и типового кода на С к своему проекту. Здесь приведены проблемы генерируемых файлов, борьба с кодом незнакомого разработчика (особенно если это разработчик на Си), особенности портирования окружения на Windows и т. д.

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

* Превью сгенерировано с помощью Adobe Firefly

Читать дальше ->

Каким может быть алгоритмическое собеседование и как к нему подготовиться

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

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

Мы попросили Самсонова Ивана рассказать о его критериях оценки кандидатов, а также поделиться советами по подготовке. На видео Иван выступал в роли тимлида, а в обычной жизни он разработчик со степенью в Computer Science и наставник курса «Алгоритмы и структуры данных».

Смотреть и читать

Пишем свой вариантный тип

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров6K

C++ 17 привнес в язык достаточно много нововведений, в том числе шаблон std::variant (хоть в Boost он есть уже довольно давно). Фактически, последним вышедшим и полноценно реализованным стандартом C++ на тот момент, как я начал изучать данный язык, являлся как раз C++17, поэтому нововведениям данного стандарта в свое время я уделил наибольшее внимание.
В какой-то момент мне стало интересно, как именно устроен std::variant, в связи с чем я немного погуглил про его принципиальное устройство и, вооружившись variadic templates, сел писать свою реализацию. Данный шаблон устроен достаточно интересно, поэтому людям, вообще не знакомым с его устройством, данная статья будет полезна. Если данную статью прочитают более опытные разработчики, я буду рад их комментариям по поводу моей реализации.
Упомяну несколько моментов перед началом статьи:

Читать далее

Компиляция на этапе выполнения в C++: constexpr, consteval и constinit

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров12K

Сегодня мы поговорим о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме.

constexpr делает возможным вычисление значений переменных во время компиляции. Функции и переменные, объявленные с этим ключевым словом, могут быть вычислены на этапе компиляции consteval усиливает концепцию constexpr, требуя обязательного вычисления выражений во время компиляции. constinit используется для инициализации статических и глобальных переменных.

А теперь подробней.

Читать далее

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

Решил я тут текстовую MMORPG на C++ написать

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров11K

Cразу уточню, это не гайд по созданию MMORPG на C++. Это нечто вроде моего дневника, куда я буду скидывать процесс разработки (Да, проект ещё не завершён, даже не близко, скорее только начат...). Почему я вообще тогда создал эту статью? Ну, коли ты крутой true‑программист, буду рад советам, критике, помощи, ругани, проще говоря всему, что может помочь мне улучшить это. С другой стороны, если ты сам захотел создать нечто похожее, то, быть может, сможешь избежать всех трудностей, с которыми столкнулся я.

Читать далее

Обновление #Net chromium

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.4K

Добрый день. Меня зовут Тимур и я программист.

В прошлой своей статье я рассказал (довольно сумбурно) про свою сборку хромиума которая претендует на то что бы быть важным кирпичиком в web3.0. Продолжаю серию сумбурных статей, я обновил ветку до 122.0.6248.1 билда и выложил уже собранный бинарник (пока только под macOS, винда на подходе)

Скачать бинарь можно по адресу http://172.86.96.172/downloads/hash-net.dmg

Это все еще обычный хромиум, с ним можно спокойно серфить как по обычному интернету так и по #Net. Но для начала нам его нужно немного поднастроить.

Читать далее

Настройка C++ проекта c OpenMP. Обертывание С++ для Python с помощью pybind11 и CMake

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров5.1K

В статье описан практический пример настройки проекта на языке C++ с использованием, в качестве примера, библиотеки для многопоточных вычислений OpenMP , а также дальнейшее обёртывание для использования в проектах написанных на Python при помощи библиотеки Pybind11. В качестве системы сборки используется CMake. Основное внимание уделено именно сборке проекта. В качестве инструмента обёртывания используется библиотека pybind11, в качестве системы сборки CMake.

Читать далее

Игры для ESPspectrum

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.5K

Создание игр для ESPspectrum. Пошаговая инструкция.

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

Читать далее

ESPspectrum V1.1 + версия для проектов

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.7K

ESPspectrum третья статья. Версия 1.1. Доработка первого экземпляра. Создание ESPspectrum for projects. Схемы и описание.

Читать далее

Создание своего терминала на C++ и Qt: Часть 1

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров15K

Привет, хабр! Сегодня мы создадим свой собственный терминал на языке программирования C++. Я являюсь фанатом Linux, и пользуюсь минималистичными терминальными программами - от Vim как IDE до чатов. Есть множество терминалов, у каждого из них есть плюсы и минусы. Наш терминал не будет претендовать на место серьезного проекта, но если вы хотите улучшить код, который мы сегодня напишем - то вы молодцы, можете без проблем развить наш терминал.

Это будет небольшой, минималистичный терминал для Linux. Он будет на основе фреймворка Qt 5 и библиотеки qtermwidget5.

И эта будет не одна статья, а целая серия статей!

Вперед!

[sobjectizer] Релиз версии 5.8.1: реализация пожеланий пользователей и исправление недочетов

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров947

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

Для тех же, кто ни разу не слышал про SObjectizer, очень кратко: это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP). Основная идея, лежащая в основе SObjectizer, — это построение приложения из мелких сущностей-агентов, которые взаимодействуют между собой через обмен сообщениями. SObjectizer при этом берет на себя ответственность за:

доставку сообщений агентам-получателям внутри одного процесса;

управление рабочими нитями, на которых агенты обрабатывают адресованные им сообщения;

механизм таймеров (в виде отложенных и периодических сообщений);

возможности настройки параметров работы перечисленных выше механизмов.

Составить впечатление о этом инструменте можно ознакомившись вот с этой обзорной статьей.

Читать далее

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