41 votes

Meilleur langage de programmation et infrastructure pour le développement d'applications de bureau multiplateformes?

Voici un scénario de la vie réelle: j'ai besoin de sélectionner une croix-plate-forme de développement de l'environnement de bureau application de l'interface utilisateur pour une petite équipe - à savoir une à deux personnes. Ce n'est pas pour une application spécifique - mais un tas de petits utilitaires pour la plupart de l'éducation, de sorte qu'ils doivent être en mesure de se connecter à des services web, jouer à certains médias, etc. Ma sœur et ma femme sont tous les deux professeurs, et les besoins de certaines applications, qui fonctionne à la fois sur Windows et Mac.

Après des recherches sur ce sujet pendant un certain temps je veux utiliser un Débordement de Pile de la communauté, comme une caisse de résonance. J'essaie d'être objectif dans ma sélection ( surtout depuis que mon choix numéro un - n'est pas que bon). Aussi j'ai personnellement développé en Ruby, PHP, Python, C++ et un peu en Java & VB.NET, donc mon avis est influencé par cela, mais je suis tout à fait pour l'apprentissage d'une nouvelle langue, si les outils adapte le besoin. Voici une liste des exigences - à peu près tous d'entre eux sont non-négociables. Rappelez-vous ceci est pour un une-deux personne de l'équipe, de développer des petits projets personnels - par conséquent, certains exigences.

Langue:

  1. Croix plate-forme / indépendant de la plateforme (au moins Windows et MacOSX soutien, Linux souhaitable)
  2. Bien documenté ( les points de bonus si il a un livre)
  3. Un bon soutien de la communauté ou d'un soutien commercial
  4. Raisonnablement rapide ( encore une fois ce n'est pas pour un MMORPG ou de stock-application de négociation, de sorte qu'il n'a pas à être incroyablement rapide)
  5. Raisonnable de la courbe d'apprentissage ( pas de Montage)
  6. Relativement rapide développement

Cadre

  1. La croix-Plate-forme Moderne natif de look & feel (tcl/tk est définitivement out), ce point est d'une importance capitale, l'utilisateur ne se soucie pas de ce qui est à l'intérieur, ils se soucient de la façon dont il ressemble et comment il fonctionne. Mais regarde est ce que vend l'application. Je sais que c'est pas si important que cela pour les développeurs, mais la plupart des utilisateurs ne fonctionnera pas dans un laid app - ils sont trop exigeants maintenant - après voir tous les eye-candy qui est sur Mac et un peu sur Windows.
  2. Bien documenté
  3. Un grand nombre de plugins / libs pour les tâches courantes (PDF, CSV/XLS, sons-mp3/ogg, etc)
  4. Raisonnable, facilité d'installation / utilisation
  5. Facilité de déploiement
  6. Prise en charge de certains ou de tous les grands DBs: MySQL, SQLite, PostgreSQL, MSSQL, Oracle, DB/2
  7. Un bon support pour les technologies de réseau: REST ou SOAP, ftp, ssh, etc

Voici mes réflexions sur tous les grands joueurs sans ordre particulier:

Ruby:

J'ai regardé wxWidgets, qtruby, fxruby, titane, tcl/tk, bouline, gtk+

Pour:

  • bonne croix-plate-forme de soutien
  • beaucoup de pierres précieuses
  • le développement rapide de
  • bonne communauté

Inconvénients:

  • impossible de compiler dans un binaire
  • pas de kits graphiques prend en charge native de regarder à travers le conseil d'administration
  • la plupart de l'absence d'une documentation appropriée

Python:

J'ai regardé wxWidgets, qtruby, fxruby, titane, tcl/tk, gtk+ (et divers python permutations de celles-ci)

Pour:

  • bonne croix-plate-forme de soutien
  • beaucoup de libs
  • le développement rapide de
  • bonne communauté
  • relativement facile à installer et à créer un fichier binaire

Inconvénients:

  • pas de kits graphiques prend en charge native de regarder à travers le conseil d'administration

Realbasic:

Pour:

  • bonne croix-plate-forme de soutien
  • bon support commercial
  • le développement rapide de
  • très facile à installer et créer un fichier binaire
  • presque une interface native (quelques problèmes avec cocoa sur mac)

Inconvénients:

  • la plupart des plugins additionnels sont commerciales
  • la réputation de mauvais code de pratiques (la nature de la bête je suppose)
  • la communauté des utilisateurs est en manque un peu

Java:

Pour:

  • bonne croix-plate-forme de soutien
  • bon support commercial
  • ÉTENDUE de la richesse de la documentation et des bibliothèques
  • rapide et fiable

Inconvénients:

  • plus difficile à déployer
  • pas de GUI toolkit prend en charge native de regarder à travers le conseil d'administration
  • plus raide de la courbe d'apprentissage.
  • complexe dev environmnet

C++:

Pour:

  • bonne croix-plate-forme de soutien
  • bonne communauté
  • ÉTENDUE de la richesse de la documentation et des bibliothèques
  • très vite

Inconvénients:

  • plus difficile à développer
  • plus raide de la courbe d'apprentissage.
  • complexe environnement de dev
  • pas bon outil graphique kit natif de look & feel.

C#:

À peu près la seule solution est Mono Projet

Pour:

  • bonne croix-plate-forme de soutien
  • bon support commercial
  • presque une interface native (possible de le lier à l'interface graphique native api par la plate-forme de base)
  • ÉTENDUE de la richesse de la documentation et des bibliothèques
  • très vite

Inconvénients:

  • plus difficile à développer
  • plus raide de la courbe d'apprentissage.
  • complexe environnement de dev

S'il vous plaît laissez-moi savoir ce que vous en pensez. Ai-je raté quelque chose? Pouvez-vous suggérer d'autres solutions. Il y a également une option JavaScript - utilisation de Titane SDK - alors que c'est moderne, c'est du JavaScript, et il n'est pas natif de la Recherche.

RÉPONSES:

  1. Explique un peu plus sur l'objectif pour les applications par demande ci-dessous.
  2. Sur le sujet de wxWidgets, GTK, etc - je le répète: l'exigence primordiale est originaire de REGARDER et de se SENTIR à la fois sur Windows et Mac et FACILITÉ D'UTILISATION
  3. J'ai peut-être tort à propos de Qt, mais je ne l'ai essayé avec Ruby - et je n'arrivais pas à compiler dans un bon paquet qui semble être un problème pour beaucoup de gens, mais c'est un Rubis problème, pas de Qt - j'ai eu tort de le rejeter.
  4. Je vous remercie pour C++ vs C# gaffe, je pensais à C#, mais tapé C++ sans réfléchir. Mis à jour.

28voto

Je suis sûr que je vais me faire downvoted sur ce point car il ne répond pas à la question. Je pense, toutefois, que cette question doit être volontaire, car c'est un plat impossibilité.

En particulier, ce qui suit est impossible:

  1. La croix-Plate-forme Moderne natif de look & feel (tcl/tk est définitivement out), ce point est d'une importance capitale, l'utilisateur ne se soucie pas de ce qui est à l'intérieur, la voiture à quoi il ressemble et comment il fonctionne. Mais regarde est ce que vend l'application. Je sais que c'est pas si important que cela pour les développeurs, mais la plupart des utilisateurs ne PEUVENT PAS travailler dans une vilaine app - ils sont trop exigeants maintenant - après voir tous les eye-candy qui est sur Mac et un peu sur Windows.

C'est juste carrément ne va pas arriver. Il n'y a pas de cross-platform GUI de cadres que d'accomplir cette tâche. Vous serez à la recherche en vain un.

Alors...

Ce qu'il reste à faire pour vous est le code de vos applications correctement. Les diviser en semi-indépendante morceaux comme ceci:

  • PD (problème de domaine): la fonctionnalité que vous essayez d'accomplir.
  • HI (human interface): votre interface graphique, dans ce cas.
  • SI (système d'interface): des choses relatives à l'endroit où le sous-jacentes des systèmes d'exploitation différents dans des questions telles que l'allocation de la mémoire et de la gestion, de la gestion des tâches, les systèmes de fichiers, etc.
  • DS (stockage de données): ce pourrait être des systèmes de fichiers, mais plus vraisemblablement, c'est des choses comme des bases de données MySQL -- vs SQL Server vs PostgreSQL vs NoSQL magasins vs bla bla bla bla bla.

Vous pouvez également envisager un cinquième morceau:

  • New york (pas encore): les choses que vous n'allez pas le faire maintenant, mais que vous espérez pour croître et ont donc besoin de penser lors de la conception et de codage.

La clé, c'est la conception de chacun de ces morceaux avec des interfaces qui ne changent pas si votre PD morceau interagit avec la DS morceau à l'aide de la même interface indépendamment de la sauvegarde de magasin de liquidation de l'aide. Il se dit, "enregistrer cet objet sous cette clé", par exemple, et dans le fond il ne le SQL (ou système de fichiers (ou NoSQL)) opérations nécessaires à la réalisation de cet objectif. De cette façon, lorsque vous devez ajouter un nouveau back-end, vous ne touchez pas votre fonctionnement PD code.

Allez à vos exemples, vous aurez à votre SALUT portion d'écrire une interface que le PD composants de savoir comment leur parler. Cette interface ne change pas, peu importe ce SALUT plate-forme que vous êtes, mais si vous voulez vraiment un natif look-and-feel, à travers de multiples plates-formes, vous n'avez pas le choix, mais pour un code distinct HI pour chaque partie. Ils peuvent même être dans des langues différentes sur chacun d'eux: C# sur Windows et Objective-C sur Macintosh, par exemple.

Il n'y a pas de moyen facile de contourner cela. Si vous (à juste titre!) insistez pour avoir une interface native sur de multiples plates-formes, vous allez écrire le SALUT des parties de votre code une fois pour chaque plate-forme. Si vous divisez votre base de code correctement, cependant, ce n'est pas trop onéreuse que vous aurez seulement être écrit le SALUT de pièces et de ne pas modifier/réécriture de la déclaration de paris (ou SI/DS/whatever) morceaux.

6voto

vonPetrushev Points 2149

Je serais certainement aller avec python + devel est le choix de bibliothèques. Il se classe grandement sur votre 1-6 liste de contrôle. Cadres / bibliothèques: Vous pouvez aller avec Qt, il a un grand soutien au développement de Qt designer/créateur, et PyQt est une grande trousse. wxWidgets est aussi un choix raisonnable, mais je n'irais pas avec les savoirs traditionnels ou gtk+. Python a aussi des tonnes de libs pour le son et les médias. Vous pouvez facilement pich sqlite pour l'application desktop, mais si vous pouvez vous permettre de centralisation, je voudrais aller avec postgresql. Pour la mise en réseau, vous pouvez utiliser le soutien léger libs, mais si vous avez besoin de quelque chose de plus grand - twisted est très puissant.

4voto

Mark Thomas Points 19281

J'essayais pyQt avant de suivre la route plus complexe Java / C, compte tenu de votre application et de la taille de votre équipe. Des articles expliquent comment déployer des applications pyQt à l' aide de py2exe.

4voto

Nemanja Trifunovic Points 17239

Cette "1.Cross Platform Modern - look & feel natif" est une requête impossible. Il n'y a pas de cadre avec un langage de programmation qui vous donne ceci. Chaque application multiplate-forme d'aspect vraiment moderne utilise une couche d'interface utilisateur distincte pour chacune des plates-formes prises en charge. Voir par exemple la source de Google Chrome pour voir ce que je veux dire.

4voto

cyco130 Points 2577

Comme d'autres l'ont souligné, le total des indigènes regard et la sensation n'est pas facilement réalisable avec l'outil existant kits mais je peux témoigner que Qt est très proche avec quelques tweeks. C'est donc mon premier choix pour de graves Bureau de développement.

Mais ce que je voudrais mentionner est Lazare et FreePascal. Il est en croissance constante dans une alternative sérieuse. Je n'ai pas de Mac une expérience avec elle, mais fonctionne très bien sous Windows et Linux. Je suis surpris que personne n'en a parlé-il encore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X