50 votos

¿Por qué C++ sigue siendo un lenguaje muy popular en las finanzas cuantitativas?

Tenía que hacer esta pregunta después de leer las respuestas a ¿Qué lenguajes de programación son los más utilizados en las finanzas cuantitativas? Tengo entendido que los programas en C++ se pueden optimizar bastante bien y son más rápidos que cualquier otra cosa. Pero en esta época, el rendimiento de un programa escrito en un lenguaje basado en frameworks como C# y Java puede estar bastante cerca del de C++, mientras que el coste de mantenimiento del programa sería menor que el de C++. Pero, ¿por qué C++ sigue siendo un lenguaje muy popular en QF?

0 votos

IMO Esta pregunta es inapropiada para quant.SE. No aporta ninguna prueba de que en realidad es la lengua más popular. Por favor, busque en el sitio otras preguntas de programación para ver cómo se ha discutido esto en el pasado.

2 votos

@Belmont de hecho encontré un faq en este sitio que dice que C++ es el más popular en QF. Eso llevó a esta pregunta. Pero no me importa mover esta pregunta a un sitio más apropiado. Por favor, hazlo si es necesario.

1 votos

@Taesung: ¿Podrías dar la referencia? O quizás deberías cambiar la pregunta de "sigue siendo el más popular" a "sigue siendo muy popular".

50voto

Chethan S. Puntos 2210

Los otros carteles ya han señalado que el uso predominante de C++ parece ser debido a razones históricas y a la falta de voluntad de cambio. Esas razones no son las que la gente debería aplicar. Si quieren real razones para usar C++, qué tal lo siguiente:

  • Una potente infraestructura. Echa un vistazo a Intel Parallel Studio para un ejemplo.
  • Rendimiento comparado con .Net o Java (ver mi curso sobre HPC ). Cuando cada acceso a un elemento del array comprueba los límites y lanza excepciones, sabes que estás perdiendo ciclos de CPU ahí.
  • Paralelización. El ecosistema C++ tiene una paralelización muy superior tanto en modo "ciego" (OpenMP vs TPL's Parallel ) y el modo explícito (Intel TBB vs TPL)
  • Muchos SDK, sobre todo CUDA, basan su desarrollo en C/C++.
  • Posibilidad de invocar instrucciones de bajo nivel de la CPU (por ejemplo, trabajar con intrínsecos SSE).

Por otro lado, C++ es

  • Extremadamente ruidoso. Con todas las cabeceras, directivas de inclusión, friend declaraciones de clase, y miríadas de otras cosas redundantes.
  • Tiene bibliotecas difíciles de usar (STL, Boost) con mecanismos muy crípticos a nivel global. Piensa en bind_2nd :)
  • El soporte del editor es muy inferior en comparación con IDEA/ReSharper. La navegación, la refactorización, el análisis - todo es más débil o inexistente. Esto va a ser mejorado en un futuro próximo tanto para VS como para la edición independiente.
  • Los errores del compilador son más que crípticos. Clang intenta arreglarlo hasta cierto punto, pero las cosas siguen siendo crípticas, sólo que no son tan abismalmente malas como antes.

Y por cierto, para el usuario típico, la diferencia de rendimiento entre C++ y, digamos, C# no será tan pronunciada.

0 votos

Gracias por su respuesta. Efectivamente, no sabía que todavía hay tanta diferencia de rendimiento. Entonces, supongo que es obvio usar C++ para sistemas especialmente QF.

4 votos

"Cuando cada acceso a un elemento del array comprueba los límites y lanza excepciones, sabes que estás perdiendo ciclos de CPU ahí". Esto no es cierto. El JIT eliminará muchas comprobaciones de los límites de los arrays. El rendimiento computacional puro (ignorando la asignación/desasignación de memoria) bajo el tiempo de ejecución de .NET (ignorando la vectorización) es bastante cercano al rendimiento de C++ en bruto.

4 votos

Coincido con Mehrdad en cuanto a Java. He sido capaz de diseñar fácilmente modelos de comercio cuantitativo basados en Java que eran tan rápidos como los de C++. He trabajado en ambos lenguajes en diferentes empresas y puedo decir que Java bien escrito puede ser tan rápido como C++.

23voto

Jordan S. Jones Puntos 1023

La razón principal es que los comerciantes/cuentistas que actualmente están en el negocio a menudo aprendieron C++ en su formación en lugar de C#, naturalmente utilizaron este lenguaje al iniciar nuevos proyectos.

Evolucionará gradualmente, supongo que se podría haber preguntado "cuál es la razón por la que cobol sigue siendo el lenguaje más popular en Finanzas" hace 20 años.

También la mayoría de los proyectos en producción utilizan C++, pero creo que ahora la mayoría de los nuevos proyectos evolucionan gradualmente hacia C#/Java.

0 votos

La analogía con Cobol tiene sentido. Me pregunto si hay alguna razón oculta que me haya perdido.

0 votos

Este es un buen punto: me he visto obligado a escribir algo en C# el mes pasado porque una API sólo estaba disponible en C#. Decían que C++ estaba soportado, pero no daban ejemplos de uso, y básicamente se negaban a responder a preguntas relacionadas con C++.

0 votos

Tal vez, pero las bibliotecas C++ modernas como Boost (y todo lo que se ha añadido a TR1/TR2 y C++11 derivado/inspirado por Boost) han hecho de C++ un lenguaje mucho más agradable de usar.

22voto

Alex. S. Puntos 461

Recogida de basura. El rendimiento amortizado entre C++ y los lenguajes más modernos es similar, pero cuando tu montón se hace grande, ¡una GC puede tardar 100ms o más! Eso es una eternidad, y no es aceptable para nada con requisitos de tiempo real.

2 votos

¡De acuerdo! La latencia es un factor clave en la aplicación del QF.

0 votos

La recolección de basura es, en efecto, una gran preocupación, pero ten en cuenta que siempre tienes el control sobre cuándo se producirá la recolección de basura. Es un equilibrio entre sufrir fugas de memoria y tener un sistema que puede necesitar ser ajustado.

3 votos

Honestamente, 100ms es absurdo para la recolección de basura. Algo así es más bien la reliquia de un código mal perfilado.

18voto

penti Puntos 93

No sé si el más popular, pero seguro que lo es. Creo que hay varias razones para ello, que no sólo se aplican a QF:

  • Es un lenguaje maduro con muchos años de desarrollo a sus espaldas
  • Hay muchas personas que son capaces de programarlo
  • Hay muchos libros, tutoriales, sitios web y comunidades disponibles (¡efecto red!)
  • Es rápido
  • Hay muchas bibliotecas disponibles (también orientadas a las matemáticas y a los cuantos) y es transparente lo que ocurre dentro de estas bibliotecas (lo que a veces no ocurre con las cajas de herramientas y los sistemas de lenguajes superiores propietarios)
  • Existen sofisticados compiladores gratuitos que permiten al mundo académico y básicamente a todo el mundo empezar a explorar el lenguaje
  • Es un híbrido con el que se puede -pero no es necesario- programar de forma orientada a objetos
  • El código resultante puede funcionar por sí solo, pero también puede conectarse a otros sistemas de programación

Hay pocos lenguajes que reúnan todas estas características, pero finalmente habrá una transición, al menos, hacia C# y Java (esto ya está ocurriendo).

4 votos

Para resumir su respuesta: "Aversión al riesgo" ;)

0 votos

@wburzyns: Hay un dicho referente a los ordenadores: "Nunca cambies un sistema en funcionamiento" ;-)

12voto

Can Berk Güder Puntos 661

La gente utiliza C++ porque ofrece un equilibrio entre rendimiento y comodidad. Es cierto que se puede conseguir que Java sea (casi) tan rápido como C++, pero hay que esforzarse mucho. Por otro lado, un código C++ de calidad media será mucho más rápido que un código Java de calidad media. Lo sé por experiencia propia.

0 votos

Me pregunto cómo definir la "calidad media". ¿Se trata de una escala subjetiva que tiene en cuenta los prejuicios personales?

6 votos

@user492238 Subjetivo, como toda la discusión sobre esta cuestión.

0 votos

@user492238 la media se describe aquí como valor esperado EX donde X es el tiempo de ejecución del programa elegido

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X