¿Cómo se compara C ++ con otros lenguajes de programación modernos como Python y Java? ¿Cuáles son sus ventajas?

C ++ y Java están diseñados para proyectos a gran escala, mientras que Python es un lenguaje de scripting diseñado principalmente con la facilidad de uso en mente.

Teniendo esto en cuenta, C ++ y Java tienen características que ayudan a lograr una consistencia generalizada ya largo plazo para los equipos de programación, como la tipificación estática y la compatibilidad con versiones anteriores.

Python, por otro lado, se escribe dinámicamente y las versiones principales generalmente no son compatibles con versiones anteriores. Esto lo hace ideal para proyectos de menor escala a corto plazo, pero no tan bueno para proyectos a largo plazo basados ​​en equipos más grandes.

Java y Python son independientes del sistema, ya que se compilan en bytecode mientras que C ++ se compila directamente en código binario. Esto hace que los proyectos Java y Python puedan implementarse más fácilmente en múltiples sistemas y plataformas, mientras que los proyectos C ++ están diseñados para una arquitectura específica. Por lo tanto, Java y Python son más portátiles, pero la compilación en C ++ de binarios específicos de la arquitectura lo hace potencialmente más eficaz cuando lo usa un programador experto.

Java y Python utilizan algunas variantes de la recolección de basura para la administración de la memoria. (las versiones recientes de) C ++ tienen algunas mejoras de “facilidad de uso” en la administración de la memoria, pero eso lo determina el programador, ya que pueden elegir asignar y liberar la memoria manualmente y, por lo tanto, generalmente es más eficaz.

Java y C ++ están diseñados desde cero como lenguajes OOP, mientras que Python está diseñado para soportar múltiples paradigmas. Esta es una diferencia menor en estos días ya que los tres soportan múltiples paradigmas en sus versiones más recientes.

Todas estas cosas apuntan a los siguientes casos de uso generales:

  • Proyectos a gran escala a largo plazo: Java, C ++
  • Prototipado rápido: Python
  • Secuencias de comandos y “código de pegamento” a corto plazo: Python
  • Programación de juegos o chips (memoria limitada o alto rendimiento): C ++
  • Programación de aplicaciones web: Python (aunque Java también puede usarse aquí debido a la portabilidad)
  • Aplicaciones móviles: Java
  • Programación matemática y estadística: Python (soporte de múltiples paradigmas fuertes y recubrimiento de calderas mínimo).
  • Programación de sistemas específicos de arquitectura a gran escala: C ++
  • Programación de sistemas portátiles a gran escala: Java

La lista no es exhaustiva, pero debería darle una idea de las ventajas y desventajas de cada uno. Todos los lenguajes completos de Turing se pueden utilizar para todos los casos de uso de programación. Pero algunos tienen un mejor soporte inherente para ciertas tareas que otros.

C ++ tiene 3 ventajas que puedo pensar:

  1. Los programas escritos en C ++ se ejecutarán más rápido que los escritos en lenguajes interpretados como Java, PHP, Python y Ruby. La mayoría de las veces, esto no importa, las computadoras modernas tienen ciclos para quemar. Pero hay algunos usos, especialmente en sistemas integrados, donde la velocidad es realmente importante.
  2. Destructores: C ++ es el único lenguaje extendido con destructores: métodos que se invocan cuando un objeto se libera o queda fuera del alcance. ¿Por qué es esto útil? Digamos que tiene un objeto que utiliza para acceder a un DBMS. El objeto obtiene una conexión de un grupo cuando lo creas o cuando lo usas por primera vez.

    Si tiene un destructor, puede devolver automáticamente esa conexión a la agrupación cuando el objeto ya no se esté utilizando. Puede obtener resultados similares utilizando la estructura de control try {…} finally {} en otros idiomas, pero debe escribir eso en el lugar donde se crea / destruye el objeto. O puede usar el método finalize () de Java, pero no se garantiza que se llame de inmediato. Solo se llamará cuando el programa se quede sin memoria y tenga que hacer una recolección de basura.

  3. Conveniencia: C ++ tiene sobrecarga de operadores. Puede sobrecargar el operador + para, por ejemplo, agregar caracteres al final de una cadena. El paquete cstdio de C ++ sobrecarga los operadores << y >> (operaciones de cambio en enteros) para proporcionar una operación de E / S “nativa”.

