Bon je vais peut-être me faire gronder en posant ces questions qui à mon
avis ont déjà été posé, mais je les pose quand même car j'ai pas trouvé de
réponses :(
1. Faut-il un moteur spécifique pour faire tourner des applications C# comme
avec les applications Java ? Ou alors est-ce que les applications C#
tournent sans aucun problème sous Win9X, Win2000, et XP ?
2. Est-ce vraiment plus rapide que le C++ pour développer des applications
Windows ?
3. Est-ce que cela gère DirectX et OpenGL ? (je suppose que oui mais tant
qu'à faire autant demander..)
4. Quand à la taille de l'application finale ? Est-ce plus gros qu'avec C++
? Et la vitesse d'exécution ?
5. Pouvez-vous me conseiller un bon bouquin en français pour développer des
applications Windows en C#? (je connais très très bien le C-UNIX, le C++, et
pas vraiment les API WIN32)
Merci de votre aide à tous :) J'hésite à apprendre le C++ avec l'api Win32
ou directement passer au C#... sachant que je veux développer des
applications Windows ;)
les langages .NET génèrent un bytecode, forcément plus lent que du
natif.
--
Non.
Le bytecode est compilé lors de la premiere execution du programme (compilation JIT : Just In Time), ou lors de l'install.
[Je réponds en exprimant mes doutes]
Ben oui, mais c'est comme ca, c'est pas moi qui l'ai inventé. Le resultat se réécrit sur l'exe en byte-code.
Extraits de la doc Microsoft : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/highperfmanagedapps.asp
The JIT is an optimizing compiler, but because compilation happens at runtime, and only the first time a method is called, the number of optimizations that it does needs to be balanced against the time it takes to do the compilation.
But isn't that an order of magnitude slower, like the bytecode interpreters of old?
The Just-in-Time compiler No, it's not. The CLR uses a JIT (just-in-time) compiler to compile each method in CIL into native x86 code and then runs the native code. Although there is a small delay for JIT compilation of each method as it is first called, every method called runs pure native code with no interpretive overhead.
Unlike a traditional off-line C++ compilation process, the time spent in the JIT compiler is a "wall clock time" delay, in each user's face, so the JIT compiler does not have the luxury of exhaustive optimization passes.
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
On peut lever ce probleme sur la premiere execution en lancant la compilation a l'install.
Ok sur ce point.
-- Loïc
_M.B._ wrote:
"Philippe Guglielmetti" <news@dynabits.com> a écrit dans le message
les langages .NET génèrent un bytecode, forcément plus lent que du
natif.
--
Non.
Le bytecode est compilé lors de la premiere execution du programme
(compilation JIT : Just In Time), ou lors de l'install.
[Je réponds en exprimant mes doutes]
Ben oui, mais c'est comme ca, c'est pas moi qui l'ai inventé.
Le resultat se réécrit sur l'exe en byte-code.
Extraits de la doc Microsoft :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/highperfmanagedapps.asp
The JIT is an optimizing compiler, but because compilation happens at
runtime, and only the first time a method is called, the number of
optimizations that it does needs to be balanced against the time it
takes to do the compilation.
But isn't that an order of magnitude slower, like the bytecode
interpreters of old?
The Just-in-Time compiler
No, it's not. The CLR uses a JIT (just-in-time) compiler to compile each
method in CIL into native x86 code and then runs the native code.
Although there is a small delay for JIT compilation of each method as it
is first called, every method called runs pure native code with no
interpretive overhead.
Unlike a traditional off-line C++ compilation process, the time spent in
the JIT compiler is a "wall clock time" delay, in each user's face, so
the JIT compiler does not have the luxury of exhaustive optimization passes.
Il est donc beaucoup plus rapide aux executions autres que la
premiere.
Je ne vois donc pas où tu es allé trouver ça...
On peut lever ce probleme sur la premiere execution
en lancant la compilation a l'install.
les langages .NET génèrent un bytecode, forcément plus lent que du
natif.
--
Non.
Le bytecode est compilé lors de la premiere execution du programme (compilation JIT : Just In Time), ou lors de l'install.
[Je réponds en exprimant mes doutes]
Ben oui, mais c'est comme ca, c'est pas moi qui l'ai inventé. Le resultat se réécrit sur l'exe en byte-code.
Extraits de la doc Microsoft : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/highperfmanagedapps.asp
The JIT is an optimizing compiler, but because compilation happens at runtime, and only the first time a method is called, the number of optimizations that it does needs to be balanced against the time it takes to do the compilation.
But isn't that an order of magnitude slower, like the bytecode interpreters of old?
The Just-in-Time compiler No, it's not. The CLR uses a JIT (just-in-time) compiler to compile each method in CIL into native x86 code and then runs the native code. Although there is a small delay for JIT compilation of each method as it is first called, every method called runs pure native code with no interpretive overhead.
Unlike a traditional off-line C++ compilation process, the time spent in the JIT compiler is a "wall clock time" delay, in each user's face, so the JIT compiler does not have the luxury of exhaustive optimization passes.
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
On peut lever ce probleme sur la premiere execution en lancant la compilation a l'install.
Ok sur ce point.
-- Loïc
_M.B._
"Loïc Joly" a écrit dans le message news: bnueb1$hks$
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
MB
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message news:
bnueb1$hks$1@news-reader4.wanadoo.fr...
Il est donc beaucoup plus rapide aux executions autres que la
premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
"Loïc Joly" a écrit dans le message news: bnueb1$hks$
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
MB
Loïc Joly
_M.B._ wrote:
"Loïc Joly" a écrit dans le message news: bnueb1$hks$
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
Ce qui est très différent de dire : Le bytecode est compilé lors de la premiere execution du programme
Par exemple, une méthode jamais appelée ne sera pas compilée. Une méthode qui n'est appelée qu'à la deuxième exécution ne sera compilée pour la première fois qu'à la deuxième exécution, et quand on exécute plusieur fois le programme, tout ce qui est dit c'est qu'à chaque exécution, chaque méthode n'est compilée qu'une fois.
-- Loïc
_M.B._ wrote:
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message news:
bnueb1$hks$1@news-reader4.wanadoo.fr...
Il est donc beaucoup plus rapide aux executions autres que la
premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à
croire que le mien est plus exact.
Je lis :
compilation happens at runtime, and only the first time a method is called
Je traduit :
la compilation a lieu pendant l'exécution, et seulement la première fois
qu'une méthode est exécutée.
Ce qui est très différent de dire :
Le bytecode est compilé lors de la premiere execution du programme
Par exemple, une méthode jamais appelée ne sera pas compilée. Une
méthode qui n'est appelée qu'à la deuxième exécution ne sera compilée
pour la première fois qu'à la deuxième exécution, et quand on exécute
plusieur fois le programme, tout ce qui est dit c'est qu'à chaque
exécution, chaque méthode n'est compilée qu'une fois.
"Loïc Joly" a écrit dans le message news: bnueb1$hks$
Il est donc beaucoup plus rapide aux executions autres que la premiere.
Je ne vois donc pas où tu es allé trouver ça...
Dans toute la doc que tu as collée dans ton post ...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
Ce qui est très différent de dire : Le bytecode est compilé lors de la premiere execution du programme
Par exemple, une méthode jamais appelée ne sera pas compilée. Une méthode qui n'est appelée qu'à la deuxième exécution ne sera compilée pour la première fois qu'à la deuxième exécution, et quand on exécute plusieur fois le programme, tout ce qui est dit c'est qu'à chaque exécution, chaque méthode n'est compilée qu'une fois.
-- Loïc
Alain Naigeon
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message news:
bo01nf$id$1@news-reader5.wanadoo.fr...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à
croire que le mien est plus exact.
Je lis :
compilation happens at runtime, and only the first time a method is called
Je traduit :
la compilation a lieu pendant l'exécution, et seulement la première fois
qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - anaigeon@free.fr - Strasbourg, France
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
Benoit Rousseau
Alain Naigeon wrote:
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du bit_code? Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions spécifiques à chaque architecture... non ?
-------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Alain Naigeon wrote:
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message news:
bo01nf$id$1@news-reader5.wanadoo.fr...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à
croire que le mien est plus exact.
Je lis :
compilation happens at runtime, and only the first time a method is called
Je traduit :
la compilation a lieu pendant l'exécution, et seulement la première fois
qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du bit_code?
Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions
spécifiques à chaque architecture... non ?
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du bit_code? Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions spécifiques à chaque architecture... non ?
-------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
kanze
Benoit Rousseau wrote in message news:<3fa3f436$0$22181$...
Alain Naigeon wrote:
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du bit_code ?
Peut-être. En Java, en tout cas, il y a une phase de chargement, qui peut bien lever des exceptions (différence de versions des différentes classes, etc.). Je ne sais pas si c'est le cas avec C#.
Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions spécifiques à chaque architecture... non ?
Ça dépend comment ils ont organisé les fichiers byte-code.
En tout cas, il peut toujours avoir des erreurs du genre manque de mémoire.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Benoit Rousseau <not.provided@no.spam> wrote in message
news:<3fa3f436$0$22181$ba620e4c@reader3.news.skynet.be>...
Alain Naigeon wrote:
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message
news: bo01nf$id$1@news-reader5.wanadoo.fr...
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à
croire que le mien est plus exact.
Je lis :
compilation happens at runtime, and only the first time a method is
called
Je traduit :
la compilation a lieu pendant l'exécution, et seulement la première
fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du
bit_code ?
Peut-être. En Java, en tout cas, il y a une phase de chargement, qui
peut bien lever des exceptions (différence de versions des différentes
classes, etc.). Je ne sais pas si c'est le cas avec C#.
Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions
spécifiques à chaque architecture... non ?
Ça dépend comment ils ont organisé les fichiers byte-code.
En tout cas, il peut toujours avoir des erreurs du genre manque de
mémoire.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Benoit Rousseau wrote in message news:<3fa3f436$0$22181$...
Alain Naigeon wrote:
"Loïc Joly" a écrit dans le message news: bo01nf$id$
Dans ce cas, mon anglais est différent du tien, et j'ai tendance à croire que le mien est plus exact.
Je lis : compilation happens at runtime, and only the first time a method is called
Je traduit : la compilation a lieu pendant l'exécution, et seulement la première fois qu'une méthode est exécutée.
est appelée (si la compil échoue, adieu exécution).
Est ce qu'il peut y avoir des erreurs lors de la compilation du bit_code ?
Peut-être. En Java, en tout cas, il y a une phase de chargement, qui peut bien lever des exceptions (différence de versions des différentes classes, etc.). Je ne sais pas si c'est le cas avec C#.
Tout doit déjà être résolu et il ne reste plus qu'à lier les fonctions spécifiques à chaque architecture... non ?
Ça dépend comment ils ont organisé les fichiers byte-code.
En tout cas, il peut toujours avoir des erreurs du genre manque de mémoire.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze
Loïc Joly wrote in message news:<bnpchl$9nr$...
[en ce qui concerne C#...]
Et la vitesse d'exécution ? Ca doit dépendre du type d'application. Pour de l'IHM, on ne vera
peut-être pas de différence.
Elle pourrait même être plus rapide, à cause de la remasse-miettes.
Pour des applications intensives en calcul, on risque de voir des différence non négligeables avec par exemple du C++ utilisant des templates à bon escient.
Je ne suis pas convaincu. C'est précisement dans les applications de calcul numérique où le Java s'approche, voire dépasse le C++ en vitesse.
L'importance des templates pour la vitesse est tout rélatif. D'une part, il a de l'importance surtout à cause du modèle de compilation/édition de liens classique typique des implémentations C++, et de l'autre, la seule fois que j'ai fait un benchmark (avec Sun CC 4.2, ce qui indique un peu l'age), les fonctions virtuelles ont battu les templates.
Les fonctions virtuelles ralentissent *quand* il y a polymorphisme dynamique. Chose que les templates ne supportent pas. Sinon, elles ralentissent quand le compilateur est incapable à déterminer qu'il n'y a pas vraiment du polymorphisme dynamique. Cas qui arrive souvent avec le modèle de compilation séparée typique de C++, mais qui ne pose pas particulièrement de problème pour le compilateur Hot-Spot de Java.
[...]
Merci de votre aide à tous :) J'hésite à apprendre le C++ avec l'api Win32 ou directement passer au C#... sachant que je veux développer des applications Windows ;)
Je pense qu'utiliser directement l'API Win32 est une perte de temps importante. Mais C# + .NET framework n'est pas la seule alternative.
Pour une application complète avec interface graphique, ce n'est même pas sûr qu'il soit la meilleur alternative. En revanche, s'il s'agit d'integrer l'application dans des ASP, ou des choses de ce genre...
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
news:<bnpchl$9nr$1@news-reader4.wanadoo.fr>...
[en ce qui concerne C#...]
Et la vitesse d'exécution ?
Ca doit dépendre du type d'application. Pour de l'IHM, on ne vera
peut-être pas de différence.
Elle pourrait même être plus rapide, à cause de la remasse-miettes.
Pour des applications intensives en calcul, on risque de voir des
différence non négligeables avec par exemple du C++ utilisant des
templates à bon escient.
Je ne suis pas convaincu. C'est précisement dans les applications de
calcul numérique où le Java s'approche, voire dépasse le C++ en vitesse.
L'importance des templates pour la vitesse est tout rélatif. D'une part,
il a de l'importance surtout à cause du modèle de compilation/édition de
liens classique typique des implémentations C++, et de l'autre, la seule
fois que j'ai fait un benchmark (avec Sun CC 4.2, ce qui indique un peu
l'age), les fonctions virtuelles ont battu les templates.
Les fonctions virtuelles ralentissent *quand* il y a polymorphisme
dynamique. Chose que les templates ne supportent pas. Sinon, elles
ralentissent quand le compilateur est incapable à déterminer qu'il n'y a
pas vraiment du polymorphisme dynamique. Cas qui arrive souvent avec le
modèle de compilation séparée typique de C++, mais qui ne pose pas
particulièrement de problème pour le compilateur Hot-Spot de Java.
[...]
Merci de votre aide à tous :) J'hésite à apprendre le C++ avec l'api
Win32 ou directement passer au C#... sachant que je veux développer
des applications Windows ;)
Je pense qu'utiliser directement l'API Win32 est une perte de temps
importante. Mais C# + .NET framework n'est pas la seule alternative.
Pour une application complète avec interface graphique, ce n'est même
pas sûr qu'il soit la meilleur alternative. En revanche, s'il s'agit
d'integrer l'application dans des ASP, ou des choses de ce genre...
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Et la vitesse d'exécution ? Ca doit dépendre du type d'application. Pour de l'IHM, on ne vera
peut-être pas de différence.
Elle pourrait même être plus rapide, à cause de la remasse-miettes.
Pour des applications intensives en calcul, on risque de voir des différence non négligeables avec par exemple du C++ utilisant des templates à bon escient.
Je ne suis pas convaincu. C'est précisement dans les applications de calcul numérique où le Java s'approche, voire dépasse le C++ en vitesse.
L'importance des templates pour la vitesse est tout rélatif. D'une part, il a de l'importance surtout à cause du modèle de compilation/édition de liens classique typique des implémentations C++, et de l'autre, la seule fois que j'ai fait un benchmark (avec Sun CC 4.2, ce qui indique un peu l'age), les fonctions virtuelles ont battu les templates.
Les fonctions virtuelles ralentissent *quand* il y a polymorphisme dynamique. Chose que les templates ne supportent pas. Sinon, elles ralentissent quand le compilateur est incapable à déterminer qu'il n'y a pas vraiment du polymorphisme dynamique. Cas qui arrive souvent avec le modèle de compilation séparée typique de C++, mais qui ne pose pas particulièrement de problème pour le compilateur Hot-Spot de Java.
[...]
Merci de votre aide à tous :) J'hésite à apprendre le C++ avec l'api Win32 ou directement passer au C#... sachant que je veux développer des applications Windows ;)
Je pense qu'utiliser directement l'API Win32 est une perte de temps importante. Mais C# + .NET framework n'est pas la seule alternative.
Pour une application complète avec interface graphique, ce n'est même pas sûr qu'il soit la meilleur alternative. En revanche, s'il s'agit d'integrer l'application dans des ASP, ou des choses de ce genre...
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16