C'est une question intéressante, qui revient assez fréquemment dans divers groupes de discussion, sur Twitter et même sur IRC. Il y a plusieurs façons d'évaluer SproutCore par rapport à Cappuccino, mais, peut-être, certains des caparisons immédiats que les gens regardent sont les suivants :
1) Leurs caractéristiques respectives
2) Facilité d'utilisation
3) Soutien communautaire et documentation
Examinons le premier point : l'ensemble des fonctionnalités respectives. Par "ensemble de fonctionnalités", il y a plusieurs façons de voir les choses. Du nombre de widgets d'interface utilisateur qu'ils possèdent, au support fondamental pour connecter les choses ensemble et communiquer avec une sorte de back-end, en passant par l'approche architecturale générale du framework, qui n'est pas nécessairement une "fonctionnalité", mais qui reste importante, et, oui, même le langage que vous pouvez utiliser.
En ce qui concerne la langue, je pense qu'il est important que vous ne négligiez pas ce qui est utilisé (JS contre Obj-J). Pourquoi ? En raison de l'adoption et d'où vous venez. SproutCore est parti du principe que JavaScript est effectivement le langage du web, et c'est donc ce que vous utilisez pour programmer contre le framework. Les lacunes de JavaScript en matière de complétude OO du langage (héritage objet-objet correct, etc.) sont compensées par le framework (par exemple, MyApp.Foo = SC.Object.extend({...})). Cappuccino arrive sous un angle différent. Il utilise Obj-J comme une amélioration du langage primaire de JS afin d'injecter des fonctionnalités de langage qui manquent à JS, au lieu d'injecter ces fonctionnalités de langage directement dans le framework (Cappuccino) lui-même. Bien sûr, comme les gens de Cappuccino l'ont déjà fait remarquer, vous pouvez toujours utiliser JS pour programmer avec Cappuccino proprement dit, mais, dans ce cas, vous ne bénéficiez pas de ce que fournit Obj-J. Note à la communauté Cappuccino : Veuillez me corriger si je me trompe :-). Enfin, si vous êtes déjà familiarisé avec Obj-C, alors Obj-J sera peut-être plus votre tasse de thé. Hé, même Sony est apparemment en train de prendre le train en marche d'Obj-C pour développer sur leur plateforme mobile :-P.
Si l'on examine l'architecture des deux frameworks, on constate qu'ils se sont tous deux inspirés, sous une forme ou une autre, du framework Cocoa d'Apple. Cappuccino a pris Cocoa à cœur et a essentiellement porté l'API de Cocoa. Encore une fois, si vous venez de développer des applications dans Apple en utilisant Cocoa, vous allez probablement vous sentir comme chez vous. SproutCore, quant à lui, s'est inspiré de Cocoa là où il le fallait. En ce qui concerne l'architecture pure, ils suivent tous les deux le modèle MVC, ils utilisent tous les deux des liaisons de style Cocoa, ils disposent tous les deux d'un mécanisme de stockage des données et ils ont tous les deux leur propre style respectif de rendu et de composition des widgets et des vues de l'interface utilisateur.
Le rendu des vues est, à mon sens, un point particulièrement important. Les deux frameworks présentent un certain niveau d'abstraction afin de vous éviter de vous occuper directement des CSS et du HTML, même si, en fin de compte, ils doivent effectuer le rendu en fonction de ce que le navigateur Web comprend en définitive.
Du côté de Cappuccino, on fait complètement abstraction des CSS et du HTML. Au lieu de cela, vous utilisez les diverses primitives de rendu du framework pour "dessiner" vos vues. Grâce à ce niveau d'abstraction, Cappuccino peut utiliser la meilleure approche de rendu disponible au lieu de vous coupler, dans une certaine mesure, avec CSS et HTML.
En ce qui concerne SproutCore, vous effectuez un rendu plus proche du "métal", pour ainsi dire. Lorsque vous effectuez un rendu pur d'une vue, vous utilisez un objet de contexte de rendu qui fournit un certain degré d'abstraction, mais, en fin de compte, vous injectez directement du HTML et ajoutez des noms de classe pour appliquer du CSS. Même après que votre vue a été rendue et que vous souhaitez manipuler certaines parties de la vue en fonction d'un événement, vous pouvez accéder directement aux éléments du DOM et manipuler leurs propriétés. Selon votre point de vue, cela peut sembler bon ou mauvais. C'est une bonne chose pour ceux qui ont l'habitude de travailler avec les CSS et le HTML et qui aiment le contrôle plus direct de la façon dont les vues sont rendues et stylisées. Mauvais si vous voulez rendre une vue de manière générique afin d'utiliser la meilleure approche de rendu en fonction de ce que le navigateur permet (HTML/CSS, SVG, HTML5 canvas, etc.). Mais, notez qu'il existe des plans futurs pour que SproutCore ait une approche de rendu plus abstraite tout en vous permettant de travailler directement avec HTML et CSS si vous le souhaitez. Vous obtiendrez ainsi le meilleur des deux mondes.
En ce qui concerne les widgets et les vues de l'interface utilisateur de base fournis par les deux frameworks, ils sont tous les deux dotés d'un grand nombre de fonctionnalités prêtes à l'emploi. Boutons, étiquettes, listes, vues segmentées, boutons radio, défileurs, etc ils sont tous là. Par conséquent, on peut dire que vous êtes bien dans les deux camps.
En revenant en arrière, parlons maintenant de la facilité d'utilisation. Pour moi, la facilité d'utilisation est basée sur votre expérience personnelle de travail avec JavaScript, HTML, Obj-C, Cocoa, d'autres frameworks MVC, la documentation et le support de la communauté. Si vous n'avez jamais travaillé avec Cocoa, ou si vous n'avez jamais construit une application de type decktop ou iPad, il est juste de dire que vous allez avoir une certaine courbe d'apprentissage, quel que soit le framework que vous choisissez. Cela dit, ce que vous ne savez pas et ce que vous voulez apprendre peuvent être acquis par le biais de la communauté et de la documentation de chaque framework. Les deux ont des communautés actives d'une manière ou d'une autre, vous ne serez donc pas laissé de côté si vous êtes bloqué quelque part. En ce qui concerne la documentation, il est vrai que Cappuccino a le dessus. La documentation de SproutCore est insuffisante, mais le code de base est au moins entièrement commenté. La communauté SproutCore est pleinement consciente de la nécessité de mettre à jour la documentation, et c'est une question qui est actuellement traitée, alors continuez à vérifier.
Enfin, vous avez mentionné les prévisions à long terme pour les deux cadres. Il est de notoriété publique que Motorola a acheté le framework Cappuccino, de sorte qu'une grande entreprise soutient certainement sa croissance et sa longévité, ou du moins c'est ce qu'il semble pour l'instant. En ce qui concerne Apple et SproutCore, je ne peux personnellement pas parler en leur nom, mais Apple ne possède pas le framework. De nombreuses entreprises et de nombreux individus utilisent le framework et y contribuent d'une manière ou d'une autre. Cela pourrait donner à certaines personnes et entreprises une pause ou un malaise pour ceux qui s'intéressent à SproutCore en raison de la nature plus organique du développement du framework, mais je ne vois pas cela comme un problème. J'ai le sentiment que les deux frameworks existeront encore longtemps, surtout maintenant que de plus en plus de personnes envisagent de développer des applications de bureau et iPad de nouvelle génération à l'aide de frameworks open source. Et, hé, la concurrence entre les frameworks est une bonne chose - elle permet à chacun de rester sur ses gardes :-).
J'espère que ces informations vous aideront à prendre votre décision !
A la vôtre,
Mike