Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1664 connectés 

 


Quel API "centrale" utilisez vous ?




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Sondage sur la STL

n°313917
kadreg
profil: Utilisateur
Posté le 20-02-2003 à 12:01:05  profilanswer
 

Reprise du message précédent :

El_gringo a écrit :


Ben, le catch, ça te permet de logger l'erreur. Si l'objet dans la liste n'est pas de la classes censée y être, il faut considèrer qu'il n'y est pas, tout simplement !


 
Donc tu sais que tu as une donnée invalide dans un ensemble. Tu ignore tout de l'intégrité de tes données (et honnetement, il y aurait de quoi douter) et tu oses continuer comme si de rien était ?
 
[:totoz]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 20-02-2003 à 12:01:05  profilanswer
 

n°313925
nraynaud
lol
Posté le 20-02-2003 à 12:12:29  profilanswer
 

kadreg a écrit :


 
Donc tu sais que tu as une donnée invalide dans un ensemble. Tu ignore tout de l'intégrité de tes données (et honnetement, il y aurait de quoi douter) et tu oses continuer comme si de rien était ?
 
[:totoz]


 
Finalement, smalltalk c'est pas si mal, tout dépends de tes règles à toi :-)

n°313928
El_gringo
Posté le 20-02-2003 à 12:15:38  profilanswer
 

kadreg a écrit :


 
Donc tu sais que tu as une donnée invalide dans un ensemble. Tu ignore tout de l'intégrité de tes données (et honnetement, il y aurait de quoi douter) et tu oses continuer comme si de rien était ?
 
[:totoz]


 
Oui, bien sur, 'faut être cool dans la vie ! :D
Qui ne tente rien n'a rien, de toute façon, l'erreur est loguée. Autant essayer de continuer le traitement, il a toujours + de chances de réussir que si on l'arrête.

n°313929
BifaceMcLe​OD
The HighGlandeur
Posté le 20-02-2003 à 12:15:52  profilanswer
 

nraynaud a écrit :


 
et tu fais quoi une dans la clause catch en question ? tu tentes toute une série de cast jusqu'à ce qu'il y en ait un qui marche ?


Si tu es un programmeur très stupide, oui.
Mais dans la prtaique, ça n'arrive jamais. Alors tu sors en erreur, soit en laissant se propager cette exception jusqu'au point d'entrée (main ou servlet), quitte, au passage, à laisser une trace dans un log d'exécution si tu en utilises un.
 
Pourquoi ça n'arrive jamais ? Parce que les programmeurs Java ne sont pas cons à ce point... S'ils ont un doute sur le type de l'objet qu'ils récupèrent (ce qui arrive rarement, mais ce qui arrive quand même), ils font un "instanceof" avant pourtester le type de l'objet... :sarcastic:  

n°313939
BifaceMcLe​OD
The HighGlandeur
Posté le 20-02-2003 à 12:31:53  profilanswer
 

El_gringo a écrit :

En fait, l'inconvénient des templates, selon moi, c'est que ceux-ci devraient être plus restrictifs. dans vector<MaClasse>, on ne devrait pour pouvoir fouttre ce qu'on veut, mais par exemple, uniquement des classes implémentant une classe purement abstraite (interface), guarantissant ainsi que la classes dispose bien des opérateurs nécessaires.


Je suis bien d'accord. En C++, il faut, au mieux, attendre l'édition de liens pour savoir qu'il manque une fonction sur un type que tu utilises pour instancier une classe template. Et le message d'erreur n'est pas des plus clairs ! Parfois même (en particulier dans le cas des constructeurs par recopie), le compilateur a généré automatiquement une implémentation qui ne convient pas ; résultat : tout compile, et à l'exécution, ça fonctionne, mais seulement dans 99 cas sur 100...  :ouch:
 
Java ne devrait pas avoir ce souci car on devrait pouvoir écrire

Code :
  1. class SortedSet<Element implements Comparable<Element>>


D'ailleurs, tu peux déjà les utiliser : Sun fournit un "patch" pour le JDK 1.4.1 qui modifie le compilateur Java et accepter les génériques.
 
Quelques URLs:

n°314264
nraynaud
lol
Posté le 20-02-2003 à 18:41:15  profilanswer
 

BifaceMcLeOD a écrit :


 Parce que les programmeurs Java ne sont pas cons à ce point... S'ils ont un doute sur le type de l'objet qu'ils récupèrent (ce qui arrive rarement, mais ce qui arrive quand même), ils font un "instanceof" avant pourtester le type de l'objet... :sarcastic:  
 


 
S'ils étaient un peu moins cons encore, ils auraient mis une précondition sur le type des objets de la collection. Et s'ils l'étaient encore moins, ils auraient déjà leur généricité.

