vos souhaits pour la norme C++ 2048

vos souhaits pour la norme C++ 2048 - C++ - Programmation

Marsh Posté le 14-04-2005 à 20:20:14    

:hello:  
 
Je vous propose un petit topic blabla (si je peux me permettre), dans lequel on parlerai de tous nos fantasmes les plus inavouables, concernant les évolutions de la norme C++.
On peut proposer par exemple certains mots clés qui sont actuellement des extensions, ou des mots clés présents dans d'autres langages, ... On peut également proposer de nouvelles parties de bibliotheques, à intégrer à la lib standard, ...
Voila, donc on énumère dans l'odre décroissant nos fantasmes diaboliques, et on justifie si on veut. On peut ptet indiquer dans quel domaine on exerce si on pense ne pas etre objectif :)  
 
Donc, je commence :
 
1- the restrict keyword C99, pour permettre notament la vectorisation via absence d'alias.  
2- une bibliotheque de calcul scientifique plus complete que std::valarray & cie, comme boost::numeric::ublas ou blitz++.
3- les bindings boost, qui sont plus sympas et complets que std::bind2nd, ...
4- boost::mpl, pour rendre accessible à tous la métaprogrammation sans en chier comme un russe :o
5- the keyword typeof, qui peut etre sympa, bien que je n'en voye pas encore toute la portée :|
 
NB: axé informatique scientifique donc.
 
ouala à vous !

Reply

Marsh Posté le 14-04-2005 à 20:20:14   

Reply

Marsh Posté le 14-04-2005 à 20:25:27    

Reply

Marsh Posté le 14-04-2005 à 20:28:47    

avoir un point de vue utilisateur (basique) du C++, plutot qu'un point de vue membre du comité de standardisation.
 
et c'est comme le porc salut ...

Citation :

Je vous propose un petit topic blabla


Message édité par ++fab le 14-04-2005 à 20:30:35
Reply

Marsh Posté le 14-04-2005 à 21:41:16    

moi déjà, je veux tout le bordel de boost functional et bind. En fait, surtout des trucs nouveaux et corrigés dans STL : une vrai hashtable par exemple. Après la lecture des mailings me fait envie : y a des tas trucs géniaux en préparation. Surtout les trucs sur le dégagement du prépro pour l'utilisation des bibliothèques.
 
 
> pour typeof : c'est pourri comme truc, et une fonctionnalité comme ça en C++ n'a rien à voir avec le typeof de gcc. Par contre, la revalorisation de auto ça ça a un sens et ça serait sympatique.

Reply

Marsh Posté le 14-04-2005 à 22:01:50    

Taz a écrit :

y a des tas trucs géniaux en préparation. Surtout les trucs sur le dégagement du prépro pour l'utilisation des bibliothèques.


tu peux en dire plus ? rien à voir surement, mais boost::preprocessor rox
 

Citation :

> pour typeof : c'est pourri comme truc, et une fonctionnalité comme ça en C++ n'a rien à voir avec le typeof de gcc.

 
 
