Informatique Recherche de livre pour apprendre le jave et le C++

nonoland

P'tit codeur
24 Juin 2013
301
22
125
25
Douai, France
Un pavé, un pavé, un pavé :svp:

Plus sérieusement, pourquoi déconseiller le java ? J'ai commencer avec le Java et je ne voit pas pourquoi il ne faudrait pas commencer avec le Java.
 

TD_

Jeune vieux
5 Juillet 2014
434
29
135
26
Alsace, Colmar
Plus sérieusement, pourquoi déconseiller le java ? J'ai commencer avec le Java et je ne voit pas pourquoi il ne faudrait pas commencer avec le Java.
Java va disparaître ça c'est une certitude déjà parce qu'il n'est pas sécurisé et apres parce que Mojang va surement changer le langage de sont jeu. :'(

Après j'ai trouvé ça

Capture-d%E2%80%99e%CC%81cran-2014-11-27-a%CC%80-17.43.50.png
 

robin4002

Expert en informatique et systèmes d'information
Staff
Responsable technique
Responsable forum
12 Novembre 2012
20 892
158
3 004
347
26
Alsace
www.minecraftforgefrance.fr
Java va disparaître ça c'est une certitude déjà parce qu'il n'est pas sécurisé et apres parce que Mojang va surement changer le langage de sont jeu. :'(
Le plugin Java est en voie de disparition comme tous les plugins web à cause des problèmes de sécurité.
Le langage Java lui même ne souffre pas de problème de sécurité.

Et à ce que je sache Mojang n'a pas annoncé de changement de langage. Et même si mojang change le langage de minecraft, ça ne va pas tuer Java ...
 
  • J'aime
Reactions: nonoland

TD_

Jeune vieux
5 Juillet 2014
434
29
135
26
Alsace, Colmar
L'utilisation des langages de programmation dans le monde ?
Oui

Le plugin Java est en voie de disparition comme tous les plugins web à cause des problèmes de sécurité.
Le langage Java lui même ne souffre pas de problème de sécurité.

Et à ce que je sache Mojang n'a pas annoncé de changement de langage. Et même si mojang change le langage de minecraft, ça ne va pas tuer Java ...
Un changement de langage de programmation ?
Une question pas si bête. Comme nous venons de le voir plus tôt, il serais possible que l’on rajoute des choses au jeux payantes, mais aussi une intégration à Steam, et bien sûr, cela devient un produit Microsoft.

Autant d’arguments pour penser à un éventuel changement dans la programmation du jeu ! Comme vous le savez, Minecraft est codé en java, mais la société ne pourrais t’elle pas dire un jour qu’elle change le langage pour du C++ par exemple, qui est plus performant ? Une peur pour un paquet de développeurs peut être, qui sentirons toutes ces lignes de codes déjà écrites inutiles … Car, on vois mal un jeu présenté sur Steam codé en java, trop facilement dé-compilable !

Après, il y aurais des mécontentements du côté de ces derniers, un code Minecraft qui serais caché, tout à reconstruire (jeu, mods, serveurs …) et un véritable problème pour les OS comme mac et linux qui profitent que la langue soit du java pour faire tourner le jeu comme sur un pc ! Car avec java, c’est du tout-en-un.

Voila ce que j'ai lu ^^

ça ne va pas tuer Java ...
Bah dans le principe non, mais je ne connais pas beaucoup de logiciels (connus) utilisant java. Enfin bon
 

Asu

Cheval d'égout
Ancien
2 Avril 2011
1 862
420
217
23
Bouches-du-Rhône, France
Minecraft PE, Minecraft console edition, Minecraft Windows 10 et Minecraft Raspberry Pi sont tous développés en C++.
Minecraft java sera conservé peu importe ce que Microsoft/Mojang fait puisque sans les mods, Minecraft serait sûrement mort depuis longtemps.

Il y a beaucoup de problèmes de conception ou des choses complètement connes du côté de Java :
  • Pas de surcharge d'opérateurs. Ça rend le langage incohérent quand on a accès à += sur les String par exemple.
    Surtout que ça devient infernal
  • L'allocation dynamique est forcée. Le Garbage Collector est forcé.
    On a pas conscience du coût de chaque new et de chaque objet qu'on abandonne au niveau des performances. Un exemple probant : Une simple boucle qui par exemple += un élément d'array sur un string. Concrètement "for(machin; bidule; truc) { monString += unArray[trucmuche]; }" ça va pour chaque itération :
    - Allouer et construire un StringBuilder
    - Copier monString dans le StringBuilder
    - Copier unArray[trucmuche] dans le StringBuilder
    - Allouer et construire un String
    - Copier le contenu du StringBuilder dans le String
    - Le Garbage Collector quand il fera ses passes va détruire l'ancien String et le StringBuilder. Et c'est lourd.
    Au total : 3 copies, deux objets lourds donnés à bouffer au GC chaque itération.
    Alors qu'en C++ :
    - Vérifier si l'espace réservé dans le std::string est suffisant pour copier l'élément
    - Si non, il va allouer un nouveau std::string avec suffisamment de place et copier le contenu de l'ancien std::string dedans
    - Copier unArray[trucmuche] dans le std::string
    Au total : Une ou deux copies, un objet lourd détruit au maximum
    Et si on connaît d'avance ce qu'il y a à rajouter (en nombre de caractères) :
    - Vérifier si l'espace réservé dans le std::string est suffisant pour copier l'élément (toujours assez)
    - Copier unArray[trucmuche] dans le std::string
    Au total : Une copie.
  • Les Generic n'ont aucune puissance face aux templates du C++. Par exemple, si vous voulez faire une fonction qui fait "a + b" avec deux nombres de manière générique (donc on pourrait y passer des Integer, des Float, etc., car oui, les Generic ne peuvent pas prendre de types natifs non plus), bah... C'est pas possible en fait en Java. En C++, ça se résume à utiliser une template toute simple.
  • Quelle est la différence entre la référence Java et un pointeur C++? Aucune, en fait. Sauf qu'en Java, ils sont bridés comme pas possible. Quand on a un objet de classe "MaClasse", il peut être null. En C++, si on respecte l'idiome RAII, il existe dans tous les cas, car il est présent sur la stack dans la plupart des implémentations. C'est d'ailleurs largement plus performant au niveau des allocations/désallocations parce qu'elles sont quasi littéralement gratuites. En Java, c'est de l'allocation dynamique (ce qui est plus lent). Les références C++ donnent la même garantie si on ne fait pas n'importe quoi (il s'agit d'une syntaxe différente pour des pointeurs constants).
  • Le Java, c'est plus lent que le C++. Peu importe ce que certains disent.
Edit : La lenteur de Minecraft PC n'est pas que due au Java, hein. Y'a aussi le fait que le jeu est complètement codé avec le cul, ça aide pas trop.
Edit 2 : Ah et, en C++ >11, j'ai que rarement à faire avec des pointeurs. Quand on utilise des pointeurs intelligents (qui s'occupent de l'allocation/désallocation comme des grands), on a plus besoin de gérer manuellement (comprendre new et delete) la mémoire du tout.
 
  • J'aime
Reactions: TdT3ch

Asu

Cheval d'égout
Ancien
2 Avril 2011
1 862
420
217
23
Bouches-du-Rhône, France
Euh, Android ? Bon ok, c'est pas du java à proprement parlé, mais la plupart des applis sont en java
Android n'est pas codé en soi en Java. Il est basé sur le noyau Linux qui est exclusivement codé en C. Ils ont juste foutu leur propre JVM (dalvik jusqu'à lollipop je crois, ensuite je sais plus), et construit une partie de leur OS (tout ce qui est apps je crois) en Java.
 

TD_

Jeune vieux
5 Juillet 2014
434
29
135
26
Alsace, Colmar
Minecraft PE, Minecraft console edition, Minecraft Windows 10 et Minecraft Raspberry Pi sont tous développés en C++.
Minecraft java sera conservé peu importe ce que Microsoft/Mojang fait puisque sans les mods, Minecraft serait sûrement mort depuis longtemps.

Il y a beaucoup de problèmes de conception ou des choses complètement connes du côté de Java :
  • Pas de surcharge d'opérateurs. Ça rend le langage incohérent quand on a accès à += sur les String par exemple.
    Surtout que ça devient infernal
  • L'allocation dynamique est forcée. Le Garbage Collector est forcé.
    On a pas conscience du coût de chaque new et de chaque objet qu'on abandonne au niveau des performances. Un exemple probant : Une simple boucle qui par exemple += un élément d'array sur un string. Concrètement "for(machin; bidule; truc) { monString += unArray[trucmuche]; }" ça va pour chaque itération :
    - Allouer et construire un StringBuilder
    - Copier monString dans le StringBuilder
    - Copier unArray[trucmuche] dans le StringBuilder
    - Allouer et construire un String
    - Copier le contenu du StringBuilder dans le String
    - Le Garbage Collector quand il fera ses passes va détruire l'ancien String et le StringBuilder. Et c'est lourd.
    Au total : 3 copies, deux objets lourds donnés à bouffer au GC chaque itération.
    Alors qu'en C++ :
    - Vérifier si l'espace réservé dans le std::string est suffisant pour copier l'élément
    - Si non, il va allouer un nouveau std::string avec suffisamment de place et copier le contenu de l'ancien std::string dedans
    - Copier unArray[trucmuche] dans le std::string
    Au total : Une ou deux copies, un objet lourd détruit au maximum
    Et si on connaît d'avance ce qu'il y a à rajouter (en nombre de caractères) :
    - Vérifier si l'espace réservé dans le std::string est suffisant pour copier l'élément (toujours assez)
    - Copier unArray[trucmuche] dans le std::string
    Au total : Une copie.
  • Les Generic n'ont aucune puissance face aux templates du C++. Par exemple, si vous voulez faire une fonction qui fait "a + b" avec deux nombres de manière générique (donc on pourrait y passer des Integer, des Float, etc., car oui, les Generic ne peuvent pas prendre de types natifs non plus), bah... C'est pas possible en fait en Java. En C++, ça se résume à utiliser une template toute simple.
  • Quelle est la différence entre la référence Java et un pointeur C++? Aucune, en fait. Sauf qu'en Java, ils sont bridés comme pas possible. Quand on a un objet de classe "MaClasse", il peut être null. En C++, si on respecte l'idiome RAII, il existe dans tous les cas, car il est présent sur la stack dans la plupart des implémentations. C'est d'ailleurs largement plus performant au niveau des allocations/désallocations parce qu'elles sont quasi littéralement gratuites. En Java, c'est de l'allocation dynamique (ce qui est plus lent). Les références C++ donnent la même garantie si on ne fait pas n'importe quoi (il s'agit d'une syntaxe différente pour des pointeurs constants).
  • Le Java, c'est plus lent que le C++. Peu importe ce que certains disent.
Edit : La lenteur de Minecraft PC n'est pas que due au Java, hein. Y'a aussi le fait que le jeu est complètement codé avec le cul, ça aide pas trop.
Edit 2 : Ah et, en C++ >11, j'ai que rarement à faire avec des pointeurs. Quand on utilise des pointeurs intelligents (qui s'occupent de l'allocation/désallocation comme des grands), on a plus besoin de gérer manuellement (comprendre new et delete) la mémoire du tout.
C'est décidé, j'apprend le C x)