n°314390
tanguy
Posté le 20-02-2003 à 21:18:00  profilanswer
 

El_gringo a écrit :

Mes arguments Quel est l'intérêt des templates, plutôt qu'une classe de base CObject, surchargée par tous les éléments d'une API ?


On est en 2003, mais y'a 20 ans une classe mere Object n'a pas ete implemente dans le langage pour des problemes de performance.
 
En effet le C++ a ete concu de tel sorte qu'il puisse remplacer le C, donc il a fallu eliminer des concepts pour garder la vitesse d'execution proche du C sinon les developpeurs auraient hesites a passer au C++.
 
Pourquoi une classe mere Object prendrait plus de ressource ?
ba deja y'a heritage, donc tu trimbales plein de trucs.
ensuite il faudrait que les methodes de cette classe soit en virtual pour pouvoir les redefinir -> creation d'une table d'index qui prend aussi plein de ressource.
 
D'ailleurs pourquoi en C++ on doit indiquer virtual pour avoir le typage dynamique contrairement au Java ou toutes les methodes sont virtual par defaut ? ba ca prend trop de ressources.
 
En Java ils ont concu le langage sans avoir les perfomances en 1er objectif mais la facilite.
 
Donc pour avoir la genericite que l'on pouvait obtenir avec la classe Object, ils ont concu les templates.
Creer une classe template c'est assez complexe et les templates ont des limitations (pas de virtual, message immonde en cas d'erreur lors de la compil, dans les headers sauf avec export...), et la syntaxe est assez complexe.
Par contre ca a l'avantage de pas devoir faire des cast comme avec une classe Object, et les cast tout le monde le sait, moins on en a et mieux on se porte.
 
Mais en revanche je suis pas du tout d'accord pour la complexite de la STL.
 
La STL (qui rappelont le a ete soumis pour etre inclus au langage en 1994 et est donc standard dans le langage maintenant) est certainement la meilleure chose qui soit arrive au C++.
 
C'est super super super bien foutu, en une poigne de classes (la STL est tres petite si on regarde bien) on peut faire des choses extremement diversifies, generiques (avec les iterator) et puissantes.
 
Y'a juste a apprendre 2-3 trucs et c'est bon, tout s'appuie sur les memes choses.
Avec les typedef on ne voit pas la syntaxe des templates
 
Y'a un excelent chapitre sur la STL dans le 2e volume de thinking in C++ de Bruce Eckel disponible gratuitement en ligne sur www.bruceeckel.com
Pour comprendre la beaute, la puissance et l'elegance de la chose !
 
Pour moi le C++ sans STL c'est meme pas du C++

n°314411
nraynaud
lol
Posté le 20-02-2003 à 22:09:51  profilanswer
 

tanguy a écrit :


Donc pour avoir la genericite que l'on pouvait obtenir avec la classe Object, ils ont concu les templates.


 
et la marmotte ?
 
tiens : http://nraynaud.com.free.fr/types.html
une petite remise à niveau sur les types.
 
Le C++ n'a pas inventé les templates, ça existait avant (ce qui n'enlève rien à C++, c'est une remarque factuelle). Ils ont juste mis ça dedans.  
 
J'ai cheché un peu dans le Meyer mais j'ai pas trouvé l'origine de la généricité, juste que Ada l'avait en 83.

n°314427
tanguy
Posté le 20-02-2003 à 22:40:55  profilanswer
 

nraynaud a écrit :

 
 et la marmotte ?  
 


 
T'as tres bien compris ce que je voulais dire, comme tout le monde d'ailleurs.

n°314431
Taz
bisounours-codeur
Posté le 20-02-2003 à 22:43:31  profilanswer
 

tanguy a écrit :


 
T'as tres bien compris ce que je voulais dire, comme tout le monde d'ailleurs.

moi je t'ai bien compris. Surtout quand tu dis du bien du C++ :love: :D

mood
Publicité
Posté le 20-02-2003 à 22:43:31  profilanswer
 

n°314463
nraynaud
lol
Posté le 20-02-2003 à 23:29:49  profilanswer
 

tanguy a écrit :


 
T'as tres bien compris ce que je voulais dire, comme tout le monde d'ailleurs.


 
non, y'a des opérateurs de casting des plus exotiques dans C++ qui, j'en suis sûr, mimerons très bien la partie la plus merdique de java.
 
D'autre part, concernant l'absence de super-classe commune à toutes les classes, ça veut dire qu'elles n'ont aucune interface commune (puisque sinon, elle serait factorisée par une super-classe commune) hors il existe un certain comportement commun à toutes les classes : l'affectation et le constructeur par copie (heu, y'en au peut-être d'autre, j'ai pas ça en tête). En particuler, la possibilité de faire un = sur n'importe quel objet (j'ai pas dit variable, puisqu'elle peut-être statique), signifie qu'il existe, ce comportement commun. Comportement qui est, je trouve extrèmement présomptueux.
 
On voit donc 2 choses :  
- il existe un piège à con, un comportement commun non documenté par la technique standard (une classe). Qu'on se rassure, c'est pas le seul piège à con du C++  (par exemple l'appel du constructeur par copie dans certains cas alors que visuellement c'est un signe d'affectation qui est inscrit).
- des méthodes à liaison retardée dans une super-classe commune n'est pas la seule technique pour s'assurer de la présence d'un comportement commun à toutes les classes, puisque dans le cas de C++ c'est la génération de code "à la demande" et "par défaut" qui a été retenue.

n°314513
tanguy
Posté le 21-02-2003 à 00:07:50  profilanswer
 


 
Je crois que dans ta piole il doit plus rester beaucoup de moquette
 
Les concepteurs de C++ ont decides d'utiliser la solution template par rapport a une classe mere parceque cette solution bouffait trop de ressources.
 
Ca repondait tout simplement a la question de El_gringo qui se demandait pourquoi ils n'avaient pas utiliser une classe Object
 
C'est si compliquer que ca a comprendre ?

n°314671
kadreg
profil: Utilisateur
Posté le 21-02-2003 à 08:36:57  profilanswer
 

tanguy a écrit :


C'est si compliquer que ca a comprendre ?


 
Comme nraynaud, je trouve ça bizarre comme explication. Tu as des pointeurs webographiques ou bibliographiques qui confirment ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°314739
BifaceMcLe​OD
The HighGlandeur
Posté le 21-02-2003 à 10:17:58  profilanswer
 

nraynaud a écrit :


S'ils étaient un peu moins cons encore, ils auraient mis une précondition sur le type des objets de la collection. Et s'ils l'étaient encore moins, ils auraient déjà leur généricité.


Non, s'ils étaient encore moins cons, ils n'auraient pas besoin de tester le type réel de leur objet. Mais ça, c'est un problème d'architecture, ni plus ni moins.
Maintenant, tu ne peux pas accuser les programmeurs Java de ne pas utiliser des fonctionnalités qui n'existent pas dans le langage et dont l'intégration requiert la modification de la syntaxe du langage : en l'occurrence, les assertions sont encore toutes récentes, et la généricité n'est pas encore standard dans le langage.

n°314748
BifaceMcLe​OD
The HighGlandeur
Posté le 21-02-2003 à 10:28:35  profilanswer
 

nraynaud a écrit :


tiens : http://nraynaud.com.free.fr/types.html
une petite remise à niveau sur les types.
 
J'ai cherché un peu dans le Meyer mais j'ai pas trouvé l'origine de la généricité, juste que Ada l'avait en 83.


Dommage que tu ne parles pas d'Ada dans ta page, car il y trouve naturellement sa place.
 
Sinon, je sais que les concepteurs d'Ada se sont inspirés de Simula pour beaucoup de concepts. Mais je ne connais pas du tout ce dernier. Peut-être contient (au moins) un embryon de généricité. Mais à ma connaissance, les concepteurs d'Ada revendiquaient n'avoir rien inventé dans Ada, mais seulement avoir rassemblé dans un langage unique le meilleur de tout ce qu'on avait fait jusque-là en matière de langage de programmation. Donc la généricité doit avoir été inventée avant Ada.

n°314761
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-02-2003 à 10:36:44  profilanswer
 

ça dévie en combat de langages là, y a un topic pour ça :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°314762
BifaceMcLe​OD
The HighGlandeur
Posté le 21-02-2003 à 10:37:18  profilanswer
 

tanguy a écrit :


Les concepteurs de C++ ont decides d'utiliser la solution template par rapport a une classe mere parceque cette solution bouffait trop de ressources.
 
Ca repondait tout simplement a la question de El_gringo qui se demandait pourquoi ils n'avaient pas utiliser une classe Object
 
C'est si compliquer que ca a comprendre ?


A mon avis, c'est un raisonnement erroné. D'abord parce que les templates en C++ sont bien postérieurs à C++ lui-même. D'autre part, il ne faut pas oublier la philosophie fondamentale et originelle de C++ : "C with classes". En clair, il faut que l'on puisse faire du C avec un peu d'objet pour enrober. En particulier, en C++, on peut écrire des classes sans jamais utiliser le mécanisme d'héritage.
Or la solution classe Object ancêtre de toutes les autres classes contredit cet objectif originel, en forçant l'usage de beaucoup de concepts objet d'un seul coup (en particulier, donc, l'héritage). Et de nombreuses fonctions qui ne sont pas virtuelles dans les classes C++ aujourd'hui l'auraient nécessairement été avec une classe ancêtre unique.
 
Pourquoi ne pas vouloir utiliser l'héritage ? Effectivement, comme l'a souligné tanguy, pour ne pas se couper des programmeurs C, "coeur de cible" principal de C++ à ses débuts. Or typiquement, ces programmeurs-là sont obnubilés par l'efficacité supposée de leur programme. Il fallait donc leur "donner des gages", en leur offrant la possibilité de "déconnecter" tout ou partie des mécanismes supplémentaires qu'impose l'objet.

n°314764
BifaceMcLe​OD
The HighGlandeur
Posté le 21-02-2003 à 10:38:25  profilanswer
 

antp a écrit :

ça dévie en combat de langages là, y a un topic pour ça :o


On ne se bat pas ! :o  :ange:

n°314779
Kristoph
Posté le 21-02-2003 à 10:54:18  profilanswer
 

BifaceMcLeOD a *crit :


A mon avis, c'est un raisonnement erron*. D'abord parce que les templates en C++ sont bien post*rieurs * C++ lui-m*me. D'autre part, il ne faut pas oublier la philosophie fondamentale et originelle de C++ : "C with classes". En clair, il faut que l'on puisse faire du C avec un peu d'objet pour enrober. En particulier, en C++, on peut *crire des classes sans jamais utiliser le m*canisme d'h*ritage.
Or la solution classe Object anc*tre de toutes les autres classes contredit cet objectif originel, en for*ant l'usage de beaucoup de concepts objet d'un seul coup (en particulier, donc, l'h*ritage). Et de nombreuses fonctions qui ne sont pas virtuelles dans les classes C++ aujourd'hui l'auraient n*cessairement *t* avec une classe anc*tre unique.
 
Pourquoi ne pas vouloir utiliser l'h*ritage ? Effectivement, comme l'a soulign* tanguy, pour ne pas se couper des programmeurs C, "coeur de cible" principal de C++ * ses d*buts. Or typiquement, ces programmeurs-l* sont obnubil*s par l'efficacit* suppos*e de leur programme. Il fallait donc leur "donner des gages", en leur offrant la possibilit* de "d*connecter" tout ou partie des m*canismes suppl*mentaires qu'impose l'objet.


La philosophie du C++ serait plustot : "Tu ne payes pas le coup de ce que tu n'utilises pas". Et sur ce point, le langage est bien fait :D
 
Edit : Je parle du coup d'execution ou de consomation memoire bien sur ...


Message édité par Kristoph le 21-02-2003 à 10:54:56
n°314781
nraynaud
lol
Posté le 21-02-2003 à 10:59:24  profilanswer
 

BifaceMcLeOD a écrit :


Dommage que tu ne parles pas d'Ada dans ta page, car il y trouve naturellement sa place.
 
Sinon, je sais que les concepteurs d'Ada se sont inspirés de Simula pour beaucoup de concepts. Mais je ne connais pas du tout ce dernier. Peut-être contient (au moins) un embryon de généricité. Mais à ma connaissance, les concepteurs d'Ada revendiquaient n'avoir rien inventé dans Ada, mais seulement avoir rassemblé dans un langage unique le meilleur de tout ce qu'on avait fait jusque-là en matière de langage de programmation. Donc la généricité doit avoir été inventée avant Ada.


 
Je n'avais pas encore étudié Ada à l'époque.
 
Concernant Simula, d'après ce que j'ai vu dans le Meyer, il ressemble plutôt à Smalltalk (j'ai l'impression qu'il n'est pas statiquement typé).

n°314783
nraynaud
lol
Posté le 21-02-2003 à 11:01:43  profilanswer
 

Kristoph a écrit :


La philosophie du C++ serait plustot : "Tu ne payes pas le coup de ce que tu n'utilises pas". Et sur ce point, le langage est bien fait :D
 
Edit : Je parle du coup d'execution ou de consomation memoire bien sur ...


 
Naturellement, car le coût de maintenance et de développement ...

n°314795
BifaceMcLe​OD
The HighGlandeur
Posté le 21-02-2003 à 11:11:03  profilanswer
 

Dans ces domaines-là, ce que tu payes, c'est le coup de massue ! (et non le coût de la massue) :D

n°315400
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 22-02-2003 à 01:20:39  profilanswer
 

nraynaud a écrit :


 
Naturellement, car le coût de maintenance et de développement ...


 
Quand est-ce que tu nous réécris KDE en smalltalk ?

n°315417
nraynaud
lol
Posté le 22-02-2003 à 04:08:36  profilanswer
 

Captain ad-hoc a écrit :


 
Quand est-ce que tu nous réécris KDE en smalltalk ?


 
1) faire maintenir un bloatware par des bénévoles, c'est difficile à chiffrer
 
2) smalltalk est une catastrophe en maintenance, il ne doit servir qu'à la pédagogie, où il est un des champions (c'est pourquoi j'en parle souvent lors des discussions).
 
edit :
 
3) smalltalk était un gestionnaire de fenêtre + un framework complet d'exécution + tout un tas de bordel longtemps avant KDE.
 
4) KDE n'est pas développé par une seule personne


Message édité par nraynaud le 22-02-2003 à 04:12:41
n°315420
wave
Posté le 22-02-2003 à 06:31:24  profilanswer
 

Citation :

A mon avis, c'est un raisonnement erroné. D'abord parce que les templates en C++ sont bien postérieurs à C++ lui-même. D'autre part, il ne faut pas oublier la philosophie fondamentale et originelle de C++ : "C with classes". En clair, il faut que l'on puisse faire du C avec un peu d'objet pour enrober. En particulier, en C++, on peut écrire des classes sans jamais utiliser le mécanisme d'héritage.
Or la solution classe Object ancêtre de toutes les autres classes contredit cet objectif originel, en forçant l'usage de beaucoup de concepts objet d'un seul coup (en particulier, donc, l'héritage). Et de nombreuses fonctions qui ne sont pas virtuelles dans les classes C++ aujourd'hui l'auraient nécessairement été avec une classe ancêtre unique.
 
Pourquoi ne pas vouloir utiliser l'héritage ? Effectivement, comme l'a souligné tanguy, pour ne pas se couper des programmeurs C, "coeur de cible" principal de C++ à ses débuts. Or typiquement, ces programmeurs-là sont obnubilés par l'efficacité supposée de leur programme. Il fallait donc leur "donner des gages", en leur offrant la possibilité de "déconnecter" tout ou partie des mécanismes supplémentaires qu'impose l'objet.


Eh oui, le C++ sans templates a au moins l'intérêt de garder tous les avantages du C, c'est à dire sa rapidité d'exécution, le programmeur reste proche de la machine et sait exactement ce qui s'y passe.
C'est une étape de + après le passage de l'ASM au C, pour garder les performances tout en structurant davantage et en facilitant le développement en équipe.
Si on va trop loin avec les objets c'est plus le même langage, et ça ne sert plus à la même chose.
Dans le domaine du temps réel (jeu), du calcul (image de synthèse), ou des systèmes d'exploitation, qui sont quand-même largement utilisés sur PC, c'est du délire d'utiliser un langage abstrait.
Dans ces domaines on DOIT avoir un moyen de voir tout ce que fait la machine, donc le contenu de toute classe ou fonction utilisée.
Dans le jeu vidéo (mon domaine), j'ai toujours gerbé sur beaucoup de choses qu'on entend ici (cette critique n'est valable que dans ce cas, je gerbe pas du tout sur le topic:D). Le genre de truc qui fait bosser la machine ou qui bouffe de la RAM (même très peu) sans qu'on sache comment ni pourquoi c'est interdit.
D'ailleurs c'est quand-même très bénéfique pour le résultat de toujours bien savoir ce qu'il se passe dans chaque partie du programme.
J'ai vu des critiques sur les cast, franchement si c'est pas fait n'importe comment je trouve pas ça dangereux.
C'est bien de vouloir parler un autre langage que la machine, mais il faut quand-même qu'elle arrive à peu près à comprendre ce qu'on veut sans faire 10 fois le boulot nécessaire.
Donc dans certains domaines: la STL rend le programme illisible et ne sert qu'à perdre le contrôle de ce qui se passe.
Je suis pas sûr que ce genre de choses n'ai pas alourdi énormément les OS qu'on utilise...
 
Apparemment dans d'autres situations c'est (très?) utile, d'après ce que je lis ici...

n°315463
Kristoph
Posté le 22-02-2003 à 13:06:54  profilanswer
 

Alors comme ca, tu penses pouvoir faire mieux que la STL en terme de performance ? Alors vas-y, prouve le !

n°315478
HelloWorld
Salut tout le monde!
Posté le 22-02-2003 à 13:56:26  profilanswer
 

J'ai pas pigé le rapport entre la STL et les OS alourdis ...
Je crois que tu ne connais pas très bien les templates / la STL.
Dans ton domaine justement, j'ai rencontré un jour un programmeur de jeux videos. A l'époque, j'étais pas très copain avec le C++, un peu comme tu sembles l'être maintenant.
Il bossait alors sous PS2. Il m'a dit texto "les templates C++, c'est le top"
Tu serais surpris si tu t'y intéressait vraiment, comme je l'ai été. Il suffit de tester. J'avais fait un prog en 2 versions. Une STL et l'autre en C. La version STL était déjà bcp plus lisible. Vire le code de gestion mémoire, utilise des fonctions telles que swap, find, ... et tu commences déjà à être séduit.
Puis j'ai compilé et testé.
Mon code C était 3 fois plus rapide. J'étais surpris que la différence ne soit pas + élevée, car le code était vraiment au désaventage de la STL.
J'avais testé sous VC++ 6... sachant la STL de MS réputée merdique, j'ai téléchargé celle de SGI. Et la badaboum, le traumatisme. Code C a peine, mais à peine plus rapide. Voire meme comparable !
Et du code STL peut etre plus rapide que du C.
ex, on trouve souvent cela en C :

Code :
  1. void fonction_C( const char * S )
  2. {
  3.     int length = strlen( S );
  4.     (...)
  5. }


Eh ben l'équivalent STL est + rapide !

Code :
  1. void fonction_STL( const std::string & S )
  2. {
  3.     size_t length = S.length();
  4.     (...)
  5. }


En C, strlen va parcourir toute la chaine pour trouver '\0'.
Avec la STL (implémentation efficace biensur), la longueur est contenue dans un champ ... => simple affectation. Et comme c'est du code inline ...
Et le code STL est aussi + sûr. Si tu dépasses les bornes de ton vector en debug, hop, assertion failed et un bug tout de suite repéré.
Evidement le C est généralement meilleur. Mais quand meme.
Bien utilisée, la STL peut etre surprenante. Le gain en lisibilité vaut largement la faible perte de vitesse.
un reserve() bien placé, et le tour et joué.
Et puis avec des implémentations COW on peut arriver à des petites merveilles.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°315514
Kristoph
Posté le 22-02-2003 à 15:53:33  profilanswer
 

De toute façon, il suffit de comparer le sort de la STL avec le qsort du C et on n'est pas déçus :D
 
Les perfs de la version STL sont bien meilleures


Message édité par Kristoph le 22-02-2003 à 15:53:54
n°315696
LeGreg
Posté le 23-02-2003 à 00:11:30  profilanswer
 

Ben Wave, tu programmes sur GBA ?
Même SN supporte les templates du C++.
 
Le seul probleme des templates dans une utilisation
au jour le jour que je vois, ne sont pas des problemes
de performances (je ne te parle pas de STL ici) mais des problemes lies a leurs implementations. Notamment l'exportation de classes templates via une dll (vous savez le petit warning que vous disabliez sous VC6.. et bien c'est devenu une erreur sous VC7..), ou les codes qui sont legaux du point de vue du standard et qui font planter le compilateur.
 
De meme l'utilisation de la STL au jour le jour peche par ses implementations douteuses et la syntaxe du C++ qui differe d'un compilateur a un autre mais cela se pose uniquement si vous faites du code cross-compilable. (et chose marrante: l'on ne peut pas exporter une classe qui derive d'un std::map ou d'un std::set.. Parfois rien que d'y penser j'en sue..)
 
Sinon j'ai vote la STL c'est bon mangez-en. Avec un grain de sel, malheureusement.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°315706
schnapsman​n
Zaford Beeblefect
Posté le 23-02-2003 à 00:39:13  profilanswer
 

legreg a écrit :


De meme l'utilisation de la STL au jour le jour peche par ses implementations douteuses et la syntaxe du C++ qui differe d'un compilateur a un autre mais cela se pose uniquement si vous faites du code cross-compilable. (et chose marrante: l'on ne peut pas exporter une classe qui derive d'un std::map ou d'un std::set.. Parfois rien que d'y penser j'en sue..)


 
Dans ma boite actuelle on utilise stl port pour compiler des serveurs sous windows, solaris, hp-ux, aix et linux. L'experience montre que ca marche pas trop mal et ce sans restriction particulière des possibilités de la stl.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°315709
LeGreg
Posté le 23-02-2003 à 00:52:48  profilanswer
 

SchnapsMann a écrit :


Dans ma boite actuelle on utilise stl port pour compiler des serveurs sous windows, solaris, hp-ux, aix et linux. L'experience montre que ca marche pas trop mal et ce sans restriction particulière des possibilités de la stl.


 
Et il supporte SN, metrowerks, et le compilateur Xbox aussi ?
Et tu peux mixer ta version de la STL avec celle qu'utilise le client ?
Et tu exportes des std::map dans des dlls ;) ?
Et tes objets templates sont-ils arkifies (dont les champs sont accessibles par des metafields) et facilement serialisables?
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°315713
schnapsman​n
Zaford Beeblefect
Posté le 23-02-2003 à 01:06:46  profilanswer
 

legreg a écrit :


 
Et il supporte SN, metrowerks, et le compilateur Xbox aussi ?
Et tu peux mixer ta version de la STL avec celle qu'utilise le client ?
Et tu exportes des std::map dans des dlls ;) ?
Et tes objets templates sont-ils arkifies (dont les champs sont accessibles par des metafields) et facilement serialisables?
 
LeGreg


 
qu'il est méchant lui  [:tinostar]  
 
la stl port prcure une portabilité pour les trucs sur lesquels je bosse, et c'est déjà pas mal.
 
C'est sur qu'avec le compilo C++ version alpha 0.34.12-3 pour VMS ca risque de moins bien marcher  [:zebra33]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°315718
nraynaud
lol
Posté le 23-02-2003 à 01:38:25  profilanswer
 

SchnapsMann a écrit :


C'est sur qu'avec le compilo C++ version alpha 0.34.12-3 pour VMS ca risque de moins bien marcher  [:zebra33]  


 
Toi tu critiques pas VMS sinon je me fache tout rouge ! C'est compris ?

n°315725
schnapsman​n
Zaford Beeblefect
Posté le 23-02-2003 à 01:55:10  profilanswer
 

nraynaud a écrit :


 
Toi tu critiques pas VMS sinon je me fache tout rouge ! C'est compris ?


 
Il n'y a plus longtemps à tenir, l'OS est encore supporté pour 5 ans au dernières nouvelles. Les pauvres bougres qui sont obligés de maintenir des softs là dessus pour gagner leur croute voient enfin le bout du tunnel. [:power600]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°315727
LeGreg
Posté le 23-02-2003 à 03:36:09  profilanswer
 

SchnapsMann a écrit :


qu'il est méchant lui  [:tinostar]  


 
au moins tu ne peux pas pretendre qu'il n'y a pas de problemes.
 
Et que l'on n'utilise pas la STL dans ma boite  
est le fait de vrais problemes et non pas parce qu'on n'a pas
suffisamment cherche.  
enfin la plupart des choix de notre architecture ont ete faits avant que j'arrive et j'avoue que je ne comprends pas tout (dans le bon sens: il y a des betes de C++ et je ne peux pas imaginer tous les problemes qu'ils ont eu a gerer)..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°315759
Kristoph
Posté le 23-02-2003 à 11:26:40  profilanswer
 

Les vrais problèmes de la STL sont les même que ceux du C++ en général :
- Les compilateurs ne sont pas cohérents entre eux ce qui complique le portage. Bien surn comme g++ est disponible sur un grand nombre d'architectures ça devrait aller maintenant.
- Il faut une grande experience de la STL pour ne pas faire d'erreures qui peuvent couter cher en temps de developement. Il ne suffit pas d'avoir 1 pro ou deux dans l'equipe, il faut que toute l'equipe s'y connaisse.
 
Moi, je ne peux que conseiller comme livre de chevet ceux de Scott Meyers :D. Par exemple pour la STL : http://www.awprofessional.com/cata [...] 24DFA675D}

n°315796
kenshiro18​2
Posté le 23-02-2003 à 13:33:40  profilanswer
 

La STL illisible ? C'est comme toutes les nouveautés: quand on découvre on est un peu perdu.
D'ailleurs, ce bout de code est-il illisible pour vous ?
 

Code :
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator> 
  4. #include <functional>
  5. int main(int argc, char *argv[])
  6. {
  7.   const char *pstr = "texte eh eh     ";
  8.   const char *pend = pstr+strlen(pstr);
  9.   std::cout << '[';
  10.   std::cout.write(pstr, pend-pstr);
  11.   std::cout << "]\n";
  12.   // apres ca   
  13.   typedef std::reverse_iterator<const char*> r_str_it;
  14.   pend = std::find_if(r_str_it(pend),
  15.        r_str_it(pstr),
  16.        std::bind1st(std::not_equal_to<char>(), ' ')
  17.        ).base();
  18.   // avant ca
  19.   std::cout << '[';
  20.   std::cout.write(pstr, pend-pstr);
  21.   std::cout << "]\n";
  22.   return 0;
  23. }


 
Si vous n'avez pas remarqué, ça "enlève" les espaces à la fin d'un buffer (c'est pas moi qui est décidé le format du buffer). L'objectif est d'utiliser un algo générique de la STL. Est-ce plus clair de faire le code à la main (avec une boucle "while" ) pour vous ?

n°315823
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 23-02-2003 à 14:17:26  profilanswer
 

kenshiro182 a écrit :

La STL illisible ? C'est comme toutes les nouveautés: quand on découvre on est un peu perdu.
D'ailleurs, ce bout de code est-il illisible pour vous ?
 

Code :
  1. typedef std::reverse_iterator<const char*> r_str_it;
  2.   pend = std::find_if(r_str_it(pend),
  3.        r_str_it(pstr),
  4.        std::bind1st(std::not_equal_to<char>(), ' ')
  5.        ).base();


 
Si vous n'avez pas remarqué, ça "enlève" les espaces à la fin d'un buffer (c'est pas moi qui est décidé le format du buffer). L'objectif est d'utiliser un algo générique de la STL. Est-ce plus clair de faire le code à la main (avec une boucle "while" ) pour vous ?


 
je me fais l'avocat du diable, mais très honnetement, oui:

Code :
  1. for (pend = pstr+strlen(pstr); pend > pstr && *(pend-1)==' '; --pend)
  2. {}


c'est plus court à taper, à lire, et sans doute à comprendre (chuis ptet un peu déformé). Par contre faut sans doute être plus vigilant aux bugs qu'avec la version stl

n°316584
BifaceMcLe​OD
The HighGlandeur
Posté le 24-02-2003 à 15:19:58  profilanswer
 

Captain ad-hoc a écrit :


 
je me fais l'avocat du diable, mais très honnetement, oui:

Code :
  1. for (pend = pstr+strlen(pstr); pend > pstr && *(pend-1)==' '; --pend)
  2. {}


c'est plus court à taper, à lire, et sans doute à comprendre (chuis ptet un peu déformé). Par contre faut sans doute être plus vigilant aux bugs qu'avec la version stl


Je regrette, mais ton bout de code, ad-hoc, est beaucoup moins lisible.
Quels sont les critères ? Très simple : pour comprendre, ou pire, vérifier ton propre bout de code, le lecteur est obligé d'exécuter mentalement la boucle. Combien de temps pour un bon programmeur C ? Au bas mot, au moins une minute, s'il veut inclure la plupart des cas un peu tordus dans ses vérifications.
A côté, la séquence STL n'est qu'un problème de connaissance de l'API. Tu t'y réfères, et tu comprends. Et pour vérifier l'exactitude du code, ben en fait, tu n'as quasiment rien à vérifier, le compilateur fait l'essentiel.
 
Tu noteras au passage que ce type de bout de code en pur C, en plus d'être beaucoup moins lisible, est nettement moins évolutif. En particulier, ces bouts de code supposent que les chaînes sont terminées par un caractère zéro, et qu'elles sont composées de caractères ASCII (pour le support des caractères non ouest-européens, on peut aller se rhabiller). Et, cerise sur le gâteau (ton bout de code est un contre-exemple), une fois sur deux, ils contiennent des bugs intrinsèques au langage C, par exemple celui du débordement de buffer.  :sarcastic:


Message édité par BifaceMcLeOD le 24-02-2003 à 15:22:08
n°316757
HelloWorld
Salut tout le monde!
Posté le 24-02-2003 à 18:31:35  profilanswer
 

Dans un cas comme dans l'autre, quand on se retrouve avec un truc qui parrait impressionant / illisible (qui le sera ou non en fonction de chacun), il y a les commentaires ...
un simple /* remove last spaces in buffer */ et ca va mieux.
Moi ce que j'apprecie dans la STL, c'est qu'on utilise pas mal de fonctions / mots spécifiques comme reverse_iterator, find_if, ... qui apporte de la sémantique au code.
Par rapport a du code non STL, c'est un peu selon moi la meme comparaison qu'entre un if...then...else et la meme chose avec des goto.
La premiere fois qur tu vois ca, bind1st, find_if, reverse_iterator, t'es pas content, car ca te fait perdre du temps, ca t'oblige a lire la doc et a passer + de temps sur le code que s'il etait ecrit en C.
Mais ... c'est du temps bien investi, au meme titre qu'on perd du temps a maitriser if...then...else et les autres au proffit du GOTO.
Au debut ca gonfle, mais une fois maitrisé, ca glisse tout seul ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°316957
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 24-02-2003 à 22:41:54  profilanswer
 

BifaceMcLeOD a écrit :


Je regrette, mais ton bout de code, ad-hoc, est beaucoup moins lisible.
Quels sont les critères ? Très simple : pour comprendre, ou pire, vérifier ton propre bout de code, le lecteur est obligé d'exécuter mentalement la boucle.
(snip)


 
je suis d'accord avec tous tes arguments, sauf pour la lisibilité. La boucle en c n'est pas polluée par trois tonnes de trucs. Qu'est qui compte dans la version c++ ? "reverse_iterator", "find_if", "not_equal", tous le reste ne fait que rendre la lecture plus difficile. c'est sans doute une question d'habitude à l'une ou l'autre forme.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
[c++] Liste Chainée sans STL ?[C++] les iterateurs STL
[C,C++] de l'utilisation des iterateurs avec la STL ??[C++] STL map et sort
STL - Comment faire l'équivalent d'un "trim" sur une basic_stringDu C au C++ avec STL: probleme resolu mais non compris
[STL] fonctions adaptees a mes besoins ????[PHP?]Sondage - Packs - HELP
[STL] vector/list de structures, recherche d'elements de la structureFaire un sondage
Plus de sujets relatifs à : Sondage sur la STL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR