"Laurent Deniau" a écrit dans le message de news:
....J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de temps
entemps pour ne pas perdre contact car sur le plan des concepts, c'est un
languagetres interessant. J'ai egalement regarde Objective-C, Eiffel et Java (et
beaucoup d'autres pour la culture) mais pour l'instant aucun ne m'a seduit
plusque le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe que le
C. Ilest tres facile de faire n'importe quoi en C++ et de ne plus s'y
retrouver. Etc'est encore plus difficile de le faire comprendre a ses collaborateurs
(surtouts'ils manquent d'experience) lorsque vous mixez plusieurs facettes du C++
(heritage multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Depuis je suis revenu au C que j'utilise presque comme Java (mais je gere
lamemoire :-). Il est en effet tout a faire possible de faire de la POO
(technique) en C (language) et j'y ai meme trouve des avantages. C'est
effectivement legerement plus lourd de creer une hierarchie d'objets en C
(quoique avec de bonnes macros)... Mais:
o cela incite a reflechir a la qualite de l'interface a deux fois, ce qui
demon point de vu est le point le plus important dans toute
programmation.Mon principe est qu'en lisant une fois une interface (un header) on
devraitpouvoir en utiliser les services et les objets sans trop se poser de
question.Et le cas echeant, lever les questions persistantes en lisant
l'implementation(selon moi ca doit rester <1% des cas).
Or en C++ (ou autre language OO) on voit rapidement le nombre de
classescroitre exponentiellement ce qui devient inutilisable, incomprehensible
ouimpossible a maintenir (pour parodier une phase connue, "trop objet tue
l'objet"). Et l'utilisation intensive des templates n'aide pas a la
comprehension (qui serait capable d'utiliser la STL en lisant les
headers uneou deux fois? Et encore il lui faudra bien quelques semaines vu la
taille ducode).
o les problemes sont explicites (par exemple levees d'exceptions dans les
constructeurs, ordre de construction/destruction des objets et de leurs
membres). Un source C++ est souvent beaucoup plus complique' a
comprendrequ'un source C car de nombreuses choses (pas necessairement accessible)
sont implicites.
o on controle (presque) tout, ce qui fait que le C est souvent considere
commeun super assembleur. Y compris le modele objet quand on fait de la POO,
avecla possibilite de l'etendre a souhait (par exemple l'introspection, les
objects factory, etc...).
o on controle aussi d'avantage le layout binaire ce qui permet plus
facilementde s'interfacer avec d'autres bibliotheques sans (trop de) surprise.
Certainspoints du C++ ne sont pas encore resolu et demande parfois un
"collaboration"avec l'OS (exemple: gestion de l'export des templates).
o le temps de developement est (pour moi mais je l'ai observe ailleurs)
deuxfois plus rapide en C qu'en C++, en partie parce que j'utilise le
meilleur desdeux mondes :-) POO sans les contraintes fortes qui vont avec (C++ en
particulier).
o il est plus simple de resoudre des problemes "non-standard" en C qu'en
C++. Ilsuffit de voir le niveau plutot basique des questions sur fclc par
rapport auxquestions sur fclc++. Cela montre clairement que le C++ est plus
difficile amaitriser et qu'on devient plus rapidement "autonome" en C. Cela compte
beaucoup quand l'equipe de development change souvent.
o pour finir, je n'ai besoin que d'un livre pour programmer en C (et
encore, ontrouve beaucoup dans les man), alors que j'ai besoin de 2 a 5 livres +
unenorme pour programmer en C++. Je parle de programmer proprement, pas
des boutsde code ou des petits programmes de-ci-de-la....
Je vous remercie, ainsi que l'ensemble des contributeurs, pour votre longue
réponse.
Effectivement, le niveau de complexité de C++ (quand utilisé comme du C++)
induit une certaine imprévisibilité, due chez moi très certainement à un
manque de pratique intensive. Je mettrais en parallèle votre préférence à
programmer OO en C avec celle, sur un automate, de dessiner un Graphcet à la
main et de programmer ce Graphcet sur l'automate en langage plus fruste
(ladder par exemple), même si une possibilité de programmer directement le
Graphcet existe.
Ceci me permet de préciser ma question. Puisque comme prévisible, il a été
plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas POO, C
obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les classe
pour l'exemple, mais il y en a d'autres. Ces concepts ne me sont pas
indispensables, ni même réellement utiles dans l'exemple qui suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je dispose d'un
compilateur (C++ 5.5 par exemple), qui me permet de compiler en C ou en C++.
Donc, la question économique ne se pose pas. Pour l'exemple, je n'ai pas une
pratique en C pur qui justifie d'ignorer C++. Toujours pour fixer les idées,
et peut-être à tort, bien maîtriser C à terme ne m'intéresse pas
particulièrement, alors qu'une bonne pratique de C++ me motive.
"Laurent Deniau" <Laurent.Deniau@cern.ch> a écrit dans le message de news:
3F4C53B1.4090404@cern.ch...
....
J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de temps
en
temps pour ne pas perdre contact car sur le plan des concepts, c'est un
language
tres interessant. J'ai egalement regarde Objective-C, Eiffel et Java (et
beaucoup d'autres pour la culture) mais pour l'instant aucun ne m'a seduit
plus
que le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe que le
C. Il
est tres facile de faire n'importe quoi en C++ et de ne plus s'y
retrouver. Et
c'est encore plus difficile de le faire comprendre a ses collaborateurs
(surtout
s'ils manquent d'experience) lorsque vous mixez plusieurs facettes du C++
(heritage multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Depuis je suis revenu au C que j'utilise presque comme Java (mais je gere
la
memoire :-). Il est en effet tout a faire possible de faire de la POO
(technique) en C (language) et j'y ai meme trouve des avantages. C'est
effectivement legerement plus lourd de creer une hierarchie d'objets en C
(quoique avec de bonnes macros)... Mais:
o cela incite a reflechir a la qualite de l'interface a deux fois, ce qui
de
mon point de vu est le point le plus important dans toute
programmation.
Mon principe est qu'en lisant une fois une interface (un header) on
devrait
pouvoir en utiliser les services et les objets sans trop se poser de
question.
Et le cas echeant, lever les questions persistantes en lisant
l'implementation
(selon moi ca doit rester <1% des cas).
Or en C++ (ou autre language OO) on voit rapidement le nombre de
classes
croitre exponentiellement ce qui devient inutilisable, incomprehensible
ou
impossible a maintenir (pour parodier une phase connue, "trop objet tue
l'objet"). Et l'utilisation intensive des templates n'aide pas a la
comprehension (qui serait capable d'utiliser la STL en lisant les
headers une
ou deux fois? Et encore il lui faudra bien quelques semaines vu la
taille du
code).
o les problemes sont explicites (par exemple levees d'exceptions dans les
constructeurs, ordre de construction/destruction des objets et de leurs
membres). Un source C++ est souvent beaucoup plus complique' a
comprendre
qu'un source C car de nombreuses choses (pas necessairement accessible)
sont implicites.
o on controle (presque) tout, ce qui fait que le C est souvent considere
comme
un super assembleur. Y compris le modele objet quand on fait de la POO,
avec
la possibilite de l'etendre a souhait (par exemple l'introspection, les
objects factory, etc...).
o on controle aussi d'avantage le layout binaire ce qui permet plus
facilement
de s'interfacer avec d'autres bibliotheques sans (trop de) surprise.
Certains
points du C++ ne sont pas encore resolu et demande parfois un
"collaboration"
avec l'OS (exemple: gestion de l'export des templates).
o le temps de developement est (pour moi mais je l'ai observe ailleurs)
deux
fois plus rapide en C qu'en C++, en partie parce que j'utilise le
meilleur des
deux mondes :-) POO sans les contraintes fortes qui vont avec (C++ en
particulier).
o il est plus simple de resoudre des problemes "non-standard" en C qu'en
C++. Il
suffit de voir le niveau plutot basique des questions sur fclc par
rapport aux
questions sur fclc++. Cela montre clairement que le C++ est plus
difficile a
maitriser et qu'on devient plus rapidement "autonome" en C. Cela compte
beaucoup quand l'equipe de development change souvent.
o pour finir, je n'ai besoin que d'un livre pour programmer en C (et
encore, on
trouve beaucoup dans les man), alors que j'ai besoin de 2 a 5 livres +
une
norme pour programmer en C++. Je parle de programmer proprement, pas
des bouts
de code ou des petits programmes de-ci-de-la....
Je vous remercie, ainsi que l'ensemble des contributeurs, pour votre longue
réponse.
Effectivement, le niveau de complexité de C++ (quand utilisé comme du C++)
induit une certaine imprévisibilité, due chez moi très certainement à un
manque de pratique intensive. Je mettrais en parallèle votre préférence à
programmer OO en C avec celle, sur un automate, de dessiner un Graphcet à la
main et de programmer ce Graphcet sur l'automate en langage plus fruste
(ladder par exemple), même si une possibilité de programmer directement le
Graphcet existe.
Ceci me permet de préciser ma question. Puisque comme prévisible, il a été
plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas POO, C
obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les classe
pour l'exemple, mais il y en a d'autres. Ces concepts ne me sont pas
indispensables, ni même réellement utiles dans l'exemple qui suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je dispose d'un
compilateur (C++ 5.5 par exemple), qui me permet de compiler en C ou en C++.
Donc, la question économique ne se pose pas. Pour l'exemple, je n'ai pas une
pratique en C pur qui justifie d'ignorer C++. Toujours pour fixer les idées,
et peut-être à tort, bien maîtriser C à terme ne m'intéresse pas
particulièrement, alors qu'une bonne pratique de C++ me motive.
"Laurent Deniau" a écrit dans le message de news:
....J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de temps
entemps pour ne pas perdre contact car sur le plan des concepts, c'est un
languagetres interessant. J'ai egalement regarde Objective-C, Eiffel et Java (et
beaucoup d'autres pour la culture) mais pour l'instant aucun ne m'a seduit
plusque le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe que le
C. Ilest tres facile de faire n'importe quoi en C++ et de ne plus s'y
retrouver. Etc'est encore plus difficile de le faire comprendre a ses collaborateurs
(surtouts'ils manquent d'experience) lorsque vous mixez plusieurs facettes du C++
(heritage multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Depuis je suis revenu au C que j'utilise presque comme Java (mais je gere
lamemoire :-). Il est en effet tout a faire possible de faire de la POO
(technique) en C (language) et j'y ai meme trouve des avantages. C'est
effectivement legerement plus lourd de creer une hierarchie d'objets en C
(quoique avec de bonnes macros)... Mais:
o cela incite a reflechir a la qualite de l'interface a deux fois, ce qui
demon point de vu est le point le plus important dans toute
programmation.Mon principe est qu'en lisant une fois une interface (un header) on
devraitpouvoir en utiliser les services et les objets sans trop se poser de
question.Et le cas echeant, lever les questions persistantes en lisant
l'implementation(selon moi ca doit rester <1% des cas).
Or en C++ (ou autre language OO) on voit rapidement le nombre de
classescroitre exponentiellement ce qui devient inutilisable, incomprehensible
ouimpossible a maintenir (pour parodier une phase connue, "trop objet tue
l'objet"). Et l'utilisation intensive des templates n'aide pas a la
comprehension (qui serait capable d'utiliser la STL en lisant les
headers uneou deux fois? Et encore il lui faudra bien quelques semaines vu la
taille ducode).
o les problemes sont explicites (par exemple levees d'exceptions dans les
constructeurs, ordre de construction/destruction des objets et de leurs
membres). Un source C++ est souvent beaucoup plus complique' a
comprendrequ'un source C car de nombreuses choses (pas necessairement accessible)
sont implicites.
o on controle (presque) tout, ce qui fait que le C est souvent considere
commeun super assembleur. Y compris le modele objet quand on fait de la POO,
avecla possibilite de l'etendre a souhait (par exemple l'introspection, les
objects factory, etc...).
o on controle aussi d'avantage le layout binaire ce qui permet plus
facilementde s'interfacer avec d'autres bibliotheques sans (trop de) surprise.
Certainspoints du C++ ne sont pas encore resolu et demande parfois un
"collaboration"avec l'OS (exemple: gestion de l'export des templates).
o le temps de developement est (pour moi mais je l'ai observe ailleurs)
deuxfois plus rapide en C qu'en C++, en partie parce que j'utilise le
meilleur desdeux mondes :-) POO sans les contraintes fortes qui vont avec (C++ en
particulier).
o il est plus simple de resoudre des problemes "non-standard" en C qu'en
C++. Ilsuffit de voir le niveau plutot basique des questions sur fclc par
rapport auxquestions sur fclc++. Cela montre clairement que le C++ est plus
difficile amaitriser et qu'on devient plus rapidement "autonome" en C. Cela compte
beaucoup quand l'equipe de development change souvent.
o pour finir, je n'ai besoin que d'un livre pour programmer en C (et
encore, ontrouve beaucoup dans les man), alors que j'ai besoin de 2 a 5 livres +
unenorme pour programmer en C++. Je parle de programmer proprement, pas
des boutsde code ou des petits programmes de-ci-de-la....
Je vous remercie, ainsi que l'ensemble des contributeurs, pour votre longue
réponse.
Effectivement, le niveau de complexité de C++ (quand utilisé comme du C++)
induit une certaine imprévisibilité, due chez moi très certainement à un
manque de pratique intensive. Je mettrais en parallèle votre préférence à
programmer OO en C avec celle, sur un automate, de dessiner un Graphcet à la
main et de programmer ce Graphcet sur l'automate en langage plus fruste
(ladder par exemple), même si une possibilité de programmer directement le
Graphcet existe.
Ceci me permet de préciser ma question. Puisque comme prévisible, il a été
plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas POO, C
obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les classe
pour l'exemple, mais il y en a d'autres. Ces concepts ne me sont pas
indispensables, ni même réellement utiles dans l'exemple qui suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je dispose d'un
compilateur (C++ 5.5 par exemple), qui me permet de compiler en C ou en C++.
Donc, la question économique ne se pose pas. Pour l'exemple, je n'ai pas une
pratique en C pur qui justifie d'ignorer C++. Toujours pour fixer les idées,
et peut-être à tort, bien maîtriser C à terme ne m'intéresse pas
particulièrement, alors qu'une bonne pratique de C++ me motive.
Etant donne le niveau de bidonnage (;-) de ton cahier des charges, et
tes motivations, je ne vois aucune raison de ne pas programmer
totalement en C++, quel que soit le paradigme adopte.
Maintenant, c'est mon opinion, et je la partage :-)
Etant donne le niveau de bidonnage (;-) de ton cahier des charges, et
tes motivations, je ne vois aucune raison de ne pas programmer
totalement en C++, quel que soit le paradigme adopte.
Maintenant, c'est mon opinion, et je la partage :-)
Etant donne le niveau de bidonnage (;-) de ton cahier des charges, et
tes motivations, je ne vois aucune raison de ne pas programmer
totalement en C++, quel que soit le paradigme adopte.
Maintenant, c'est mon opinion, et je la partage :-)
Sans oublier le mauvais support de la norme (et encore pour un
moment), la gestion des exceptions, le layout binaire des objets, la
portabilite de la STL, la stabilite des compilateurs... Autant
d'incompatibilites entre compilateurs, voir version d'un meme
compilateur. Il va falloir encore quelques annees avant d'atteindre
la stabilite du C89, meme si beaucoup d'efforts sont fait de ce
cote.
Je crois que tu es un peu de mauvaise fois. La norme actuelle du C qui
date de 1999 est sans doute nettement moins implémentée que la norme
ISO C++98.
Les vendeurs de compilateurs C/C++ ont fait d'énorme efforts ces
derniers temps pour s'approcher de la norme ISO C++98, beaucoup plus
que pour le support de la norme ISO C99.
Le dernier compilateur C++ de Microsoft supporte quasiment toute la
norme C++, et rien de la norme C99. La compatibilité binaire entre
compilateurs s'améliorent et les vendeurs s'arrangent pour développer
des ABI communes. Sous linux x86, par exemple, gnu-g++ > 3.2,
intel-icc 7.x, borland c++ builder 6.0 sont binairement compatibles.
Et l'on commence sans doute à arriver à une maturité acceptable qui
fait qu'un programme C++ compilant aujourd'hui compilera encore
l'année prochaine.
Sans oublier le mauvais support de la norme (et encore pour un
moment), la gestion des exceptions, le layout binaire des objets, la
portabilite de la STL, la stabilite des compilateurs... Autant
d'incompatibilites entre compilateurs, voir version d'un meme
compilateur. Il va falloir encore quelques annees avant d'atteindre
la stabilite du C89, meme si beaucoup d'efforts sont fait de ce
cote.
Je crois que tu es un peu de mauvaise fois. La norme actuelle du C qui
date de 1999 est sans doute nettement moins implémentée que la norme
ISO C++98.
Les vendeurs de compilateurs C/C++ ont fait d'énorme efforts ces
derniers temps pour s'approcher de la norme ISO C++98, beaucoup plus
que pour le support de la norme ISO C99.
Le dernier compilateur C++ de Microsoft supporte quasiment toute la
norme C++, et rien de la norme C99. La compatibilité binaire entre
compilateurs s'améliorent et les vendeurs s'arrangent pour développer
des ABI communes. Sous linux x86, par exemple, gnu-g++ > 3.2,
intel-icc 7.x, borland c++ builder 6.0 sont binairement compatibles.
Et l'on commence sans doute à arriver à une maturité acceptable qui
fait qu'un programme C++ compilant aujourd'hui compilera encore
l'année prochaine.
Sans oublier le mauvais support de la norme (et encore pour un
moment), la gestion des exceptions, le layout binaire des objets, la
portabilite de la STL, la stabilite des compilateurs... Autant
d'incompatibilites entre compilateurs, voir version d'un meme
compilateur. Il va falloir encore quelques annees avant d'atteindre
la stabilite du C89, meme si beaucoup d'efforts sont fait de ce
cote.
Je crois que tu es un peu de mauvaise fois. La norme actuelle du C qui
date de 1999 est sans doute nettement moins implémentée que la norme
ISO C++98.
Les vendeurs de compilateurs C/C++ ont fait d'énorme efforts ces
derniers temps pour s'approcher de la norme ISO C++98, beaucoup plus
que pour le support de la norme ISO C99.
Le dernier compilateur C++ de Microsoft supporte quasiment toute la
norme C++, et rien de la norme C99. La compatibilité binaire entre
compilateurs s'améliorent et les vendeurs s'arrangent pour développer
des ABI communes. Sous linux x86, par exemple, gnu-g++ > 3.2,
intel-icc 7.x, borland c++ builder 6.0 sont binairement compatibles.
Et l'on commence sans doute à arriver à une maturité acceptable qui
fait qu'un programme C++ compilant aujourd'hui compilera encore
l'année prochaine.
Laurent Deniau writes:
| Gabriel Dos Reis wrote:
| > | > | > de 1999 est sans doute nettement moins implémentée que la norme
| > | > ISO C++98.
| > | > | | Certes, mais l'effort a fournir pour que C99 soit supporte est
| > | > bien
| > | > | moindre que pour C++98.
| > | >
| > | > qu'est-ce que tu en sais ?
| > | | Pretendre le contraire serait pour l'occasion de la vraie
| > mauvaise
| > | foi.
| > Pas du tout. As-tu implémenté l'une ou les deux spécifications ?
|
| Non. Toi non plus.
J'ai travaillé (et travaille toujours) sur l'implémentation des deux
-- cela fait partie de mon gagne pain.
| En dehors d'etre provocatrice, cette question est
| inutile et je ne te suivrais pas dans ce jeux la. Peu de gens (s'il en
| existe) ont implemente eux-meme l'une ou l'autre de ses specifications
| (ou une version anterieure) dans leur totalite.
Cette question n'est ni provocatrice ni inutile. Elle vise å savoir
quelle expérience tu as de l'implémentation de l'une des deux. Ton
inexpérience en l'implémentation de l'une des deux spécifications, ne
fait pas de la question posée quelque chose d'inutile ou provocateur.
| > | Sans ironie, qu'est ce qui serait une avancee majeure dans C99 et
| > | qui demanderait tant de travail par rapport a C89 (ou C95) selon toi?
| > | Mis a part _Bool, long long, _Complex et les varlen array (en general
| > | deja tous supportes en 1999 avec une semantique proche) et la
| > | foultitude de types, macros et autres fonctions a ajoutees dans la
| > | libc et qui demande surtout du temps et de la main d'oeuvre? Par
| > | contre il y avait enormement a faire entre le C++ existant au moment
| > | de la sortie de C++98 et le C++ qu'elle specifie.
| > À part l'arrogance des assertions,
|
| Il n'y a ni arrogance, ni assertion. Toutes les phrases ont un ? et
Tu n'es pas sans ignorance qu'une phrase qui se termine pas un point
d'interrogation peut impliquer arrogance, assertion ; n'est-il pas ?
| c'est ton avis que je voulais puisque tu es implique dans le
| development de GCC.
et je te l'ai donné.
« très proche » dépend de ta définition de « proche ».
Relis la spécification des VLA (sans préjugé aucun sur ce que tu
connias d'alloca) et tu te rendras compte alloca est aussi proche des
VLA que uranus est proche du soleil.
| - les VMT posent effectivement des problemes et demandent de modifier
| le systeme de typage en profondeur, mais techniquement ce n'est pas un
| probleme inconnu et encore jamais resolu.
La plupart des compilateurs à vocation industrielle ne sont pas des
gadgets universitaires jetables après première utilisation. Ce sont
des logiciels évolutifs où chaque version est le fruit d'itérations
sur la version précédente. Le compilateur évolue mais garde un fond
plus ou moins immuable, basé sur une certaine compréhension de la
machine abstraite C et son système de types. Les VMT viennent
bouleverser cela, et en profoondeur. Concrètement, cela veut dire que
pour la plupart des compilateurs, il faut revoir la machinerie qui
fait la vérification sémantique, la conception du système de type et
interaction avec les extensions (tout le monde est contre et tout le
monde en veut). Ce sont des problèmes pratiques que l'univeristaire
dans son labo ne considère pas -- probablement parce qu'il vit dans un
monde parallèle. Mais le fabriquant de compilateur ne peut pas les
ignorer. Il doit les résoudre, assez rapidement. La question n'est pas
qu'il n'existe pas un papier académique qui prétend traiter le sujet
dans un cadre de travail ultra simplifié, c'est que l'universitaire
n'a qu'une vision très parcellaire du langage, des fonctionnalités et
des contraintes pratiques. Des choses qu'on ne traite en général pas
dans les papiers académiques. Ce qui laisse souvent dire que le
problèment est techniquement résoluble et donc qu'il n'y a pas de
problème. C'est-à-dire une ignorance de la réalité.
| > ne sembles le croire. La nouvelle sémantique des opérations flottantes
| > est au moins de deux ordres de magnitude difficiles à supporter qu'un
| > pendant en C++ avec une volution bibliothèque. C'est encore plus
|
| Si tu fais allusion a la classe complex,
Non. Je fais allusion au fait que le langage aurait dû fournir des
fonctionnalités assez générales pour faciliter des solutions
bibliothèques efficaces, au lieu de mettre en dur des fonctionnalités
qui au fond ne profite qu'à une fraction de la communauté.
| elle sera consideree comme une heresie par certains experts
qu'est-ce qui en ferait une hérésie selon ces « certains experts » ?
| Et il me semble que numeric_limits n'a pas non plus ete simple a
| mettre au point...
Explique-toi.
| Mais je ne t'apprends rien, je sais que tu es un expert sur ces deux sujets.
En fait, je suis curieux d'en savoir un peu plus sur ces allusions vagues.
|
| > difficile qu'il faut modifier profondément l'architecture de nombre
| > de compilateurs majeurs existants. Comment implémentes-tu les
| > type-generic macros?
|
| une magie tu meme genre que typeof?
Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| Gabriel Dos Reis wrote:
| > | > | > de 1999 est sans doute nettement moins implémentée que la norme
| > | > ISO C++98.
| > | > | | Certes, mais l'effort a fournir pour que C99 soit supporte est
| > | > bien
| > | > | moindre que pour C++98.
| > | >
| > | > qu'est-ce que tu en sais ?
| > | | Pretendre le contraire serait pour l'occasion de la vraie
| > mauvaise
| > | foi.
| > Pas du tout. As-tu implémenté l'une ou les deux spécifications ?
|
| Non. Toi non plus.
J'ai travaillé (et travaille toujours) sur l'implémentation des deux
-- cela fait partie de mon gagne pain.
| En dehors d'etre provocatrice, cette question est
| inutile et je ne te suivrais pas dans ce jeux la. Peu de gens (s'il en
| existe) ont implemente eux-meme l'une ou l'autre de ses specifications
| (ou une version anterieure) dans leur totalite.
Cette question n'est ni provocatrice ni inutile. Elle vise å savoir
quelle expérience tu as de l'implémentation de l'une des deux. Ton
inexpérience en l'implémentation de l'une des deux spécifications, ne
fait pas de la question posée quelque chose d'inutile ou provocateur.
| > | Sans ironie, qu'est ce qui serait une avancee majeure dans C99 et
| > | qui demanderait tant de travail par rapport a C89 (ou C95) selon toi?
| > | Mis a part _Bool, long long, _Complex et les varlen array (en general
| > | deja tous supportes en 1999 avec une semantique proche) et la
| > | foultitude de types, macros et autres fonctions a ajoutees dans la
| > | libc et qui demande surtout du temps et de la main d'oeuvre? Par
| > | contre il y avait enormement a faire entre le C++ existant au moment
| > | de la sortie de C++98 et le C++ qu'elle specifie.
| > À part l'arrogance des assertions,
|
| Il n'y a ni arrogance, ni assertion. Toutes les phrases ont un ? et
Tu n'es pas sans ignorance qu'une phrase qui se termine pas un point
d'interrogation peut impliquer arrogance, assertion ; n'est-il pas ?
| c'est ton avis que je voulais puisque tu es implique dans le
| development de GCC.
et je te l'ai donné.
« très proche » dépend de ta définition de « proche ».
Relis la spécification des VLA (sans préjugé aucun sur ce que tu
connias d'alloca) et tu te rendras compte alloca est aussi proche des
VLA que uranus est proche du soleil.
| - les VMT posent effectivement des problemes et demandent de modifier
| le systeme de typage en profondeur, mais techniquement ce n'est pas un
| probleme inconnu et encore jamais resolu.
La plupart des compilateurs à vocation industrielle ne sont pas des
gadgets universitaires jetables après première utilisation. Ce sont
des logiciels évolutifs où chaque version est le fruit d'itérations
sur la version précédente. Le compilateur évolue mais garde un fond
plus ou moins immuable, basé sur une certaine compréhension de la
machine abstraite C et son système de types. Les VMT viennent
bouleverser cela, et en profoondeur. Concrètement, cela veut dire que
pour la plupart des compilateurs, il faut revoir la machinerie qui
fait la vérification sémantique, la conception du système de type et
interaction avec les extensions (tout le monde est contre et tout le
monde en veut). Ce sont des problèmes pratiques que l'univeristaire
dans son labo ne considère pas -- probablement parce qu'il vit dans un
monde parallèle. Mais le fabriquant de compilateur ne peut pas les
ignorer. Il doit les résoudre, assez rapidement. La question n'est pas
qu'il n'existe pas un papier académique qui prétend traiter le sujet
dans un cadre de travail ultra simplifié, c'est que l'universitaire
n'a qu'une vision très parcellaire du langage, des fonctionnalités et
des contraintes pratiques. Des choses qu'on ne traite en général pas
dans les papiers académiques. Ce qui laisse souvent dire que le
problèment est techniquement résoluble et donc qu'il n'y a pas de
problème. C'est-à-dire une ignorance de la réalité.
| > ne sembles le croire. La nouvelle sémantique des opérations flottantes
| > est au moins de deux ordres de magnitude difficiles à supporter qu'un
| > pendant en C++ avec une volution bibliothèque. C'est encore plus
|
| Si tu fais allusion a la classe complex,
Non. Je fais allusion au fait que le langage aurait dû fournir des
fonctionnalités assez générales pour faciliter des solutions
bibliothèques efficaces, au lieu de mettre en dur des fonctionnalités
qui au fond ne profite qu'à une fraction de la communauté.
| elle sera consideree comme une heresie par certains experts
qu'est-ce qui en ferait une hérésie selon ces « certains experts » ?
| Et il me semble que numeric_limits n'a pas non plus ete simple a
| mettre au point...
Explique-toi.
| Mais je ne t'apprends rien, je sais que tu es un expert sur ces deux sujets.
En fait, je suis curieux d'en savoir un peu plus sur ces allusions vagues.
|
| > difficile qu'il faut modifier profondément l'architecture de nombre
| > de compilateurs majeurs existants. Comment implémentes-tu les
| > type-generic macros?
|
| une magie tu meme genre que typeof?
Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
Laurent Deniau writes:
| Gabriel Dos Reis wrote:
| > | > | > de 1999 est sans doute nettement moins implémentée que la norme
| > | > ISO C++98.
| > | > | | Certes, mais l'effort a fournir pour que C99 soit supporte est
| > | > bien
| > | > | moindre que pour C++98.
| > | >
| > | > qu'est-ce que tu en sais ?
| > | | Pretendre le contraire serait pour l'occasion de la vraie
| > mauvaise
| > | foi.
| > Pas du tout. As-tu implémenté l'une ou les deux spécifications ?
|
| Non. Toi non plus.
J'ai travaillé (et travaille toujours) sur l'implémentation des deux
-- cela fait partie de mon gagne pain.
| En dehors d'etre provocatrice, cette question est
| inutile et je ne te suivrais pas dans ce jeux la. Peu de gens (s'il en
| existe) ont implemente eux-meme l'une ou l'autre de ses specifications
| (ou une version anterieure) dans leur totalite.
Cette question n'est ni provocatrice ni inutile. Elle vise å savoir
quelle expérience tu as de l'implémentation de l'une des deux. Ton
inexpérience en l'implémentation de l'une des deux spécifications, ne
fait pas de la question posée quelque chose d'inutile ou provocateur.
| > | Sans ironie, qu'est ce qui serait une avancee majeure dans C99 et
| > | qui demanderait tant de travail par rapport a C89 (ou C95) selon toi?
| > | Mis a part _Bool, long long, _Complex et les varlen array (en general
| > | deja tous supportes en 1999 avec une semantique proche) et la
| > | foultitude de types, macros et autres fonctions a ajoutees dans la
| > | libc et qui demande surtout du temps et de la main d'oeuvre? Par
| > | contre il y avait enormement a faire entre le C++ existant au moment
| > | de la sortie de C++98 et le C++ qu'elle specifie.
| > À part l'arrogance des assertions,
|
| Il n'y a ni arrogance, ni assertion. Toutes les phrases ont un ? et
Tu n'es pas sans ignorance qu'une phrase qui se termine pas un point
d'interrogation peut impliquer arrogance, assertion ; n'est-il pas ?
| c'est ton avis que je voulais puisque tu es implique dans le
| development de GCC.
et je te l'ai donné.
« très proche » dépend de ta définition de « proche ».
Relis la spécification des VLA (sans préjugé aucun sur ce que tu
connias d'alloca) et tu te rendras compte alloca est aussi proche des
VLA que uranus est proche du soleil.
| - les VMT posent effectivement des problemes et demandent de modifier
| le systeme de typage en profondeur, mais techniquement ce n'est pas un
| probleme inconnu et encore jamais resolu.
La plupart des compilateurs à vocation industrielle ne sont pas des
gadgets universitaires jetables après première utilisation. Ce sont
des logiciels évolutifs où chaque version est le fruit d'itérations
sur la version précédente. Le compilateur évolue mais garde un fond
plus ou moins immuable, basé sur une certaine compréhension de la
machine abstraite C et son système de types. Les VMT viennent
bouleverser cela, et en profoondeur. Concrètement, cela veut dire que
pour la plupart des compilateurs, il faut revoir la machinerie qui
fait la vérification sémantique, la conception du système de type et
interaction avec les extensions (tout le monde est contre et tout le
monde en veut). Ce sont des problèmes pratiques que l'univeristaire
dans son labo ne considère pas -- probablement parce qu'il vit dans un
monde parallèle. Mais le fabriquant de compilateur ne peut pas les
ignorer. Il doit les résoudre, assez rapidement. La question n'est pas
qu'il n'existe pas un papier académique qui prétend traiter le sujet
dans un cadre de travail ultra simplifié, c'est que l'universitaire
n'a qu'une vision très parcellaire du langage, des fonctionnalités et
des contraintes pratiques. Des choses qu'on ne traite en général pas
dans les papiers académiques. Ce qui laisse souvent dire que le
problèment est techniquement résoluble et donc qu'il n'y a pas de
problème. C'est-à-dire une ignorance de la réalité.
| > ne sembles le croire. La nouvelle sémantique des opérations flottantes
| > est au moins de deux ordres de magnitude difficiles à supporter qu'un
| > pendant en C++ avec une volution bibliothèque. C'est encore plus
|
| Si tu fais allusion a la classe complex,
Non. Je fais allusion au fait que le langage aurait dû fournir des
fonctionnalités assez générales pour faciliter des solutions
bibliothèques efficaces, au lieu de mettre en dur des fonctionnalités
qui au fond ne profite qu'à une fraction de la communauté.
| elle sera consideree comme une heresie par certains experts
qu'est-ce qui en ferait une hérésie selon ces « certains experts » ?
| Et il me semble que numeric_limits n'a pas non plus ete simple a
| mettre au point...
Explique-toi.
| Mais je ne t'apprends rien, je sais que tu es un expert sur ces deux sujets.
En fait, je suis curieux d'en savoir un peu plus sur ces allusions vagues.
|
| > difficile qu'il faut modifier profondément l'architecture de nombre
| > de compilateurs majeurs existants. Comment implémentes-tu les
| > type-generic macros?
|
| une magie tu meme genre que typeof?
Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
"Laurent Deniau" a écrit dans le message de
news:
...J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de
temps en temps pour ne pas perdre contact car sur le plan des
concepts, c'est un language tres interessant. J'ai egalement regarde
Objective-C, Eiffel et Java (et beaucoup d'autres pour la culture)
mais pour l'instant aucun ne m'a seduit plus que le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe
que le C. Il est tres facile de faire n'importe quoi en C++ et de ne
plus s'y retrouver. Et c'est encore plus difficile de le faire
comprendre a ses collaborateurs (surtout s'ils manquent
d'experience) lorsque vous mixez plusieurs facettes du C++ (heritage
multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Ceci me permet de préciser ma question. Puisque comme prévisible, il a
été plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas
POO, C obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les
classe pour l'exemple, mais il y en a d'autres. Ces concepts ne me
sont pas indispensables, ni même réellement utiles dans l'exemple qui
suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je
dispose d'un compilateur (C++ 5.5 par exemple), qui me permet de
compiler en C ou en C++. Donc, la question économique ne se pose pas.
Pour l'exemple, je n'ai pas une pratique en C pur qui justifie
d'ignorer C++. Toujours pour fixer les idées, et peut-être à tort,
bien maîtriser C à terme ne m'intéresse pas particulièrement, alors
qu'une bonne pratique de C++ me motive.
Ma question est de savoir si les défauts que vous évoquez pour C++
existent dans un C++ réduit au "cahier des charges" de C.
Je dois écrire une petite appli, par exemple une édition de facture.
Pas de base de donnée qui pourrait orienter mon choix, quelques
fichiers textes joueront ce rôle. L'appli est en mode console, je
souhaiterais pouvoir la recompiler pour Linux avec le minimum de
travail supplémentaire. Please, pas de réponse sur ce cahier des
charges, il est totalement bidon. Bien entendu, ce travail est
parfaitement faisable en C pur.
Dans les startégies suivantes, à quel moment me trompé-je ?
1- Ecriture du bouzin en C.
2- Ecriture du bouzin en C++ "comme en C", c'est à dire pratiquement
le même code. Aux facilités syntaxiques près, puisque je suis sensé ne
pas avoir d'habitudes héritées du C. Par exemple, utilisation du type
bool, commentaires //, etc.
3- Comme le pécédent, mais en utilisant quelques concepts (hors POO)
propres à C++ qui me facilitent semble-t-il la vie, disons les
exceptions pour fixer les idées. Pointeurs -> références ? ?alloc/free
-> new/delete ?
4- Comme en 2 (ou 3), mais en utilisant iostream à la place de stdio.h
pour les E/S standard. (A partir de là, il ne s'agit plus de faire du
C avec un compilateur C++, mais bien du C++)
5- J'ai une petite classe destinée à afficher en français une valeur
monétaire. Ellle utilise la classe std::string (en fait, elle
utilisait initialement AnsiString de la VCL Borland). Est-ce embêtant
de conserver une seule classe dans une appli résolument non POO ? Et
d'en extraire la fonction utile, mais en conservant std::string ?
"Laurent Deniau" <Laurent.Deniau@cern.ch> a écrit dans le message de
news: 3F4C53B1.4090404@cern.ch...
...
J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de
temps en temps pour ne pas perdre contact car sur le plan des
concepts, c'est un language tres interessant. J'ai egalement regarde
Objective-C, Eiffel et Java (et beaucoup d'autres pour la culture)
mais pour l'instant aucun ne m'a seduit plus que le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe
que le C. Il est tres facile de faire n'importe quoi en C++ et de ne
plus s'y retrouver. Et c'est encore plus difficile de le faire
comprendre a ses collaborateurs (surtout s'ils manquent
d'experience) lorsque vous mixez plusieurs facettes du C++ (heritage
multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Ceci me permet de préciser ma question. Puisque comme prévisible, il a
été plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas
POO, C obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les
classe pour l'exemple, mais il y en a d'autres. Ces concepts ne me
sont pas indispensables, ni même réellement utiles dans l'exemple qui
suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je
dispose d'un compilateur (C++ 5.5 par exemple), qui me permet de
compiler en C ou en C++. Donc, la question économique ne se pose pas.
Pour l'exemple, je n'ai pas une pratique en C pur qui justifie
d'ignorer C++. Toujours pour fixer les idées, et peut-être à tort,
bien maîtriser C à terme ne m'intéresse pas particulièrement, alors
qu'une bonne pratique de C++ me motive.
Ma question est de savoir si les défauts que vous évoquez pour C++
existent dans un C++ réduit au "cahier des charges" de C.
Je dois écrire une petite appli, par exemple une édition de facture.
Pas de base de donnée qui pourrait orienter mon choix, quelques
fichiers textes joueront ce rôle. L'appli est en mode console, je
souhaiterais pouvoir la recompiler pour Linux avec le minimum de
travail supplémentaire. Please, pas de réponse sur ce cahier des
charges, il est totalement bidon. Bien entendu, ce travail est
parfaitement faisable en C pur.
Dans les startégies suivantes, à quel moment me trompé-je ?
1- Ecriture du bouzin en C.
2- Ecriture du bouzin en C++ "comme en C", c'est à dire pratiquement
le même code. Aux facilités syntaxiques près, puisque je suis sensé ne
pas avoir d'habitudes héritées du C. Par exemple, utilisation du type
bool, commentaires //, etc.
3- Comme le pécédent, mais en utilisant quelques concepts (hors POO)
propres à C++ qui me facilitent semble-t-il la vie, disons les
exceptions pour fixer les idées. Pointeurs -> références ? ?alloc/free
-> new/delete ?
4- Comme en 2 (ou 3), mais en utilisant iostream à la place de stdio.h
pour les E/S standard. (A partir de là, il ne s'agit plus de faire du
C avec un compilateur C++, mais bien du C++)
5- J'ai une petite classe destinée à afficher en français une valeur
monétaire. Ellle utilise la classe std::string (en fait, elle
utilisait initialement AnsiString de la VCL Borland). Est-ce embêtant
de conserver une seule classe dans une appli résolument non POO ? Et
d'en extraire la fonction utile, mais en conservant std::string ?
"Laurent Deniau" a écrit dans le message de
news:
...J'ai utilise' le C++ de 1989 (zortech 1.0 :-) a 1999. Je continue de
temps en temps pour ne pas perdre contact car sur le plan des
concepts, c'est un language tres interessant. J'ai egalement regarde
Objective-C, Eiffel et Java (et beaucoup d'autres pour la culture)
mais pour l'instant aucun ne m'a seduit plus que le C et le C++.
Mais le C++ est deux (voir trois) ordres de magnitude plus complexe
que le C. Il est tres facile de faire n'importe quoi en C++ et de ne
plus s'y retrouver. Et c'est encore plus difficile de le faire
comprendre a ses collaborateurs (surtout s'ils manquent
d'experience) lorsque vous mixez plusieurs facettes du C++ (heritage
multiple, heritage virtuel, methodes virtuelles, membres static,
template, traits, template expressions, exceptions).
Ceci me permet de préciser ma question. Puisque comme prévisible, il a
été plus répondu à [POO ou pas POO ?], alors que c'était plus [si pas
POO, C obligatoire ou C++ aussi bien ?].
C++ peut être vu comme un C légèrement corrigé, augmenté des concepts
fondamentalement différents que tout le monde connaît. Citons les
classe pour l'exemple, mais il y en a d'autres. Ces concepts ne me
sont pas indispensables, ni même réellement utiles dans l'exemple qui
suit.
Pour fixer les idees, je suis sous un Windows quelconque, et je
dispose d'un compilateur (C++ 5.5 par exemple), qui me permet de
compiler en C ou en C++. Donc, la question économique ne se pose pas.
Pour l'exemple, je n'ai pas une pratique en C pur qui justifie
d'ignorer C++. Toujours pour fixer les idées, et peut-être à tort,
bien maîtriser C à terme ne m'intéresse pas particulièrement, alors
qu'une bonne pratique de C++ me motive.
Ma question est de savoir si les défauts que vous évoquez pour C++
existent dans un C++ réduit au "cahier des charges" de C.
Je dois écrire une petite appli, par exemple une édition de facture.
Pas de base de donnée qui pourrait orienter mon choix, quelques
fichiers textes joueront ce rôle. L'appli est en mode console, je
souhaiterais pouvoir la recompiler pour Linux avec le minimum de
travail supplémentaire. Please, pas de réponse sur ce cahier des
charges, il est totalement bidon. Bien entendu, ce travail est
parfaitement faisable en C pur.
Dans les startégies suivantes, à quel moment me trompé-je ?
1- Ecriture du bouzin en C.
2- Ecriture du bouzin en C++ "comme en C", c'est à dire pratiquement
le même code. Aux facilités syntaxiques près, puisque je suis sensé ne
pas avoir d'habitudes héritées du C. Par exemple, utilisation du type
bool, commentaires //, etc.
3- Comme le pécédent, mais en utilisant quelques concepts (hors POO)
propres à C++ qui me facilitent semble-t-il la vie, disons les
exceptions pour fixer les idées. Pointeurs -> références ? ?alloc/free
-> new/delete ?
4- Comme en 2 (ou 3), mais en utilisant iostream à la place de stdio.h
pour les E/S standard. (A partir de là, il ne s'agit plus de faire du
C avec un compilateur C++, mais bien du C++)
5- J'ai une petite classe destinée à afficher en français une valeur
monétaire. Ellle utilise la classe std::string (en fait, elle
utilisait initialement AnsiString de la VCL Borland). Est-ce embêtant
de conserver une seule classe dans une appli résolument non POO ? Et
d'en extraire la fonction utile, mais en conservant std::string ?
| Bien. Mais C++98 aussi a necessite un changement du systeme de type
| par rapport a C89
C++ ne dérive pas de C89. Cela fait beaucoup de différence plus que tu
ne peux l'imaginer.
| avec en plus un changement sur la gestion de la
| duree de vie des temporaires. C'est pas plus complique que les VMT?
Non. La seule chose compliquée, c'est les sutilisateurs ;-)
| [...]
| une liste rapide qui me vient a l'esprit:
| - les arguments sont passes par reference mais rien n'est dit sur l'aliasing.
Parce que qu'il n'y a rien à dire. As-tu lu la spécification ?
| Est-ce que:
| complex<float> z(2.0,3.0);
| z *= z; z = z * z;
| est autorise
La réponse est dans la spécification.
| - rien ne dit si complex<double> est equivalent a double[2]
On n'a pas besoin qu'il soit équivalent. Il suffit qu'il soit compatible.
Je ne connais pas une seule implémentation de C++ où ce n'est pas le cas.
Jette un coup d'oeil à
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#387
| - il manque les fonctions reciproques et hyperboliques reciproques.
et cela en fait une hérésie ?
| - elle ne gere pas les promotions usuelles telles que decritent dans C99.
je n'en vois pas la nécessité et je ne considère pas que c'est une hérésie.
| - il n'y a aucune recommandation sur la stabilite de z / z ou abs(z).
|
| > | Et il me semble que numeric_limits n'a pas non plus ete simple a
| > | mettre au point... Explique-toi.
|
| Je ne fais que repeter ce que tu m'as dit il y a 4 ou 5 ans quand je
| demandais pourquoi gcc ne fournissait pas de numeric_limits dont
| j'avais cruellement besoin.
sauf que tu as oublié le contexte. Fournir numeric_limits<> sur une
architecture donnée n'est pas difficile (quelqu'un l'a fait remarqué
dans ce thread). Fournir numeric_limits<> dans GCC pour tous les
plateformes qu'il supporte est une autre histoire.
| > Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
|
| #define sqrt(a)
| (typeof(a) == typeof(long double complex) ? csqrtl(a) :
| (typeof(a) == typeof(double complex) ? csqrt(a) :
l'as-tu essayé ? ou c'est juste une autre illustration de yaka ?
| Je pense qu'on commence a etre franchement HS.
NON. Savoir comment implémenté <tgmath.h> n'est pas HS sur groupe.
| Bien. Mais C++98 aussi a necessite un changement du systeme de type
| par rapport a C89
C++ ne dérive pas de C89. Cela fait beaucoup de différence plus que tu
ne peux l'imaginer.
| avec en plus un changement sur la gestion de la
| duree de vie des temporaires. C'est pas plus complique que les VMT?
Non. La seule chose compliquée, c'est les sutilisateurs ;-)
| [...]
| une liste rapide qui me vient a l'esprit:
| - les arguments sont passes par reference mais rien n'est dit sur l'aliasing.
Parce que qu'il n'y a rien à dire. As-tu lu la spécification ?
| Est-ce que:
| complex<float> z(2.0,3.0);
| z *= z; z = z * z;
| est autorise
La réponse est dans la spécification.
| - rien ne dit si complex<double> est equivalent a double[2]
On n'a pas besoin qu'il soit équivalent. Il suffit qu'il soit compatible.
Je ne connais pas une seule implémentation de C++ où ce n'est pas le cas.
Jette un coup d'oeil à
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#387
| - il manque les fonctions reciproques et hyperboliques reciproques.
et cela en fait une hérésie ?
| - elle ne gere pas les promotions usuelles telles que decritent dans C99.
je n'en vois pas la nécessité et je ne considère pas que c'est une hérésie.
| - il n'y a aucune recommandation sur la stabilite de z / z ou abs(z).
|
| > | Et il me semble que numeric_limits n'a pas non plus ete simple a
| > | mettre au point... Explique-toi.
|
| Je ne fais que repeter ce que tu m'as dit il y a 4 ou 5 ans quand je
| demandais pourquoi gcc ne fournissait pas de numeric_limits dont
| j'avais cruellement besoin.
sauf que tu as oublié le contexte. Fournir numeric_limits<> sur une
architecture donnée n'est pas difficile (quelqu'un l'a fait remarqué
dans ce thread). Fournir numeric_limits<> dans GCC pour tous les
plateformes qu'il supporte est une autre histoire.
| > Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
|
| #define sqrt(a)
| (typeof(a) == typeof(long double complex) ? csqrtl(a) :
| (typeof(a) == typeof(double complex) ? csqrt(a) :
l'as-tu essayé ? ou c'est juste une autre illustration de yaka ?
| Je pense qu'on commence a etre franchement HS.
NON. Savoir comment implémenté <tgmath.h> n'est pas HS sur groupe.
| Bien. Mais C++98 aussi a necessite un changement du systeme de type
| par rapport a C89
C++ ne dérive pas de C89. Cela fait beaucoup de différence plus que tu
ne peux l'imaginer.
| avec en plus un changement sur la gestion de la
| duree de vie des temporaires. C'est pas plus complique que les VMT?
Non. La seule chose compliquée, c'est les sutilisateurs ;-)
| [...]
| une liste rapide qui me vient a l'esprit:
| - les arguments sont passes par reference mais rien n'est dit sur l'aliasing.
Parce que qu'il n'y a rien à dire. As-tu lu la spécification ?
| Est-ce que:
| complex<float> z(2.0,3.0);
| z *= z; z = z * z;
| est autorise
La réponse est dans la spécification.
| - rien ne dit si complex<double> est equivalent a double[2]
On n'a pas besoin qu'il soit équivalent. Il suffit qu'il soit compatible.
Je ne connais pas une seule implémentation de C++ où ce n'est pas le cas.
Jette un coup d'oeil à
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#387
| - il manque les fonctions reciproques et hyperboliques reciproques.
et cela en fait une hérésie ?
| - elle ne gere pas les promotions usuelles telles que decritent dans C99.
je n'en vois pas la nécessité et je ne considère pas que c'est une hérésie.
| - il n'y a aucune recommandation sur la stabilite de z / z ou abs(z).
|
| > | Et il me semble que numeric_limits n'a pas non plus ete simple a
| > | mettre au point... Explique-toi.
|
| Je ne fais que repeter ce que tu m'as dit il y a 4 ou 5 ans quand je
| demandais pourquoi gcc ne fournissait pas de numeric_limits dont
| j'avais cruellement besoin.
sauf que tu as oublié le contexte. Fournir numeric_limits<> sur une
architecture donnée n'est pas difficile (quelqu'un l'a fait remarqué
dans ce thread). Fournir numeric_limits<> dans GCC pour tous les
plateformes qu'il supporte est une autre histoire.
| > Non. Une fois que tu as le typeof, qu'est-ce que tu en fais ?
|
| #define sqrt(a)
| (typeof(a) == typeof(long double complex) ? csqrtl(a) :
| (typeof(a) == typeof(double complex) ? csqrt(a) :
l'as-tu essayé ? ou c'est juste une autre illustration de yaka ?
| Je pense qu'on commence a etre franchement HS.
NON. Savoir comment implémenté <tgmath.h> n'est pas HS sur groupe.