8
votes

Meilleure langue compilée pour la compatibilité Mac OS X et Linux

Nous devons écrire un logiciel qui compilera et exécutera à la fois un serveur Mac OS X et Ubuntu. Nous aimerions utiliser l'objectif-C avec toute sa bonté de cacao, mais les implémentations Gnustep des pièces que nous utilisons sont cassées (dans le dernier paquet Ubuntu quand même.)

À la lumière de cela, devrions-nous utiliser C ++ (je préférerais vraiment PAS), c ou autre chose que nous n'avons pas pensé à?

Il s'agit d'un processus de serveur / d'arrière-plan qui est très intensif de ressources, Java et d'autres versions interprétées de ce logiciel effectuent beaucoup moins que la preuve de concept de l'objectif-C que nous avons écrit, nous souhaitons maintenant ré-écrire dans une langue "compilée [1]".

(NB: Certaines personnes pourraient envisager cette subjective, mais à la fin de la journée, nous devons avoir un emploi, il doit y avoir une réponse correcte raisonnablement appropriée ici).

[1] compilé aux instructions de la CPU natives, non compilées dans "codes d'octets" qui doivent ensuite être exécutées par un interprète.


6 commentaires

Pourquoi doit-il être une langue compilée , par curiosité?


Vous pouvez utiliser Objective-C sur n'importe quelle plate-forme - le compilateur Objective-C fait partie de la distribution du GCC. Le problème de la portabilité est les bibliothèques de cacao d'Apple.


Qu'est-ce qui vous fait penser que Gnustep ne le coupera pas? On dirait que vous souhaitez écrire une sorte de back-end du serveur, et vous ne devriez pas avoir de problème à faire cela en utilisant Gnustep.


@Sir Lord Mighty: Gnustep est un horrible hack. Si vous regardez le code source pour Gnustep, il dit littéralement «Ceci est un piratage» dans tout le code source. C'est parce que l'exécution de GNU Objective-C est la merde et est vraiment tombée derrière. Le système de construction que Gnustep impose aux développeurs est nulle part aussi bien que de l'utilisation d'un drapeau Extra GCC Extra d'Apple -Framework .


Il semble que la meilleure réponse serait d'utiliser Objective-C comme une extension à C, mais n'utilise aucun des trucs de framework Apple / Cocoa, (c.-à-d. NS * Stuff) et écrire des trucs comme NsurlConnection Notre.


Nous avons essayé Gnustep et certaines choses sont tout simplement cassées. NsurlConnection ne fonctionne tout simplement pas correctement. Un cas de test simple qui fonctionne sur OS / X provoque la défaillance de la segmentation sous Ubuntu.


11 Réponses :


0
votes

Je suppose que c / c ++ serait la plate-forme la plus évidente des langues indépendantes.

(Je préférerais vraiment PAS)

Pourquoi pas? Quel type de logiciel envisagez-vous de développer?


2 commentaires

Il n'y a pas de langage tel que C / C ++.


Haha merci d'avoir souligné ça: P



6
votes

Quel type de logiciel essayez-vous de créer?

La réponse la plus probable est C / C ++.


4 commentaires

Il n'y a pas de langage tel que C / C ++.


Tu m'as sérieusement voté pour ça? Vous avez des problèmes, mon ami.


Je ne vais pas vous voter, mais c'est un conseil plutôt mauvais. L'ancienne API C (carbone) est finie pour la fabrication d'OSX C (et / ou) C ++ une réponse uniquement si vous souhaitez rester dans le monde 32 bits et que vous manquez de manquer tout développement futur sur le front de l'interface graphique . La voie à suivre est probable soit d'utiliser une langue qui sera éventuellement une mise en œuvre du cacao de sa couche d'interface graphique (comme Java) ou de faire comme Skype, d'autres personnes et avoir une interface graphique spécifique à la plate-forme à l'aide de code partagé. Malheureusement, je n'ai pas encore trouvé une bonne bibliothèque de plate-forme croix pour C ou C ++ à l'aide de cacao.


Je suppose que je pensais juste que ce serait évident pour vous que je veux dire implémenter la logique sous-jacente en C ou C ++ et utilisez cacao pour faire l'interface utilisateur sur un Mac si vous le souhaitez. C'est l'une des choses de bonnes choses sur l'objectif-C et l'objectif-C ++, un portage facile de la logique d'autres applications Vanilla-C et Vanilla-C ++.



0
votes

Cela dépend de ce que vous voulez faire. Si vous recherchez une application très haute performance, vos options sont C / C ++. Si vous recherchez un développement rapide, vos options sont Java / Python.


2 commentaires

@Jacob: Je suis tout à fait sûr que je dois compiler mes sources Java avant de les utiliser. Le résultat peut ne pas être l'extrémité binaire car la compilation finale est faite par la JVM lorsqu'elle dispose de toutes les informations nécessaires pour l'optimiser correctement, mais elle est bien compilée. Mais je suppose que vous le savez.


Vous devez compiler Java pour l'utiliser. Je suis d'accord sur Python mais je me suis concentré sur la plate-forme transversale et pour le développement rapide.



20
votes

Je voudrais mettre en œuvre la logique commerciale principale en C et prendre le temps d'écrire des wrappers de l'interface graphique native sur le code de chaque plate-forme - Objective-C / Cocoa et GTK / Gnome ou quoi que ce soit.


5 commentaires

C'est exactement le conseil que Apple vous donnerait. Facilez votre code pour séparer l'interface graphique de votre logique d'application et écrivez une interface graphique native pour chaque plate-forme que vous souhaitez exécuter. Si vous essayez d'utiliser une bibliothèque d'interface graphique multiplate-forme comme QT, votre application sucera.


@Nsresponder - La solution d'Apple pour le problème d'une bibliothèque d'interface graphique multi-plate-forme portable consiste-t-elle à rouler la vôtre pour chaque application que vous écrivez? Cela ressemble à un moyen terrible de faire des choses.


En fait, c'est probablement idéal si vous avez un temps et un budget illimité. Cependant, nous ne savons pas vraiment si l'OP peut réellement se permettre de le faire.


Je vais cocher cela comme étant le plus proche de la réponse correcte. Je vais suivre ces conseils, à l'exception de cela, j'utiliserai également l'aide C Objectif C de GCC. Tout ce que j'ai à faire, c'est éviter toutes les classes NS *, garçon sera gênante (:


@Corydoras: Si vous utilisez Gnustep, vous pouvez utiliser de nombreuses classes NS *.



6
votes

envisager d'utiliser Python. Vous pouvez écrire des applications qui sont originales d'apparence sur les deux plates-formes avec WXPYTHON .

Python est livré avec Max OS X et Ubuntu Desktop et votre application peut être emballée pour regarder et se comporter comme toute autre application native sur l'une ou l'autre plate-forme.


4 commentaires

Python n'est pas aussi rapide (à exécuter) comme C / C ++, mais si la vitesse d'exécution n'est pas critique, cela devrait être un bon choix.


@Jacob, non compilé au code de la machine, mais il est compilé d'octet.


@DeMlax - La plupart des langues de script ces jours-ci sont, mais je suis sûr que ce n'est pas ce que signifie la puissance. Lorsque les gens disent une langue "compilée", ils signifient généralement un qui compile le code de machine natif afin que vous n'ayez pas besoin d'un interprète d'exécution.


Je n'ai pas réalisé que certaines personnes pourraient interpréter la compilée pour inclure une langues qui est compilée dans un code d'octet intermédiaire qui doit ensuite être exécuté sous un interprète de code d'octet.



6
votes

Je recommanderais l'objectif-c pour la portabilité et la facilité d'utilisation. Vous n'obtenez pas à utiliser Cocoa si vous souhaitez exécuter sous Linux, mais Objective-C est une très belle langue et vous interface facilement avec le code C ordinaire.


2 commentaires

Je suis d'accord, j'utilise l'objectif-C tout le temps sans cacao simplement parce que je trouve plus facile de travailler avec que C ++.


+1 pour cette idée. En outre, pour la fondation / cacao, vous pensez que vous pourriez aimer, il n'est généralement pas terriblement difficile d'écrire une classe qui imite assez étroitement la fonctionnalité de sa cousine seulement.



4
votes

Que diriez-vous de Java?

Et si vous avez besoin d'une chose vraiment natif, vous pouvez toujours utiliser JNI .


0 commentaires

2
votes

En supposant que vous souhaitez créer une application avec une interface utilisateur graphique, je pense que C ++ / QT est le candidat le plus probable. Je ne suis pas au courant d'un autre compilé [1] langue avec la prise en charge de la boîte à outils mature sur OSX et Linux.


  1. par "compilé" Je fais l'hypothèse que vous voulez dire "produit un exécutable natif".

4 commentaires

N'utilisez pas de QT pour une application que vous envisagez d'expédier sur OS X.


Pourquoi pas? Avez-vous une expérience personnelle de QT sur OSX que vous aimerez peut-être partager>


Le seul problème que j'ai eu avec Qt est qu'il ne se sent pas tout à fait indigène sur OS X, mais c'est un problème que vous aurez avec une boîte à outils multiples plate-forme. À moins que vous ne souhaitiez écrire une interface personnalisée pour chaque plate-forme, vous n'allez pas avoir un aspect indigène.


Non seulement il ne "se sentira pas indigène", ni ne semblera pas originaire, il aura des problèmes avec la prise en charge de la compensation, des problèmes avec l'architecture de documents nécessitant une application de cacao pour être vraiment compatible avec une architecture.



0
votes

Je voterais pour ANSI C ou C ++ couplé à POSIX.


0 commentaires

0
votes

Compte tenu des autres réponses ci-dessous, je pense que vous devez faire deux choix

1) Si vous avez besoin d'une intervention d'interface graphique, vous devez choisir la bibliothèque d'interface utilisateur, une plate-forme croix, une plate-forme croix One Ee.g Qt, WX, etc. ou écrire différents pour OSX et Linux - Pommes préférées et je pense que vous avez le meilleur look et sentir sur chaque plate-forme

2) si votre application nécessite des calculs rapides, car cela pourrait conduire votre choix de langue par exemple. C ++ / C / Objective-C vs Python

Les deux choix sont séparés car vous pouvez mélanger la plupart des choix d'interface graphique avec différentes langues.


0 commentaires

3
votes

Comment sur Freepascal peut-être avec Lazare si vous êtes intéressé par le développement de l'interface graphique?


2 commentaires

Woah, ça m'amène la mémoire de mémoire!


Je suis un développeur Delphi à temps plein, et je pense que Freepascal est cool, et tout comme ça, mais il n'y a pas une bande d'interface graphique entièrement cuite qui est une plate-forme multiplate-forme sur Linux et OS X. La GTK Stuff nécessite X11 sur Mac OS X. Laid et non indigène à la recherche.