Estoy considerando escribir un nuevo producto de software. El rendimiento será crítico, por lo que desconfío de usar un lenguaje interpretado o uno que use una capa de emulación (leer java).
Lo que me lleva a pensar en usar C (o C ++), sin embargo, ambos son bastante largos en el diente. No los he usado en mucho tiempo. Supuse que en los últimos 20 años, alguien probablemente ha creado algo que es razonablemente popular, agradable de codificar y compilar.
¿Qué alternativas más modernas hay para C para escribir código compilado de alto rendimiento?
Si C ++ es una bestia diferente de lo que era hace 15 años, lo consideraría, supongo que suponía que tenía algunos problemas inherentes.
La paralelización sería importante, pero probablemente no en varias máquinas.
fuente
Respuestas:
Existe un lenguaje en desarrollo llamado The Rust Programming Language que persigue objetivos similares a los de C ++, en particular abstracciones de costo cero y un control preciso sobre la administración de la memoria. Dicho esto, es quizás el próximo candidato más notable a pesar de ser todavía muy joven.
Además de Rust, realmente no hay otras alternativas populares que se compilen en código nativo. También están Delphi y D, por supuesto, pero no son tan rápidos, populares o usados. El lenguaje Go de Google podría ser un candidato, pero aún es muy joven y apunta a un dominio un poco diferente.
Sin embargo, tenga en cuenta que C # (suponiendo que la plataforma Microsoft) y Java podrían no ser tan lentos aunque se ejecuten sobre una máquina virtual; la compilación de código justo a tiempo puede hacer algunas optimizaciones que los compiladores tradicionales anticipados no son capaces de aplicar debido a la falta de información sobre el estado y el entorno del programa.
Francamente, personalmente no consideraría a C como un candidato si C ++ es una opción, principalmente debido al hecho de que C ++ moderno es más seguro, funciona a un nivel más alto de abstracción, es más expresivo y prácticamente no tiene pérdida de rendimiento sobre C (en algunos casos C ++ es notablemente más rápido). En pocas palabras, C ++ proporciona todo lo que proporciona C y más. La mayor parte de la funcionalidad de C se considera "obsoleta" y la biblioteca estándar de C ++ proporciona alternativas mejores, más seguras, más rápidas y más intuitivas.
fuente
También está Ada , que compila el código nativo, y es portátil en varias plataformas dentro de los límites de su biblioteca estándar. El idioma está vivo y bien, con la actualización estándar de idioma más reciente actualmente en curso (conocida como Ada 2012).
Resumen rápido para aquellos que no están familiarizados con Ada:
fuente
Hace 15 años, no existía el estándar C ++. El segundo ha sido publicado el año pasado. Las mejores prácticas de C ++ cambiaron mucho en los 5 años posteriores a la publicación del estándar 98, y están cambiando nuevamente con la publicación del 11.
fuente
¿Por qué la gente siempre insiste en buscar nuevos idiomas?
C ++:
El único inconveniente de C ++ es que tienes que aprender un poco. Eso es.
Compare eso con otros idiomas que son uno o más de:
En mi humilde opinión, cuantos menos idiomas usaremos y apoyaremos, mejor será la situación.
Esto provoca mejoras automáticas en los marcos para el idioma, el soporte, la documentación, el trabajo de los comités de estandarización, mejores libros, más conocimiento, software más fácil de soportar, mejores patrones, ciclos de soporte de idiomas más largos y un código más experto escrito en el idioma.
Sé que la gente votará en contra de esto, pero piénselo de verdad.
fuente
const
problemas de corrección y cosas por el estilo. Cualquiera que haya leído C ++ efectivo (como dice Coder) y mantiene que C ++ es fácil tiene una desconexión mental.C / C ++ es bastante largo en el diente ... esto es algo bueno . Implica que se diseñaron lo suficientemente bien (ejem) que todavía son muy utilizables, que muchas personas los usan para las tareas cotidianas y que encontrará un gran grupo de desarrolladores que son expertos en ellos. La madurez es algo para atesorar.
Si pasas todo el tiempo buscando algo nuevo, solo porque es nuevo y piensas que, de alguna manera, debe ser mejor, te encontrarás con una gran decepción. Esto se aplica a los lenguajes de software, sistemas GUI (tomar nota, Microsoft y Gnome) y amantes (tomar nota, señoritas :))
Ahora, sin duda, si su experiencia con C ++ tiene 20 años, cuando el código de C ++ generalmente se codificó como C, entonces tal vez es hora de reevaluar el lenguaje, todas las características que estaban allí en el día que nunca se usaron del todo se usan mucho más hoy en día, y algunos esfuerzos de estandarización han ampliado un poco el lenguaje para que parezca muy diferente de los antiguos desarrollos de estilo C. No es que C también sea malo, ¡también es un lenguaje perfecto para muchos tipos de tareas de codificación!
fuente
El estándar actual de C ++ es C ++ 11 , que se publicó en 2011. Por lo tanto, no es un estándar de 20 años. Y ha habido numerosos estándares en el medio. Cada uno de ellos presenta numerosas mejoras de rendimiento.
Los compiladores también han estado mejorando constantemente. Son mucho mejores en optimización de lo que solían ser.
Los formatos ejecutables también han mejorado, hace 20 años tenía una salida , ahora tiene ELF .
En general, la sugerencia de que C ++ no cambió en 20 años no puede estar más lejos de la verdad.
Además, tenga en cuenta que C y C ++ son lenguajes muy diferentes.
fuente
No soy un gran experto en este lenguaje, pero creo que OCaml podría ser una opción interesante a la vista.
OCaml es un lenguaje compilado, funcional / orientado a objetos. Para una comparación de rendimiento con C ++, vea C ++ vs OCaml: comparación del rastreador de rayos . Por supuesto, este es un ejemplo muy específico y uno debería hacer pruebas más extensas para tener una mejor idea del rendimiento de OCaml.
fuente
Depende de lo que haga su producto. Si el rendimiento es realmente crítico, el idioma de elección sigue siendo FORTRAN . Tampoco descartaría Java: se usa en muchas aplicaciones de comercio financiero de alto volumen. Vale la pena echarle un vistazo a Erlang si su dominio problemático requiere una alta concurrencia. Objective-C es bueno, aunque no sé qué tan bien soportado está fuera del ecosistema de Apple (más allá de los compiladores y el tiempo de ejecución básico). También he escuchado cosas buenas sobre el rendimiento de Haskell, pero no estoy seguro de si es un rendimiento absoluto o solo un rendimiento en relación con otros lenguajes funcionales.
fuente
Cuando dice que su proyecto es sensible al rendimiento, ¿se refiere a cada línea de código del mismo? O, como es normal, ¿hay un porcentaje menor que sea crítico para el rendimiento, mientras que el resto es el código comercial habitual del molino?
Después de responder eso, ¿cuál es el mayor riesgo para su proyecto: que el resultado final sea demasiado lento o que nunca lo termine en primer lugar?
Suponiendo que responda el segundo para ambos, debe desarrollar en un lenguaje de nivel superior que admita interoperabilidad nativa (Python, Ruby, la familia .Net tienen todo esto). Primero, termina el proyecto. Luego perfile, optimice, enjuague, repita. Solo después de eso, considere volver a escribir el segmento de elección de su aplicación en código nativo e integrar ese código nativo con su producto terminado.
fuente
Vala es similar a Java y C #, compila a código nativo (o código fuente C si lo prefiere), y es muy rápido . Requiere GLib para sus bits orientados a objetos, y está escrito por hackers de Linux para hackers de Linux, por lo que si su dominio es Windows, puede que no sea muy bueno.
fuente
Objective-C es una alternativa moderna y compilada a C y C ++. Tiene gestión de memoria tanto recolectada de basura como determinista, y el tiempo de ejecución OO de paso de mensajes se ha optimizado para el rendimiento.
Está disponible a través de GCC y CLang y hay bibliotecas de aplicaciones como GNUStep y Cocotron que funcionan en varias plataformas.
Si está haciendo un trabajo de alto rendimiento, voy a suponer que es una especie de cálculo de números u otro trabajo de divide y vencerás en lugar de la interfaz de usuario, por lo que eso significa que puede hacer la interfaz de usuario en el idioma que sea más fácil para usted, por ejemplo, HTML a través de un mini servidor http.
fuente
Nunca lo he usado, pero un amigo de mis juramentos de Cython que le permite usar primitivas de estilo C en partes críticas de rendimiento de su código mientras mantiene la sintaxis general de Python y puede aprovechar al máximo las construcciones de nivel superior de Python para reducir el desarrollo tiempo en cualquier otro lugar.
fuente