je m interroge sur la vitesse d execution entre une comparaison et un
pointeur de methode.
j ai une class dont une methode peut changer de comportement au cours de
la vie du process, mais cela rarement.
je me demandais si je devais avoir une methode unique avec un bloc
if/else ou alors un pointeur de methode sette a la methode qui va bien.
j ai donc ecrit deux petits programmes de test, et la solution if/else
est /visiblement/ plus rapide.
et donc je me demandais:
- est ce que mon test est pertinent?
- pourquoi une telle difference de temps?
les prog ont ete compile sous un linux 2.6 avec g++ 3.3.5
merci,
def.hh
------
#ifndef DEF_HH
# define DEF_HH
#include <stdlib.h>
#define MAX_LOOP 1000000000
class Test;
typedef int (Test::*behavior_t)(void);
class Test
{
public:
Test() :
_test(true)
{
}
int behavior1(void)
{
return 0;
}
int behavior2()
{
return 0;
}
| Dans les langages fonctionnels, tu as les fermetures qui permettent | "d'enfermer" les effets de bords dans un contexte ferme et | persistant. Si dans de tels langages tu trouves des effets de bords, | c'est probablement parce qu'on le veut bien pour des raisons x ou y | (simplicite, efficacite, etc...).
ou simplement parce que c'est necessaire pour des raisons basiques :-)
-- Gaby
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| Dans les langages fonctionnels, tu as les fermetures qui permettent
| "d'enfermer" les effets de bords dans un contexte ferme et
| persistant. Si dans de tels langages tu trouves des effets de bords,
| c'est probablement parce qu'on le veut bien pour des raisons x ou y
| (simplicite, efficacite, etc...).
ou simplement parce que c'est necessaire pour des raisons basiques :-)
| Dans les langages fonctionnels, tu as les fermetures qui permettent | "d'enfermer" les effets de bords dans un contexte ferme et | persistant. Si dans de tels langages tu trouves des effets de bords, | c'est probablement parce qu'on le veut bien pour des raisons x ou y | (simplicite, efficacite, etc...).
ou simplement parce que c'est necessaire pour des raisons basiques :-)
-- Gaby
Jean-Marc Bourguet
Gabriel Dos Reis writes:
Jean-Marc Bourguet writes:
| Haskell n'a pas d'effet de bord, mais un concept (les | monades) qui permet d'en avoir le goût et la saveur. | Mais je n'ai jamais réellement pris la peine de | comprendre ce que c'était.
Les IO monads, par exemple ? C'est bel et bien des effets de bord. La seule difference avec des langages profondement imperatifs, c'est qu'ils ont une construction typee pour marquee la ou se trouve les effets de bords. sinon, ils ont bien des effets de bords et meme des constructions "unsafe". Ils disent "purement fonctionnel", mais ils fournissent aussi la definition qui va avec :-)
Je me demandais s'il y avait quelque chose qui m'échappait; mais j'avais apparemment donc bien compris :-)
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
Jean-Marc Bourguet <jm@bourguet.org> writes:
| Haskell n'a pas d'effet de bord, mais un concept (les
| monades) qui permet d'en avoir le goût et la saveur.
| Mais je n'ai jamais réellement pris la peine de
| comprendre ce que c'était.
Les IO monads, par exemple ? C'est bel et bien des effets
de bord. La seule difference avec des langages
profondement imperatifs, c'est qu'ils ont une construction
typee pour marquee la ou se trouve les effets de
bords. sinon, ils ont bien des effets de bords et meme des
constructions "unsafe". Ils disent "purement fonctionnel",
mais ils fournissent aussi la definition qui va avec :-)
Je me demandais s'il y avait quelque chose qui m'échappait;
mais j'avais apparemment donc bien compris :-)
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
| Haskell n'a pas d'effet de bord, mais un concept (les | monades) qui permet d'en avoir le goût et la saveur. | Mais je n'ai jamais réellement pris la peine de | comprendre ce que c'était.
Les IO monads, par exemple ? C'est bel et bien des effets de bord. La seule difference avec des langages profondement imperatifs, c'est qu'ils ont une construction typee pour marquee la ou se trouve les effets de bords. sinon, ils ont bien des effets de bords et meme des constructions "unsafe". Ils disent "purement fonctionnel", mais ils fournissent aussi la definition qui va avec :-)
Je me demandais s'il y avait quelque chose qui m'échappait; mais j'avais apparemment donc bien compris :-)
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Matthieu Moy
Jean-Marc Bourguet writes:
Je me demandais s'il y avait quelque chose qui m'échappait; mais j'avais apparemment donc bien compris :-)
A partir du moment ou tu fais des IO, de toutes façons, on se demande ce que ça peut vouloir dire du purement fonctionnel ...
-- Matthieu
Jean-Marc Bourguet <jm@bourguet.org> writes:
Je me demandais s'il y avait quelque chose qui m'échappait;
mais j'avais apparemment donc bien compris :-)
A partir du moment ou tu fais des IO, de toutes façons, on se demande
ce que ça peut vouloir dire du purement fonctionnel ...
Je me demandais s'il y avait quelque chose qui m'échappait; mais j'avais apparemment donc bien compris :-)
A partir du moment ou tu fais des IO, de toutes façons, on se demande ce que ça peut vouloir dire du purement fonctionnel ...
-- Matthieu
Gabriel Dos Reis
Matthieu Moy writes:
| Jean-Marc Bourguet writes: | | > Je me demandais s'il y avait quelque chose qui m'échappait; | > mais j'avais apparemment donc bien compris :-) | | A partir du moment ou tu fais des IO, de toutes façons, on se demande | ce que ça peut vouloir dire du purement fonctionnel ...
Ah mais, j'ai deux livres ici sur mon bureau qui expliquent cela tres tres bien -- en plus en "grec" ;-)
| Jean-Marc Bourguet <jm@bourguet.org> writes:
|
| > Je me demandais s'il y avait quelque chose qui m'échappait;
| > mais j'avais apparemment donc bien compris :-)
|
| A partir du moment ou tu fais des IO, de toutes façons, on se demande
| ce que ça peut vouloir dire du purement fonctionnel ...
Ah mais, j'ai deux livres ici sur mon bureau qui expliquent cela tres
tres bien -- en plus en "grec" ;-)
| Jean-Marc Bourguet writes: | | > Je me demandais s'il y avait quelque chose qui m'échappait; | > mais j'avais apparemment donc bien compris :-) | | A partir du moment ou tu fais des IO, de toutes façons, on se demande | ce que ça peut vouloir dire du purement fonctionnel ...
Ah mais, j'ai deux livres ici sur mon bureau qui expliquent cela tres tres bien -- en plus en "grec" ;-)
-- Gaby
kanze
Michel Michaud wrote:
Dans le message ,
En passant, je me démande ce qui s'est passé avec ce bon vieux mot « sous-programme » (« subroutine » en anglais). C'est le mot que j'utilisais bien avant d'entendre parler des fonctions et des procédures.
Je crois que chaque langage (ou presque) introduit de nouveaux mots pour montrer les nuances.
C'est à peu près ce que je croyais. Au fond, la différence entre les fonctions de C++ et les méthodes de Java, c'est du marketing, et rien d'autre. D'ailleurs, on pourrait dire la même chose, je crois, en parlant des fonctions de Lisp et des méthodes de Smalltalk.
En fait, c'est de là, je crois, que vient les distinctions dans des vocabulaires du C++ et du Java. Parce qu'en Smalltalk, on parlait de méthodes, c'est OO, c'est cool. Tandis que même Fortran avait des fonctions. C'est de la merde, donc. N'empêche que si quelqu'un réussi à trouver une différence réele entre les fonctions statiques de Java et les fonctions de Fortran (sans parler du C ou du C++), j'aimerais la connaître.
En principe, il me semble (en tout cas, c'est ce que j'ai appris il y a plus de 25 ans !) que l'idée générale de découpage s'appelait « modularité ». L'idée des sous-programmes (je crois que l'on peut dire que c'est un autre mot assez général) n'est déjà qu'une des formes possibles de la modularité.
Certes. Mais on parle ici que de cette forme.
Si l'on regarde les possibilités des premiers langages courants, il y avait tellement de différences de principes dans leurs applications de la modularité que ce n'était peut-être pas une mauvaise idée d'avoir des mots différents... (des paragraphes de COBOL aux fonctions membres de C++, il y a un gros pas !)
En ce qui concerne les paragraphes de COBOL, je te concède qu'il y a une différence importante ; je ne vois effectivement pas d'équivalent en C ou en C++ à quelque chose comme : PERFORM A THRU C VARYING I FROM 1 TO 10.
Question : est-ce qu'une fonction, au sens mathématique, peut avoir des effets de bord ? Et en admettant que oui, est-ce qu'on peut réelement appeler quelque chose une fonction
Si l'inventeur du langage appelle ça une fonction, alors oui, on peut :-)
C'est pour ça que j'ai démandé « au sens mathématique ». Ça m'est clair que c'est une question de définition, et que les concepteurs du langage s'amuse aussi à créer le langage (voire une langue) pour parler de leur langage.
Il n'y a qu'à penser à l'appellation « méthode statique » pour voir qu'on n'en est plus à une absurdité près !
Je dirais que déjà avec l'appellation « méthode », on est arriv é à l'absurdité.
D'une certaine manière, une « fonction void » est aussi une absurdité. Mais ayant vecu l'histoire qui y a amené, elle ne me choque pas.
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Michel Michaud wrote:
Dans le message 1122277343.889907.298240@z14g2000cwz.googlegroups.com,
En passant, je me démande ce qui s'est passé avec ce bon
vieux mot « sous-programme » (« subroutine » en anglais).
C'est le mot que j'utilisais bien avant d'entendre parler
des fonctions et des procédures.
Je crois que chaque langage (ou presque) introduit de nouveaux
mots pour montrer les nuances.
C'est à peu près ce que je croyais. Au fond, la différence entre
les fonctions de C++ et les méthodes de Java, c'est du
marketing, et rien d'autre. D'ailleurs, on pourrait dire la même
chose, je crois, en parlant des fonctions de Lisp et des
méthodes de Smalltalk.
En fait, c'est de là, je crois, que vient les distinctions dans
des vocabulaires du C++ et du Java. Parce qu'en Smalltalk, on
parlait de méthodes, c'est OO, c'est cool. Tandis que même
Fortran avait des fonctions. C'est de la merde, donc. N'empêche
que si quelqu'un réussi à trouver une différence réele entre les
fonctions statiques de Java et les fonctions de Fortran (sans
parler du C ou du C++), j'aimerais la connaître.
En principe, il me semble (en tout cas, c'est ce que j'ai
appris il y a plus de 25 ans !) que l'idée générale de
découpage s'appelait « modularité ». L'idée des
sous-programmes (je crois que l'on peut dire que c'est un
autre mot assez général) n'est déjà qu'une des formes
possibles de la modularité.
Certes. Mais on parle ici que de cette forme.
Si l'on regarde les possibilités des premiers langages
courants, il y avait tellement de différences de principes
dans leurs applications de la modularité que ce n'était
peut-être pas une mauvaise idée d'avoir des mots différents...
(des paragraphes de COBOL aux fonctions membres de C++, il y a
un gros pas !)
En ce qui concerne les paragraphes de COBOL, je te concède qu'il
y a une différence importante ; je ne vois effectivement pas
d'équivalent en C ou en C++ à quelque chose comme :
PERFORM A THRU C VARYING I FROM 1 TO 10.
Question : est-ce qu'une fonction, au sens mathématique,
peut avoir des effets de bord ? Et en admettant que oui,
est-ce qu'on peut réelement appeler quelque chose une
fonction
Si l'inventeur du langage appelle ça une fonction, alors oui,
on peut :-)
C'est pour ça que j'ai démandé « au sens mathématique ». Ça
m'est clair que c'est une question de définition, et que les
concepteurs du langage s'amuse aussi à créer le langage (voire
une langue) pour parler de leur langage.
Il n'y a qu'à penser à l'appellation « méthode statique » pour
voir qu'on n'en est plus à une absurdité près !
Je dirais que déjà avec l'appellation « méthode », on est arriv é
à l'absurdité.
D'une certaine manière, une « fonction void » est aussi une
absurdité. Mais ayant vecu l'histoire qui y a amené, elle ne me
choque pas.
Mais j'avoue que le seul mot qui me convient vraiment, c'est
« sous-programme ». Est-ce du à mon âge ?
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
En passant, je me démande ce qui s'est passé avec ce bon vieux mot « sous-programme » (« subroutine » en anglais). C'est le mot que j'utilisais bien avant d'entendre parler des fonctions et des procédures.
Je crois que chaque langage (ou presque) introduit de nouveaux mots pour montrer les nuances.
C'est à peu près ce que je croyais. Au fond, la différence entre les fonctions de C++ et les méthodes de Java, c'est du marketing, et rien d'autre. D'ailleurs, on pourrait dire la même chose, je crois, en parlant des fonctions de Lisp et des méthodes de Smalltalk.
En fait, c'est de là, je crois, que vient les distinctions dans des vocabulaires du C++ et du Java. Parce qu'en Smalltalk, on parlait de méthodes, c'est OO, c'est cool. Tandis que même Fortran avait des fonctions. C'est de la merde, donc. N'empêche que si quelqu'un réussi à trouver une différence réele entre les fonctions statiques de Java et les fonctions de Fortran (sans parler du C ou du C++), j'aimerais la connaître.
En principe, il me semble (en tout cas, c'est ce que j'ai appris il y a plus de 25 ans !) que l'idée générale de découpage s'appelait « modularité ». L'idée des sous-programmes (je crois que l'on peut dire que c'est un autre mot assez général) n'est déjà qu'une des formes possibles de la modularité.
Certes. Mais on parle ici que de cette forme.
Si l'on regarde les possibilités des premiers langages courants, il y avait tellement de différences de principes dans leurs applications de la modularité que ce n'était peut-être pas une mauvaise idée d'avoir des mots différents... (des paragraphes de COBOL aux fonctions membres de C++, il y a un gros pas !)
En ce qui concerne les paragraphes de COBOL, je te concède qu'il y a une différence importante ; je ne vois effectivement pas d'équivalent en C ou en C++ à quelque chose comme : PERFORM A THRU C VARYING I FROM 1 TO 10.
Question : est-ce qu'une fonction, au sens mathématique, peut avoir des effets de bord ? Et en admettant que oui, est-ce qu'on peut réelement appeler quelque chose une fonction
Si l'inventeur du langage appelle ça une fonction, alors oui, on peut :-)
C'est pour ça que j'ai démandé « au sens mathématique ». Ça m'est clair que c'est une question de définition, et que les concepteurs du langage s'amuse aussi à créer le langage (voire une langue) pour parler de leur langage.
Il n'y a qu'à penser à l'appellation « méthode statique » pour voir qu'on n'en est plus à une absurdité près !
Je dirais que déjà avec l'appellation « méthode », on est arriv é à l'absurdité.
D'une certaine manière, une « fonction void » est aussi une absurdité. Mais ayant vecu l'histoire qui y a amené, elle ne me choque pas.
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
-- James Kanze GABI Software Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Bertrand Motuelle
wrote:
Fabien LE LEZ wrote:
D'autant que C# concerne principalement le service marketing. Les gus qui font tout à fait autre chose (développement de Office par exemple) n'ont rien à voir là-dedans.
Au moins qu'on lui impose C# d'en haut. Ou simplement que MS se désintéresse de C++ au point à laisser moribonder le compilateur (comme fait Sun) ;
Qu'est-ce qui te fais penser que Sun laisse leur compilo C++ mourir ? Récemment, le dit compilo a fait des progrès considérables dans la gestion des templates, des fonctions inline, etc. Sun permet également l'utilisation d'une bibliothèque standard bien plus performante et complète que celle apparue avec C++ 5.0 (d'origine Roguewave) : STLport. Et un des objectifs affichés est que C++ 5.7 puisse compiler boost. Le compilateur évolue rapidement dans ce sens, et Sun contribue à la mise au point des fichiers de configuration de boost. cf. les messages de Steve Clamage sur le forum du compilo: http://forum.sun.com/thread.jspa?threadID#793&tstart=0
A+, Bertrand.
kanze@gabi-soft.fr wrote:
Fabien LE LEZ wrote:
D'autant que C# concerne principalement le service marketing.
Les gus qui font tout à fait autre chose (développement de
Office par exemple) n'ont rien à voir là-dedans.
Au moins qu'on lui impose C# d'en haut. Ou simplement que MS se
désintéresse de C++ au point à laisser moribonder le compilateur
(comme fait Sun) ;
Qu'est-ce qui te fais penser que Sun laisse leur compilo C++ mourir ?
Récemment, le dit compilo a fait des progrès considérables dans la
gestion des templates, des fonctions inline, etc. Sun permet également
l'utilisation d'une bibliothèque standard bien plus performante et
complète que celle apparue avec C++ 5.0 (d'origine Roguewave) :
STLport. Et un des objectifs affichés est que C++ 5.7 puisse compiler
boost. Le compilateur évolue rapidement dans ce sens, et Sun contribue
à la mise au point des fichiers de configuration de boost.
cf. les messages de Steve Clamage sur le forum du compilo:
http://forum.sun.com/thread.jspa?threadID=23793&tstart=0
D'autant que C# concerne principalement le service marketing. Les gus qui font tout à fait autre chose (développement de Office par exemple) n'ont rien à voir là-dedans.
Au moins qu'on lui impose C# d'en haut. Ou simplement que MS se désintéresse de C++ au point à laisser moribonder le compilateur (comme fait Sun) ;
Qu'est-ce qui te fais penser que Sun laisse leur compilo C++ mourir ? Récemment, le dit compilo a fait des progrès considérables dans la gestion des templates, des fonctions inline, etc. Sun permet également l'utilisation d'une bibliothèque standard bien plus performante et complète que celle apparue avec C++ 5.0 (d'origine Roguewave) : STLport. Et un des objectifs affichés est que C++ 5.7 puisse compiler boost. Le compilateur évolue rapidement dans ce sens, et Sun contribue à la mise au point des fichiers de configuration de boost. cf. les messages de Steve Clamage sur le forum du compilo: http://forum.sun.com/thread.jspa?threadID#793&tstart=0
A+, Bertrand.
Arnaud Meurgues
wrote:
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
Curieusement, moi, je trouve que « procédure » est plus clair que « sous-programme ».
Comme pour moi, un programme, c'est plutôt une application, un « sous-programme » m'évoquerait plus un thread ou un process qu'une fonction ou une procédure.
-- Arnaud
kanze@gabi-soft.fr wrote:
Mais j'avoue que le seul mot qui me convient vraiment, c'est
« sous-programme ». Est-ce du à mon âge ?
Curieusement, moi, je trouve que « procédure » est plus clair que «
sous-programme ».
Comme pour moi, un programme, c'est plutôt une application, un «
sous-programme » m'évoquerait plus un thread ou un process qu'une
fonction ou une procédure.
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
Curieusement, moi, je trouve que « procédure » est plus clair que « sous-programme ».
Comme pour moi, un programme, c'est plutôt une application, un « sous-programme » m'évoquerait plus un thread ou un process qu'une fonction ou une procédure.
-- Arnaud
Fabien LE LEZ
On 26 Jul 2005 01:14:38 -0700, :
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
Peut-être. J'appartiens à une génération où "sous-programme" signifie "BASIC" -- je n'ai pas connu d'autre langage qui parle de sous-programme.
On 26 Jul 2005 01:14:38 -0700, kanze@gabi-soft.fr:
Mais j'avoue que le seul mot qui me convient vraiment, c'est
« sous-programme ». Est-ce du à mon âge ?
Peut-être. J'appartiens à une génération où "sous-programme" signifie
"BASIC" -- je n'ai pas connu d'autre langage qui parle de
sous-programme.
Peut-être. J'appartiens à une génération où "sous-programme" signifie "BASIC" -- je n'ai pas connu d'autre langage qui parle de sous-programme.
L'assembleur, peut-être.
Je me souviens qu'il fut un temps où l'on parlait aussi de routine et de subroutine...
-- Arnaud
Jean-Marc Bourguet
writes:
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
C'est le terme que je préfère (avec en proche second sous-routine) pour une utilisation générique. Peut-être à cause d'Ada et de Pascal où fonction et procédure sont utilisés pour indiquer la présence ou non d'un résultat (et en Ada une fonction ne peut pas prendre des paramètres out ou inout). Mais bon j'ai fait aussi de l'algol où une PROC peut retourner quelque chose.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
kanze@gabi-soft.fr writes:
Mais j'avoue que le seul mot qui me convient vraiment, c'est
« sous-programme ». Est-ce du à mon âge ?
C'est le terme que je préfère (avec en proche second
sous-routine) pour une utilisation générique. Peut-être à
cause d'Ada et de Pascal où fonction et procédure sont
utilisés pour indiquer la présence ou non d'un résultat (et
en Ada une fonction ne peut pas prendre des paramètres out
ou inout). Mais bon j'ai fait aussi de l'algol où une PROC
peut retourner quelque chose.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais j'avoue que le seul mot qui me convient vraiment, c'est « sous-programme ». Est-ce du à mon âge ?
C'est le terme que je préfère (avec en proche second sous-routine) pour une utilisation générique. Peut-être à cause d'Ada et de Pascal où fonction et procédure sont utilisés pour indiquer la présence ou non d'un résultat (et en Ada une fonction ne peut pas prendre des paramètres out ou inout). Mais bon j'ai fait aussi de l'algol où une PROC peut retourner quelque chose.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org