Creo que C++ sigue siendo una plataforma de programación deseable en comparación con Rust

Los defensores de C++ y Rust opinan sobre si C++ sigue siendo una opción preferible para el trabajo nuevo en sistemas, equilibrando la madurez, el rendimiento, el ecosistema y la mayor base de talento de C++ frente a las garantías de seguridad más fuertes de Rust y su tooling más coherente. Muchos sostienen que, aunque los equipos disciplinados de C/C++ pueden evitar la mayoría de los errores de memoria, esto tiene un alto costo de productividad y aun así deja margen para vulnerabilidades sutiles, mientras que el borrow checker de Rust, los enums/pattern matching, el manejo de errores y el flujo de trabajo basado en Cargo detectan por construcción clases enteras de problemas. Otros señalan vacíos y trade-offs en Rust —como escenarios embebidos y de bibliotecas compartidas, tamaño de binarios, calidad del ecosistema y complejidad del async— y concluyen que Rust está erosionando de forma constante el dominio de C++, pero todavía no lo ha desplazado por completo.

Adopción del lenguaje y casos de uso

  • Muchos comentaristas con amplios antecedentes en C++ ahora optan por Rust como predeterminado para trabajos nuevos desde cero y proyectos personales, citando productividad y seguridad; aún usan C++ cuando lo exige el código heredado, las bibliotecas existentes o la política de la empresa.
  • Algunos se mantienen firmemente con C o C++ (incluido “C++ moderno”), argumentando que con suficiente disciplina, herramientas y pruebas, los errores de memoria son lo bastante raros y los beneficios de Rust no resultan convincentes para ellos.
  • Hay acuerdo en que C++ “no va a desaparecer” debido a su enorme base instalada, las toolchains existentes y su cobertura en embebidos/dispositivos.

Herramientas, sistemas de compilación y ecosistemas

  • Cargo de Rust junto con crates.io es ampliamente elogiado como una gran ventaja: un sistema de compilación estándar, gestión de dependencias sencilla, compilación cruzada directa.
  • Otros critican crates.io por ser “como npm”: muchos crates de aficionado 0.x, largas cadenas de dependencias, múltiples versiones en un mismo binario, falta de espacios de nombres y moderación; algunas grandes organizaciones empaquetan y gestionan sus dependencias internamente.
  • La fragmentación de las herramientas de compilación de C++ (CMake, Bazel, sistemas personalizados) se ve como un gran dolor, aunque algunos sostienen que los sistemas de compilación maduros de C++ pueden ser superiores a Cargo en ciertos flujos de trabajo empresariales.

Seguridad vs “disciplina”

  • Un bando afirma que los equipos disciplinados de C/C++ con sanitizers, fuzzing y prácticas estrictas pueden evitar en su mayoría los fallos de memoria; minimizan la seguridad de Rust como sobrevalorada.
  • Otros responden que incluso los proyectos élite de C/C++ (kernels, navegadores, bases de datos) siguen enviando vulnerabilidades de memoria, y que la corrupción silenciosa de memoria es mucho peor que los segfaults ocasionales.
  • La seguridad se presenta como “preservar invariantes”, con el sistema de tipos de Rust y el borrow checking reduciendo clases enteras de errores por construcción.

Rendimiento y optimización

  • Algunos argumentan que el comportamiento definido de desbordamiento de Rust y los chequeos de límites introducen una sobrecarga no trivial, justificando el comportamiento indefinido de C++ para obtener la máxima libertad de optimización.
  • Otros responden que:
    • Rust ofrece primitivas aritméticas checked/wrapping/saturating para control explícito.
    • Los compiladores a menudo pueden eliminar los chequeos de límites.
    • La sobrecarga típica es pequeña comparada con el costo de ingeniería del UB y los errores de memoria.
  • Se enfatiza que Unsafe Rust es una “salida de emergencia” puntual, no un abandono de la seguridad.

Características del lenguaje y ergonomía

  • Rust recibe elogios por: enums/ADTs expresivos y pattern matching, manejo de errores basado en Result/Option, concurrencia basada en Send/Sync, mensajes de error del compilador más claros, linting y formateo integrados, y herramientas coherentes.
  • A C++ se le reconoce una mayor riqueza en constexpr/const-generics, placement new, control de allocators, SIMD y un ecosistema de bibliotecas más profundo y probado en batalla.
  • Algunos consideran que los intentos de definir un “subconjunto seguro de C++ moderno” son intrínsecamente limitados y menos prácticos que el subconjunto seguro explícitamente definido de Rust.

Tamaño de binarios, enlazado y embebidos

  • El valor predeterminado de Rust de enlazar estáticamente su biblioteca estándar puede producir binarios notablemente más grandes que C++ con bibliotecas compartidas, lo que importa en sistemas embebidos o de tipo appliance con almacenamiento limitado.
  • Técnicas como LTO, perfiles optimizados para tamaño y no_std pueden reducir los binarios de Rust, pero algunos consideran que las bibliotecas compartidas de C/C++ siguen siendo más eficientes en espacio para sistemas con múltiples binarios.