un truc dans le genre, ce serait mortel  [:sinking] (d'apres D. Abrahams, A. Gurtovoy)

Code :
  1. struct add
  2. {
  3.      template <class U, class V>
  4.      typeof(U+V) operator()(const U& u, const V& v)
  5.      { return u+v; }
  6. };


 

Citation :

Par contre, la revalorisation de auto ça ça a un sens et ça serait sympatique.


 :heink:  
 
et la revalorisation de register, qui pourrait peut etre permettre d'aider le compilo en disant que cette variable ne peut pas etre modifié via un pointeur ou une référence  :pt1cable:
Au moins adopter le meme comportement que C99 en tout cas.


Message édité par ++fab le 14-04-2005 à 22:06:30
Reply

Marsh Posté le 14-04-2005 à 22:44:16    

ben le truc du genre, c'est ce qui est prévu.
T'en dire plus ? http://www.open-std.org/jtc1/sc22/ [...] /n1778.pdf

Reply

Marsh Posté le 14-04-2005 à 23:09:33    

Taz a écrit :

ben le truc du genre, c'est ce qui est prévu.


Et ça ne te plais pas ?
 


Merci, je l'ai pas lu celui la, il a l'air corriace. Néanmoins, j'ai un début d'érection  [:petrus75]


Message édité par ++fab le 14-04-2005 à 23:09:55
Reply

Marsh Posté le 14-04-2005 à 23:16:21    

nan, je qui me plait pas et qui ne peut fonctionner, c'est le bordel de gcc
 
int i = 3;
typeof(i) j;
 

Reply

Marsh Posté le 15-04-2005 à 05:43:41    

- Fonctions locales  
et foncteurs sans passer par "class {operator ();} ;"
 

Code :
  1. void DoStuff(std::vector &myVector)
  2. {
  3.     bool greater(int a, int b) { return a > b};
  4.     sort(myVector.begin(), myVector.end(), greater); // <-- pas un pointeur de fonction !
  5. }


 
- suppression de la nécessité du .h ! Un seul et unique fichier
pour décrire une classe. Java et C# le font déjà très bien.
 
- utilisation des DLLs enfin faciles !
 
- dériver les types comme on dérive les classes.  
exemple : predicat c'est une dérivation de class.  
Je veux un template qui accepte un predicat comme argument. More power to the compiler.
 
- une gestion des strings intégrée au langage.  

Code :
  1. switch(stringValue)
  2. {
  3. case "mystring1": // do something
  4. case "mystring2": // do something else
  5. }


 
- gestion des coroutines et du mot clé yield.
 
- reorganisation des membres d'une classe par le compilateur.
(pour qu'on puisse les organiser sur des critères autres que
l'efficacité du code compilé)
 
Etc..
 
Et oui je crois au père noël.

Reply

Marsh Posté le 15-04-2005 à 08:52:26    

1) des closures pourquoi pas, sauf que ton exemple est un contre exemple.
 
2) pas d'accord.
 
3) ça c'est une merde de windows.
 
4) toi t'a bouffé du Java. Ce genre de truc c'est les contraintes du pauvre. y a d'autres techniques autrement plus complètes et meilleures qui sont entrain d'être pensées. Et qui sont faisables sans extension.
 
5) y a une proposition
 
6) mouef
 
7) pas possible. y a déjà eu des tas de discussions dessus.

Reply

Marsh Posté le 15-04-2005 à 08:52:26   

Reply

Marsh Posté le 15-04-2005 à 09:05:48    

LeGreg a écrit :


- reorganisation des membres d'une classe par le compilateur.
(pour qu'on puisse les organiser sur des critères autres que
l'efficacité du code compilé)


 
ste faite, la DLL compilée par paul en mode debug qui plante chez Jacques qui l'utilise avec son exe compilé en mode release :d
 
bref [:god]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:10:07    

Taz a écrit :


4) toi t'a bouffé du Java. Ce genre de truc c'est les contraintes du pauvre. y a d'autres techniques autrement plus complètes et meilleures qui sont entrain d'être pensées. Et qui sont faisables sans extension.


 
genre ?  
 
le coup du un fichier par classe, ca aide surtout a avoir un truc facilement analysable, et doncques aussi a avoir des ide bien couillue


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:10:40    

euh je parlais de contrainte template là.

Reply

Marsh Posté le 15-04-2005 à 09:12:08    

ah merde [:petrus75] me suis perdu dans le décompte [:bertie wooster]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:13:27    

toutes façons je vois pas pourquoi la répartition physique du code source a besoin d'être normalisé.

Reply

Marsh Posté le 15-04-2005 à 09:31:31    

Taz a écrit :

toutes façons je vois pas pourquoi la répartition physique du code source a besoin d'être normalisé.


A défaut d'être normalisée, elle peut permettre comme en java d'avoir des références circulaires. Puisque si tu mets tout dans le même fichier, adieu les forward class declarations.
 
Un truc qui serait rigolo (et donc très peu probable), ça serait d'avoir des interfaces, comme en Ada (ou un peu en Java). Ca permettrait d'avoir pour chaque classe son interface externe et son implémentation, sans avoir besoin de copier-coller entre les deux, et tout en planquant le maximum possible.  
 
Comme ça, on met l'interface dans le .h, l'implémentation dans le .cpp, et roulez jeunesse.
 

Code :
  1. extern class Porte // ceci est une interface de la classe Porte
  2. { // public par défaut
  3.    void Ouvre();
  4.    void Ferme;
  5. };
  6. class Porte
  7. // reprend automatiquement le contenu de l'interface.  
  8. {
  9.    bool isOpen;
  10. };
  11. Porte::Ouvre()
  12. {
  13.    isOpen=true;
  14. }

Reply

Marsh Posté le 15-04-2005 à 09:32:34    

chrisbk a écrit :

ste faite, la DLL compilée par paul en mode debug qui plante chez Jacques qui l'utilise avec son exe compilé en mode release :d


 
Tu n'as jamais pensé que les types exportés pouvaient en être exempt pardi ?
 
Bref..

Reply

Marsh Posté le 15-04-2005 à 09:34:31    

LeGreg a écrit :

Tu n'as jamais pensé que les types exportés pouvaient en être exempt pardi ?
 
Bref..


 
heuh oué, et les trucs a base d'heritage pas marqué explicitement comme exporté dans le code ?

Code :
  1. class A {
  2. ..
  3. };
  4. class B : public A{
  5. ..
  6. }
  7. A* maFonctionfactoryExportee()


 
paske bon, si c'est pour se rajouter des trucs a penser (ah, cette classe peut etre exportée, donc je flag) pour pas que le prog plante, bof, je laisse tombé les 0.0002% de gains perf  
 
 
(sinon ton histoire d'interface j'y avais pensé aussi fut un tps, pour du plancage de qualité)


Message édité par chrisbk le 15-04-2005 à 09:36:12

---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:36:24    

Lam's > sauf qu'en java t'as des références circulaires par ce que tu manipules tes objets que par référence.

Reply

Marsh Posté le 15-04-2005 à 09:36:44    

Taz a écrit :

4) toi t'a bouffé du Java. Ce genre de truc c'est les contraintes du pauvre. y a d'autres techniques autrement plus complètes et meilleures qui sont entrain d'être pensées. Et qui sont faisables sans extension.


 
je ne veux pas des trucs qui sont faisables sans extensions du langage.
 
C'est marqué dans le topic C++ en 2048
(ça pourrait être le langage extra terrestre beta mu).
 
Donc je demande la lune. Marre d'avoir la librairie machin
qui fait ça avec des gros hacks dedans  
alors que ça pourrait etre une part du langage
élégante et tout ;).

Reply

Marsh Posté le 15-04-2005 à 09:37:13    

Taz a écrit :

Lam's > sauf qu'en java t'as des références circulaires par ce que tu manipules tes objets que par référence.


 
pointeur [:petrus75]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:39:14    

chrisbk a écrit :

paske bon, si c'est pour se rajouter des trucs a penser (ah, cette classe peut etre exportée, donc je flag) pour pas que le prog plante, bof, je laisse tombé les 0.0002% de gains perf


 
1% reproductible c'est tout ce que je demande ;)
 
De toute façon c'est théorique. mais ce n'est pas parce que tu penses
à un exemple qui ne marche pas avec le langage actuel  
qu'on ne peut pas y réfléchir ;).

Reply

Marsh Posté le 15-04-2005 à 09:40:47    

bah du tps ou je f'sais mon compilo j'avais dédié 5 neurones a ca. Ca me cassait la tete. (Et ensuite vu que je voulais que ca s'interface avec c++, j'etais bien content de voir que le compilo reorganisait rien du tout (a part son padding))


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:44:11    

Taz a écrit :

1) des closures pourquoi pas, sauf que ton exemple est un contre exemple.


 
mais encore ?
 

Taz a écrit :

2) pas d'accord.


 
c'est ton droit, mais les .h c'est tout de meme une belle merde.  
 

Taz a écrit :

3) ça c'est une merde de windows.


 
On peut avoir envie de développer sous windows aussi. De toute façon c'est là où il y a 99% de mes clients.
 
Et comme personne ne veut rien faire on va se trimballer le problème encore
longtemps.

Reply

Marsh Posté le 15-04-2005 à 09:45:59    

Taz a écrit :

Lam's > sauf qu'en java t'as des références circulaires par ce que tu manipules tes objets que par référence.


Yup, mais ça ne me dérange pas.  Je suis sûr qu'en rajoutant une passe (qui ignore le code, et se contente de regarder le typage et les signatures par exemple), il devrait être possible au compilo de compiler ça:
 

Code :
  1. // Foo.h:
  2. #include "Bar.h"
  3. struct Foo
  4. {
  5.   Bar * m_bar;
  6.   HelloBar ()  { m_bar->Hello() }
  7.   Hello() { cout<<"Foo"<<endl; }
  8. };
  9. //Bar.h:
  10. #include "Foo.h"
  11. struct Bar
  12. {
  13.   Foo * m_foo;
  14.   HelloFoo ()  { m_foo->Hello() }
  15.   Hello() { cout<<"Bar"<<endl; }
  16. };


Reply

Marsh Posté le 15-04-2005 à 09:46:15    

surtout que n'oublions pas que sous nux le developpement de dll c'est du bonheur en barre.  
 
/home/roger/pouet.so : relocation error
 
delire


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 15-04-2005 à 09:46:20    

1) ton exemple est nul, ça sert à rien de faire une extension pour un truc comme ça.
 
3) comme tu dis, y a pas de DLL en C++ et moi j'ai jamais eu de problèmes avec une quelconque bibli. Alors sur ce point tu peux rêver. Le C++ ne statuera pas la dessus vu que c'est pas son domaine.

Reply

Marsh Posté le 15-04-2005 à 13:12:20    

Reply

Marsh Posté le 15-04-2005 à 13:20:44    

Lam's a écrit :

A défaut d'être normalisée, elle peut permettre comme en java d'avoir des références circulaires. Puisque si tu mets tout dans le même fichier, adieu les forward class declarations.
 
Un truc qui serait rigolo (et donc très peu probable), ça serait d'avoir des interfaces, comme en Ada (ou un peu en Java). Ca permettrait d'avoir pour chaque classe son interface externe et son implémentation, sans avoir besoin de copier-coller entre les deux, et tout en planquant le maximum possible.  
 
Comme ça, on met l'interface dans le .h, l'implémentation dans le .cpp, et roulez jeunesse.
 

Code :
  1. extern class Porte // ceci est une interface de la classe Porte
  2. { // public par défaut
  3.    void Ouvre();
  4.    void Ferme;
  5. };
  6. class Porte
  7. // reprend automatiquement le contenu de l'interface.  
  8. {
  9.    bool isOpen;
  10. };
  11. Porte::Ouvre()
  12. {
  13.    isOpen=true;
  14. }



 
Ce mélange d'anglais et de francais dans ton code  :love:  :love:  :love:

Reply

Marsh Posté le 15-04-2005 à 13:52:20    

Support des propriétés comme en Delphi/C#/Python :) Comme ça le C++ aura un gros point dans lequel il enfonce largement Java
 
Du code comme ça par exemple :
 

Code :
  1. class Personne
  2. {
  3. private:
  4.   int _numero;
  5.   int get_numero(){ return _numero; }
  6.   void set_numero(int new_val){ _numero = new_val; }
  7. public:
  8.   property<int, get_numero, set_numero> numero;
  9. };
  10. Personne a;
  11. a.numero = 5;

Reply

Marsh Posté le 15-04-2005 à 14:00:10    

mais ça existe déjà ce genre de truc. Y a tout le code dans l'un des mails d'un mailing (post-sidney ?)

Reply

Marsh Posté le 15-04-2005 à 14:28:05    

difficile de demander à la norme de raccrocher les (pseudo) DSEL que les techniques de métaprogrammation permettent.


Message édité par ++fab le 15-04-2005 à 14:29:16
Reply

Marsh Posté le 15-04-2005 à 14:59:33    

LeGreg a écrit :

- Fonctions locales  
et foncteurs sans passer par "class {operator ();} ;"
 

Code :
  1. void DoStuff(std::vector &myVector)
  2. {
  3.     bool greater(int a, int b) { return a > b};
  4.     sort(myVector.begin(), myVector.end(), greater); // <-- pas un pointeur de fonction !
  5. }




 
plutôt dans le style boost::lambda alors:

Code :
  1. sort(myVector.begin(), myVector.end(), *_1 > *_2);


mais sinon ton exemple s'écris plus simplement:

Code :
  1. void DoStuff(std::vector<int> &myVector)
  2.     sort( myVector.begin(), myVector.end(), std::greater<int>() );
  3. }


 
bref ça existe déjà quoi.
 

Citation :

- suppression de la nécessité du .h ! Un seul et unique fichier
pour décrire une classe. Java et C# le font déjà très bien.


c'est pour ça que le mot partial a été introduit en C# 2.0 ;)
 
Je suis plutôt partisant d'un truc comme Lam's. Le .h est l'interface d'utilisation, y'a pas à y fouttre des trucs privés.
 
Kristoph> tu devrais aimer C++ CLI alors

Code :
  1. ref class Personne
  2. {
  3. public:
  4.    property int numero;
  5. };


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-04-2005 à 16:34:33    

Taz a écrit :

mais ça existe déjà ce genre de truc. Y a tout le code dans l'un des mails d'un mailing (post-sidney ?)


 
? On peut déjà faire ça en C++ ?
 

HelloWorld a écrit :

plutôt dans le style boost::lambda alors:

Code :
  1. sort(myVector.begin(), myVector.end(), *_1 > *_2);


mais sinon ton exemple s'écris plus simplement:

Code :
  1. void DoStuff(std::vector<int> &myVector)
  2.     sort( myVector.begin(), myVector.end(), std::greater<int>() );
  3. }


 
bref ça existe déjà quoi.


La fonction utilisée n'était qu'un simple exemple. Tu réponds assez à coté de la plaque quand même :)
 

HelloWorld a écrit :


Kristoph> tu devrais aimer C++ CLI alors

Code :
  1. ref class Personne
  2. {
  3. public:
  4.    property int numero;
  5. };



C'est quoi le C++ CLI ? Si c'est ce truc horrible disponible dans .net ça ne m'interresse pas et je m'offusque de voir qu'ils osent appeler ça du C++. Moi je ne prend que le C++ officiel utilisable partout :whistle:

Reply

Marsh Posté le 15-04-2005 à 16:50:24    

C'est le binding officiel de C++ pour .Net. C'est pas encore finalisé.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-04-2005 à 01:36:22    

Mon souet est qu'on arrete de triturer ce pauvre C++, J'en ai marre de telecharger du code open source qui ne compile pas parce que je n'ai pas la meme version de compilateur que son propriètaire.
 
On fairait mieux d'améliorer C++ en lui apportant des biliotheques NORMALISEE. tel que l'a fait ANSI pour C.
 
Petit parallèle:
On a qu'a voir JAVA, ce language souffre parce qu'a l'epoque de sa création on a utiliser C++ comme modele, ils auraient mieux fait de creer un nouveau langage de A à Z.
 
La grande force de JAVA par rapport à C++, c'est justement que ce langage fournit une panoplie de bibiotheque.
 
Le langace C++ doit rester concurentiel à JAVA et non le mettre au oubliette parce que certaint farfelu comme Microsoft s'authorise à le "dénormaliser".


Message édité par maxmoi_la le 19-04-2005 à 01:39:39
Reply

Marsh Posté le 19-04-2005 à 09:05:09    

ça ne prend pas.

Reply

Marsh Posté le 19-04-2005 à 10:14:31    

Tu devrais transmettre tes judicieux conseilles à ces idiots du comité de normalisation ISO du C++.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-04-2005 à 10:16:50    

HelloWorld a écrit :

Tu devrais transmettre tes judicieux conseilles à ces idiots du comité de normalisation ISO du C++.


 
 
c'est ironique ou pas ? parce que avoir une api stdard bien fournie et couillue, ca serait pas mal


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 19-04-2005 à 10:18:48    

tiens, j'avais même pas lu le coup du "On fairait mieux d'améliorer C++ en lui apportant des biliotheques NORMALISEE. tel que l'a fait ANSI pour C."
 
Moi aussi j'aimerais bien que le C++ soit autre chose que C With Classes. J'aimerais bien une bibliothèque standard basé sur des templates, parce que NIHCL c'est pas si nickel que ça.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed