Le débat C++ vs Java fait toujours rage

Tags
Réseaux sociaux




Le , par aliasjcdenton, Membre du Club
Quels sont les avantages et les inconvénients respectifs majeurs des langages de programmation C++ et Java l'un vis-à-vis de l'autre ?



Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de adiGuba adiGuba
http://www.developpez.com
Expert Confirmé Sénior
le 08/05/2014 23:14
Citation Envoyé par Lolilolight  Voir le message
Mais il n'y a pas que ça, là ou les pointeurs deviennent vraiment utile c'est lorsque l'on utilise des pointeurs de fonctions. (Par exemple pour développer un système de commandes c'est à dire appeler une fonction plus tard en lui passant des paramètres lorsqu'un événement quelconque est généré, ou encore lorsqu'on doit appeler une fonction toutes les x secondes)

En java, si je me rappelle bien, on est obligé de passer par des classes ou bien par des interfaces de la jvm pour faire tout cela. (Ce qui complique parfois les choses lorsque l'on veut créer des commandes plus "personnalisée".)

Oui on passe par une interface. Mais je ne vois pas en quoi cela complique les choses.

A la rigueur c'est verbeux dans le code, mais cela s'est nettement amélioré avec les lambdas et références de méthodes...

Citation Envoyé par Lolilolight  Voir le message
En java une connaissance supplémentaire est nécessaire, car JOGL utilise des threads pour l'affichage, de plus il me semble que les collections thread safe sont un peu dépassée, en tout cas on m'a toujours conseillé les ArrayList plutôt que les Vector qui contiennent moins de méthodes intéressantes)

Vector est bel et bien une antiquité.
Son problème est justement sa synchronisation qui est inutile dans 99% des cas du fait se l'utilisation mono-threadé, et une API pas très clair.

Mais il y a bien d'autres collections thread-safe, adaptés à plusieurs besoins spécifique (de tête les Collections.synchronizedList(), BlockingQueue, ConcurrentQueue, CopyOnWriteArrayList, ect.)

Je ne connais pas les équivalent en C++, mais Java est très bien fournit de ce coté là !

Citation Envoyé par Lolilolight  Voir le message
En c++11 j'ai réussi à gérer les accès concurrant avec un thread qui effectue les traitements lourd et un autre qui effectue l'affichage sans trop de soucis. (Avec un simple std::condition_variable, std::unique_lock et std::thread)

En java, je n'y arrivais pas et j'ai vite abandonné, car cela nécessitait une connaissance plus approfondie de la jvm que je n'avait pas (méthodes wait et notify sur les objets, le mot clé synchronized, le fonctionnement de l'EDT (l'event dispatch thread), le fonctionnement de JOGL, etc...), ça me lançait toujours une pluie d'exceptions à l'exécution. (Je ne savais pas du tout ou et comment utiliser les primitives de synchronisation fournies par la jvm, maintenant j'y arriverai peut être hein mais, ça ne vaudra jamais les std::timed_mutex ainsi que les std::condition_variable du c++11)

La différence vient plutôt de ton niveau en Java qui semble inférieur à celui du C++.
Apparemment tu maitrises les accès concurrents en C++ mais pas en Java...
Il n'y a rien de mal à cela, mais du coup la comparaison est faussé...

Je ne connais pas ces std:timed_mutex ou std::condition_variable, mais une lecture vite fait sur cppreference me fait penser aux Lock et aux wait/notify de Java...
Les noms des méthodes sont quasi les mêmes !

Citation Envoyé par Lolilolight  Voir le message
De plus en c++ avec opengl on n'est pas obligé d'utiliser plusieurs thread si cela n'est pas utile et les accès concurrents sont parfois difficile à déboguer, surtout pour un débutant, surtout si on ne comprend pas ce qui se passe derrière les coulissent et qu'on n'a pas besoin d'un tel design car on doit développer une petite appli.

Je ne vois pas pourquoi ce serait différent dans l'OpenGL de Java...

Citation Envoyé par Lolilolight  Voir le message
Le java tout comme son voisin le VB.Net requiers d'avoir un très bon niveau, je me souviens avoir passé des tests pour suivre des formations en java ou bien en .net orienté sharepoint, je ne les ai pas réussi donc je n'ai jamais pu suivre de formations.

