🚀В этой статье рассматривается минималистичная реализация виртуальной машины (VM) на C, занимающая менее 125 строк кода! 🖥️
Основная идея — эмуляция простого процессора с регистровой архитектурой. Виртуальная машина поддерживает базовые операции, такие как загрузка значений в регистры, сложение, умножение и выполнение условных переходов.
🔹 Основные компоненты:
- Регистры (массив для хранения значений)
- Память (байтовый массив, хранящий инструкции и данные)
- Исполнительный цикл (разбор и выполнение инструкций)
🔹 Пример кода:
Основная идея заключается в том, чтобы хранить наши инструкции в массиве (uint16_t program[]
), а затем использовать функцию fwrite()
для создания бинарного файла, который мы в дальнейшем сможем загрузить с помощью ld_img()
.
#include <stdio.h>
#include <stdlib.h>
uint16_t program[] = {
/*mem[0x3000]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3002]=*/ 0x1220, // 0001 0010 0010 0000 ADD R1,R0,x0 ;add contents of R0 to R1
/*mem[0x3003]=*/ 0xF026, // 1111 0000 0010 0110 TRAP trp_in_u16 ;read an uint16_t from stdin and put it in R0
/*mem[0x3004]=*/ 0x1240, // 0001 0010 0010 0000 ADD R1,R1,R0 ;add contents of R0 to R1
/*mem[0x3006]=*/ 0x1060, // 0001 0000 0110 0000 ADD R0,R1,x0 ;add contents of R1 to R0
/*mem[0x3007]=*/ 0xF027, // 1111 0000 0010 0111 TRAP trp_out_u16;show the contents of R0 to stdout
/*mem[0x3006]=*/ 0xF025, // 1111 0000 0010 0101 HALT ;halt
};
int main(int argc, char** argv) {
char *outf = "sum.obj";
FILE *f = fopen(outf, "wb");
if (NULL==f) {
fprintf(stderr, "Cannot write to file %s\n", outf);
}
size_t writ = fwrite(program, sizeof(uint16_t), sizeof(program), f);
fprintf(stdout, "Written size_t=%lu to file %s\n", writ, outf);
fclose(f);
return 0;
}
Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода
https://github.com/ssloy/tinyrenderer/wiki
#cpp #programming
👉 @cpp_lib
Практика языка C, 2023-2024
Семинар 1.1. Алгоритм Евклида.
Семинар 1.2. Системы счисления.
Семинар 1.3. Числа Фибоначчи.
Допсеминар: unix shell
Семинар 2.1. Простые числа.
Семинар 2.2. Побитовые вычисления.
Семинар 2.3. Время и случайность.
Углубление пройденного: логическая память и виртуальная память.
Семинар 3.1. Линейный поиск и простые сортировки.
Семинар 3.2. Стратегия "разделяй и властвуй".
источник
#cpp #programming
👉 @cpp_lib
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 05 — GDI рендер
В данной статье опишу реализацию GDI рендера для Windows. Узнаем как программировали деды под windows в середине 1990-ых. И наконец создадим функциональный рендер, с возможностью рисовать все типы изображений.
Часть 1
Часть 2
Часть 3
Часть 4
https://habr.com/ru/articles/877542/
#cpp #programming
👉 @cpp_lib
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 04 — Компиляторная археология
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 04 — Компиляторная археология
В данной статье затронем частичку компиляторной истории. И постараемся собрать проект под компилятор 1995 года. Вы спросите, но зачем? Я отвечу: Потому, что можем!
Часть 1
Часть 2
Часть 3
https://habr.com/ru/articles/876272/
#cpp #programming
👉 @cpp_lib
❓Хотите освоить алгоритмы, которые лежат в основе многих IT-решений? Время познакомиться с магией оптимизации!
На открытом уроке «Поиск кратчайшего пути во взвешенном графе» мы разберём алгоритм Дейкстры: от теории до практической реализации. Узнайте, как находить решения быстрее, надёжнее и эффективнее.
Алгоритмы — это как GPS для программирования. После урока вы сможете уверенно строить маршруты в графах, прокачаете свои навыки и сделаете шаг к профессиональному уровню.
⏰ Встречаемся 3 февраля в 20:00 мск, участники получат скидку на большое обучение «Алгоритмы и структуры данных».
👉 Регистрация открыта: https://vk.cc/cI0Gv4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26
Сергей Талантов
В современных стандартах С++ стало меньше UB. Разбираем на конкретных кейсах.
— Начиная с С++20 отрицательные целые числа обязательно должны быть представлены в дополнительном коде. Это сокращает количество UB в битовых операциях и не только.
— Введение std::ssize, возвращающего знаковый размер контейнеров, уменьшает количество ошибок и UB в циклах.
— Расширение времени жизни временных объектов в циклах for, появившееся в С++23, решает неочевидные проблемы.
— Казалось бы, мелочь, но инициализация std::string нулевым указателем раньше была UB, a теперь запрещена.
— В С++23 появился эксклюзивный режим открытия файла (O_EXCL), что решает проблему гонок (time-of-check to time-of-use).
— Будет ли введена арифметика с насыщением в С++26?
Некоторые конструкции языка признаются небезопасными и устаревшими, также проходимся по ним:
— Осталось ли что-то от volatile?
— Можно ли теперь делать неявный захват this по значению в лямбдах?
— Какие операции с enum теперь не в почете.
источник
#cpp #programming
👉 @cpp_lib
Tensor.h – Лёгкая и удобная библиотека для работы с тензорами на C
Если вам нужна простая и эффективная библиотека для работы с тензорами в C, обратите внимание на tensor.h. Этот проект предлагает лёгкую в использовании реализацию тензоров с минимальным оверхедом.
🔹 Основные возможности:
✅ Поддержка многомерных тензоров
✅ Простая и понятная API
✅ Поддержка операций над тензорами (сложение, умножение и т. д.)
✅ Небольшой размер кода
https://github.com/apoorvnandan/tensor.h
#cpp #programming
👉 @cpp_lib
С++ — это настоящий кайфǃ
Я хочу, чтобы вы задали себе один вопрос и честно на него ответили. Когда в последний раз вы получали настоящее удовольствие от программирования? Оглядываясь назад, я понимаю, что не испытывал подобных ощущений, наверное… уже лет десять. Удовольствия у меня не было ни от JavaScript, ни от Python, ни от Ruby или C — ни от чего. Когда я говорю «удовольствие» — я имею в виду ощущения человека, которого во время работы над неким проектом переполняет искренний восторг. Этот человек постоянно ловит себя на такой мысли: «Ох, ну какая ж круть. Поверить не могу, что моя безумная идея и правда сработала!».
https://habr.com/ru/companies/wunderfund/articles/874216/
#cpp #programming
👉 @cpp_lib
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 03 — Начинаем разрабатывать фреймворк
В данной статье я покажу как выводить примитивы с помощью библиотеки xlib, поговорим о системных вызовах Linux и заложим базу для кроссплатформенного фреймворка.
Наш мини фреймворк будет называться LDL - Little DirectMedia Layer. Как вы поняли это отсылка к библиотеке SDL.
Часть 1
Часть 2
https://habr.com/ru/articles/874186/
#cpp #programming
👉 @cpp_lib
Тонкости в распараллеливании с OpenMP программы, написанной одновременно на C++ и Fortran
В данной заметке я расскажу о своем опыте распараллеливания программы с использованием OpenMP, написанной одновременно и на С++, и на Fortran 90, причем вызов фортрановской части кода осуществляется параллельно в цикле из C++ части. Остановлюсь в основном на тех деталях и тонкостях, которые мне показались настоящими сюрпризами.
Суть программы достаточно проста: есть некая цилиндрическая структура, которая модельно разбивается на аксиальные ячейки, каждая аксиальная ячейка с использованием методов математического моделирования обсчитывается независимо. Основная часть кода написана на C++, но вот то, что нужно рассчитать для каждой аксиальной ячейки, написано на Fortran 90, и надо сказать, что эта фортрановская часть достаточно внушительная. Код испокон веков обсчитывал последовательно каждую аксиальную ячейку, и в виду того, что фортрановская часть делает объемные вычисления, код считал долго. И тут была поставлена задача – распараллелить код, т.е. считать каждую аксиальную ячейку параллельно, дабы ускорить время расчета всей программы. Была принята следующая идея: выделение памяти под массивы и т.п., необходимые для фортрановских расчетов, оставить как и прежде, т.е. там же в фортране, удобно перегруппировав их в массив объектов структуры, описывающей аксиальную ячейку, и плюсом расширив данные, а вот вызов главной функции, делающей вычисления в фортрановской части, делать в цикле по аксиальным ячейкам параллельно в C++ части, т.е. примерно так
# pragma omp parallel for
for (iaxialmesh = 0; iaxialmesh<Nmeshes; iaxialmesh++) {
CallFortranCodeForAxMesh(iaxialmesh);
}
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
🔥 Хотите стать экспертом в C++ и претендовать на высокооплачиваемые вакансии в топовых IT-компаниях?
Всего за 5 месяцев на курсе «C++ Developer. Professional» вы освоите:
✔️ правильное написание кода на C++ и возможности новых стандартов вплоть до C++23;
✔️паттерны проектирования и принципы написания многопоточного кода;
✔️- взаимодействие с сетью, хранение и обработку больших объемов данных;
✔️ особенности применения новых стандартов C++20 и C++23.
И многое другое!
Программа создана для разработчиков на C++ Junior или Middle, а также для разработчиков на Java/Python.
➡️ Пройдите тест и получите скидку на обучение и доступ к подарочным урокам прямо сейчас: https://vk.cc/cHnNGfРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Инструменты и библиотеки для создания собственного игрового движка на C++
Вы хотите узнать больше об игровых движках и написать их самостоятельно? Это здорово! Чтобы помочь вам на этом пути, вот некоторые рекомендации по библиотекам и зависимостям C++, которые помогут вам начать работу.
https://pikuma.com/blog/how-to-make-your-own-cpp-game-engine
#cpp #programming
👉 @cpp_lib
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин
/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель
🦉 OTUS ищет преподавателей на онлайн-курсы:
С++ Developer Basic
С++ Developer Professional
Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно!
Требуется:
- Знание С++17, STL, ООП, Git, опыт коммерческой разработки на C++ от 3 лет, понимание RAII, SOLID, SFINAE. Опыт многопоточного и асинхронного программирования.
Обязанности:
- подготовиться к занятиям (темы на выбор, материалы предоставляются)
- преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи.
Условия:
✅ гибкий график, легко совмещать с основной работой, занятия в вечернее время;
✅ оплата от 4000 до 6000 руб. за 1,5 часа занятия;
✅ бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей.
Обсудить подробнее: @candyfox24
Поговорим об observability на Яндекс Infra Meetup #4
Приглашаем на митап про наблюдаемость приложений от Яндекс Go и Техплатформы Екома и Райдтеха Яндекса. В программе два трека, выбрать можно любой:
CaseLab: observability. Интерактивный формат решения практических задач совместно с модераторами.
CaseStudy. 3 доклада от спикеров сервисов:
— Толя Беляев расскажет про варианты сбора метрик приложения микросервисной архитектуры
— Леша Королев объяснит, как построить дашборд всей платформы Такси
— Леша Золотухин покажет, как создать диагностические дашборды в инфраструктуре на 2000+ микросервисов
После CaseLab и докладов — нетворкинг в неформальной атмосфере и афтепати.
13 февраля, 18:30
Москва, офлайн
Успейте зарегистрироваться и зовите коллег!
Обратите внимание, количество мест ограничено. После регистрации обязательно дождитесь подтверждения заявки.
Perforator узнает, где тормозит ваш код
На GitHub выложили код системы непрерывного профилирования, которую Яндекс использует для анализа производительности большинства своих сервисов.
Perforator поддерживает:
🔹 Нативные языки: C++, C, Go, Rust
🔹Экспериментально: Python и Java
Его можно развёртывать на:
🔹 Kubernetes
🔹 Локально
Perforator обеспечивает высокую точность профилей с минимальным оверхедом, рисует быстрые флеймграфы и умеет оптимизировать программы на основе прошлых версий.
Уже сейчас Perforator можно скачать и протестировать самостоятельно. Исходный код доступен под лицензией MIT (и GPL для eBPF-программ) и запускается под x86-64 Linux. Визуализацию работы сервиса нашел здесь.
статья
#cpp #programming
👉 @cpp_lib
Автоматическая Генерация Конфигураций для Make Сборок
При разработке программного обеспечения (особенно для микроконтроллеров) рано или поздно придется столкнуться с тем, что надо как-то передавать конфигурации для данного программного проекта.
В своем опыте я пришел к выводу, что с точки зрения масштабирования кодовой базы, конфиги проще всего передавать через переменные окружения. Да.. Плюс в том, что переменные окружения можно определять прописывая прямо в скриптах (Make, CMake и т.п.).
Выглядит это так. У каждой сборки есть файл config.mk в котором перечислены программные компоненты из которых должна собираться эта конкретная сборка. Содержимое этого файла обычно выглядит так.
https://habr.com/ru/articles/798213/
#cpp #programming
👉 @cpp_lib
C++: Эмулятор NES с нуля
#1: Bitwise Basics & Overview
#2: The CPU (6502 Implementation)
#3: Buses, RAMs, ROMs & Mappers
#4: PPU - Background Rendering
#5: PPU - Foreground Rendering
#6: APU - Sounds, Beeps & Bloops
#7: More About Mappers
источник
#cpp #programming
👉 @cpp_lib
🦾Хардкорный тест по языку С++🦾
📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «C++ Developer. Professional» от OTUS.
Сможете сдать - пройдете на курс по спеццене!
⏰ Время прохождения теста ограничено 30 минут
👉ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Сборка C++ проектов. CMAKE. Статические, динамические библиотеки. Github actions. GE серии
0:00:00 - Введение
0:01:20 - Статические библиотеки в CMAKE
0:09:22 - Динамические библиотеки в CMAKE
0:17:22 - Создаем таргет тестирования
0:27:24 - Пользовательский интерфейс CMAKE, опции
0:31:08 - Github actions
источник
#cpp #programming
👉 @cpp_lib
👩💻 Ваш код на C++ мог бы быть быстрее. Намного быстрее.
Почему ваши приложения работают медленнее, чем хотелось бы? Программа не использует потенциал процессора, а кэш и память работают в авральном режиме?
🗓 На открытом уроке «Оптимизация производительности на C++» 30 января в 20:00 мск мы разберем инструменты gprof, valgrind, Google Benchmark, секреты работы с кэш-памятью, управление памятью и даже оптимизации компилятора.
🦾 Присоединяйтесь к вебинару и сделайте свои приложения молниеносными!
Участники урока получат скидку на большое обучение «C++ Developer. Professional».
➡️ Узнать больше и зарегистрироваться: https://vk.cc/cHzmKXРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Офер в Яндекс для опытных бэкендеров за два дня
15–16 февраля приглашаем бэкендеров с опытом работы от пяти лет получить офер в Яндекс через multitrack за 2 дня. Достаточно пройти несколько технических секции 15 февраля, чтобы уже 16-го получить офер и выбрать три команды, к которым вам было бы интересно присоединиться.
Как правило, за несколько собеседований сложно понять, подходит ли вам команда и наоборот. Multitrack позволит вам поработать в трёх разных командах Яндекса и выбрать подходящую. Вы сможете погрузиться в рабочие процессы, познакомиться с будущими коллегами и понять, с какими задачами и технологиями хотите работать.
Узнать подробности и зарегистрироваться.
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 02 — Рисуем в Windows
В прошлой статье получилось создать минимальную программу "Hello world!" размером 3,5 кб. Теперь будем рисовать нативными средствами Windows. Создадим окно, нарисуем пару примитивов.
https://habr.com/ru/articles/873318/
#cpp #programming
👉 @cpp_lib
Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 01 — Маленькая программа
Решил сделать цикл статей по написанию на С++, различных небольших программ. Под новые и старые ОС. Мне кажется мы стали забывать как раньше программировали:) Для себя определил несколько важных критериев.
🔹Код должен быть простым и понятным.
🔹Код должен быть переносим, как минимум Windows и Linux, поддерживать 32-ух битные и 64-ех битные процессоры.
🔹Не полагаться на стандартную библиотеку на всех платформах. Пишем свой минимальный вариант.
🔹Быть совместимым с С++/C библиотеками, так как будем их использовать в будущем.
🔹Программы и библиотеки которые я буду разрабатывать должны, делать что то осмысленное.
🔹Минимум ассемблера, все в рамках С++.
https://habr.com/ru/articles/872834/
#cpp #programming
👉 @cpp_lib
Путеводитель C++ программиста по неопределенному поведению
Все начинается просто и незатейливо: обычный десятиклассник увлекается программированием, знакомится с алгоритмическими задачками, решения которых должны быть быстрыми. Узнает о языке C++, учит минимальный синтаксис, основные конструкции, контейнеры, решает задачи с предопределенным и всегда корректным форматом ввода и вывода, и горя не знает...
В это же время, где-то в большом мире, матерые разработчики каждый день ругают то одни языки программирования, то другие. По самым разным причинам: не удобно, нет какой-то возможности, много лишних букв писать, ошибки в стандартной библиотеке... Но есть язык, который ругают за все и особенно за такую непонятную и таинственную вещь как неопределенное поведение (undefined behavior, UB).
Спустя лет пять или шесть наш простой десятиклассник, горя не видавший в море оторванных от реальности программ, внезапно узнает, что тем самым горячо нелюбимым языком всегда был, остается и будет его C++.
А потом еще в течение нескольких лет он наткнется на самые кошмарные и невероятные ужасы, поджидающие программистов на C++ почти на каждом шагу. Так и появится эта серия заметок, собирающая наиболее отвратительные примеры, на которые очень легко наткнуться при решении повседневных задач.
Важно: этот сборник не является учебным пособием по языку и рассчитан на тех, кто уже знаком с программированием, с C++, и понимает основные его конструкции.
https://github.com/Nekrolm/ubbook
#cpp #programming
👉 @cpp_lib
Оптимизация с помощью аллокаторов в C++17
Благодаря полиморфным аллокаторам в C++17 можно оптимизировать распределение памяти. Эта оптимизация включает в себя производительность и повторное использование памяти.
https://www.modernescpp.com/index.php/optimization-with-allocators-in-c17/
#cpp #programming
👉 @cpp_lib
Курс по C++ и SFML
Простые программы на C++
В статье мы напишем пару простейших программ на C++ и посмотрим, как происходит их компиляция.
https://ps-group.github.io/ps1/lesson_cpp_1
Знакомство с SFML. Компьютерная графика.
SFML (Simple Fast Multimedia Library) — это C++ библиотека для мультимедиа. В статье мы воспользуемся SFML для рисования фигур в окне.
https://ps-group.github.io/ps1/lesson_sfml_1
Основной цикл программы. Анимация.
В статье мы освоим паттерн Game Loop, а также научимся обрабатывать события мыши и клавиатуры.
https://ps-group.github.io/ps1/lesson_sfml_2
Обработка событий. Интерактив.
В статье вы освоите обработку событий мыши и клавиатуры в мультимедийных программах и научитесь писать функции на языке С++
https://ps-group.github.io/ps1/lesson_sfml_3
Соглашения о кодировании на C++
Соглашения о кодировании для курса по C++/SFML
https://ps-group.github.io/ps1/cxx_coding_style
Комплексные задачи. Котик следует за мышкой
В этой практике вы начнёте по шагам решать комплексные задачи, двигаясь от математической модели и псевдокода к готовой программе
https://ps-group.github.io/ps1/sfml_workshop_1
Массовые столкновения
На этом занятии вы научитесь программировать игры уровня Бильярда или Arkanoid
https://ps-group.github.io/ps1/sfml_workshop_2
Ещё одна практика на SFML
На этом занятии вы освоите более гибкие приёмы работы с SFML: виртуальную камеру, рисование произвольных фигур, проверку столкновения
https://ps-group.github.io/ps1/sfml_workshop_3
Основной проект курса: 2D игра
Цель проекта - самостоятельно написать комплексную программу, клон небольшой игры
https://ps-group.github.io/ps1/project
Задание | Спецификация проекта в виде MindMap
Чтобы составить видение проекта-игры, нужно визуализировать. Сделать это поможет MindMap.
https://docs.google.com/document/d/1Ki6DlbhDrZHskC6LED88FHeX8m-Se3-MrTpjwKYlcDk/edit?usp=sharing
Задание | План проекта в виде RoadMap
Чтобы справиться с известным проектом в известные сроки, нужно составить план действий. Сделать это поможет RoadMap.
https://docs.google.com/document/d/1zdW81SLmgVf3ZXyMwXkOXxIwOzBzkTTvi4TTMLdUw_E/edit
Пишем клон игры PacMan слой за слоем
В этой коллекции примеров слой за слоем на C++/SFML воссоздаётся урезанный клон игры PacMan
https://github.com/ps-group/sfml-packman
Схема оценки проекта-игры
В таблице записаны критерии оценки и примеры оценивания различных игр
https://docs.google.com/spreadsheets/d/1n7OzeQEDujPDboW3dFn4M4iXhcPvlCR7FQbPRSE4jwM/edit?usp=sharing
#cpp #programming
👉 @cpp_lib