2010-10-05 16 views
15

me gusta Haskell y muchas cosas relacionadas con ella como su tipo de motor, gran cantidad de paquetes en Hackage, agradable comunidad, el desarrollo activo, etc.Haskell o D para la aplicación de escritorio GUI?

Otoh, he tenido la experiencia de que algunas personas se dieron por vencidos en nuestro proyecto planificado teniendo en cuenta Haskell demasiado complicado (mónadas, mucha jerga de la academia ...) para asimilar (proveniente del fondo de C++), por lo que podría ser más sencillo incorporar algunos desarrolladores a nuestro proyecto de código abierto si usáramos D.

Nosotros desea desarrollar una aplicación de escritorio general que necesita tener back-end de base de datos (probablemente sqlite3), usar C-lib para algunas tareas computacionales extensas (cálculo de efemérides) y usar Qt toolkit ya que esperamos proporcionar una versión 'ligera' para MeeGo en el futuro .

La capacidad de documentar el código fuente de manera fácil así como el mantenimiento son factores importantes ya que nuestra lista de características es larga y considerando que desarrollaremos en nuestro tiempo libre, puede requerir mucho tiempo escribir todo lo que nos gustaría.

Python & otros lenguajes de scripts son demasiado lentos para el proyecto y no quiero volver a C++ después de tantos años, por ejemplo, prefiero un poco más de programación de alto nivel ... Sin entrar en demasiados detalles, me ' También se excluyeron algunos otros lenguajes (Go, Clojure, Java ...) que llevan la lista a Haskell vs D.

Una preocupación con respecto a D es que recientemente se suspendió el proyecto QtD, por lo que tengo curiosidad si en el corto el término uno incluso puede contar D como una opción adecuada.

¿Algún pro/contra cuál podría ser más adecuado como lenguaje de programación general que cubre las plataformas Linux/MaC/Windows?

Editéme: Déjenme agregar el enlace al post que envié a la lista D donde explico con más detalle acerca de nuestros requisitos.

+4

¿Ha excluido Scala de su lista? Se encuentra más o menos entre la fría elegancia de Haskell y la potencia bruta de los derivados de C++. Obtiene un estilo funcional, pero una sintaxis micro orientada a C++, y la imperativa palanca si realmente la necesita. Y tiene una gran selección de librerías de GUI maduras, no solo Swing sino también SWT, GWT e incluso un enlace Qt, junto con una buena independencia de la plataforma. – Landei

+0

@Landei: También puedo afirmar por experiencia personal que no es tan difícil lograr que otros programadores participen en proyectos de Scala. Pueden seguir codificando en el mismo estilo que usaron en Java o C++, y al mismo tiempo aprecian la "magia" funcional que esos programadores funcionales en el equipo pueden trabajar, porque pueden verla en el mismo contexto. como su propio código y ven directamente la simplicidad del enfoque, incluso cuando no pueden (aún) escribir algo así como ellos mismos. – mokus

+4

Simplemente no veo lo que se supone que debemos hacer aquí para ayudar. Ha reducido sus opciones a dos idiomas no convencionales, sin explicación ("Sin entrar en demasiados detalles ..."), ¿y se supone que debemos decirle qué camino tomar? –

Respuesta

6

me gusta la idea de su comentario:

Python otros & lenguajes de script son demasiado lentos para este proyecto

Haskell escrito en un estilo directo será probablemente menos de un orden de magnitud más rápido que python. Es posible, mediante una minuciosa revisión de los detalles de un programa Haskell, hacerlo tan rápido como un programa C de bajo nivel, pero es complicado, lleva mucho tiempo y requiere mucho conocimiento, por ejemplo. Mecanismo de generación de código de GHC.

Usted dice que ya está utilizando enlaces C, entonces, ¿qué importancia tiene la velocidad? Me preocupa que estés tirando muchas herramientas geniales basadas en la suposición de que no has verificado. Parece que quieres una herramienta con gran soporte de biblioteca más que cualquier otra cosa.

¿Qué hay de Scala, Scheme, C#/VB.NET (en mono)? No me puedo imaginar qué criterios extraños podrían hacer que restrinja sus opciones a Haskell y a D.

Dicho esto, Haskell es un excelente lenguaje. Si se adapta a tu proyecto, ve por ello. Solo abre tu mente un poco para que no elijas a Haskell por el placer de hacerlo, cuando hay alguna otra herramienta que te permita hacer el 10% del trabajo con los mismos resultados.

+0

Incluso si no escribe para la velocidad, Haskell está ligado estáticamente, no está orientado a objetos (no es bastante raro el despacho dinámico en haskell, por no mencionar el espacio en el disco), y probablemente ghc tiene más de un truco en la manga con toda esa bondad estática e inmutable. Python es un lenguaje extremadamente dinámico y aún no lo es (se está haciendo un buen trabajo) que es rápido para un lenguaje muy dinámico. –

+4

El tiroteo en el lenguaje de programación parece indicar que Haskell/GHC es 10-20 veces más rápido que CPython (según la plataforma). ¿Cuál es su base para afirmar que GHC produce código que es "menos que un pedido de una magnitud" más rápido? Suponiendo que tome una "magnitud" para ser un factor de 10, parece estar probadamente equivocado. – keiter

+1

@luqui: otro proyecto que se dirige prácticamente al mismo dominio de problemas usó python con el mismo C-lib y fue demasiado lento y fue a C++. Necesitamos solo un C-lib específico (Swiss Ephemeris), la mayoría de las libs tienen que estar escritas en el idioma nativo. Simplemente no me gusta el estilo C# y Java de VM ... Probé un poco con Scheme, pero no soy Lisp-fan. – gour

1

La última vez que escuché que las uniones gkk + y wxWidget haskell eran más ampliamente utilizadas (posiblemente más libres de errores) que las qt.

¿Qué pasa con scala ya sea con widgit nativa de Java o con qt java bindings-qtjambi, al mirar su sitio web parece que es bastante compatible con la comunidad (que ya tienen una versión 4.7 beta).

+0

Eso es verdad. Estaba considerando gtk2hs, pero las personas que trabajan en el puerto Mac GTK me dijeron que wx es mejor, pero no hay wxQT si queremos apuntar a MeeGo en el futuro, por eso consideramos Qt. Scala está demasiado cerca de Java para mis preferencias. – gour

-1

Python puede ser lento, y C++ puede ser feo, pero aquellos que insisten en trabajar en su lenguaje oscuro favorito deben estar preparados para trabajar solos.

Ni Haskell ni D son lo suficientemente populares para que sea probable que alguna vez atraigas a un único desarrollador a tu proyecto, a menos que creas que estás desarrollando la aplicación que será tu lenguaje. fue para Ruby.

+3

Puede ser así, pero cuando uno trabaja en un proyecto de pasatiempo y lo da de forma gratuita, se espera que se divierta con él por más "oscuro" que pueda parecer. Si el proyecto fuera mi pan de cada día, probablemente pensaría diferente y escucharía mi trabajo, pero aquí no tengo ninguno. ;) – gour

+2

Vaya ... s/job/boss :-) – gour

+11

"para que sea probable que alguna vez atraigas a un único desarrollador a tu proyecto": no estás familiarizado con la comunidad Haskell. –

11

Vamos a detallar algunos requisitos aquí, y trataré de hacer el caso de Haskell. Tal vez los fanáticos de D u otros podrían intentar hacer lo mismo.

  • aplicación de escritorio

de duda utilizado para aplicaciones de escritorio y de servidor Así Haskell. Las herramientas están disponibles para todos los escritorios modernos, simplemente usando the Haskell Platform.

  • base de datos back-end

backends de bases de datos bien conocidos por Haskell, que tienen un uso significativo, son HDBC-* y sqlite, aunque hay many others.

Otros grupos comerciales que han utilizado aplicaciones basadas en bases de datos en Haskell incluyen: Galois (nuestra biblioteca sqlite está vinculada anteriormente); Deutsche Bank (ver talk); Hustler Turf Equipment (sede de HDBC).

  • bibliotecas de C (por lo tanto Fijaciones FFI)

Haskell tiene un nivel alto, ampliamente utilizado FFI, que es una parte estándar de Haskell 2010.

  • El uso de Qt

qtHaskell fue desarrollado para una aplicación comercial, y es utilizado por ejemplo JoyRide Labs para sus juegos comerciales.

  • Fuente documentación de código

Haddock es ampliamente utilizado. Otras herramientas de análisis como: graphmod y sourcegraph también ayudan con la documentación de requisitos.

  • de comunidad

Varios usuarios comerciales han citado pureza y tipos fuertes como aliviar la carga mantenimiento de aplicaciones a través de los ciclos de proyectos largos, ya que hacen más fácil hacer cambios locales, seguros de código. La pureza reduce la complejidad entre los componentes y los tipos aseguran que las refactorizaciones sean correctas.

  • Otros hechos

tamaño de la comunidad - la comunidad de código abierto Haskell está creciendo ahora, a la par de otras grandes lenguas de PF (Erlang, Scala). Los usuarios comerciales están financiando el desarrollo directo de GHC, asegurando su disponibilidad a largo plazo, y hay muchos experience reports de los cuales extraer. Hackage y Cabal ayudan a mitigar el riesgo al facilitar el trabajo de código abierto, ahorrándole tiempo.

+0

"qtHaskell fue desarrollado para una aplicación comercial, y es utilizado por, por ejemplo, JoyRide Labs para sus juegos comerciales". - ¿tiene alguna información sobre el estado de este proyecto, si se volverá más abierto, mapa de ruta, etc.? En el lado D, QtD está suspendido, y este es uno de los argumentos más contundentes para Haskell ... – gour

+0

