Pourquoi jette-t-on des cailloux à Java ici ?

Répondre
Partager Rechercher
Citation :
Publié par Airmed / Ildefonse
1/ J'ai pas suivi en quoi le langage jouait tant que ca sur le multi thread. Dans ces cas la c est l'OS qui joue beaucoup, non ?
3/ moui mais c'est baise. dans ton langage interprete, tu peux effectivement toujours optimiser l'interpreteur, alors que tu peux pas modif ton CPU
Le langage joue beaucoup dans la facilite d'exprimer le parallelisme et les synchronisations/sections critiques. Dans Java les objects et methode "synchronized" c'est vraiment de la gestion a tres gros grain de la concurence. Pour la peine on synchronize toute une methode quand c'est seulement l'acces a une toute petite ressource qui doit etre en exclusion mutuelle. On peut toujours augmenter la verbosite en decoupant en plus de fonctions/objects, mais d'autres langages peuvent faire la meme chose de facon pratiquement transparente (certains compilateurs detectent meme automatiquement les acces concurents et les serialisent avec un algorithme genre "coherence de cache" automatiquement sans que le programmeur ne se soucie de ca).

Le bytecode n'a pas de raisons d'etre plus volumineux que le binaire compile, et n'a pas de raisons d'etre sensiblement plus lent que le binaire compile pour ce qui est 1) calcul numerique 2) I/O. Par contre il est acceptable que l'emulation dans une VM de l'affichage soit plus lent (encore que la VM bien faite devrait convertir en natif). Si le code est plus gros c'est que le bytecode est mal concu, si il est plus lent c'est que la VM est mal concue.

Un defaut des langages a VM, ca n'est pas la lenteur de l'interpretation du bytecode (c'est pas non plus de l'interpretation du shell ou faut couper les tokens hein), c'est la memoire consommee par la VM. On peut cela dit remarquer que les VM CaML, LUA, Python, Ruby sont largement moins memoirophages que celle de Java.
Il faut ajouter à cela qu'il y a plusieurs niveaux de parallélisme :
1) processus
2) thread OS
4) thread userspace (émulation de thread)

En C / C++ /java on n'a accès qu'a 1) et 2). Les threads / processus sont lourds et coutent cher en performance s'ils ne sont pas utilisés a bon escient.

Au contraire les threads userspace sont très légers, on peut en avoir des centaines de milliers qui tournent en même temps sans de trop gros impacts sur les performances. Un programme interprété a non seulement accès à 3) mais il peut aussi répartir automatiquement les threads entre 1),2) et 3).

En Oz ou Erlang les threads d'un même programme peuvent être exécutés automatiquement sur des machines différentes sans que le programmeur ait du utiliser autre chose que de simple threads.

On peut aussi se demander quel intéret d'utiliser des threads userspace puisqu'ils doivent être utilisés sur le même processeur. voici un exemple :

fa(x[]) -> chaque seconde remplit la case suivante de x[] avec le résultat d'un calcul
fb(x[]) -> lit les cases écrites dans x[] pour les utiliser dans un autre calcul.

sans threads on doit attendre la fin de fa(x[]) pour pouvoir exécuter fb(x[]), ou alors on réécrit fa(x[]) en fa'(x) et on alterne fa',fb', ce qui n'est pas toujours possible avec les mêmes performances ou un code propre.

On peut aussi utiliser un thread OS, mais si le nombre de fa,fb augmente ca deviendra vite lourd.

Dans ce cas des threads userspace peuvent faire l'aller retour entre fa fb. C'est particulièrement utile pour les interfaces graphiques ou tout est indépendant mais consomme rarement les ressources nécessitant des threads OS.

Par exemple Firefox a tendance à bloquer dans une tab lorsqu'il charge l'autre, parce qu'il utilise quelques gros threads bourrins au lieu de plein de petits.
Citation :
Publié par -efbie-
Il faut ajouter à cela qu'il y a plusieurs niveaux de parallélisme :
1) processus
2) thread OS
4) thread userspace (émulation de thread)

En C / C++ /java on n'a accès qu'a 1) et 2). Les threads / processus sont lourds et coutent cher en performance s'ils ne sont pas utilisés a bon escient.
Alors là tu dis des bêtises, rien n'empèche de développer une bibliothèque de threads utilisateur en c/c++, d'ailleurs il y en a qui existent.

De toutes façons, tous les langages sont équivalents en termes de ce que l'on peut faire avec. Ce qui les distingue, c'est la facilité avec laquelle on peut le faire (et la performance du code généré).
Ce débat m'effraie un peu. En effet étant au lycée et m'intéressant à l'informatique, j'apprends Java comme premier langage sur les conseils d'un informaticien. Ca doit bien faire deux ans que j'ai commencé (malheureusement j'avance lentement faute de temps et de motivation), mais je ne m'y suis vraiment remis que depuis peu avec le livre de Claude Delannoy pour avoir de bonnes bases théoriques et une bonne vue d'ensemble du Java.

Mais à vous lire j'ai l'impression que ça fait deux ans que j'apprends un langage un peu useless et déconseillé comme premier langage. (d'ailleurs je me rend compte que j'ai du mal à "penser objet")

Désolé pour le post un peu 3615 Mylife, mais tout ça pour vous demander: est-ce que j'ai intérêt à continuer le Java de toute façon ça sera pas perdu ou bien à stopper et me mettre au C? (ou encore me mettre au C et mettre un peu le Java de côté en attendant)
Citation :
Publié par Bartimeus
Ce débat m'effraie un peu. En effet étant au lycée et m'intéressant à l'informatique, j'apprends Java comme premier langage sur les conseils d'un informaticien. Ca doit faire bien deux ans que j'ai commencé (malheureusement j'avance lentement faute de temps et de motivation), mais je ne m'y suis vraiment remis depuis peu avec le livre de Claude Delannoy pour avoir de bonnes bases théoriques et une bonne vue d'ensemble du Java.

Mais à vous lire j'ai l'impression que ça fait deux ans que j'apprends un langage un peu useless et déconseillé comme premier langage. (d'ailleurs je me rend compte que j'ai du mal à "penser objet")

Désolé pour le post un peu 3615 Mylife, mais tout ça pour vous demander: est-ce que j'ai intérêt à continuer le Java de toute façon ça sera pas perdu ou bien à stopper et me mettre au C? (ou encore me mettre au C et mettre un peu le Java de côté en attendant)
[MyLife] 15 ans ... si ma soeur pouvait écrire en faisant si peu de fautes (voire pas du tout) je serais bien content [/MyLife]

Bref, là je crois qu'on parle d'une utilisation vraiment professionnelle du java. À ton niveau je ne pense pas que tu aies à tenir compte de certains de nos propos. Par contre il est vrai que débuter par du java, c'est pas forcément ce qu'il y a de plus simple, mais après tout pourquoi pas ?

Pour ce qui est du concept "objet", ça viendra avec le temps et la pratique, c'est pas évident au début. Commencer un autre langage ne te sera peut-être pas d'un grand secours pour comprendre ce principe. De toute façon, une fois que tu auras saisi les concepts de base de la programmation, tu pourras changer de langage assez simplement car ce seront toujours ces mêmes concepts que tu retrouveras.
Ce n'est pas une perte de temps, mais il n'est généralement pas conseillé de commencer par le java.

Si tu veux, il y a eu une discussion à ce sujet il n'y a pas longtemps, tu pourras la trouver ici
Citation :
Publié par Imladir
il n'est généralement pas conseillé de commencer par le java.
Encore une fois, ça dépend des gens.

J'ai commencé par le Java (dans mon école) et je n'ai aucun problèmes.
Je doute fortement qu'il soit plus dur d'apprendre le java que le C++ par exemple.
Citation :
Publié par Akis
Je doute fortement qu'il soit plus dur d'apprendre le java que le C++ par exemple.
Ce n'est pas forcément plus dur, mais à mon avis il est intéressant d'apprendre des trucs qu'on ne fait pas en java, mais qui peuvent être intéressants (même si pas forcément utiles), par exemple la surcharge d'opérateurs, l'utilisation des pointeurs etc.
En fait, l'avantage de commencer par le C++ c'est qu'on apprend les bases de la programmation sans les objets.
Citation :
Publié par Imladir
Ce n'est pas forcément plus dur, mais à mon avis il est intéressant d'apprendre des trucs qu'on ne fait pas en java, mais qui peuvent être intéressants (même si pas forcément utiles), par exemple la surcharge d'opérateurs, l'utilisation des pointeurs etc.
En fait, l'avantage de commencer par le C++ c'est qu'on apprend les bases de la programmation sans les objets.
C'est sûr mais C/C++ sont quand même des langages fortement typés et ça peut être rédhibitoire pour certains. De plus en C/C++, à part faire des printf("Hello world! \n"); on ne s'amuse pas beaucoup au début. Pour apprendre les bases de la programmation procédurale et / ou modulaire (sans trop se prendre la tête), PHP est un bon choix je pense.

Seul bémol, certains diront que le fait de commencer par du PHP peut donner de mauvaises habitudes au développeur (Code dégueulasse, peu performant, pas indenté etc.). C'est vrai que c'est un langage assez permissif qui autorise beaucoup la bidouille mais bon, faut savoir s'imposer une certaine rigueur et prendre conscience qu'il y a des règles élémentaires à respecter quand on code.
Je ne sais pas, je trouve pour ma part plus logique de commencer par quelque chose de très peu permissif et qui va t'en faire baver au moindre truc qui n'est pas respecté, au moins ça permet de prendre de bonnes habitudes et il est alors beaucoup plus facile de passer à quelque chose de moins strict.
On deconseille de commencer par Java d'une part pour le coté Objet qui est peut être assez complexe (mais je ne peux plus m'en passer perso), mais aussi pour le coté extrement carré typé, qui peut être assez lourd (moi je trouve au contraire que ca aide, on perd pas des heures à chercher des erreurs de syntaxe en Java contrairement à d'autre langage, mais là c'est encore autre chose).
Je ne vois pas bien la rapport entre Java et le PHP.

Le PHP est du simple scripting qui n'est pas comparable à un véritable environnement de développement, tant par sa puissance que par ses possibilités.

Aujourd'hui si on parle de développement en entreprise, on parle Java ou .NET oubliez le reste. Les deux ont leurs avantages et inconvénient.

Le développement standard avec le client lourd Java est tout à fait adapté, par contre tout ce qui touche au web est assez catastrophique en terme de monté en charge.

Mais de nos jours il n'y a pas encore de solution ultime...
Citation :
Publié par Khalimar
Aujourd'hui si on parle de développement en entreprise, on parle Java ou .NET oubliez le reste. Les deux ont leurs avantages et inconvénient.
Pas quand j etais jeune, mais tetre que ca a change.
Et a priori, sur deux devs que je connais, aucun ne fait du java ou du .net mais du c++.
Citation :
Publié par Khalimar
Le PHP est du simple scripting qui n'est pas comparable à un véritable environnement de développement, tant par sa puissance que par ses possibilités.
Euh autant je suis pas un fan inconditionnel du php, autant je suis pas d'accord quand tu dis que le php n'est que du "scripting".

Citation :
Aujourd'hui si on parle de développement en entreprise, on parle Java ou .NET oubliez le reste. Les deux ont leurs avantages et inconvénient.
Euh non pas du tout, pour le développement web oui, mais pour le reste il y a plein d'autres trucs qui sont utilisés.

Citation :
Le développement standard avec le client lourd Java est tout à fait adapté, par contre tout ce qui touche au web est assez catastrophique en terme de monté en charge.
Pas d'accord non plus, pour les clients lourds il y a bien mieux que java (ça a déjà été dit) et pour le web faut oublier les applets hein, ça date ça, maintenant le développement web en J2EE c'est pas mal.

Citation :
Mais de nos jours il n'y a pas encore de solution ultime...
Et c'est tout aussi bien.
Citation :
Publié par Bleys d'Ambre
C'est sûr mais C/C++ sont quand même des langages fortement typés et
C ni C++ ne sont pas fortement types. Ils ont un systeme de typage mais sans inference et on peut transtyper.
Citation :
Publié par Mothra
C ni C++ ne sont pas fortement types. Ils ont un systeme de typage mais sans inference et on peut transtyper.
Oui c'est jouer sur les mots. Ils ne remplissent pas TOUS les critères qui font d'un langage un langage "fortement typé". Je l'ai dit dans le sens où le type des variables en C pose souvent problème aux débutants.
Citation :
Publié par Imladir
Euh non pas du tout, pour le développement web oui, mais pour le reste il y a plein d'autres trucs qui sont utilisés.
Java et .Net ne se cantonnent pas au développement web, tout comme je connais une (grande) banque qui utilise php
Citation :
Publié par puchiko
Java et .Net ne se cantonnent pas au développement web, tout comme je connais une (grande) banque qui utilise php
Je me suis mal exprimé, je ne voulais pas dire que .NET et Java ne servent que pour ça, même si c'est leur point fort. J'ai développé un indexeur full-text en C# qui fonctionnait plutôt pas mal et assez rapidement par exemple.


Quant au php oui bien sur que c'est faisable de faire des trucs importants, mais à mon avis (je précise que je ne connais pas du tout php5 donc toute la notion d'objets etc) c'est quand même nettement moins puissant que du J2EE ou du .NET, mais c'est sans doute ce qui en fait tout l'intérêt pour certains projets.
Citation :
Publié par Bartimeus
Mais à vous lire j'ai l'impression que ça fait deux ans que j'apprends un langage un peu useless et déconseillé comme premier langage. (d'ailleurs je me rend compte que j'ai du mal à "penser objet")
useless, certainement pas. Après tout le java est encore, il me semble, le langage le plus utilisé pour les développements.
Par contre lorsqu'il s'agit d'apprendre la programmation, certains (dont je fais partie) pensent qu'il est préférable de commencer par un langage non-objet proche de la machine et plus ou moins permissif afin de comprendre, en partie, comment fonctionne l'ordinateur. Un langage peu permissif permet de prendre de bonnes habitudes mais il suffit d'avoir des contraintes pour avoir le même résultat avec un langage permissif (par exemple une norme de codage très stricte à appliquer).

