tipos lenguaje funciones ejemplos datos comandos codigos caracteristicas c++ python linux

funciones - lenguaje c++ pdf



¿Debo pasar de C++ a Python?... ¿O otro idioma? (13)

En la empresa para la que trabajo, realizamos una gran cantidad de procesamiento de transacciones basado en archivos. El procesamiento se centra en la conversión de archivos entre numerosos formatos para adaptarse a numerosos sistemas en numerosas empresas.

El procesamiento casi siempre involucra una etapa XML y puede incluir una gran cantidad de análisis de texto, búsquedas en la base de datos, conversión de datos y validación de datos.

Actualmente, los programas que realizan todas estas tareas están escritos en C ++ y funcionan bastante rápido todo en un servidor promedio. Estoy investigando las posibilidades de usar un lenguaje más "moderno" con el que los programadores graduados más nuevos estén más familiarizados. (La correcta asignación de memoria en C ++ parece causar problemas con muchos programadores más nuevos actualmente)

Con base en la breve información provista, ¿podría un lenguaje como python proporcionar la funcionalidad y el rendimiento requeridos, así como abordar la asignación de memoria (y varios otros problemas relacionados con C ++) que surjan?

Me gusta la idea de no tener que compilar los programas cada vez que hacemos un cambio. Entiendo que los idiomas interpretados probablemente no alcanzarán el mismo rendimiento que tenemos actualmente.

Nuestros sistemas están basados ​​en Linux, lo que también restringe algunas opciones.

Cualquier comentario sobre la funcionalidad y el rendimiento disponible con Python o sugerencias de idiomas alternativos sería muy apreciado.


Me gusta la idea de no tener que compilar los programas cada vez que hacemos un cambio. Entiendo que los idiomas interpretados probablemente no alcanzarán el mismo rendimiento que tenemos actualmente.

Este es el mayor problema; puedes vivir con el golpe de rendimiento? Podría intentar usar Python y ampliarlo con sus módulos C ++ actuales para las partes pesadas de rendimiento. Aún así, cambiar todo el sistema parece un gran esfuerzo si la única razón es la falta de talento en C ++. Contratar personas que conocen C ++ parece ser la opción más barata.


¿Qué es más importante, lograr que los programas funcionen rápidamente o que los programas funcionen rápidamente?

Si está tratando con grandes cantidades de archivos de gran tamaño, es mejor que se quede en C ++ y le enseñe a los programadores de posgrado qué puntero es (!)

De lo contrario, le recomendaría encarecidamente que considere una solución basada en secuencias de comandos, ya que el desarrollo en estas, una vez que esté actualizado, es mucho más rápido. Y mucho más divertido, si somos honestos, para la mayoría de la gente al menos.

Si la carga de procesamiento por registro no es alta, se sorprenderá de lo poco que pierde: el archivo IO casi seguramente será manejado en una biblioteca compilada (C), por lo que la sobrecarga del intérprete puede ser relativamente baja. Vale la pena intentarlo, sugeriría.

De los lenguajes imperativos, Perl es una opción obvia, Python es popular y Ruby tiene un alto perfil (y probablemente características de OO más limpias que las dos primeras). Luego está el reino un poco más esotérico de los lenguajes funcionales, pero no estoy calificado para comentar sobre eso.


O debería tratar de almacenar sus reglas de análisis en una base de datos en lugar de dejarlas codificadas dentro de su código. Como Ken Downs citó correctamente, minimice el código, maximice los datos . De esta forma no necesitaría recompilar cada vez que una pequeña regla cambie.


Odio decir esto, pero si quieres algo con lo que tus desarrolladores entrantes estén familiarizados, ve con Java. Java es el lenguaje con el que los graduados más recientes estarán más familiarizados. Aún debe compilar, pero los tiempos de compilación serán más cortos que C ++. Se ejecutará en Linux y prácticamente en cualquier otro lugar. Tiene un buen recolector de basura. Es bastante rápido. ¿Y mencioné que tus desarrolladores estarán familiarizados con esto? No, no es "genial" como Python, pero es un lenguaje muy probado.

Honestamente, dudo que tengas muchos desarrolladores entrantes que apestan con C ++, pero de todos modos serían increíbles con Python. Las personas que usan Python bien tienden a estar bien con la gestión de memoria manual. Las personas que son malas con la gestión de memoria en realidad tienden a ser malas con todos los idiomas.

Me resulta preocupante que haya desarrolladores que son tan malos con la administración de memoria que quieren cambiar de idioma. Es un signo que indica un problema, pero no estoy seguro de que el problema sea con el idioma.


Python probablemente elimine la mayoría de las cosas de bajo nivel que usa en su aplicación. La asignación de memoria ya no sería un problema. Además, al menos mi universidad parece estar adoptando Python como lenguaje de programación porque los estudiantes no tienen que escribir todo eso formal para empezar. Su único problema sería la parte de rendimiento, ya que Python probablemente nunca será tan rápido como un programa compilado de C ++.