Je ne vois pas en quoi VB.NET serait voisin de Java !?
Quand au bon niveau, c'est également le cas en C++ hein ! Surtout que ce dernier incorpore une multitude de concept...

a++
Avatar de Lolilolight Lolilolight
http://www.developpez.com
Membre à l'essai
le 09/05/2014 14:28
Oui on passe par une interface. Mais je ne vois pas en quoi cela complique les choses.

A la rigueur c'est verbeux dans le code, mais cela s'est nettement amélioré avec les lambdas et références de méthodes...

Référence de méthodes, ha bon ?
Ca doit être nouveau ça, car cela n'existait pas encore à l'époque.

La différence vient plutôt de ton niveau en Java qui semble inférieur à celui du C++.

Oui peut être.

Je ne vois pas en quoi VB.NET serait voisin de Java !?

Contrairement au c++, VB.NET et JAVA permettent de faire du développement internet.

Microsoft et sun s'étaient même associé à un certain moment.
Avatar de adiGuba adiGuba
http://www.developpez.com
Expert Confirmé Sénior
le 09/05/2014 15:12
Citation Envoyé par Lolilolight  Voir le message
Référence de méthodes, ha bon ?
Ca doit être nouveau ça, car cela n'existait pas encore à l'époque.

Oui c'est tout récent (Java 8).

Mais l'utilisation d'une interface en remplacement d'un pointeur de fonction fait amplement l'affaire même sans cela (c'est juste un peu plus long à écrire).

Citation Envoyé par Lolilolight  Voir le message
Contrairement au c++, VB.NET et JAVA permettent de faire du développement internet.

Mouais enfin c'est un peu tiré par les cheveux quand même. Ces deux langages sont quand même très éloigné.
A la rigueur tu m'aurais dit C# qui a une approche assez similaire (même si là encore il y a également beaucoup de différence)

Citation Envoyé par Lolilolight  Voir le message
Microsoft et sun s'étaient même associé à un certain moment.

Ils n'étaient pas vraiment associé...
Microsoft avait juste une licence Java (comme d'autres tel que Apple ou IBM).

Mais Microsoft a tenté de dénaturer Java en y incorporant des librairies non-standard spécifique à Windows, ce qui a finit en procès (et "tuer" les applets par la même occasion).

a++
Avatar de Lolilolight Lolilolight
http://www.developpez.com
Membre à l'essai
le 09/05/2014 16:27
Ok, ok, plus rien ne m'étonne en ce qui concerne microsoft.

A+.
Avatar de ptah35 ptah35
http://www.developpez.com
Membre chevronné
le 14/05/2014 22:45
Citation Envoyé par Lolilolight  Voir le message
Contrairement au c++, VB.NET et JAVA permettent de faire du développement internet.

Rien empêche de faire du développement Web ou internet, avec du C++ ou avec n'importe quel autre langage d'ailleurs...
Si votre application utilise la majeure partie des services de JavaEE ce n'est peut-être pas une bonne idée de se lancer dans un portage en C++, mais le développement Web est aussi utilisé pour réaliser des interfaces homme-machine pour des routeurs par exemple.

Citation Envoyé par adiGuba  Voir le message
Oui c'est tout récent (Java 8).
Mouais enfin c'est un peu tiré par les cheveux quand même. Ces deux langages sont quand même très éloigné.
A la rigueur tu m'aurais dit C# qui a une approche assez similaire (même si là encore il y a également beaucoup de différence)

C# et VB.NET sont aussi différent l'un de l'autre qu'une panthère l'est d'un jaguar... Mêmes paradigmes, même bibliothèque de classes, même machine virtuelle...
Avatar de el_slapper el_slapper
http://www.developpez.com
Expert Confirmé Sénior
le 15/05/2014 15:16
Citation Envoyé par ptah35  Voir le message
(.../...)C# et VB.NET sont aussi différent l'un de l'autre qu'une panthère l'est d'un jaguar... Mêmes paradigmes, même bibliothèque de classes, même machine virtuelle...

oui et non

oui à 100% sur l'aspect technique. Ce sont des langages équivalents en termes de capacilité technique.

non, clairement, sur le style et la syntaxe. Chacun a sa préférence, mais il y a des gens pour qui l'un est insupportable, et l'autre absolument génial. Certains qui vont trouver l'un inqualifiable, et l'autre parfait. En fait, c'est juste une question d'habitude. Mais quand les habitudes sont bien ancrées, difficille de passer de
Code :
1
2
3
If Blabla Then 
    Blibli 
End If
à
Code :
1
2
3
if(Blabla){ 
    Blibli 
}
C'est une autre manière d'écrire, mais surtout de lire. Notre cerveau est branché cognitivement sur une manière spécifique de coder(moi sur la première, la plupart des gens qui ont fait des études d'info sur la seconde), et a beaucoup de mal à lire correctement l'autre.

Alors que, techniquement, tu as raison, c'est 100% équivalent.
Avatar de ptah35 ptah35
http://www.developpez.com
Membre chevronné
le 15/05/2014 19:51
Citation Envoyé par el_slapper  Voir le message
sur le style et la syntaxe. Chacun a sa préférence, mais il y a des gens pour qui l'un est insupportable, et l'autre absolument génial. Certains qui vont trouver l'un inqualifiable, et l'autre parfait. En fait, c'est juste une question d'habitude. Mais quand les habitudes sont bien ancrées, difficille de passer de
Code :
1
2
3
If Blabla Then 
    Blibli 
End If
à
Code :
1
2
3
if(Blabla){ 
    Blibli 
}

Je me souviens que lorsque j'étais étudiant, je détestais PASCAL pour la même raison, je ne jurais que par le C . Mais après une vingtaine d'années à travailler avec différents langages non seulement impératifs, mais également fonctionnels, je ne me soucie plus de ce genre de détails... un bloc est un bloc qu'il s'écrive entre accolades ou entre un begin et un end ou même par la simple indentation...
Avatar de Ubiquité Ubiquité
http://www.developpez.com
Membre expérimenté
le 16/05/2014 23:01
L'un est à typage dynamique l'autre statique, ça fait un grosse différence de paradigme.
Avatar de ptah35 ptah35
http://www.developpez.com
Membre chevronné
le 17/05/2014 0:23
Citation Envoyé par Ubiquité  Voir le message
L'un est à typage dynamique l'autre statique, ça fait un grosse différence de paradigme.

J'ai oublié ce qu'il en était pour Visual Basic avant la version 3, mais depuis cette version VB n'a jamais été ni strictement à typage statique ni strictement à typage dynamique (mais assurément faiblement typé). Avant VB.NET, il y avait un type "Variant" qui était le type par défaut d'une variable et qui pouvait contenir une valeur de n'import quel type, ainsi qu'un type "Object" qui représentait une référence à un objet de n'importe quel type (en réalité, il s'agissait d'une référence à un objet COM qui implémente l'interface IDispatch). Avec VB.NET, le langage changé, le type Variant n'avait plus de sens et a été abandonné. Le type Object a été conservé et représente une référence vers n'importe quel type de valeur (type simple via le boxing ou référence à un objet).

Via le type Variant et Object avec VB jusqu'à la version 6 et via le type Object en VB.NET, Visual Basic supporte effectivement une forme de typage dynamique, mais .NET est avant tout statiquement typé. Depuis la version 4.0, C# supporte également le typage dynamique avec le mot clé "dynamic" de manière à permettre l'interopérabilité avec COM et le Dynamic Langage Runtime.

Donc outre le fait que je ne pense pas que typage dynamique ou statique soit une grosse différence de paradigme en général, depuis 2010, cette différence n'existe plus entre VB.NET et C#.
Avatar de aektiareti aektiareti
http://www.developpez.com

le 28/07/2014 18:36
Citation Envoyé par aliasjcdenton  Voir le message
Quels sont les avantages et les inconvénients respectifs majeurs des langages de programmation C++ et Java l'un vis-à-vis de l'autre ?


Java plus utilisé qu C++
Avatar de Sennad Sennad
http://www.developpez.com
Membre chevronné
le 29/08/2014 14:34
Citation Envoyé par aektiareti  Voir le message
Java plus utilisé qu C++

C'est quoi cet argument bidon ? ...
Offres d'emploi IT
Développeur windev h/f
CDI
Kobaltt - Pays de la Loire - La-Roche-sur-Yon
Parue le 27/11/2014
Dev ios junior
CDI
Mobiskill - Ile de France - Paris (75000)
Parue le 22/12/2014
Responsable capacity planning h/f
CDI
Société Générale France - Ile de France - Paris / Ile de France
Parue le 17/12/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula