Tu es toi-même professeur pour dire ça ou quoi ?Envoyé par fbehnam
Tu es toi-même professeur pour dire ça ou quoi ?Envoyé par fbehnam
non je ne suis pas prof mais je pense que parfois faut savoir les remercier de ce qu'ils nous apportent...
Bonjour,
j'ai fait le pari depuis plusieurs années de faire du jeu vidéo en Java, après avoir fait de l'Assembleur, du Pascal et du C/C++.
Pour ce qui est de la conception du projet, Java étant plus restrictif que C++, il oblige à faire une bonne conception et le premier jet de développement sera efficace.
Si on a besoin de performances d'affichage et de 3D, il vaut mieux se tourner vers le C++, actuellement.
Un bon compromis est d'utiliser Java pour la conception et l'architecture et C++ pour le développement.
Le Java doit ses mauvaise performances au choix de la portabilité. La machine virtuelle Java absorbe une bonne partie des performances d'affichage en interdisant l'accès aux fonctions graphiques des cartes vidéos.
Pour ce qui est des performances de calcul, par contre Java et C++ se tiennent la main et là c'est l'algorithme qui va faire la différence. Le Java a toutes ses chances dans ce défi.
Pour revenir à l'affichage, beaucoup de développeurs travaillent justement au défaut principal de Java, ses "maigres" performances graphiques. Je vous invite cependant à constater qu'elles ne sont pas si minces, même en natif et que correctement programmé, Java tient très bien la route.
Voici le site de mon projet actuel, AnAcondA : http://www.anadoncamille.com/
Le post suivant présente deux librairies codées pour Java, en C++ entre autres, qui permettent de coder en Java et d'avoir des performances correctes :
http://www.developpez.net/forums/sho...80#post2371080
Par contre ces librairies nécessitent des fichiers adaptés à chaque machine pour fonctionner, une forme de perte de portabilité de Java.
Actuellement, Java rattrape son retard et pourrait dans quelques années partager des domaines de création qui sont pour le moment réservés au C++ (jeux vidéos, rendu 3D et 3D).
Java power !
Envoyé par Tifauv'
Vous êtes sûr de ce que vous dites.
Je pense que Java est venu avec des solutions pour combler les bugs des programmes qui sont implémentés à base de C++ (exemple : problème des pointeurs).
A vous
HAN !!!! les pointeurs n'ont pas de problème !!! si cela ne marche pas c'est que le programmeur a mal conçue son programme !Envoyé par zizoux5
Une foie qu'on sais s'en servir c'est la meilleur chose qui soit et ca devient extrêmement pratique et puissant ! =)
Et pour moi avoir un langage sans pointeur n'est pas un avantage mais vraiment un GROS handicap !!!
Oui c'est sur si ca marche pas c'est la faute du programmeur. Mais il n'empêche que si le langage peut éviter certains problèmes pourquoi pas.Envoyé par Ekinoks
De même que la programmation objet a permis de simplifier la conception et le développement de bon nombre de programmes, elle n'est pas non plus indispensable.
Parfois j'ai l'impression que le c++ serait l'étape ultime de l'évolution des langages de programmation. Que a partir de là tout est parfait et il ne faut plus toucher a rien.
au fait, en quoi ne pas avoir de pointeurs serait un si gros handicap ? tu aurais des exemples de choses qu'on ne peut pas faire et qui serait handicapantes ? (ce n'est pas pour troller je le jure, juste que je connais c++ un peu, java beaucoup et les pointeurs me manquent pas vraiment)
Envoyé par Ekinoks
Je t'accorde que les pointeurs donnent plus de flexibilité aux programmeurs, mais il ne faut pas nier que les pointeurs causent des problèmes liés à l'allocation de la mémoire.
Sans oublier que ceux qui ont conçu le C++ sont des programmeurs, donc ils peuvent ne pas avoir bien affiné le fonctionnement des pointeurs.
et c'est pour cela que les pointeurs sont absents de Java (si on omet les références de Java)
en plus, je vois mal comment l'absence des pointeurs pourra créer un handicap et si ce que tu as avancé est vrai, on aura pas vu l'ampleur qu'a pris Java au détrment de C++Envoyé par Ekinoks
Oui, mais a quel prix ?Envoyé par kpouer
Ne plus avoir la possibilité d'utiliser des pointeurs veux dire que dans certain cas on va être obligé de trouver des solutions tordues pour palier à ce problème avec les conséquence que cela implique comme des performance réduite (car quoi de plus rapide qu'un accès directe par pointeur ?)...
Par exemple, pour les pointeurs de fonctions.
Alors c'est sur vous allez me dire « tu n'a cas pas utiliser des pointeurs de fonction, revoir l'architecture de ton application »
Et c'est justement ca le problème ! On est obligé de se plier à la vision que SUN a de l'architecture des programmes !
Et si on souhaite faire une architecture différente ?
Avoir la possibilité d'utiliser les pointeurs donne de GRANDE liberté !
Oui, mais par exemple avec le C++ on a le CHOIX d'utiliser ou non la POO.Envoyé par kpouer
En java NON !
Je ne dit pas de rien toucher, mais la direction que prend JAVA ne correspond pas à ma vision des choses...Envoyé par kpouer
Effectivement, mais l'utilisateur devrais toujours avoir à minima la possibilité d'utiliser des pointeurs si il le souhaite.Envoyé par zizoux5
Si non dans se cas là pour ne plus avoir de problème de se genre pour quoi ne pas passer directement à un langage « drag and drop » ? Ca enlèverai bon nombre de source de bug !
Déjà on mesure pas la valeur d'un langage suivant son ampleur, son taux d'utilisation ou je ne sais quoi d'autre.Envoyé par zizoux5
Ensuite, je ne dit pas que Java est nul, je dit juste que faire passer les pointeurs pour un problème ou mettre dans les avantages que le langage n'utilise pas de pointeurs est une bêtise.
Tu peux me donner des exemples, j'ai du mal a voir. Quand tu passes un objet en paramètre d'une méthode en java il est pas recopié quand même ...Envoyé par Ekinoks
Ca donne une grande liberté mais j'aimerai trouver un exemple ou ce serait tellement nécéssaire. Quant a se plier a la volonté de Sun, oui c'est vrai, mais c'est parce que tu viens du monde c++ et que tu as une vision c++. C'est une erreur de vouloir reproduire ce qu'on connait déjà lorsqu'on aborde un nouveau langage. Je ne code pas pareil en java, en python, en php ou en c++, il faut s'adapter au langage pour en tirer le meilleurEnvoyé par Ekinoks
C'était un exemple. Ce que je veux dire c'est que les langages ont évolués pour aboutir au c++, et certains aussi ont critiqué le c++ comme tu critiques le java aujourd'hui parce que le c++ a apporté des choses qui ne correspondaient pas a leur vision des chosesEnvoyé par Ekinoks
Un langage drag & drop. Ben pourquoi pas, il faut être ouvert. Cela dit je suis sceptique quand même parce je pense que ca risque d'être assez limité au niveau des possibilitésEnvoyé par Ekinoks
Je suis entièrement d'accord avec toi, car si c'était le cas, cela voudrait dire que Windows est un magnifique OS et VB6 un super langageEnvoyé par Ekinoks
Il a apporté des choses mais n'en a pas enlevé, contrairement au Java.Envoyé par kpouer
Bha, comme bon exemple il y a les pointeurs de fonction...Envoyé par kpouer
Je me rappelle il y a quelque temps, j’avais créé un moteur graphique avec une architecture tel que pour créer et configurer une scène cela puissent se faire simplement avec un truc du genre :
Bha je peu dire que les pointeurs de fonctions m’on drôlement bien servie et je me verrais mal le faire sans...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 changeScene(1); // On se place sur la scene 1 scene[1]->bindKey(‘c’, changeScene, 2 ); // touche c => se placer sur la scene 2
Un Objet non, mais essaye de passer une variable ou une fonction...Envoyé par kpouer
Non, je ne cherche pas à reproduire ce que je connais déjà, mais avoir la liberté d’avoir ma propre vision des choses... et la il faut bien avouer que le Java je donne aucune libertéEnvoyé par kpouer
On ne peu quand même pas comparer l’évolution ASM=>C ou C => C++ à C++ => Java !Envoyé par kpouer
Java n’apport pas grand-chose à par de mettre plain de restriction et une machine virtuel...
Le langage drag & drop et une caricature de java par rapport au C++, à savoir donnée un minimum de liberté au programmeur pour évité un maximum de bug même si pour cela les performances s’en trouve réduite ainsi que les possibilités...Envoyé par kpouer
Java n'est pas un langage sans pointeurs, bien au contraire, il ne manipule quasiment que ça, ceux-ci sont simplement "cachés", les références en java sont plus ou moins l'équivalent des pointeurs en C++ :Envoyé par Ekinoks
- comportement polymorphique
- reassignation
- allocation
La seule différence vient du fait qu'on ne peut pas détruire les objets référencés nous mêmes et qu'on ne peut manipuler les objets QUE par ces références ; si Java a supprimé quelque chose par rapport au C++ c'est bien la possibilité de définir une sémantique de valeur et de manipuler directement l'objet.
En ce qui concerne les pointeurs sur fonction et fonction membre, là oui ils sont absents :Alors c'est sur vous allez me dire « tu n'a cas pas utiliser des pointeurs de fonction, revoir l'architecture de ton application »
Et c'est justement ca le problème ! On est obligé de se plier à la vision que SUN a de l'architecture des programmes !
Et si on souhaite faire une architecture différente ?
Avoir la possibilité d'utiliser les pointeurs donne de GRANDE liberté !
- pointeur sur fonction, normal, les fonctions n'existent pas en java.
- pointeur sur fonction membre : ça a tout simplement été remplacé par la RTTI. Mécanisme plus lourd a priori, maintenant je ne connais pas les détails d'implémentation des JVMs à ce niveau là. Toujours est-il qu'on peut obtenir à peu près le même résultat par un autre mécanisme.
Oui mais là on rentre dans un autre débat, pur objet contre multiparadigmeOui, mais par exemple avec le C++ on a le CHOIX d'utiliser ou non la POO.
En java NON !
C'est même complètement faux en fait vu qu'il n'utilise QUE ça.Ensuite, je ne dit pas que Java est nul, je dit juste que faire passer les pointeurs pour un problème ou mettre dans les avantages que le langage n'utilise pas de pointeurs est une bêtise.
Par contre je te rejoins de manière général sur le fait que le Java a enlevé beaucoup plus de choses qu'il n'a apporté au programmeur, un type de sémantique (entité), un type d'héritage, pas de contrôle aussi fin de la mémoire, etc ; bref je ne pense pas que réduire les possibilités offertes au programmeur sous prétexte de faciliter le développement et la compréhension du code soit une bonne chose, si on peut utiliser un ensemble large d'outils, rien n'empêche de se restreindre à un sous ensemble de ceux-ci, tout en ayant les autres à disposition le jour où on en a vraiment besoin.
Ca se fait avec une interface en java je suppose.Envoyé par Ekinoks
euh quelle différence tu fais entre un objet et une variable en java ? A moins que tu parles des types primitifs ?Envoyé par Ekinoks
C'est vrai le java a apporté des restrictions. On peut aussi appeler ca structure et organisation. Après je comprend qu'on aime pas. Tu as ceux aussi qui en php aiment bien faire caEnvoyé par Ekinoks
function toto($v,$a,$b,$c)
{
$v($a,$b+$d);
}
C'est vrai c'est souple et pratique, mais ca apporte aussi plein d'inconvénients. Perso j'aime pas.
Dans un monde bas-niveau, qui souhaite rester proche de la machine (programmation système, implémentation de drivers...), c'est vrai. Mais pour les applications de tous les jours, on n'en a absolument pas besoin. Tu peux peut-être trouver des cas où utiliser un pointeur est une optimisation pour gagner quelques cycles, mais on peut trouver tellement d'autres cas où cela se révèle dangereux.Envoyé par Ekinoks
J'ai utilisé le C et le C++ pendant de nombreuses années, mais depuis que j'ai arrêté, je m'en porte pas plus mal. Depuis, je n'ai jamais eu besoin d'utiliser le moindre pointeur. À moins que tu ne me montres un exemple où l'accès direct à la mémoire est indispensable (hors cas particuliers cités au début), je considère ça comme à éviter.
Posséder le concept de pointeurs et d'accès direct à la mémoire n'est pas mauvais, mais cela devrait être évité quand on a le choix.
C'est simple : tu perds 5% des performances, mais tu augmentes considérablement la sûreté et le temps de développement. Fais ton choix.Oui, mais a quel prix ?
Ah ah ! Là, tu mets en valeur un défaut du C++ : les fonctions ne sont pas des objets de premier ordre, on ne peut les manipuler directement (ni créer de fonction anonyme). À la place, on doit passer par un pointeur pour pallier ce manque, mais ce n'est pas une solution.Par exemple, pour les pointeurs de fonctions.
Je te l'accorde, Java ne fait pas mieux sur ce point, et l'utilisation d'interfaces pour faire ça est vraiment délirante. Mais regarde du côté des langages fonctionnels : tu trouveras ton bonheur. Bref, ce n'est clairement pas un argument pour les pointeurs, ça. C'est juste une roue de secours.
Je suis d'accord avec toi, c'est important de pouvoir manipuler des fonctions. Et c'est l'une des raisons pour lesquelles je déteste Java.Alors c'est sur vous allez me dire « tu n'a cas pas utiliser des pointeurs de fonction, revoir l'architecture de ton application »
Quelle différence entre une méthode statique de Java et une fonction du C++ ? Il y a quelques différences syntaxiques, mais c'est tout. Critique la syntaxe de Java plutôt que sa POO.Oui, mais par exemple avec le C++ on a le CHOIX d'utiliser ou non la POO. En java NON !
Si ça permet de garder 95% de la puissance de C++ tout en améliorant le temps de développement, je suis preneur. Malheureusement, je n'y crois pas (concernant le drag and drop, il y a d'autres solutions plus convaincantes).Si non dans se cas là pour ne plus avoir de problème de se genre pour quoi ne pas passer directement à un langage « drag and drop » ? Ca enlèverai bon nombre de source de bug !
Il n'a rien enlevé, par rapport à quoi ? Par rapport au C, certes, mais il y a tellement peu de choses dans le C. Par rapport aux langages existant à cette époque, non. Regarde le Lisp, regarde le C++. Il manque *beaucoup* de choses.Il a apporté des choses mais n'en a pas enlevé, contrairement au Java.
Je t'arrête tout de suite : être pur objet n'empêche pas d'être multiparadigme. Par exemple Ruby et F# combinent objet pur et programmation fonctionnelle.Oui mais là on rentre dans un autre débat, pur objet contre multiparadigme
Quels inconvénients ? Oui, en PHP, il y en a beaucoup. Mais on peut écrire l'équivalent Caml (ou n'importe quel autre langage fonctionnel) :Après je comprend qu'on aime pas. Tu as ceux aussi qui en php aiment bien faire ca
function toto($v,$a,$b,$c)
{
$v($a,$b+$d);
}
C'est vrai c'est souple et pratique, mais ca apporte aussi plein d'inconvénients. Perso j'aime pas.L'implémentation de PHP n'est pas à prendre en modèle, mais le fait de pouvoir manipuler simplement des fonctions me semble indispensable à tout langage sérieux. Les solutions de C++ et de Java sont particulièrement peu convaincantes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part let toto v a b c = v a (b + c)
Pour critiquer Java, il suffit de comparer leur implémentation des generics (ou plutôt, leur non-implémentation -- cf la différence avec .NET) par rapport aux templates de C++. La différence est flagrante et, encore une fois, Java semble ridicule.
Les inconvenients au bout de code que j'ai donné c'est que ca devient très difficile a débugger, que ca ouvre des tas de trous de sécurité si on est pas rigoureux (et on l'est jamais assez). Ca empêche en fait bon nombre de controles qui pourraient être fait par une compilation pour laisser toutes ortes d'étrangetés arriver au runtime. On pense souvent au cas droit, celui attendu, et un jour il arrive un cas qu'on avait pas prévu et que ce genre de code empêche de voir.Envoyé par LLB
Quelle différence entre un appel de fonction normal et l'appel d'une fonction contenue dans une variable ?
J'en utilise tous les jours et je n'ai jamais rencontré le moindre problème. Tout peut être vérifié à la compilation (typage, etc.), comme tout le reste du code. Quels trous de sécurité ?
Tu parles peut-être du cas particulier de PHP et de son typage faible et dynamique, mais ça n'a rien à voir avec le problème.
As-tu un exemple concret ?
Peut-être plus que 5%, non ?Envoyé par LLB
Dans ce cas ce n'est plus du pur objet.Envoyé par LLB
Je parlais effectivement de php en particulier. En effet si on peut passer n'importe quoi comme nom de fonction ca peut vite devenir le cirque.Envoyé par LLB
En c++ je dis rien je connais pas suffisament. Cela dit je suis curieux, comment se fait le typage lorsqu'on passe une fonction en paramètre ?
Ptet moins aussi. Je sais pas s'il est utile de relancer le débat sur les performances qui a déjà eu lieu dans les 40 pages précédentesEnvoyé par spidermario
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager