30

Brunni (./22) :
geogeo (./21) :
Si oui, comment fait-il ?

Nan mais je suis prêt à parier qu'ils ne font rien de tout ça. C'est du troll, comme ceux qui disent que l'exécution avec un Garbage Collector est plus rapide qu'avec des malloc/free, en s'appuyant sur le fait qu'il existe des cas où la primitive "new" s'exécute plus rapidement dans cet environnement puisqu'il n'a pas à trouver un bloc vide...

Pour avoir fait des benchs dessus, quand tu travailles avec des classes métier (genre une classe "personne") c'est souvent plus efficace parce qu'en plus de ne pas réallouer la mémoire quand tu réaccèdes à un objet, tu économises souvent un accès base avec...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

31

Ce ne serait pas plutôt grâce au pattern 'copy on write'. Je suis pas un utilisateur de Java mais même si tout est référence il y a bien des copies à un moment donné non ?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

32

./29 tiens ca faisait longtemps que jes avais pas ecoutes mais tu me redonnes envie grin
avatar
納 豆パワー!
I becamed a natto!!!1!one!

33

Je viens de terminer un projet de session où on devait coder en java sur un système embarqué (Debian sur ARM) et j'ai détesté mon expérience java. J'ai commencé à coder en C, puis C++, et je n'ai pas trouvé que java était beaucoup plus facile que C++; par contre, j'ai remarqué une bonne perte de performances.
De plus, nous sommes tombés sur un bug de la machine virtuelle java: la plupart des opérations sur des double ou des float retournaient des valeurs louches comme ":58.254:24::24" ou encore "0.0P". Nous avons perdu un bon trois heures avant de se rendre compte de ce bug, et on a finalement adopté une solution pas trop propre: on multiplie la valeur recue par 1000, puis on caste en int aussitot qu'on peut. On fait alors nos opérations en int, puis on recaste en double juste avant de retourner.
Bref, j'espère pouvoir me tenir aussi loin que possible de java à l'avenir...
On dit "Java: code once, run everywhere"... Je dirais plutôt "Java: code once, debug everywhere"
De plus, dire que java est meilleur parce qu'il marche sur toutes les plateformes c'est comme dire que le sexe anal est meilleur parce qu'il marche sur les deux sexes...
Je me souviens
Ad mari usque ad mare

GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.

34

KillerX (./33) :
Je viens de terminer un projet de session où on devait coder en java sur un système embarqué (Debian sur ARM) et j'ai détesté mon expérience java. J'ai commencé à coder en C, puis C++, et je n'ai pas trouvé que java était beaucoup plus facile que C++; par contre, j'ai remarqué une bonne perte de performances.
De plus, nous sommes tombés sur un bug de la machine virtuelle java: la plupart des opérations sur des double ou des float retournaient des valeurs louches comme ":58.254:24::24" ou encore "0.0P". Nous avons perdu un bon trois heures avant de se rendre compte de ce bug, et on a finalement adopté une solution pas trop propre: on multiplie la valeur recue par 1000, puis on caste en int aussitot qu'on peut. On fait alors nos opérations en int, puis on recaste en double juste avant de retourner.
Bref, j'espère pouvoir me tenir aussi loin que possible de java à l'avenir...
On dit "Java: code once, run everywhere"... Je dirais plutôt "Java: code once, debug everywhere"
De plus, dire que java est meilleur parce qu'il marche sur toutes les plateformes c'est comme dire que le sexe anal est meilleur parce qu'il marche sur les deux sexes...


pencil Principalement la dernière citation. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

35

Si on garde l'analogie, Java ça sent la merde !

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

36

dire que java c'est mal a cause d'une VM toute pourrite c'est une mauvaise foi encore pire que de dire que linux c'est mal à cause de fedora embarrassed

37

KillerX (./33) :
De plus, dire que java est meilleur parce qu'il marche sur toutes les plateformes c'est comme dire que le sexe anal est meilleur parce qu'il marche sur les deux sexes...

Il est pas meilleur, mais différent (ou alors tu as eu une mauvaise expérience, ça demande une bonne préparation... si tu veux, j'ai un excellent ami ours qui...)
avatar

38

39

squalyl (./36) :
dire que java c'est mal a cause d'une VM toute pourrite c'est une mauvaise foi encore pire que de dire que linux c'est mal à cause de fedora redface.gif
N'empêche que pour moi, un gars qui décide de faire de l'embarqué en Java (je ne parle pas de KillerX) mérite un lynchage en place publique, pour l'exemple.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

40

avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

41

Oh mais je sais que ça existe, mais c'est pas pour autant que c'est une bonne idée.

Quand tu vois ça, déjà :
This reduction results in a JRE that is less than one-half the footprint of the full JRE - as low as 30MB for Java SE 5.0 and 24MB for Java SE 1.4.2.
ça se passe de commentaires.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

42

J'aime bien le "as low as"... On ne doit pas avoir les mêmes conceptions de l'embarqué smile

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

43

en effet.

N'oubliez pas javacard en plus.

CA c'est du java embarqué. j2me c'est de la gnognotte ^^

44

Par construction, en faisant l'hypothese du "meilleur codeur possible", les langages compiles sont forcement strictement plus rapides que les langages interpretes/bytecode/JIT. Tout simplement parce qu'on peut toujours coder un programme qui a le meme comportement qu'un interpreteur/une VM/un compilateur JIT avec un langage compile alors que l'inverse n'est pas vrai.
avatar
I'm on a boat motherfucker, don't you ever forget

45

Ce que tu dis est mathématiquement vrai. Maintenant, si c'est pour coder un truc en C++ qui soit capable de JIT le reste de ton programme bytecodé, l'interet de ne pas utiliser un langage fait pour ca devient tres faible.
Tout ce qui passe pas par le port 80, c'est de la triche.

46

bien sur qu'en pratique c'est pas realiste de faire ca. maintenant si on ne prend pas betement cette affirmation theorique au pied de la lettre et qu'on lit un peu entre les lignes, ce que ca veut dire, fondamentalement, c'est que si les compilateurs JIT utilisent des astuces pour rendre l'execution plus rapide, il n'y a aucune raison pour que les compilateurs normaux ne puissent pas adapter et integrer ces memes astuces.
avatar
I'm on a boat motherfucker, don't you ever forget

47

damnvoid (./44) :
Par construction, en faisant l'hypothese du "meilleur codeur possible", les langages compiles sont forcement strictement plus rapides que les langages interpretes/bytecode/JIT. Tout simplement parce qu'on peut toujours coder un programme qui a le meme comportement qu'un interpreteur/une VM/un compilateur JIT avec un langage compile alors que l'inverse n'est pas vrai.

C'est n'importe quoi... Y'a des langages compilés qui sont tout aussi inaptes à la création d'un JIT qu'un langage "bytecode" banal, tout comme il y a (c#) des langages bytecode qui permettent parfaitement de faire ça... Faut arrêter de fumer et de croire que les langages a bytecode sont nécéssairement moins puissants (pour le java c'est en effet indéniable mais c'est plus ou moins voulu par conception) que les langages compilés en natif. Techniquement ils représentent un super-ensemble des langages compilés, et non pas l'inverse... Vu qu'à l'éxécution tu as à la fois le code natif, et le code "source" (sous une forme dégradée).
damnvoid (./46) :
bien sur qu'en pratique c'est pas realiste de faire ca. maintenant si on ne prend pas betement cette affirmation theorique au pied de la lettre et qu'on lit un peu entre les lignes, ce que ca veut dire, fondamentalement, c'est que si les compilateurs JIT utilisent des astuces pour rendre l'execution plus rapide, il n'y a aucune raison pour que les compilateurs normaux ne puissent pas adapter et integrer ces memes astuces.
Bien sûr... mais dans certains cas, ça revient exactement à mettre un mini-JIT en tant que stub (par exemple dans stdlib) dans ton code "natif" alors bon...
(Je pense par exemple à l'optimisation des "interface virtual call" (appelons les comme ça tongue) telle qu'elle est faite par le JIT .NET ou certaines JVM)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

48

N'empêche que pour moi, un gars qui décide de faire de l'embarqué en Java (je ne parle pas de KillerX) mérite un lynchage en place publique, pour l'exemple.


Je sais, c'est ce qu'on pense tous... En fait l'idée c'est qu'en première session, on apprenait le C (++) (Je veux dire que ça n'avait de C++ que "cout"), en deuxième session, on apprenait le C++ pour vrai, et cette session, c'est le Java... Le choix du langage a été fait de cette manière.
Je me souviens
Ad mari usque ad mare

GENERATION 23: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social experiment.

49

L'optimisation virtual call est inutile dans un langage bien conçu comme le C++ parce qu'on ne déclare tout simplement pas les fonctions comme virtual si elles n'ont pas besoin de l'être!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

50

"L'optimisation est inutile car elle n'est utile que dans le cas où elle est utile" trioui
Continues comme ça ! \o/
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

51

La remarque de Kevin me semble pertinente. Pourquoi déclarer une méthode virtuelle alors que cela est inutile quand on n'utilise pas le polymorphisme !
La remarque est d'autant vraie pour d'autres optimisations (que ça soit en C++ ou en Java !).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

52

Cette optimisation n'est utile en Java que parce que toutes les méthodes sont virtuelles (sauf si on interdit carrément la surcharge avec final). En C++, on ne déclare tout simplement pas les méthodes virtual dans les cas où cette optimisation serait utile en Java.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

53

Oui mais en l'occurence dans énormément de cas tu auras des méthodes "virtuelles parce que c'est utile" sans t'en servir. Prends à peu près n'importe quel framework/librairie, et tu comprendras où je veux en venir.
Sinon je parlais des interfaces (par exemple en (D)COM(+) sur windows) comme on en trouve en C# ou Java, et dont les équivalents les plus proches (directs avec certaines contraintes) en C++ sont les classes abstraites, et où tu as _nécéssairement_ besoin que les méthodes soient virtuelles. Pour les classes normales, java est obligé de se démerder au mieux (ce n'est pas le cas en C# car tout comme en C++, les méthodes ne sont pas virtuelles par défaut) et d'utiliser le fait que les méthodes ou classes soient sealed dès que possible, mais au final quel que soit le langage, tous sont confrontés au même cas...
Quand tu (=ton porgramme) n'a aucune idée du code qui va t'être branché au cul, tu ne pourras jamais t'en tirer avec une optimisation statique, il faudra nécéssairement que tu utilises une optimisation dynamique. Qui dit dynamique dit JIT, c'est aussi simple que ça (en l'occurence les appels d'interface ne nécéssitent pas un vrai JIT super complexe avec de la vraie génération de code (quoi que...) mais c'est quand même du code qui ne fait pas vraiment partie de ton programme bien qu'il soit embarqué dedans)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

54

Mais c'est source de bugs et autres problèmes incompréhensibles etc. etc. etc.
[Edit] cross
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

55

Pour les interfaces:

class IFoo {
  public:
    void foo(void) { foo_impl(); }
    int bar(int x) { return bar_impl(x); }
  protected:
    virtual void foo_impl(void) = 0;
    virtual int bar_impl(int) = 0;
};

class Foo : public IFoo {
  public:
    void foo(void) { qDebug("foo"); }
    int bar(int x) { return x+1; }
  protected:
    virtual void foo_impl(void) { foo(); }
    virtual int bar_impl(int x) { return bar(x); }
};

et hop, tu n'utilises l'appel virtuel que quand tu passes par l'interface, pas quand tu utilises Foo directement.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

56