Пишем свой собственный текстовый редактор
Это инструкция, которая покажет вам, как создать текстовый редактор на языке C.
Текстовый редактор представляет собой kilo от antirez, с некоторыми изменениями. Это около 1000 строк языка C в одном файле без зависимостей, и в нем реализованы все основные функции, которые вы ожидаете от минимального редактора, а также подсветка синтаксиса и функция поиска.
В этой инструкции вы пройдете путь создания редактора в 184 шага. На каждом шаге вы будете добавлять, изменять или удалять несколько строк кода. На большинстве шагов вы сможете наблюдать за внесенными изменениями, скомпилировав и запустив программу сразу после этого.
https://viewsourcecode.org/snaptoken/kilo/index.html
#cpp #programming
👉 @cpp_lib
Это инструкция, которая покажет вам, как создать текстовый редактор на языке C.
Текстовый редактор представляет собой kilo от antirez, с некоторыми изменениями. Это около 1000 строк языка C в одном файле без зависимостей, и в нем реализованы все основные функции, которые вы ожидаете от минимального редактора, а также подсветка синтаксиса и функция поиска.
В этой инструкции вы пройдете путь создания редактора в 184 шага. На каждом шаге вы будете добавлять, изменять или удалять несколько строк кода. На большинстве шагов вы сможете наблюдать за внесенными изменениями, скомпилировав и запустив программу сразу после этого.
https://viewsourcecode.org/snaptoken/kilo/index.html
#cpp #programming
👉 @cpp_lib
❤🔥6👍3⚡1
Что нам недодали в C++
Уже более десяти лет я профессионально занимаюсь C++ разработкой. Я вошел в профессию 2013 году, в самый момент, когда комитет по стандартизации языка C++ раскочегарился и встал на рельсы трехлетних релизов обновленных стандартов языка. Уже был выпущен C++11, в котором была введена куча самых заманчивых новшеств, существенно освеживших язык. Однако, далеко не каждому была доступна роскошь использовать все эти нововведения в рабочем коде, и приходилось сидеть на унылом C++03, облизываясь на новый стандарт.
Вместе с тем, несмотря на все разнообразие новых фич, внедряющихся в язык, я от проекта к проекту наблюдал и поныне наблюдаю одну и ту же повторяющуюся картину: helper-файлы, helper-контейнеры, в которых зачастую реализуются одни и те же вещи, восполняющие то, чего нет в STL. Я не говорю о каких-то узкоспециализированных специфических структурах и алгоритмах — скорее о вещах, без которых не получается комфортно разрабатывать программный продукт на C++. И я вижу, как разные компании на различных проектах сооружают одни и те же самопальные решения, просто потому что они естественны, и на них есть спрос. А предложение отсутствует, по крайней мере в STL.
В статье я хотел собрать самые яркие примеры того, что видел и использовал в разработке. Но в процессе сбора всех отсутствующих из коробки в C++ фич, внезапно для себя обнаружил, что часть из них уже покрыта новыми стандартами языка, полностью или частично. Поэтому данная статья — скорее некая рефлексия и книга жалоб о том, чего не было очень долго, но оно в итоге пришло в язык; и о том, что все еще отсутствует в стандарте. Статья не претендует ни на что, скорее просто поболтать о повседневном C++.
https://habr.com/ru/articles/786582/
#cpp #programming
👉 @cpp_lib
Уже более десяти лет я профессионально занимаюсь C++ разработкой. Я вошел в профессию 2013 году, в самый момент, когда комитет по стандартизации языка C++ раскочегарился и встал на рельсы трехлетних релизов обновленных стандартов языка. Уже был выпущен C++11, в котором была введена куча самых заманчивых новшеств, существенно освеживших язык. Однако, далеко не каждому была доступна роскошь использовать все эти нововведения в рабочем коде, и приходилось сидеть на унылом C++03, облизываясь на новый стандарт.
Вместе с тем, несмотря на все разнообразие новых фич, внедряющихся в язык, я от проекта к проекту наблюдал и поныне наблюдаю одну и ту же повторяющуюся картину: helper-файлы, helper-контейнеры, в которых зачастую реализуются одни и те же вещи, восполняющие то, чего нет в STL. Я не говорю о каких-то узкоспециализированных специфических структурах и алгоритмах — скорее о вещах, без которых не получается комфортно разрабатывать программный продукт на C++. И я вижу, как разные компании на различных проектах сооружают одни и те же самопальные решения, просто потому что они естественны, и на них есть спрос. А предложение отсутствует, по крайней мере в STL.
В статье я хотел собрать самые яркие примеры того, что видел и использовал в разработке. Но в процессе сбора всех отсутствующих из коробки в C++ фич, внезапно для себя обнаружил, что часть из них уже покрыта новыми стандартами языка, полностью или частично. Поэтому данная статья — скорее некая рефлексия и книга жалоб о том, чего не было очень долго, но оно в итоге пришло в язык; и о том, что все еще отсутствует в стандарте. Статья не претендует ни на что, скорее просто поболтать о повседневном C++.
https://habr.com/ru/articles/786582/
#cpp #programming
👉 @cpp_lib
👍6❤2⚡1😁1💋1
Как добавить non-copyable и non-movable объект в std::map или std::unordered_map
https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916
#cpp #programming
👉 @cpp_lib
struct weird
{
int value;
std::mutex mtx;
};
std::map<int, weird> table;
table.insert({ 1, {} }); // nope
table.insert_or_assign(1, weird{}); // nope
table.emplace({ 1, {} }); // nope
table.emplace(1, weird{}); // nope
table.try_emplace(1, weird{}); // nope
https://devblogs.microsoft.com/oldnewthing/20231023-00/?p=108916
#cpp #programming
👉 @cpp_lib
Microsoft News
How do I add a non-copyable, non-movable object to a std::map or std::unordered_map?
Fancy emplacement.
👍5⚡1
Верле: разрешаем коллизии
Часть 1
Всех приветствую! Сегодня мы попробуем написать некое подобие простейшего физического движка.
https://habr.com/ru/articles/775228/
Часть 2
В прошлой части мы искали коллизии самым примитивным образом - перебирали все пары объектов и сравнивали сумму их радиусов с расстоянием между их центрами. При таком подходе максимальное число объектов, которое наш движок мог выдержать, составляло несколько сотен.
Возникает закономерный вопрос: зачем проверять на пересечение окружности, которые находятся далеко друг от друга?
Действительно, теперь мы будем поступать чуть хитрее.
https://habr.com/ru/articles/778482/
#cpp #programming
👉 @cpp_lib
Часть 1
Всех приветствую! Сегодня мы попробуем написать некое подобие простейшего физического движка.
https://habr.com/ru/articles/775228/
Часть 2
В прошлой части мы искали коллизии самым примитивным образом - перебирали все пары объектов и сравнивали сумму их радиусов с расстоянием между их центрами. При таком подходе максимальное число объектов, которое наш движок мог выдержать, составляло несколько сотен.
Возникает закономерный вопрос: зачем проверять на пересечение окружности, которые находятся далеко друг от друга?
Действительно, теперь мы будем поступать чуть хитрее.
https://habr.com/ru/articles/778482/
#cpp #programming
👉 @cpp_lib
⚡2👍2
Следует ли проверять указатель на NULL перед вызовом функции free?
Короткий ответ: нет. Тем не менее, раз про это вновь и вновь спрашивают на Reddit, Stack Overflow и других сайтах, пришло время подробно разобрать эту тему. Оказывается, есть много интересного, о чём можно порассуждать.
https://habr.com/ru/companies/pvs-studio/articles/791798/
#cpp #programming
👉 @cpp_lib
Короткий ответ: нет. Тем не менее, раз про это вновь и вновь спрашивают на Reddit, Stack Overflow и других сайтах, пришло время подробно разобрать эту тему. Оказывается, есть много интересного, о чём можно порассуждать.
https://habr.com/ru/companies/pvs-studio/articles/791798/
#cpp #programming
👉 @cpp_lib
👍5⚡2😁1
Шпаргалка по C++
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp #programming
👉 @cpp_lib
⚡13👌5🤔1🐳1
Проектно-ориентированное обучение
Список уроков по программированию, в которых начинающие разработчики программного обеспечения учатся создавать приложения с нуля. Эти уроки разделены по различным основным языкам программирования. Уроки могут включать в себя несколько технологий и языков.
https://github.com/practical-tutorials/project-based-learning?tab=readme-ov-file#cc
#cpp #programming
👉 @cpp_lib
Список уроков по программированию, в которых начинающие разработчики программного обеспечения учатся создавать приложения с нуля. Эти уроки разделены по различным основным языкам программирования. Уроки могут включать в себя несколько технологий и языков.
https://github.com/practical-tutorials/project-based-learning?tab=readme-ov-file#cc
#cpp #programming
👉 @cpp_lib
GitHub
GitHub - practical-tutorials/project-based-learning: Curated list of project-based tutorials
Curated list of project-based tutorials. Contribute to practical-tutorials/project-based-learning development by creating an account on GitHub.
👍6❤1
Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows
Так повелось в мире, что время от времени необходимо проводить исследования безопасности драйверов и прошивок. Одним из способов исследования является — фаззинг (Fuzzing). Не будем останавливаться на описании самого процесса фаззинга, для этого есть эта статья, отметим только, что в основном его используют для исследования прикладных приложений. И тут возникает вопрос: как профаззить прошивку, в частности прошивку UEFI? Здесь будет рассказано об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов. И что важно, все это сделаем в Windows.
Сразу, что такое EDKII? — это среда разработки и эмулятор ПО согласно спецификации UEFI. Про разработку в EDKII есть ряд статей (вот и вот), а наша задача связать эмулятор EDKII и фаззер.
А реализовывать инструментацию будем под фаззер WinAFL.
https://habr.com/ru/articles/773548/
#cpp #programming
👉 @cpp_lib
Так повелось в мире, что время от времени необходимо проводить исследования безопасности драйверов и прошивок. Одним из способов исследования является — фаззинг (Fuzzing). Не будем останавливаться на описании самого процесса фаззинга, для этого есть эта статья, отметим только, что в основном его используют для исследования прикладных приложений. И тут возникает вопрос: как профаззить прошивку, в частности прошивку UEFI? Здесь будет рассказано об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов. И что важно, все это сделаем в Windows.
Сразу, что такое EDKII? — это среда разработки и эмулятор ПО согласно спецификации UEFI. Про разработку в EDKII есть ряд статей (вот и вот), а наша задача связать эмулятор EDKII и фаззер.
А реализовывать инструментацию будем под фаззер WinAFL.
https://habr.com/ru/articles/773548/
#cpp #programming
👉 @cpp_lib
Хабр
Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows
Так повелось в мире, что время от времени необходимо проводить исследования безопасности драйверов и прошивок. Одним из способов исследования является — фаззинг ( Fuzzing )....
👍2🗿2⚡1
CLI'нический парсинг
Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки. Кого-то этот удар сломит и заставит написать несколько сотен строк кода, по которому потом будут восстанавливать интерфейс программы следующие поколения, другие сделают наборы рантайм мап и начнут оперировать строками, по которым будет уже непонятно, то ли это так и должно быть, то ли опечатка... Последние в порыве отчаяния возьмут целый boost для этой задачи, а тот сведётся всё к тем же рантайм мапам и строкам
https://habr.com/ru/articles/781496/
#cpp #programming
👉 @cpp_lib
Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки. Кого-то этот удар сломит и заставит написать несколько сотен строк кода, по которому потом будут восстанавливать интерфейс программы следующие поколения, другие сделают наборы рантайм мап и начнут оперировать строками, по которым будет уже непонятно, то ли это так и должно быть, то ли опечатка... Последние в порыве отчаяния возьмут целый boost для этой задачи, а тот сведётся всё к тем же рантайм мапам и строкам
https://habr.com/ru/articles/781496/
#cpp #programming
👉 @cpp_lib
👍3⚡1
Эффективное использование С++
Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++
источник
#cpp #programming
👉 @cpp_lib
Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++
источник
#cpp #programming
👉 @cpp_lib
🔥13👍3⚡2