De acuerdo con qtHaskell [documentación] (http://qthaskell.berlios.de/doc/userGuide/license.html), el la biblioteca tiene licencia GPL? – eevar

+0

nice, no sabía acerca de qtHaskell –

3

¿No son los lenguajes de programación, como las novias, los sándwiches y los juegos mecánicos? Una vez que eliminas la basura, tus favoritos son más sobre ti que ellos.

Dado que ni Haskell ni D son basura y ambos son capaces de manejar los elementos que usted menciona (excepto por el soporte de Qt listo para usar, si realmente lo necesita, es posible que D no funcione), tómese un tiempo para averiguar cuál funciona mejor para usted y su idiosincrasia. Construye un prototipo con cada idioma. Obtener algunos datos de sqlite y mostrarlo en una interfaz gráfica de usuario. Si aún no está decidido, construya cada prototipo en un sistema operativo diferente para asegurarse de que el desarrollo multiplataforma sea el que espera.

Podemos repetir lo que hemos escuchado sobre el caviar y compartir nuestras experiencias personales, pero tendrá que intentarlo para saber si le gusta.

+0

estás en lo correcto. Trabajar en proyectos de código abierto tiene mucho que ver con nosotros. ;) Como estoy familiarizado con lo que está disponible en Haskell-world, comencé a explorar el lado D (herramientas de soporte, libs ..) y luego lo sabremos. Quizás algo cambie con respecto al soporte de GUI también. – gour

1

Recientemente comencé a aprender Haskell y medí el tiempo para encontrar un ejemplo simple que se encuentra en "Aprende Haskell para bien". El ejemplo escribe todos los rectángulos correctos con lados enteros inferiores a 400 (en el tutorial era menos de 10, ahora sé por qué). El tiempo en WinGHCi fue> 34s (en un núcleo 6 de 3.3 Ghz AMD, 64 bits de Windows 7), sin mencionar el uso de memoria indicado ~ 6GB. Para una comparación escribí este programa en Ada (ciclos anidados triples) y el tiempo fue < 0.1s. Yo diría que deberías ahorrarte mucha vergüenza y elegir D. D está en la misma categoría que Ada/C++ (en realidad toma mucho de Ada) pero tiene muchas características modernas y un compilador gratuito muy bueno. Hay un libro reciente sobre D de Alexandrescu y, después de leer buena parte de él, puedo testificar que puedes aprender el idioma por completo en cuestión de semanas (en lugar de años en el caso de Haskell).

+1

"Yo diría que debería ahorrarse mucha vergüenza y elegir D" - Lo hice y decidí usar D para nuestro proyecto. – gour

+8

Intenté hacer esto en mi computadora con el programa compilado. Tardó <0.3s en ejecutarse. Con una firma escrita a mano 'rightTriangles :: [(Int, Int, Int)]', tomó <0.05s. Se supone que GHCi es un entorno de depuración. Usted comparó las manzanas con los cerdos :) – Phil

+0

No creo que un entorno de depuración podría introducir esta magnitud de la diferencia. Sin embargo, me refería específicamente al ejemplo de "Aprende un Haskell para bien", que utilizaba listas de comprensión que usaban listas generadas dinámicamente y filtros para mostrar (probablemente) el Haskell "típico". De hecho, decidí probar el código porque para mis ojos imperativos solo se veía horrible. Otro horror que me alejó de este lenguaje supuestamente fue la implementación "hermosa" del algoritmo de ordenación rápida que era claramente O (n^2). – Nylus

0

quiero decir por qué yo no usaría D para el proyecto:

El estado de la cadena de herramientas del sistema es de miedo. Hay un compilador DMC que parece estar funcionando en Windows y Linux. Este nunca irá en código abierto y parece ser un proyecto favorito de Walter Bright, no de Digital Mars.

El compilador gdc tiene errores y funciona solo con un D 1.0, la mayoría de las extensiones 2.0 no están disponibles. El proyecto parece no tener mantenedores y la fuente de GCC es un monstruo total, así que no esperes que haya muchas personas que se encargarán de este proyecto.

El compilador llvm tiene errores y funciona solo estable con un subconjunto de D 2.0. El proyecto parece tener un mantenedor pero avanza lentamente.

Y el estado de soporte para cualquier otra cosa que 32bit Intel es débil. No estoy seguro acerca de amd64 y creo que no hay esperanza de obtener soporte para ARM.

En base a esto, perdí toda esperanza de que D tenga suficientes desarrolladores para ser una selección de idioma guardado para una empresa que hace una aplicación de misión crítica más grande. Lucharás con la cadena de herramientas e incluso rezarás para volver a C++ a menudo.

No puedo dejar de hacer comentarios sobre Haskell, otros entonces usted no debe esperar que los programadores se hagan expertos en Haskell. Esta podría ser una razón para renunciar a su trabajo; seguramente sería una razón para mí.

+1

Estoy seguro de que Walter Bright está siguiendo su proyecto favorito a pesar de las grandes pelucas en el Marte Digital: o). –

+3

El compilador digital Mars D actualmente funciona en Windows, Linux, OS X y FreeBSD. ¡Las cosas son mejores en el Marte Digital ahora que los peces gordos han sido despedidos! –

+0

¿Y dónde está 64bit Digital Mars? – Lothar

Cuestiones relacionadas