ventajas uso tipos sirve que programación programacion para nivel medio lenguajes lenguaje historia ejemplos desventajas descargar definicion datos caracteristicas bajo alto c++ stl coding-style

c++ - uso - tipos de lenguaje de alto nivel



¿C++ como lenguaje de alto nivel? (7)

Aprendí C ++ por primera vez hace años leyendo "El lenguaje de programación de C ++" de Stroustrup dos veces y participando durante un año en un proyecto bastante grande (aunque el nivel del equipo de c ++ era bastante bajo). El C ++ del libro del Fundador fue realmente una extensión enorme de la antigua C. Potente y orientada a objetos e incluso genérica, pero aún así es una extensión. Y, sí, hubo un STL que de alguna manera se agregó al lenguaje por estándar, que estaba ahí por algunas razones ocultas, ya sea que lo vaya a usar o no. Entonces, en esos días no tuve una buena impresión de C ++: además de todos estos problemas eternos de C con memoria, punteros y límites de arrays, se agregaron muchas novedades: con clases y plantillas, sintaxis complicada y mucho de pensar para solucionarlo.

Ahora, después de un año de mantenerme alejado de C ++, recientemente comencé a actualizar mi conocimiento, pero ahora hice "Acelerado C ++" de Andrew Koenig y Barbara E. Moo. ¡Y lo que estoy viendo allí es absolutamente "otro C ++"! Siguiendo este libro, de hecho puede usar C ++ casi sin conocer su núcleo C: nunca puede usar arreglos, ya que tiene vectores, puede olvidarse de char *, ya que tiene una cadena, etc., etc. Desde este punto de Desde el punto de vista general, STL es realmente el corazón del lenguaje y el lenguaje en sí parece ser de muy "alto nivel", pero con rendimiento y control sobre entidades que ni Java ni Python podrían permitirse.

Entonces, ¿qué C ++ usas en la práctica? ¿Mezclas los estilos, por ejemplo, matrices y vectores? ¿Hay reglas o mejores prácticas aquí? ...

ACTUALIZAR:

Me dijeron en comentarios que lo que estoy hablando es lo que ahora se llama "C ++ moderno". La búsqueda por estas palabras pone de manifiesto los siguientes hilos realmente interesantes:

¿Se está haciendo más frecuente el C ++ moderno?

¿Qué es el C ++ moderno?

¿Ejemplos de "C ++ moderno" en acción?


Entonces, ¿qué C ++ usas en la práctica? ¿Mezclas los estilos, por ejemplo, matrices y vectores? ¿Hay reglas o mejores prácticas aquí? ...

C ++ moderno, definitivamente. Pero en mi opinión, eso no excluye exactamente matrices. Todavía hay casos en que las matrices son preferibles a los vectores. Pero cuando uso arreglos, los uso de una manera similar a STL. Utilizo punteros como iteradores y aplico algoritmos STL al contenido de la matriz, y así sucesivamente.

Por cierto, el propio Bjarne Stroustrup ha sido citado por describir C ++ de una manera muy similar a la que describió usted mismo:

Dentro de C ++, hay un lenguaje mucho más pequeño y limpio que lucha por salir.

Por supuesto, hay limitaciones. Con el moderno C ++, los tiempos de compilación tienden a sufrir. Y requiere compiladores mucho más avanzados, lo que en algunas plataformas hace que sea un no-go. Y muchos de los desarrolladores o gestores de proyectos líderes más conservadores, o simplemente las bases de código antiguas a veces significan que tampoco es una opción. Y hay una cierta curva de aprendizaje, porque todos los escollos de C siguen ahí, solo tienes que aprender a sortearlos (por ejemplo, las pérdidas de memoria no solo desaparecen , el moderno C ++ simplemente define algunos patrones muy poderosos para evitarlos). ).

Pero creo que el C ++ moderno puede realmente considerarse un lenguaje hermoso. Y definitivamente no es así como describiría el estilo tradicional de "C-with-classes" C ++.

Cuando trabajo en (otros) lenguajes de alto nivel, he encontrado que casi siempre hay algo que extraño en C ++. O el lenguaje pierde los contenedores robustos y seguros de tipos o los iteradores / algoritmos expresivos, o carece de soporte para RAII, o no tiene forma de expresar algoritmos genéricos, como puede hacer con las plantillas.

Esos idiomas definitivamente también tienen sus ventajas, y hay áreas indiscutiblemente en las que son simplemente mejores que C ++. Pero generalmente también encuentro que tienen deficiencias claras, donde simplemente no puedo expresar mis ideas tan bien como puedo en C ++. Tengo que saltar a través de aros, sacrificar la seguridad de tipo, confiar en la reflexión o cualquier otra cosa, solo para hacer algo que C ++ hubiera apoyado "naturalmente".


Como respuesta alternativa, me siento tentado a decir que la mejor práctica para usar C ++ es no hacerlo.

Si solo tiene Windows y .Net no es demasiado grande, entonces C # es una excelente opción. En Unix, Java es genial.

Por supuesto que C ++ tiene su lugar. Es solo un lugar más pequeño de lo que solía ser en mi mundo.

Edit: Tengo más de treinta años de experiencia en programación. Asamblea de 5 años, 17 años en C, 5 años en C ++, 3 años en Java y ahora 2 años en C #. Soy muy bueno en todo esto. El ensamblador es genial. Soy rápido en la programación con él. Pero prefiero C sobre Ensamblador. Del mismo modo, prefiero C # sobre C ++. Me resulta mucho más fácil hacer las aplicaciones más comunes en C # que en C ++


Definitivamente estilo mixto. Parece tonto limitarse innecesariamente, especialmente con tantas opciones.


Enhorabuena, has descubierto lo que llamamos "C ++ moderno". Lo preferiría cualquier día a los estilos de programación "C con clases". No más punteros en bruto, no más borrados explícitos, etc. ¡Maravilloso mundo!


Koenig y Moo''s Accelerated C ++ es un libro muy bueno, y es uno de los que recomiendo.

Mezclo arrays y vectores como mejor me parezca. Para las cosas que no se cambian dinámicamente, todavía utilizo matrices, de lo contrario usaría vectores.

Es importante que entiendas a ambos.


Mecanografía genérica y metaprogramación de plantillas hasta el final. No uso mucho el polimorfismo ya que es demasiado encerrado.

Y, por cierto, las bibliotecas Boost son un tremendo complemento para STL.


Uso la programación genérica y RAII siempre que sea posible. Extraño a ambos en lenguajes "modernos" que no son de C ++.