Développer pour iPhone, c'est mieux que développer pour la PSP

vincent absous |

Ce n'est pas Apple qui le dit, c'est un ancien employé de Sony. Sebastien Rubens, ancien de chez Sony Computer Entertainment Europe, a en effet déclaré au site Edge que le développement de jeux pour l'iPhone allait à un bien meilleur train que ceux pour la PSP, la console portable de Sony. D'ailleurs, M. Rubens a ajouté que le kit de développement mis à disposition par Apple était meilleur à celui de la PSP. Plus simple d'utilisation, plus évident. Du coup, en quelques mois, l'iPhone se retrouve avec une ludothèque à agacer ses concurrents : Wolfenstein 3D, Metal Gear Solid Touch, etc. C'est à Sony, maintenant, de se mettre à niveau.

avatar Tiberius | 
C'est surtout que le développement sur iPhone se passe à un niveau d'abstraction plus élevé que le développement sur PSP ou DS. Cette plus grande abstraction rend le développement plus rapide et plus simple, mais implique une perte de contrôle sur le matériel, et donc une diminution des performances. On le voit bien par exemple avec l'iPhone, où des jeux comme Monkey Ball peinent à atteindre le niveau graphique des jeux DS, alors que l'iPhone est sensé avoir un matériel plus récent et plus rapide. Ce problème de virtualisation des ressources a toujours existé, et la convergence entre les consoles portables (très peu d'abstraction) et les appareils/téléphones multimédia (beaucoup d'abstraction) pose problème à ce niveau là. En effet, les consoles ont toujours cherchées la performance, donc les constructeur fournissent un matériel unique, tel quel, avec des outils de développement rudimentaires qui laissent un contrôle total de la machine. D'ailleurs, il n'y a généralement aucun processus en tâche de fond, et la console est dédiée au jeu en cours d'exécution. A l'inverse, les téléphones sont tous très différents au niveau du matériel, mais cherchent à faire tourner tous les logiciels. Il fallait donc faire abstraction du matériel en utilisant une machine virtuelle commune. De plus, plusieurs processus doivent fonctionner en même temps, ce qui implique un système d'exploitation plus complexe que pour une machine dédiée. On se retrouve avec une machine virtuelle qui donne une image du matériel très éloignée de la réalité.
avatar Tiberius | 
Et chiotte, j'ai pondu un commentaire plus long que la news ^^.
avatar SkeletonGamer | 
Et surtout on comprends pas ton commentaire. C'est quoi cette histoire d'abstraction STP
avatar macfille | 
Je suis pas sûr d'avoir tout compris, mais j'ai trouvé la réaction aussi intéressante que la news ;-)
avatar peter | 
Ce qu'il veut dire c'est que la programmation proche du code machine est plus performante, mais plus complexe, alors que lorsqu'on programme pour une machine virtuelle (java sur les téléphones portables par ex) ou en programmation objet (type Cocoa) on perd un peu en performance pure, mais les outils de programmation sont plus simples à appréhender.
avatar Switcher | 
Je ne suis pas d'accord. D'abord sur Xbox le niveau d'abstraction est le même que sur iphone avec obj-c. Et sur l'iphone si tu veux developper un super monkey ball tu ne passeras surement pas par quartz ou coreimage; tu devras passer par un moteur 2D custom basé sur open gl, ou coder en C, et à ta charge de te démerder pour implémenter Box2D et consorts. Ceci dit il est unanimement reconnu que c'est une plaie de développer pour les consoles sony, et ce depuis la 1ere playstation ... le summum étant apparemment atteint avec la PS3 et son cell mal dégrossi ( et là je répète ce que j'entends sans vérifier, je ne code pas pour ces consoles et ne connait personne qui le fasse)
avatar Matam | 
ou, si j'me plante pas, avec l'iPhone, on programme pour un OS (donc, en gros, sous l'appli, plein de couches d'abstraction), tandis qu'avec une console, on programme pour une machine particulière. (peu de couches, mais beaucoup plus proche du hardware, donc, plus grand controle, plus performant (mais si ça plante, ça plante tout) )
avatar Matam | 
j'pense qu'il y a le support de l'OpenGL dans l'OS de l'iPhone ceci dit. Au niveau architecture, on a core-os , core-service, media, cocoa touch. or. "The Media layer contains the fundamental technologies used to support 2D and 3D drawing, audio, and video. This layer includes the C-based technologies OpenGL ES, Quartz, and Core Audio. It also contains Core Animation, which is an advanced Objective-C based animation engine." ma foi...
avatar Tiberius | 
Désolé si j'ai pas été clair (mais je ne voulais pas faire trop long). Donc oui, quand je parle d'abstractions, il s'agit de couches qui s'empilent pour permettre de faire abstraction de certaines choses répétitives ou difficiles à faire. Par exemple, en réseaux, il y a les fameuses couches OSI. Au niveau le plus bas, on s'occupe de savoir comment transmettre un bit de donnée entre deux machines. Au niveau au dessus, on ne s'occupe plus de la manière avec laquelle un bit est transmis, mais on cherche à diriger des paquets de bits dans un réseau de plusieurs machines. Au niveau encore au dessus, on fait abstraction de la manière avec laquelle les paquets vont transiter dans le réseau, et on ne voit que la machine qui envoie et la machine qui reçoit. Et ainsi de suite. Si les développeurs devaient reprogrammer les algorithmes de routage à chaque fois qu'ils veulent envoyer un message à une autre machine, ce serait très long ! Si vous voulez prendre un exemple plus humain : regardez comment on parle ! Lorsqu'on parle avec quelqu'un, on fait abstraction de la manière avec laquelle on module les sons avec notre bouche et nos cordes vocales, et de la manière avec laquelle on interprète les vibrations de l'air dans notre oreille. On reçoit une onde sonore, mais on fait abstraction de cette réalité physique, et on entend directement un son. Mieux encore, on interprète automatiquement ce son et on comprend les mots qui sont prononcés. On calcule même précisément le retard du son entre nos deux oreilles pour localiser la provenance de son émission ! Toujours de manière automatique, on donne un sens à ces mots et on comprend le message de la personne qui nous parle. Tout cela ne serait pas possible si on ne pouvait pas faire abstraction de la réalité physique de la parole. Sur ce point, les ordinateurs ont été pensés comme notre cerveau. De la même manière, on utilise de nombreuses abstractions pour cacher la difficulté du matériel, mais aussi pour apporter quelques commodités aux développeurs. Par exemple sur un PC, les programmes ont l'illusion d'être seuls sur la machine, alors qu'en réalité il y a de nombreux processus qui se partagent les ressources. Les programmes en exécution voient donc une machine très différente de la machine physique. C'est ce qu'on appelle une machine virtuelle. Tous les systèmes d'exploitation sont des machines virtuelles. Le rôle du système d'exploitation est donc de gérer les ressources (processeur, mémoire, etc.), et en particulier de les partager équitablement aux différents programmes ou aux différents utilisateurs. Pour prendre un autre exemple, les programmes ne voient pas la mémoire physique de la machine. Ce serait leur donner trop de pouvoir, car ils pourraient alors voir la mémoire des autres programmes en cours d'exécution. Ce serait aussi à la charge du programmeur de faire attention d'avoir assez de mémoire disponible. Le système d'exploitation fournit donc une mémoire virtuelle (en réalité il peut y en avoir plusieurs empilées !). Il s'agit là encore d'une abstraction, qui donne l'illusion au programme qu'il dispose de 4Go de mémoire (par exemple). De même, les programmes sont écrits dans des langages de haut niveau (d'abstraction), qui permettent aux programmeurs d'écrire dans un langage facilement compréhensible par un humain, et très proche de la manière naturelle qu'on utilise pour formaliser les idées dans notre tête. Par exemple, la programmation orientée objet permet de décrire des objets de manière naturelle. Ces programmes de haut niveau (d'abstraction) sont ensuite traduits automatiquement dans des langages que la machine peut comprendre. Au niveau le plus bas on trouve l'Assembleur, qui est composé des instructions que le processeur comprend. A ce niveau là on ne peut plus faire abstraction de l'architecture matérielle. Pour donner un exemple, lorsqu'on fait une addition ou une soustraction, il faut gérer la retenue manuellement. Autre exemple, lorsqu'on divise un nombre par deux, il suffit de décaler tous les bits du nombre vers la droite. Bref, toutes ces abstractions sont très appréciables, mais elles impliquent une perte de performance et de contrôle. Il y a en effet des choses qui se font dans notre dos, sans qu'on le voit. On ne se doute pas que pour accéder à une partie de la mémoire il va y avoir un ensemble de conversions afin de traduire l'adresse virtuelle en une adresse physique. Si on avait un accès direct à la mémoire physique, on éviterait ce genre de choses cachées. Sur les vieilles consoles, et sur les consoles portables (comme la DS par exemple), il est nécessaire de privilégier les performances. Sur GameBoy Advance on programme essentiellement en C et en Assembleur. La machine est dédiée à un seul programme, le système d'exploitation est minimaliste, et on voit les différentes mémoires physiques sans aucune abstraction. On sait où on range chaque pixel d'un sprite, et tout se gère manuellement. Avec les consoles plus modernes comme la Gamecube, la PS3 ou la Xbox360, les développeurs ont besoin de plus d'abstractions. Le matériel est très puissant, et le meilleur compromis pour l'exploiter efficacement est de se donner quelques abstractions. Mais il est toujours nécessaire de connaître parfaitement l'architecture matérielle de la console. La PS3 est une console très compliquée, qui donne du fil à retordre aux développeurs. Quoi qu'il en soit, si on compare la DS et l'iPhone, il y a réellement tout un monde entre les deux. La DS est une console très bas niveau, où on programme beaucoup en Assembleur, on voit les différentes mémoires, les registres des processeurs, etc. Sur iPhone on a l'iPhone OS. On ne voit pas la machine physique, mais l'iPhone OS, c'est à dire la machine virtuelle d'Apple. Sans rentrer dans les détails, il s'agit d'un système à micro-noyau, qui est assez lent lorsqu'il s'agit d'accéder aux ressources protégées par le système. On se trimballe une pléthore d'abstractions. Par exemple, les développeurs n'ont pas à savoir que le processeur de l'iPhone est de type ARM (et Intel pour le simulateur). C'est très rapide de programmer des jeux, mais on manque de contrôle. Ceux qui demandent le multi-tâche entre applications sur iPhone sont inconscients ! C'est de la folie sur une console de jeux portable, et Apple le sait bien. En conclusion, au fur et à mesure que les consoles deviennent plus puissantes et plus complexes, elles se dotent de plus en plus d'abstractions. Ce n'est pas forcément mal, mais il y a un vrai saut entre l'iPhone et la DS. Je ne sais pas si Nintendo a la capacité de développer un système d'exploitation aussi complet que celui de l'iPhone. Donc je ne sais pas si les différences vont s'effacer d'ici la prochaine génération. Pour le moment, on a une réelle diversité, et c'est très bien ! Milles excuses pour la longueur, et merci à ceux qui ont tout lu ! Petit bonus : je vous invite à lire cette interview, qui donne quelques indications sur les abstractions utilisées pour développer un jeu sur SNES : http://www.1up-games.com/snes/legend/interview.html
avatar kornichon | 
merci Dr_cube
avatar Fabricius | 
> "Wolfenstein 3D, Metal Gear Solid Touch, etc" Wow, 2 jeux, c'est clair que ca va les agacer les concurrents. Je les vois bien en train de se dire : "Ouh la la, qu'est ce que je suis agacé. Un jeux des années 90 et une adaptation pas terrible d'un jeux récent sur l'iPhone, comme c'est agaçant...". Ils sont aussi agacés que Microsoft devant l'étendue de la logithèque de jeux disponibles sur Mac OS X.

CONNEXION UTILISATEUR