Veo que la mayoría de las aplicaciones que incluyen contenido de GUI pesado generalmente se desarrollan en C ++. La mayoría de los juegos / navegadores están codificados en C ++.
¿No podemos desarrollar mejores aplicaciones GUI con los últimos lenguajes dinámicos? Sé que Java no sería una gran elección. Pero, ¿qué pasa con los lenguajes como Python que se construyen de forma nativa en C? ¿No se supone que los últimos idiomas son mejores que sus antepasados? ¿Por qué todavía tenemos que preferir el antiguo C ++ sobre los últimos lenguajes?
Y también me gustaría saber, ¿qué es lo que es responsable en C ++, de la mejor velocidad de procesamiento de la GUI? Por otro lado, ¿qué es lo que les falta a los otros idiomas más recientes?
programming-languages
c++
Vamsi Emani
fuente
fuente
Respuestas:
Soy una de esas personas que escriben aplicaciones GUI de C ++ (principalmente para Windows). Con Qt, para ser precisos. Mis razones:
new
, rara vez hagodelete
algo explícitamente, porque uso punteros inteligentes o laQObject
jerarquía.Como puede ver, estas son principalmente preferencias personales. Me parece importante que mi trabajo sea agradable y C ++ me lo proporciona.
fuente
Porque la velocidad importa.
Los juegos usan C ++ para las tareas principales, donde el rendimiento es importante. Utilizan lenguajes dinámicos para tareas de secuencias de comandos donde la flexibilidad es importante.
Aplicaciones GUI de escritorio : Visual Studio, por ejemplo, está escrito en .NET y no en C ++ nativo. Parece funcionar bastante bien para un IDE, ya que el IDE en sí no necesita realizar muchas tareas intensas de rendimiento. (El compilador, el enlazador y otras herramientas no están necesariamente escritos en .NET, aunque como wawa señala en un comentario, algunos parecen estarlo (por ejemplo, VB.NET))
Los navegadores también deben ser rápidos. Después de todo, son una especie de sistema operativo secundario. Por otro lado, puede argumentar que grandes partes de Firefox en realidad están "escritas" en JavaScript, ya que el marco de trabajo de Mozilla parece depender en gran medida de JavaScript.
En resumen: no diría que C ++ es necesariamente preferido, pero si tienes un cuello de botella en el rendimiento, tienes que acercarte al metal y luego te encuentras con C ++ (bueno, o C). A veces será más fácil hacer todo en C ++, un lenguaje.
fuente
Las aplicaciones GUI que ves escritas en C ++ generalmente se realizan debido a razones heredadas. Python (con Qt o Gtk) es muy viable para aplicaciones GUI, como lo es C # si trabaja en una casa de Windows. Al iniciar algo nuevo, o bien está muy preferido mucho a C ++ debido a la falta de trabajo de plomería que se tiene que hacer.
fuente
Porque no importa cuántas pruebas de rendimiento muestren .NET y las multitudes similares, no importa cuán cerca estén en los puntos de referencia, al final, la aplicación C ++ se destaca. Es más rápido en el arranque en frío, es más ágil y tiene más formas de mejorarlo.
He escuchado numerosas pruebas en las fases de inicio del proyecto de que .NET es el camino a seguir, pero una vez que se elige, siempre terminan siendo un gran obstáculo.
Además, C ++ hoy en día es bastante seguro y bastante fácil de usar, especialmente con marcos como Qt o WTL.
fuente
La mayoría de los motores de juegos están codificados en C ++. También muchos motores de navegador están codificados en C ++. Pero la GUI del navegador a menudo se codifica utilizando algún script ligero (JavaScript, Python). Con la notable excepción de Source Engine, la mayoría de los motores de juegos también usan lenguajes de script (como Lua o Python). [para referencia: lista de juegos con guión de Lua ]
También tome la biblioteca de C ++ GUI popular como Qt. En la versión actual (4.7) usa QML para la GUI. QML es básicamente JavaScript con enlaces Qt.
Entonces, realmente no hay C ++ vs lenguajes dinámicos, es mixto.
fuente
La primera razón será: hábito (antiguo)
Segunda razón: menos confiabilidad en máquinas virtuales, intérpretes que deben instalarse, etc.
Y todavía hay algunos IDE excelentes para desarrollar código en C ++.
fuente
La razón es que tienes mucho más control sobre todo lo que sucede. Si fuera a escribir Photoshop en C #, tendría serios problemas de rendimiento para algunas tareas. En un lenguaje de nivel inferior con más control, puede tomar atajos, optimizar donde sea necesario para cosas que son más intensas. Por supuesto, esto supone que está utilizando C ++ en código no administrado, no C ++ en .NET.
Vea aquí para un ejemplo rápido.
fuente
C ++ está estáticamente tipificado. Esto permite optimizar la ejecución del código de antemano al hacer que un compilador ajuste sus abstracciones al proceso del sistema disponible en una plataforma determinada. Hasta ahora, los lenguajes dinámicos necesitan una capa de software adicional (= el intérprete) que ralentiza el acceso a los recursos del sistema.
fuente
La mayoría de las razones dadas son técnicas o "sobre la mesa" ... aquí hay razones comerciales o "debajo de la mesa":
distribuir código compilado vs distribuir código fuente. cuando se desarrolla en c / c ++, distribuye los binarios. si está desarrollando en uno de los idiomas modernos, distribuya la fuente. Es difícil vender la idea de ofuscadores a la gerencia que tiene que responder a los accionistas / inversores, así que no se moleste.
usuarios estúpidos: al menos en la mente de la gerencia. todavía perciben que sus usuarios apenas pueden hacer doble clic en un "setup.exe". Si incluye la instalación de un intérprete como parte de la configuración, sacudirán la cabeza de lado a lado.
desarrolladores antiguos: la mayoría de las personas con experiencia han existido durante mucho tiempo y no se han actualizado. programan en C ++ y no en los lenguajes más nuevos, porque no conocen los lenguajes más nuevos.
fuente
Extendería el alcance del problema desde la GUI al software que se espera sea competitivo. C ++ no impone impuestos a la plataforma de destino, ya que se refiere a la potencia de procesamiento, el tiempo de ejecución instalado, los marcos, etc. Por lo tanto, funcionará en hardware de cliente más limitado que una solución similar escrita en un lenguaje administrado / interpretado. En el caso de un software comercial exitoso, el costo de desarrollo (potencialmente más alto en el caso de C ++) se amortiza por el número de ventas.
Además, C ++ generalmente ofrece acceso directo a las API del sistema (como GUI), lo que brinda la mejor oportunidad para optimizar la utilización y diferenciarse de soluciones similares.
fuente
Creo que mucho tiene que ver con las API para los kits de herramientas GUI. Todos ellos tienen una API C / C ++, pero no todos tienen (digamos) enlaces de Python. Y a veces, los kits de herramientas en sí se escribieron teniendo en cuenta C ++, por lo que incluso si tienen soporte para otros lenguajes, no los admiten por completo (por ejemplo, no admitirán Python
tuple
como argumento).fuente
Estás mencionando navegadores y juegos como ejemplos. Ambas son aplicaciones bastante críticas para el rendimiento, por lo que tenerlas en un lenguaje de bajo nivel para la velocidad tiene sentido.
Muchas otras aplicaciones están menos relacionadas con el rendimiento y podrían escribirse fácilmente en otros idiomas. C # en particular parece ser usado mucho. (Y Obj-C, pero realmente no califica como de alto nivel, supongo. Sin embargo, es mejor que C ++).
Sin embargo, existe una cierta falta de marcos para los últimos lenguajes de programación. Por ejemplo, en realidad no hay una biblioteca GUI nativa viable para Python. Claro, puede usar PyQt o PyGtk y funcionan bien, pero al final, eso solo está interactuando con el código C nuevamente. Nuevamente, C # (y posiblemente Obj-C) parece ser la excepción y tal vez, MacRuby o IronPython podrían cambiar ese juego.
fuente
Para que un lenguaje reemplace C ++ o Java, tiene que hacer lo que se echa mucho de menos en estos lenguajes además de ejecutarlos con sus propios puntos fuertes. Además, se han realizado grandes inversiones en estos idiomas. Eso significa que hay una biblioteca C ++ estándar en muchas plataformas, que los navegadores, los juegos y dichos programas pueden usar fácilmente. Entonces seguramente habrá algo de inercia. Los idiomas tienden a despegar lentamente a diferencia de otras piezas de software.
Si lo miras, Anaconda (el programa de instalación de RedHat) ha existido durante aproximadamente 10 años, escrito en Python desde el principio. Python no era tan popular cuando Anaconda era nueva.
Google's Go (golang.org) está evolucionando muy rápido. El compilador aún no se ha arrancado. Para que despegue su popularidad, su biblioteca tiene que estabilizarse, el compilador debe ser arrancado y cada vez más personas deben usarlo. Escuché que un programa de producción fuera de Google está escrito en Go y se informa que aún no ha tenido tiempo de inactividad en su vida de poco más de un año.
fuente