En fait, ça dépend de plein de choses :
- l'objectif visé : est-ce une personne qui souhaite juste bidouiller un peu par elle-même ? ou bien qui cherche à prendre de l'avance par rapport à des études en informatique ?
- l'orientation future : faire du développement web ? du développement de client lourds ? du graphisme ? de l'animation ? de l'embarqué ?

En fonction de tout ça, le choix des langages et leur ordre d'apprentissage peut différer.
Citation :
Publié par RisWaaq
- l'objectif visé : est-ce une personne qui souhaite juste bidouiller un peu par elle-même ? ou bien qui cherche à prendre de l'avance par rapport à des études en informatique ?
- l'orientation future : faire du développement web ? du développement de client lourds ? du graphisme ? de l'animation ? de l'embarqué ?

En fonction de tout ça, le choix des langages et leur ordre d'apprentissage peut différer.
L'orientation future, je ne sais pas encore, mais pour l'objectif visé, c'est un peu les deux que tu cites, et justement je commence à me poser la question de savoir si Java est bien adapté à ces deux objectifs. (et apparemment c'est pas forcément le meilleur choix même si c'est pas catastrophique de commencer par là)
De toute facon le langage n'a qu'une importance marginale sur ton "cursus". Il y a 3 ou 4 grandes familles de langage, et du moment ou tu en connais un de chaque famille, passer d'un langage a un autre n'est qu'un probleme d'adaptation (il faut par exemple environs 2 jours pour passer de Java a C++, j'entend par la ecrire ses premiers programmes simples, et dans les 2 mois pour etre pleinement operationnel et savoir convertir toutes les biblio Java en STL et inversement).
Citation :
Publié par Imladir
Quant au php oui bien sur que c'est faisable de faire des trucs importants, mais à mon avis (je précise que je ne connais pas du tout php5 donc toute la notion d'objets etc) c'est quand même nettement moins puissant que du J2EE ou du .NET, mais c'est sans doute ce qui en fait tout l'intérêt pour certains projets.
Le mieux dans ce cas là, c'est de ne pas donner ton avis sur php5 ;-)
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés