Impresionante C++ moderno
Una colección de recursos sobre C++ moderno.
El objetivo es recopilar una lista de recursos para ayudar a las personas a conocer y aprovechar el C++ 11 moderno y más allá.
Contribuyendo
Para agregar, eliminar o cambiar cosas en la lista: envíe una solicitud de extracción al repositorio de GitHub.
Libros
- Un recorrido por C++ (Bjarne Stroustrup) [C++17/11/20]
- El lenguaje de programación C++ (Bjarne Stroustrup) [C++11]
- C++ moderno efectivo (Scott Meyers) [C++11/14]
- Descripción general del nuevo C++ (Scott Meyers) [C++14/11]
- Pautas básicas de C++ (Bjarne Stroustrup, Herb Sutter) [C++14/11/17] - Pautas para el uso de C++ moderno.
- Concurrencia de C++ en acción (Anthony Williams) [C++14/11/17] - Referencia y guía para escribir código multiproceso con C++ estándar.
- C++17: la guía completa (Nicolai M. Josuttis) [C++17]: brinda orientación sobre cómo utilizar las funciones de lenguaje y biblioteca de C++17.
- CMake profesional (Craig Scott): una guía práctica para usar CMake para crear sus proyectos de C++.
- Tutorial de C++ moderno: C++ 14/11/17/20 Sobre la marcha (Changkun Ou): el libro dice ser "Sobre la marcha". Su intención es proporcionar una introducción completa a las características relevantes del C++ moderno (antes de la década de 2020).
Para obtener una guía completa de libros de C++, consulte la Guía y lista de libros de Stackoverflow Definitive C++.
Comunidad
Encuentre las últimas noticias y actualizaciones de C++:
- Noticias, estado y debates sobre el estándar C++.
Escuche los últimos podcasts de C++:
- CppCast (YouTube, Twitter): ¡el primer podcast de desarrolladores de C++ para desarrolladores de C++!
- Cpp.chat (YouTube, Twitter): comentarios sobre c++ y temas de interés para los programadores de c++.
- C++ Weekly: vídeos educativos de Jason Turner.
Lea las últimas propuestas estándar de C++:
- Documentos del Comité de Estándares de C++.
Discuta todo lo relacionado con C++:
- r/cpp: el subreddit de C++.
- C++ Slack: el espacio de trabajo de C++ Slack.
- Grupo CoreHard Telegram.
Haga sus preguntas sobre C++:
- r/cpp_questions: un subreddit para preguntas y respuestas de C++.
- Stackoverflow C++ / C++11 / C++14 / C++17 / C++20 - Preguntas de Stackoverflow sobre C++.
¿Quizás tu pregunta ya fue respondida en una sección de preguntas frecuentes?:
- Súper preguntas frecuentes sobre C++.
- Preguntas frecuentes sobre C++11.
Vaya a una de las muchas conferencias de C++:
- Lista de conferencias C++ próximas y pasadas.
Encuentre grupos de usuarios de C++:
- Reunión de la lista C++ de grupos de usuarios.
- Lista de grupos de usuarios en las súper preguntas frecuentes de C++.
- Reuniones de C/C++.
- Busque canales que comiencen con
#ug
en C++ Slack.
Negociaciones
TODO lista seleccionada de buenas charlas sobre cómo simplificar el código usando las funciones de C++ 17/11/20
Comience con SG20 Education y videos recomendados para enseñar C++.
- CppCon Talks: charlas de la conferencia C++.
- CppCon 2014: Bjarne Stroustrup "¡Simplifique las tareas sencillas!"
- CppCon 2014: Herb Sutter "Programación sin bloqueo (o malabarismo con las hojas de afeitar), Parte I"
- CppCon 2014: Herb Sutter "Programación sin bloqueo (o malabarismo con las hojas de afeitar), Parte II"
- CppCon 2014: Scott Meyers "Deducción tipográfica y por qué le importa"
- CppCon 2015: Bjarne Stroustrup "Escribiendo bien C++14"
- CppCon 2015: Herb Sutter "Escribiendo bien C++14... de forma predeterminada"
- CppCon 2016: Chandler Carruth “Basura entra, basura sale: discutiendo sobre un comportamiento indefinido…”
- CppCon 2016: Herb Sutter "Libertad de fugas en C++... de forma predeterminada".
- CppCon 2017: Jason Turner "C++17 práctico"
- CppCon 2018: Jonathan Boccara “105 algoritmos STL en menos de una hora”
- code::dive Conference 2014 - Scott Meyers: cachés de CPU y por qué te importa (diapositivas)
- código::conferencia de buceo 2015 - Andrei Alexandrescu - Escritura rápida de código I (diapositivas)
- code::dive Conference 2015 - Andrei Alexandrescu - Writing Fast Code II (diapositivas)
- C++Now Talks: charlas de la conferencia C++Now.
- Volviéndose nativo 2012: las plantillas variadas son Funadic
- Volviéndose nativo 2013: Stephan T Lavavej - "No ayude al compilador"
- Volviéndose nativo 2013: Sean Parent - "Condimento C++"
Blogs
- Blog de C++ de Andrzej: directrices y pensamientos sobre C++.
- El blog de Antonio Williams.
- Integrado en la academia: John Regehr, profesor de Ciencias de la Computación, Universidad de Utah, EE. UU.
- Eric Niebler
- C++ fluido: código expresivo en C++.
- Gurú de la semana (nuevas publicaciones): una serie regular de problemas de programación en C++ creados y escritos por Herb Sutter.
- Gurú de la semana (publicaciones más antiguas): publicaciones más antiguas del Guru de la semana.
- Reflexiones de Marshall sobre C++
- Blog de Pablo Fultz II
- Presionando la programación
- Simplifique C++: escriba C++ limpio y fácil de mantener.
- Sticky Bits: un blog que analiza el desarrollo de software para sistemas integrados y en tiempo real.
- Sutter's Mill - Herb Sutter sobre el desarrollo de software.
- La visión desde Aristeia: las actividades e intereses profesionales de Scott Meyers.
- Blog del equipo de Visual C++
- ¿Por qué un cuervo es como un escritorio?
Sitios web
- Mejores prácticas de C++: colección colaborativa de mejores prácticas de C++.
- Patrones de C++: un repositorio de patrones de C++ modernos.
- Referencia de C++ - Referencia de C++.
- C++ con el ejemplo: ¡aprenda C++ con el ejemplo!
Plantillas de inicio de proyecto
- ModernCppStarter: una plantilla para poner en marcha proyectos modernos de C++ utilizando CMake, CI, cobertura de código, formato clang, gestión de dependencias reproducible y más.
- modern-cpp-template: una plantilla para proyectos modernos de C++ que utilizan CMake, Clang-Format, CI, pruebas unitarias y más, con soporte para inclusión posterior.
- cmake_template: una plantilla de proyecto CMake para comenzar con C++ y herramientas.
- Pitchfork: Pitchfork es un conjunto de convenciones de proyectos C++.
Bibliotecas
No se supone que esta sea una lista completa de todas las bibliotecas de C y C++. Es una lista de bibliotecas modernas de alta calidad con aplicabilidad general (serialización, base de datos, pruebas, etc.) o bibliotecas de alta calidad con un uso novedoso de nuevas funciones de C++.
Fregadero / Estructura
- rappel: Abseil es una colección de código abierto de código C++ (compatible con C++ 11) diseñada para aumentar la biblioteca estándar de C++.
- Boost: colección de bibliotecas de C++.
- Folly: biblioteca de código abierto de Facebook.
- POCO: las bibliotecas POCO C++ son potentes bibliotecas C++ multiplataforma para crear aplicaciones basadas en red e Internet que se ejecutan en sistemas de escritorio, servidores, móviles, IoT y integrados.
- nonstd-lite: padre de los repositorios *-lite, una ruta de migración a funciones posteriores a C++11 para entornos anteriores a C++11.
- xtd: marco C++ 17/20 moderno para crear aplicaciones de consola (CLI), formularios (GUI como WinForms) y tunit (pruebas unitarias como Microsoft Unit Testing Framework) en Windows, macOS, Linux, iOS y Android.
Pruebas
- Pruebas de aprobación para C++: pruebas de aprobación nativas para C++ en Linux, Mac y Windows.
- autocheck: clones de QuickCheck y SmallCheck para C++.
- Bandit: un marco de solo encabezado para C++ 11 que desea que trabajar con pruebas unitarias sea una experiencia placentera.
- Boost:UT: C++ 20 μ(micro)/marco de pruebas unitarias, de un solo encabezado, sin necesidad de macros.
- Boost.Test: marco de pruebas de impulso.
- Catch: un marco moderno, nativo de C++, de solo encabezado para pruebas unitarias, TDD y BDD.
- clean-test: un marco de prueba moderno de C++-20.
- doctest: el marco de prueba de encabezado único C++ 11/14/17/20 más rápido y rico en funciones para pruebas unitarias y TDD.
- Fakeit: burlarse de C++ de forma fácil. Una biblioteca simple pero muy expresiva, solo de encabezados para burlarse de C++.
- Googletest: marco de prueba y burla de Google.
- Mull: herramienta práctica de prueba de mutaciones para C y C++
- rapidcheck - Clon de QuickCheck para C++.
- snitch: marco de pruebas ligero de C++20.
Evaluación comparativa
Bibliotecas y marcos para la creación de micro-benchmarks.
- Celero: marco/biblioteca de creación de referencias de C++.
- ¿Parámetro de Google? - Una biblioteca de soporte de microbenchmark.
- hayai: el marco de evaluación comparativa de C++.
- Nonius: un marco de microevaluación comparativa de C++. Biblioteca/marco de creación de referencias de C++.
- nanobench: funcionalidad de microbenchmarking de un solo encabezado simple, rápida y precisa para C++ 14/11/17/20
Explotación florestal
- fmtlog: una biblioteca de registro estilo fmtlib con latencia en nanosegundos.
- spdlog: biblioteca de registro rápido de C++.
- loguru: una biblioteca de registro de C++ ligera y flexible
Enhebrado
- concurrentqueue: una cola simultánea rápida y sin bloqueos para múltiples productores y consumidores para C++11.
- Cpp-Taskflow: biblioteca moderna de programación de tareas paralelas de C++
- Junction: estructuras de datos concurrentes en C++.
- MPMCQueue: una cola limitada, multiproductor y multiconsumidor, sin bloqueos, escrita en C++11.
- SPSCQueue: una cola limitada, de un solo productor, de un solo consumidor, sin esperas y sin bloqueos, escrita en C++11.
- Threading Building Blocks: Threading Building Blocks (TBB) es una biblioteca de plantillas de C++ desarrollada por Intel para programación paralela en procesadores multinúcleo. Al utilizar TBB, un cálculo se divide en tareas que pueden ejecutarse en paralelo. La biblioteca gestiona y programa subprocesos para ejecutar estas tareas.
- execq: cola inteligente que ejecuta tareas en forma similar a un grupo de subprocesos (serie/concurrente) en C++11.
- concurrencpp: una biblioteca de concurrencia general que contiene tareas, ejecutores, temporizadores y rutinas de C++20 para gobernarlos a todos.
Análisis y serialización
- json? - JSON para C++ moderno.
- jsoncpp: una biblioteca de C++ para interactuar con JSON.
- toml++: una biblioteca C++ 17 de solo encabezado para analizar TOML v0.5.0 y versiones posteriores.
- tinytoml: una biblioteca C++ 11 de solo encabezado para analizar TOML.
- yaml-cpp: un analizador y emisor YAML en C++.
- cpptoml: una biblioteca de solo encabezado para analizar archivos de configuración TOML.
- cereal: una biblioteca C++11 para serialización.
- cista: una biblioteca C++17 para serialización binaria de copia cero de alto rendimiento.
- simdjson: acelere el análisis de JSON per se utilizando instrucciones SIMD comúnmente disponibles
- Boost.JSON: una biblioteca JSON con soporte sólido para asignadores personalizados.
- hjson-cpp: una biblioteca C++11 para leer y escribir archivos Hjson y/o JSON.
- json_struct: analizador JSON de encabezado único de alto rendimiento, que analiza directamente hacia y desde estructuras C++.
- daw_json_link: serialización y análisis JSON rápidos y convenientes en C++
Formato y plantillas de cadenas
- {fmt}: biblioteca de formato pequeña, segura y rápida.
- Inja: un motor de plantillas para C++ moderno.
- Moustache: plantillas de texto de bigote en C++11.
- tinyformat.h: biblioteca de reemplazo printf mínima y segura para C++.
- pprint: bonita impresora para C++ moderno.
secuencias de comandos
- sol2: biblioteca C++ vinculada a Lua.
- ChaiScript: un lenguaje de secuencias de comandos integrado fácil de usar para C++.
- pybind11: operabilidad perfecta entre C++11 y Python.
Web/HTTP
- Beast: HTTP y WebSocket creados sobre Boost.Asio en C++11.
- cpprestsdk: C++ REST SDK es un proyecto de Microsoft para la comunicación cliente-servidor basada en la nube en código nativo utilizando un moderno diseño de API de C++ asíncrono. Este proyecto tiene como objetivo ayudar a los desarrolladores de C++ a conectarse e interactuar con los servicios.
- cpr - Solicitudes de C++: Curl for People, un puerto espiritual de Solicitudes de Python.
- Crow: un microframework rápido y fácil de usar para crear servidores web (inspirado en Python Flask).
- dmbcs-micro-server: JSON, HTML, texto y PNG basados en C++20 a través de HTTP; forma sencilla de integrar un servidor en su aplicación para proporcionar una interfaz de usuario basada en web.
- Drogon: un marco de aplicación HTTP de alto rendimiento basado en C++14/17
- oat++: marco web de alto rendimiento (C++11, dependencia cero).
- pistache: un elegante marco REST de C++.
- restbed: el marco Restbed ofrece funcionalidad RESTful asincrónica a aplicaciones C++11.
Base de datos
- mongo-cxx-driver: controlador C++ para MongoDB.
- redox: cliente C++11 moderno, asincrónico y tremendamente rápido para Redis.
- sqlite_orm: poderosa biblioteca ORM SQLite3 solo de encabezado para C++14.
- sqlite3pp: contenedor C++ de la API SQLite3.
- sqlpp11: una biblioteca de plantillas SQL de tipo seguro para C++.
- libpqxx: la API de cliente C++ oficial para PostgreSQL.
- TinyORM: biblioteca ORM moderna de C++.
BioC++
- SeqAn: la biblioteca C++ moderna para análisis de secuencias (C++17, C++20).
Varios
- ASAP: biblioteca de solo encabezado para analizar, mostrar, operar e iterar fechas.
- BigIntegerCPP: una gran biblioteca de enteros de C++11 con un alto rendimiento efectivo, de naturaleza simplista y también clara a la vista.
- CAF: una implementación de código abierto del modelo de actor en C++.
- Cinder: Cinder es una biblioteca gratuita y de código abierto para codificación creativa de calidad profesional en C++.
- Conduit: transmisiones de alto rendimiento basadas en Coroutine TS.
- cppitertools - implementación de itertools (python) para C++14
- cxxopts: analizador ligero de opciones de línea de comandos de C++.
- fecha: una biblioteca de fecha y hora basada en el encabezado C++ 14/11/17.
- docopt.cpp: docopt crea hermosas interfaces de línea de comandos.
- EnTT: un sistema de componentes de entidad (ECS) confiable, rápido y solo de encabezado para C++ moderno.
- Font Chef: una biblioteca C99 y C++14 para cocinar fuentes y representar texto
- HashLibPlus: una biblioteca C++11 que proporciona una interfaz fácil de usar para calcular hashes y sumas de comprobación de cadenas, archivos, secuencias, matrices de bytes y datos sin tipo, por mencionar solo algunos. También admite Hashing incremental.
- IntX: un puerto C++11 de la biblioteca de enteros de precisión arbitraria IntX con velocidad, sobre la implementación de algoritmos de multiplicación/división O(N * log N).
- iod: utilidades de metaprogramación para C++14.
- Magic Enum: reflexión estática para enumeraciones (a cadena, desde cadena, iteración) para C++ moderno, funciona con cualquier tipo de enumeración sin ninguna macro o código repetitivo.
- Wise Enum: reflexión estática para enumeraciones similares a Magic Enum pero funciona con C++ 14/11/17.
- Nameof: una biblioteca C++ 17 de solo encabezado proporciona macros y funciones nameof para obtener el nombre simple de variable, tipo, función, macro y enumeración.
- PEGTL: biblioteca de plantillas gramaticales de expresiones de análisis (C++11, solo encabezado).
- aleatorio: un encabezado simple y conveniente, solo aleatorio, para C++ moderno.
- sonó: una biblioteca C++ 11 simple, moderna y de solo encabezado para colores en su terminal.
- range-v3: biblioteca de rango experimental para C++ 14/11/17.
- SimpleBaseLib4CPP: una biblioteca de codificación base C++11 simple que proporciona actualmente soporte para codificar y decodificar varias bases como Base16, Base32 (varias variantes), Base58 (varias variantes), Base64 (varias variantes). [MIT]
- simple_match: coincidencia de patrones de solo encabezado simple para c++14.
- SRL-CPP: una biblioteca de creación de lenguaje Regex simple escrita en C++11 que proporciona una interfaz fácil de usar para construir expresiones regex simples y complejas. [MIT]
- tweeny: una biblioteca de interpolación de encabezados únicamente con más de 30 funciones de facilitación.
- Vireo: una biblioteca de procesamiento de vídeo ligera y versátil de Twitter.
- indicadores - Indicadores de actividad para C++ moderno.
- AssociatedEnum: biblioteca de solo encabezado para C++ para enumeraciones con valores asociados.
- openFrameworks: un conjunto de herramientas C++ de código abierto para codificación creativa.
- tabular - Creador de tablas para C++ moderno.
Herramientas
Varios
- ¿formato clang? - Una herramienta para formatear código C++.
- clangd: comprende su código C++ y agrega funciones inteligentes a su editor: finalización de código, errores de compilación, definición y más.
- Explorador de compiladores: explore de forma interactiva la salida ensamblada de su código C++.
- cquery: servidor de lenguaje C/C++ que admite una base de código de varios millones de líneas, impulsado por libclang. Emacs, Vim, VSCode y otros con soporte de protocolo de servidor de idiomas. Referencias cruzadas, finalización, diagnóstico, resaltado semántico y más (no más confirmaciones desde el 27 de noviembre de 2018)
- ccls: servidor de lenguaje C/C++/ObjC que admite referencias cruzadas, jerarquías, finalización y resaltado semántico, bifurcado de cquery, que se encuentra en desarrollo activo
- irony-mode: modo menor AC/C++ para Emacs con tecnología libclang.
- modern-cpp-font-lock-mode - Soporte de resaltado de sintaxis para C++ moderno con emacs
Análisis dinámico
- desinfectantes? - Este proyecto es el hogar de Sanitizers: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer y más.
- Valgrind: es un marco de instrumentación para crear herramientas de análisis dinámico. Existen herramientas Valgrind que pueden detectar automáticamente muchos errores de administración de memoria y subprocesos, y perfilar sus programas en detalle. También puedes utilizar Valgrind para crear nuevas herramientas.
Análisis estático
- cppcheck: es una herramienta de análisis estático para código C/C++. Proporciona un análisis de código único para detectar errores y se centra en detectar comportamientos indefinidos y construcciones de codificación peligrosas.
- ¿Están ordenados? - es una herramienta “linter” de C++ basada en clang. Su propósito es proporcionar un marco extensible para diagnosticar y corregir errores de programación típicos, como violaciones de estilo, mal uso de la interfaz o errores que pueden deducirse mediante análisis estático. clang-tidy es modular y proporciona una interfaz conveniente para emitir nuevos cheques.
- clang-analyzer: es una herramienta de análisis de código fuente que encuentra errores en programas C, C++ y Objective-C. Implementa un análisis interprocedimiento sensible a la ruta basado en una técnica de ejecución simbólica.
Fuzzing
- American fuzzy lop: American fuzzy lop es un fuzzer orientado a la seguridad.
- hongfuzz: un fuzzer orientado a la seguridad, basado en retroalimentación, evolutivo y fácil de usar con interesantes opciones de análisis.
- libFuzzer: una biblioteca para pruebas fuzz guiadas por cobertura.
Sistema de construcción
- Bazel: es un sistema de compilación rápido, escalable, multilingüe y extensible.
- build2: es una cadena de herramientas de compilación multiplataforma para desarrollar y empaquetar código C y C++.
- CHacer? - Familia de herramientas multiplataforma diseñada para crear, probar y empaquetar software.
- Meson: es un sistema de compilación de código abierto destinado a ser extremadamente rápido y, lo que es más importante, lo más fácil de usar posible.
- XMake: es una utilidad de compilación multiplataforma basada en Lua.
Gestión de paquetes
- Buckaroo: administrador de paquetes Polyglot totalmente descentralizado para C++ y amigos
- cget: recuperación de paquetes CMake.
- conan: administrador de paquetes C/C++.
- CPM: un script de CMake para la gestión de dependencias multiplataforma sin configuración.
- Hunter: administrador de paquetes multiplataforma para C++.
- vcpkg: Administrador de bibliotecas de C++ para Windows, Linux y MacOS
- xrepo: un administrador de paquetes C/C++ multiplataforma basado en Xmake.
Acerca de
Esta lista fue compilada por Erik Rigtorp con la ayuda de la comunidad C++:
- rigtorp.se
- [email protected]
- github.com/rigtorp
- twitter.com/rigtorp
- linkedin.com/in/rigtorp