O es C++ Aceptar sólo si algunas de las características de la lengua (por ejemplo RTTI, excepciones y plantillas) están excluidos?
Es bueno pensar en esta línea. La complejidad del tiempo de compilación no es un gran problema, pero la complejidad del tiempo de ejecución tiene un costo de recursos.
C++ facilita clase/modularidad espacio de nombres (por ejemplo método foo()
en más de un contexto) y la modularidad instancia (campo miembro bar
pertenecientes a más de un objeto), ambos de los cuales son una gran ventaja en el diseño de software. También hay funciones como const
, referencias, moldes estáticos y plantillas, que pueden ayudar a imponer restricciones y tienen poco o ningún costo de tiempo de ejecución.
Me no excluir plantillas. Son complejos de considerar y necesitas un compilador que los maneje bien, pero el costo del recurso es casi todo el tiempo de compilación. Lo que te va a "costar" es el hecho de que cada vez que utilizas una plantilla con diferentes parámetros de clase, usted produce un nuevo conjunto de códigos para crear instancias de funciones miembro. Pero casi seguramente tendrías que hacer lo mismo sin plantillas. Además, las plantillas le permiten diseñar y probar bibliotecas para circunstancias generales, en archivos separados que se instancian en tiempo de compilación en lugar de tiempo de enlace. Solo para aclarar eso: las plantillas te permiten tener un archivo A.h que pruebes. Luego lo usa con el archivo B.ho B.c para crear una instancia en tiempo de compilación. (Una biblioteca estaría vinculada en lugar de compilada, y esto lo hace menos flexible: los métodos de plantilla pueden optimizarse para que no incurran en una llamada a función). He usado plantillas en sistemas integrados para implementar código CRC y señalar matemática: puedo probar el código general, ponerlo en control de versión y luego reutilizarlo varias veces escribiendo una clase simple que se deriva de una plantilla o tiene un campo de miembro de plantilla. El ejemplo clásico del curso es STL.
RTTI y excepciones: agregan complejidad de tiempo de ejecución.No tengo una buena idea del costo de los recursos, pero espero que RTTI sea bastante simple (solo agrega una etiqueta de tipo, lo que cuesta más espacio), mientras que las excepciones son probablemente bestiales e implican el desenrollado de la pila.
funciones virtuales: Yo solía descartar esto debido a los costos de ejecución de la memoria + + (mínimo pero todavía existe), así como la complejidad de la depuración, pero que permiten desacoplar objetos entre sí. Si no usa funciones virtuales, cuando una instancia de una clase (por ejemplo, Foo) necesita ejecutar código asociado con una instancia de otra clase (por ejemplo, Bar), entonces la primera clase necesita saber todo sobre la segunda (para compilar Foo) necesita tener un enlace estático a todos los métodos en Bar) - esto agrega mucho acoplamiento apretado.
Asignación de memoria dinámica: esta es otra gran cosa (también en C), que evitamos como la peste en mi compañía - no solo hay todo tipo de errores que pueden surgir, sino que los grandes el costo del tiempo de ejecución es el asignador/desasignador, y debe estar dispuesto y capacitado para saber cuál es ese costo y aceptarlo.
edición: Me amor utilizar Java en lugar de C++ en el mundo incrustado. Desafortunadamente, mis opciones son limitadas y los costos de recursos de tiempo de ejecución (tamaño de código, tamaño de memoria, restricciones de tiempo de recolección de basura) son demasiado altos en el espacio en el que trabajo. Mi razón para usar Java es menor debido a sus recursos de tiempo de ejecución y más para el hecho de que su diseño de software es mucho más limpio, y las herramientas son mucho mejores (OMG! refactoring! woohoo!) ... la clave para mí parece residir en dos cosas, que hacen que C/C++ se sienta muy torpe en comparación:
que todo es un objeto y todos los métodos son virtuales, por lo que puede apoyarse mucho en las abstracciones de las interfaces.
la separación de interfaz/implementación en Java no es tan desagradable .c/.h
división de archivos cosa que hace que los compiladores sean tan lentos. En contraste, uso Java en Eclipse y compila automáticamente el código a medida que lo edito. ¡Esto es enorme! Encuentro la mayoría de mis errores de inmediato. En C/C++ tengo que esperar todo un ciclo de compilación.
Algún día espero que habrá un lenguaje entre C/C++ y Java que proporciona las ventajas de Java para el desarrollo de software, sin necesidad de las campanas y silbatos que hacen de Java tan atractivo para aplicaciones de escritorio/servidor, pero poco atractivo en la mayor parte del mundo integrado.
No sólo usted tiene que elegir el idioma, tiene que elegir las herramientas de desarrollo que mejor soportan la plataforma de destino. Algunas recomendaciones: Metaware, Greenhills y Microsoft Visual Studio (versiones que incluyen MS Closed visual C o C++). Además, es posible que necesite un sistema operativo: ThreadX, Nucleus, VRTX, WindRiver y MS Embedded (Platform Builder). Si su sistema es lo suficientemente grande, es posible que también necesite un sistema de archivos. –