Pergunta

O que é melhor para o desenvolvimento de aplicações GUI com Haskell, wxWidgets (via wxHaskell ) ou GTK (via < a href = "http://www.haskell.org/gtk2hs/" rel = "noreferrer"> Gtk2HS )?

Quais são os prós e contras de cada um? Será que variam dependendo de qual plataforma você está direcionando (eu principalmente trabalhar no OS X, mas gostaria que meus programas para trabalhar em Linux e Windows também)?

Foi útil?

Solução

[Disclaimer: Eu sou um wxHaskell mantenedor]

Ambos são estáveis ??e ligações GUI bastante completos, e você poderia escolher para a maioria dos projetos com confiança. Ambos têm algum grau de 'alto nível' ligações Haskell, mas em ambos os casos você terá de cair em vez de estilo imperativo 'C' de codificação para fazer as coisas. Minha impressão é que wxHaskell permite que você gaste um pouco mais de tempo nas ligações de alto nível, mas eu não tenho feito muito GTK2HS, e em qualquer caso, você definitivamente encontrar-se trabalhando na extremidade mais fina do invólucro para ambas as bibliotecas - e eu acho que a programação 'complexidade' geral é semelhante em ambos os casos.

Por isso, vamos dar a funcionalidade básica como um dado e concentrado sobre as diferenças. Por favor nota que eu realmente acredito que GTK2HS é uma excelente peça de trabalho, e que você vai ser feliz se você escolher. A maioria do que eu digo a seguir é uma visão pessoal sobre as diferenças, e por que eu escolher para trabalhos no e com wxHaskell mim mesmo.

GTK2HS tem uma equipe maior a trabalhar nele, e é liberado com mais regularidade. wxHaskell não é actualizada tão frequentemente, mas a equipe principal está ativo, e há correções regulares, mas com grande nova funcionalidade que está sendo adicionado um pouco mais lentamente do que gostaríamos (todos nós temos trabalhos do dia).

wxHaskell dá a verdadeira aparência aplicativo nativo em todas as plataformas suportadas fora da caixa. GTK2HS é, naturalmente, nativa no Linux e tem um bom tema nativa bastante no Windows (ou seja bom o suficiente para satisfazer a todos, mas pedantes ...), mas tem GTK look and feel no OSX, e depende de ter X11 instalado. Acredito que 'nativa' biblioteca GTK um OSX está em desenvolvimento, mas é considerado relativamente imaturo. Uma vez que este é estável, GTK2HS deve ser capaz de beneficiar facilmente do mesmo olhar 'parcialmente nativa ea sensação (por exemplo, GTK OSX imagem ).

wxHaskell é provavelmente um pouco mais fácil de construir, se você não estiver em Linux (GTK2HS provavelmente mais fácil se você for Linux hospedado), mas ambos são muito complexos para construir, para ser honesto, pois há um número significativo de dependências em ambos os casos.

É um pouco mais fácil (IMHO) para distribuir aplicações baseadas em wxHaskell, simplesmente porque tem menos dependências da biblioteca. I distribuir aplicações usando principalmente InnoSetup no Windows, e como App pacotes em OSX. Eu admito que com apenas uma pequena quantidade de trabalho extra, o mesmo poderia ser feito com GTK2HS, então este é provavelmente o argumento mais fraco em favor de wxHaskell.

É minha opinião pessoal que wxHaskell é mais amigável ao código fechado (por exemplo comerciais) desenvolvimentos. Este é, naturalmente, objecto de flame wars intermináveis, então eu só vou dizer que wxHaskell está sob a wxWidgets licenciar que permite de forma inequívoca para o desenvolvimento de código fechado. GTK2HS é LGPL, então você vai precisar de pedir ao seu advogado - embora eu deva deixar claro que muitas pessoas e empresas concluíram que LGPL é compatível com o desenvolvimento comercial; os advogados da empresa trabalham em I para concluíram que é inadequado para os nossos projectos.

Eu acho que se Linux era o meu principal plataforma de desenvolvimento e entrega, eu provavelmente usar GTK2HS. Não é, no entanto:. I entregar principalmente para Windows com OSX ocasional, e eu acho que wxHaskell é uma melhor adequação a estas plataformas, embora ambas as opções apoiar todas as três plataformas

Espero que isso irá ajudá-lo com sua escolha.

Outras dicas

A consideração é que atualmente ele é um pouco mais fácil de obter wxHaskell ao trabalho nativamente no Mac OS X. GTK2HS depende GTK, que tem uma implementação usando widgets nativos no Mac OS X, mas que a implementação não é tão facilmente construído como a implementação wxWidgets para Mac oS X é.

Portanto, se você quiser desenvolver código seja executado sem X11.app, atualmente você está um pouco melhor com wxHaskell.

Note, porém, que este está mudando rapidamente: http://www.haskell.org/haskellwiki/Gtk2Hs#Using_the_GTK.2B_OS_X_Framework mostra como usar GTK2HS com GTK + nativo no Mac OS X.

Uma das vantagens de GTK2HS é o seu apoio GLADE, tornando o desenvolvimento de simples UI muito rápido. Os combinadores de nível superior em wxHaskell mitigar a maior parte desse vantagem, mas eles exigem uma compreensão mais profunda de como você quer que sua interface para parecer e se comportar, e, portanto, são mais difíceis de utilização de forma exploratória.

Tenho informações muito incompletas, mas desde que você não têm respostas ainda, informações talvez incompleta é melhor que nada.

A pergunta a fazer é esta: é o conjunto de ferramentas apenas um wrapper em torno de C-como funcionalidade, ou há uma camada adicional que dá o kit de ferramentas mais um "nativo Haskell-like" API? Quando wxHaskell foi anunciado pela primeira vez no workshop Haskell, o desenvolvimento da API nativa Haskell parecia extremamente promissor, mas ainda estava incompleta. Parece como se a API "Haskellized" para wxHaskell ainda está sendo trabalhado, enquanto o projeto Gtk2Hs não menciona este problema em tudo. Por essa razão eu recomendo wxHaskell.

Pessoalmente, eu ficaria em algum tipo de Reactive pacote / extensão. Parece que sentar com o paradigma muito, muito mais perto. Em vez de especificar o seu material gráfico imperativamente, você pode fazê-lo de forma declarativa. Exemplo (não representante de qualquer linguagem particular ou implementação):

x, y, z              :: Int
click, buttonclicked :: Bool
x = <X coordinate of mouse>
y = <Y coordinate of mouse>
click = <Whether mouse button is currently being pressed>
z = x + y
buttonclicked = (x == 10 && y == 10 && click)

Buttonclicked e z será atualizado automaticamente a cada vez x e y mudança.

Você poderia então ter algum algum lugar lógica que é algo como isto:

if buttonclicked then <do something> else <do something else>

Isso é tudo embora muito difusa. olhar apenas em algumas interfaces reativas reais

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top