Pero también hay desventajas. En C ++ tienes que estar atento a los punteros. En Java, etc., todo excepto los tipos más simples (int, float) es un puntero, y usted no puede hacer aritmética de punteros y otras operaciones peligrosas de la manera que puede en C ++. Y usted es responsable de su propia gestión de la memoria: debe recordar eliminar un objeto cuando haya terminado con él o tendrá una pérdida de memoria: la memoria se asigna y nunca se desasigna y finalmente se agota.

Simplicidad: python >> java> C ++

Velocidad: c ++> java >> python

La mayor ventaja de C ++ es que es totalmente “personalizable”. Puedes obtener la mayor libertad. Puede elegir su propio compromiso entre la eficiencia del código (tanto en términos de velocidad de ejecución como de gestión de memoria) y legibilidad. Puede utilizar cualquier paradigma de programación (procedimiento, OO o funcional). Puede diseñar su propio estilo de codificación que sea más adecuado para su proyecto. Pero el beneficio solo llega cuando puedes tomar las decisiones correctas (¡y tienes más trabajos!).

Otra ventaja de C ++ es que tiene casi todas las funciones de lenguaje de bajo nivel de C. Eso significa que puede trabajar directamente con hardware no tan estándar como GPU.

La última ventaja de C ++ que se me ocurre, por el momento, es que puedes hacer compilación con C y código Fortran. Esto hace que trabaje sin problemas con el código heredado, especialmente en informática científica.

La única gran cosa que nadie mencionó sobre C ++ es su rendimiento predecible. Es el único sin recolección de basura, lo que significa que usted tiene un control completo sobre la asignación y desasignación de memoria. Eso es a menudo muy importante. No quieres que tu avión de combate se bloquee mientras ejecuta un ciclo de recolección de basura o, lo que es más importante, que tu juego se salte los marcos. 😉 También es el más eficiente energéticamente que se vuelve importante para algunas aplicaciones enormes. También se puede escribir para que funcione en todas partes y tenga una base enorme de código heredado.

A2A (!!?)

Preguntarme acerca de las ventajas de C ++ es casi ladrar el árbol equivocado. Siempre he considerado a C ++ como una enfermedad infligida en el mundo de la programación por la moda pasajera (ahora en gran parte aprobada, creo) en la que la programación OO (orientada a objetos) iba a ser el salvador de todos nosotros.

C ++ es (en la mayoría de las implementaciones) un compilador relativamente eficiente, que a menudo produce un código más rápido y más compacto que, por ejemplo, Java. C ++ es “C extendida en la causa religiosa de OO”; lo que podría considerarse en algunos sectores como algo bueno; sin embargo, el lenguaje Objective C (google it) hace un trabajo mucho más limpio y mejor de eso, por mi dinero.

Para mí, el sabor “basado en objetos” de OO (como se ejemplifica en Modula2 y Objective C ”) siempre me pareció una moderación atractiva frente a todo el cerdo de lenguajes radicalmente“ orientados a objetos ”, como C ++. OTOH, esos idiomas parecen estar destinados al cúmulo de ceniza de la cuota de mercado del sub-uno por ciento, mientras que C ++ ocupa un lugar destacado en el código implementado real. Entonces, ¿qué sé yo?

En cuanto a mí, si tengo algo de llanto necesito usar un lenguaje feo, primitivo aunque poderoso, seguiré con la C antigua, que se puede usar de manera “basada en objetos”.

Es un poco más áspero (menos “mágico”) con el que trabajar, pero a la velocidad de la luz y con las bibliotecas adecuadas para trabajar. No tan especializado como Python o Java, para bien o para mal.