Le aconsejaría que tome un par de semanas para conocer los lenguajes de programación que está considerando. Verificaría a Ruby también. ¿Tal vez jugar un poco con Haskell?

Según tengo entendido, Python parece estar bien equipado para lidiar con todo lo que estás hablando. XML, búsquedas de bases de datos, validación, análisis. Por lo general, es una opción segura, no solo por la experiencia de programación fácil y divertida, pero si estás atrapado, hay una comunidad increíble en todo el idioma que está feliz de ayudar.


Si puede salirse con la suya usando Python, Ruby, Groovy o Perl vs. C ++, sería mejor que vaya con uno de estos idiomas de nivel superior. La productividad aumentará en gran medida. Si encuentra que necesita más rendimiento, entonces vaya con Java. Todos deberían conocer y usar al menos un lenguaje de tipado dinámico.


debería moverse a python para que languange haga todo lo posible en la creación de redes, si necesita un cambio más rápido a c / c ++


El rendimiento en Python puede ser un gran problema. Una vez tuve que crear un programa que incluía un algoritmo de optimización en la lista de tareas. Comencé con Python, lo creé súper rápido y limpio, y luego vi que tomaría años dar resultado. Reescribiéndolo línea por línea a C ++ resultó en una mejora de la velocidad de más de 100x ...

Por lo tanto, a veces no se trata de una pérdida de rendimiento del 5-10% como puede ver. Deberías investigarlo en tu caso (¿tal vez una pequeña prueba?).


Si está de acuerdo con quedarse con un lenguaje compilado, me quedaría con C ++ y le sugiero que elija un buen conjunto de bibliotecas y enseñe a los novatos sobre el uso correcto y la adherencia a patrones sólidos.

Si logra encontrar un conjunto agradable de bibliotecas, será fácil para los novatos aprender a escribir código sólido. Mi (actual) preferencia personal es la biblioteca de la clase Qt porque hace que el manejo de la memoria sea fácil y seguro y es agradable trabajar con él. También cuenta con soporte para análisis y generación de XML, cuenta con las capacidades de red integradas de regexp, es multiplataforma, ... y también es muy útil para sistemas sin GUI.

Para mí, es una gran diferencia trabajar con C ++, biblioteca std y STL y trabajar con una potente biblioteca como Qt. Probablemente, también es muy valioso buscar cupones para aumentar.


Si la naturaleza del proyecto que está haciendo le permite incluso contemplar tal movimiento, entonces muévase (suponiendo que tenga alguna pista). Sin embargo, en muchos proyectos de C ++, su única opción es bajar uno o dos niveles de abstracción (por ejemplo, a C o ensamblaje).


Sugeriría probar groovy. El soporte XML es bueno y el análisis y la validación de datos no deberían ser difíciles.

Sin embargo, algunas personas señalaron que la migración podría no ser la mejor idea. ¿No puedes tratar de factorizar elementos comunes en "objetos macher" y "validar objetos" para que los nuevos programadores usen tu biblioteca C ++ en lugar de intentar escribir un código nuevo propenso a errores que solo duplica los fragmentos existentes?

También asegúrate de usar archivos modernos IO (iostream) y no C como IO en C ++, eso debería ayudar mucho con los problemas de memoria.

También buscar las bibliotecas de impulso podría ser útil.


Estoy de acuerdo con los demás, debes quedarte con C ++. Cambiar a un idioma no compilado es un paso atrás. Si bien muchos programadores pueden tener problemas para tratar algunos de los aspectos problemáticos del lenguaje (como los punteros), al menos la mayoría de los programadores han estado expuestos a C ++. Te recomiendo que gastes tu tiempo y dinero mejorando tu base de código y programadores en lugar de cambiar de idioma.

En cuanto a otros idiomas, es posible que desee mantener el ojo en GO lang. Un amigo mío lo usó bastante extensamente. Es un lenguaje compilado moderno. Tiende a ser claro, conciso y moderno. Las aplicaciones GO normalmente se ejecutan a velocidades comparables a las escritas en C ++ y se conecta bien con la web. No es muy maduro en este momento, pero parece prometedor.

¡Buena suerte!


Otra alternativa es incorporar Python en su programa C ++. Puede mantener gran parte de su aplicación igual, y hacer llamadas a Python para las piezas que cambian a menudo, o necesita la flexibilidad que proporciona un lenguaje de scripting.

De los documentos de Python

En los capítulos anteriores se discutió cómo extender Python, es decir, cómo extender la funcionalidad de Python adjuntando una biblioteca de funciones de C. También es posible hacerlo al revés: enriquezca su aplicación C / C ++ incorporando Python en ella. Incrustar proporciona a su aplicación la capacidad de implementar parte de la funcionalidad de su aplicación en Python en lugar de C o C ++. Esto puede ser usado para muchos propósitos; Un ejemplo sería permitir a los usuarios adaptar la aplicación a sus necesidades escribiendo algunos scripts en Python. También puede usarlo usted mismo si parte de la funcionalidad se puede escribir en Python más fácilmente.