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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8  9  10
Auteur Sujet :

[Langage D]C++ + Java + Python = D

n°1312723
BenO
Profil: Chercheur
Posté le 23-02-2006 à 23:22:26  profilanswer
 

Reprise du message précédent :
lui ca marche partouze xD et ya plus de code nah :O

mood
Publicité
Posté le 23-02-2006 à 23:22:26  profilanswer
 

n°1312726
chrisbk
-
Posté le 23-02-2006 à 23:23:41  profilanswer
 

Tsss moins y'a de code, et plus la solution est belle [:dawao]

n°1312767
++fab
victime du syndrome IH
Posté le 24-02-2006 à 00:25:55  profilanswer
 

el muchacho a écrit :

Pour repousser les limites des templates de D, un gars de la mailing-list s'est fixé comme but de réaliser un moteur de regex templatisé. Faire cela avec les templates C++ est du domaine de la science-fiction.


 
Boost.Spirit n'est pourtant pas anachronique ;)
 
 

n°1312793
nargy
Posté le 24-02-2006 à 03:57:51  profilanswer
 

A propos de D, ça a l air sympa, surtout au niveau des syntaxes simplifiées, forward déclarations, templates, fonction delegate et anonyme, + de gestions mémoire (tab/hash), plein de bonnes choses.
 
<<compilation très rapide>> heu.. même avec -O3?
 
Mais j aime pas trop le ramasse-miettes. J ai de mauvais souvenirs de lenteur avec ça.
 
Pas de inline: c est dommage pour les applis haute perf.
 
Les contrats ça a l air sympa, bien que je ne l utiliserai que pour du debug. nécessité assertion = mauvaise conception = *BSoD*
 
Les packages me rappelent les mauvais souvenir de l ADA: attention le programme va commencer dans 5 4 3 2 1 1/2..1/4..
 
Les modules eux, les mauvais souvenirs du Java: dur de ne pas commencer un petit projet en jettant des idées en vrac dans un bloc notes. ça à l air plus cool quand même.
 
Variables initialisées par défaut: ç est pire. t a toujours besoin d une initialisation ou alors ça plante quand tu fais la démo au client. (0 est un nombre aléatoire comme les autres :) )
 
<<la definition du langage, qui, contrairement a celle de C++, est claire et lisible>> ha bon, ya une def de C++? :)
 
<<Les pointeurs ... perte de performances>> plutot bizarre.
 
tableaux: .reverse / .sort : est ce util?
 
<<que l'héritage simple.>> dommage.
 
alias: introduire des ambiguïtés de vocabulaire?
 
L'opérateur & du C++ est supprimé: dommage, pointeur != reférence != copie, tous ont avantages & inconvénients.
 
 

n°1312800
el muchach​o
Comfortably Numb
Posté le 24-02-2006 à 08:08:08  profilanswer
 

nargy a écrit :


<<compilation très rapide>> heu.. même avec -O3?


O3 ne concerne que GDC, que je n'ai pas essayé. Je parle de DMD.
Maintenant que j'ai réinstallé un Linux sur ma machine, j'essaierai GDC.

Citation :


Mais j aime pas trop le ramasse-miettes. J ai de mauvais souvenirs de lenteur avec ça.


Tu peux le désactiver si nécessaire.

Citation :


Pas de inline: c est dommage pour les applis haute perf.


Les jeux de Kenta Cho, comme Torus Trooper, peuvent donner une idée des perfs. On croirait qu'ils ont été écrits en C.

Citation :


Les contrats ça a l air sympa, bien que je ne l utiliserai que pour du debug. nécessité assertion = mauvaise conception = *BSoD*


Non, ça peut être un facteur de sécurité supplémentaire quand on crée des librairies critiques utilisées par d'autres équipes, comme en aéronautique.
Bien souvent, dans ces domaines, on fait ce genre de tests d'intégrité et de pré/post-conditions de façon assez systématique dans le code de production, quitte à sacrifier un peu les perfs. Les contrats ont l'avantage d'offrir un cadre plus élégant qu'ajouter des if ou des macros un peu partout dans le code.

Citation :


Les packages me rappelent les mauvais souvenir de l ADA: attention le programme va commencer dans 5 4 3 2 1 1/2..1/4..
 
Les modules eux, les mauvais souvenirs du Java: dur de ne pas commencer un petit projet en jettant des idées en vrac dans un bloc notes. ça à l air plus cool quand même.


Je ne vois pas ce que tu veux dire.

Citation :


Variables initialisées par défaut: ç est pire. t a toujours besoin d une initialisation ou alors ça plante quand tu fais la démo au client. (0 est un nombre aléatoire comme les autres :) )


Alors là, c'est tout bonnement faux. Il est vrai que le fait d'avoir des variables initialisées par défaut ne dispense pas le codeur de faire ce travail d'initialisation. La vraie différence est que les bugs sont facilement reproductibles et apparaissent de façon plus systématique en phase de test, parce que le comportement du programme n'est pas "aléatoire".
Les variables non initialisées sont une plaie parce qu'ils peuvent mener à des bugs très difficiles à débusquer, qui arrivent dans des conditions particulièrement tordues et rares, et ce des mois après la mise en production sur des systèmes fonctionnant 24h/24. Le débogage de ce genre de bugs peut parfois prendre des semaines.
 

Citation :

<<la definition du langage, qui, contrairement a celle de C++, est claire et lisible>> ha bon, ya une def de C++? :)


Oui. C++ est normalisé, et la norme se trouve dans l'ARM.
 

Citation :

<<Les pointeurs ... perte de performances>> plutot bizarre.


A quoi fais-tu référence ? Je penses que tu fais un raccourci que je n'ai pas fait.

Citation :

tableaux: .reverse / .sort : est ce util?


Bien sûr, surtout que ça ne coûte rien de l'ajouter.

Citation :

alias: introduire des ambiguïtés de vocabulaire?


Si tu considères que typedef le fait...

Citation :


L'opérateur & du C++ est supprimé: dommage, pointeur != reférence != copie, tous ont avantages & inconvénients.


& est complètement inutile en D. Autant le supprimer.


Message édité par el muchacho le 24-02-2006 à 08:13:08
n°1312898
BenO
Profil: Chercheur
Posté le 24-02-2006 à 11:39:28  profilanswer
 

D n'est pas une évolution du C++, et heureusement :o

n°1312962
nargy
Posté le 24-02-2006 à 13:08:53  profilanswer
 

muchacho> merci pour tes comments
 
C vrai, j avais pas voulu faire un post trop long, j ai un peu raccourci.
 
ramasse-miettes: ce serait plus normal qu on puisse l activer si necessaire. par exemple, la déclaration d un tableau statique en C se fait sans mot clé particulier, et prends 1 instruction machine. l opération new du C++ ne se fait pas en 1 seule instruction et est plus long à écrire. Si le gc était activé avec des mots clés style <<create/destroy>> ce serait sympa: la taille du source reflète la taille du code compilé. C est un détail, pourtant c est important quand tu débute dans un language pour prendre de bonne habitude.
 
Je ne discuterais pas des perfs, car je n ai pas essayé, je ne fait que des conclusion logiques.
 
En ce qui concerne la sécurité, le véritable élément de sécurité et le double-codage par deux équipes. Le reste, c est pour mettre les programmeurs dans le bain. (conclusion personnelle à la suite d un stage chez sextant avionique)
 
<<ne dispense pas le codeur de faire ce travail d'initialisation>> -> j en revient à <<de bonnes habitudes dès le départ>>.
 
Autre solution de déboggage: plutot que d attendre le bug, passer toutes les fonction pas à pas au debugger. Dans le cas contraire, prévoir une version NewTech du logiciel faite par une autre équipe, et merger les bouts de code qui marchent :D
 
Solution plus conciliante: ne pas intitialiser par défaut Sauf si le type possède une valeur par défaut dans sont typedef. (sympa, ça, non?)
 
Pour les pointeurs: dans la partie Types/ chapitre 2/ titre <<les pointeurs>> tu expliques que on utilise peu les pointeurs qui peuvent mener à une perte de perf par rapport aux autres utilisation possibles en D. A défaut d avoir des exemple concrets, je trouve ça bizarre. (pointeurs sont lents? ou reférences automatique sont plus rapides? ou références donc plus besoin de pointeurs?)
 
typedef/alias: en cours j ai appris à éviter le typedef-alias, les contre-exemples sont rares (Rech&Dev?).
 
En gros, pour résumer, D a quelques raccourcis de syntaxe qui peuvent faire prendre de mauvaises habitudes, car ne décrivant pas assez explicitement/logiquement ce qu en fait le processeur. C est ce qu on reproche en général aux langages que l on compare à C, ça vaut pour C++ (au moins dans ses premières versions).
 
PS: la norme C++ cétait une joke relatif au flou et aux évolutions. Un meilleur langage que D: <<man guru>>.
 
 
 
 

n°1312977
nraynaud
lol
Posté le 24-02-2006 à 13:28:28  profilanswer
 

nargy a écrit :

muchacho> merci pour tes comments
 
C vrai, j avais pas voulu faire un post trop long, j ai un peu raccourci.
 
ramasse-miettes: ce serait plus normal qu on puisse l activer si necessaire. par exemple, la déclaration d un tableau statique en C se fait sans mot clé particulier, et prends 1 instruction machine. l opération new du C++ ne se fait pas en 1 seule instruction et est plus long à écrire. Si le gc était activé avec des mots clés style <<create/destroy>> ce serait sympa: la taille du source reflète la taille du code compilé. C est un détail, pourtant c est important quand tu débute dans un language pour prendre de bonne habitude.
 
Je ne discuterais pas des perfs, car je n ai pas essayé, je ne fait que des conclusion logiques.
 
En ce qui concerne la sécurité, le véritable élément de sécurité et le double-codage par deux équipes. Le reste, c est pour mettre les programmeurs dans le bain. (conclusion personnelle à la suite d un stage chez sextant avionique)
 
<<ne dispense pas le codeur de faire ce travail d'initialisation>> -> j en revient à <<de bonnes habitudes dès le départ>>.
 
Autre solution de déboggage: plutot que d attendre le bug, passer toutes les fonction pas à pas au debugger. Dans le cas contraire, prévoir une version NewTech du logiciel faite par une autre équipe, et merger les bouts de code qui marchent :D
 
Solution plus conciliante: ne pas intitialiser par défaut Sauf si le type possède une valeur par défaut dans sont typedef. (sympa, ça, non?)
 
Pour les pointeurs: dans la partie Types/ chapitre 2/ titre <<les pointeurs>> tu expliques que on utilise peu les pointeurs qui peuvent mener à une perte de perf par rapport aux autres utilisation possibles en D. A défaut d avoir des exemple concrets, je trouve ça bizarre. (pointeurs sont lents? ou reférences automatique sont plus rapides? ou références donc plus besoin de pointeurs?)
 
typedef/alias: en cours j ai appris à éviter le typedef-alias, les contre-exemples sont rares (Rech&Dev?).
 
En gros, pour résumer, D a quelques raccourcis de syntaxe qui peuvent faire prendre de mauvaises habitudes, car ne décrivant pas assez explicitement/logiquement ce qu en fait le processeur. C est ce qu on reproche en général aux langages que l on compare à C, ça vaut pour C++ (au moins dans ses premières versions).
 
PS: la norme C++ cétait une joke relatif au flou et aux évolutions. Un meilleur langage que D: <<man guru>>.


 
[:bien] pas une franche rigolade, mais un petit sourire quand même ...


---------------
trainoo.com, c'est fini
n°1312985
++fab
victime du syndrome IH
Posté le 24-02-2006 à 13:35:49  profilanswer
 


Citation :

Citation :


Mais j aime pas trop le ramasse-miettes. J ai de mauvais souvenirs de lenteur avec ça.


Tu peux le désactiver si nécessaire.
 


Comment ? par le biais de pragma, d'options de compilation, autres ?
(suivant la réponse), est-ce qu'un programme prévu pour utiliser le gc peut etre utilisé sans ? (et inversement)
 
 

Citation :

Oui. C++ est normalisé, et la norme se trouve dans l'ARM ...


... à l'époque. Il y a un document ISO depuis.
 
 

n°1313000
++fab
victime du syndrome IH
Posté le 24-02-2006 à 13:45:40  profilanswer
 


Citation :

Mais j aime pas trop le ramasse-miettes. J ai de mauvais souvenirs de lenteur avec ça.


Pour donner de la sécurité vis à vis de la gestion de la mémoire, il n'y notament 2 solutions, les GC ou les pointeurs intelligents.
Les seconds ont des performances catastrophiques dans un contexte multithread. Pour plus de détail, voir les papiers sur le site de H. Boehm.
 

Citation :

Pas de inline: c est dommage pour les applis haute perf.


Les compilateurs d'aujourd'hui n'ont plus guère besoin de inline.
 

Citation :

nécessité assertion = mauvaise conception = *BSoD*


CQFD.
 

Citation :

tableaux: .reverse / .sort : est ce util?


D n'est visiblement pas dans une optique : donnons de l'expressivité au langage, et faisons le maximum d'évolution en ajoutant des bibliothèques ... Alors la réponse est peut-etre tristement oui.
 

Citation :

alias: introduire des ambiguïtés de vocabulaire?


drole de façon de le voir ... Je trouve que c'est une bonne idée, et C++ la reprendra probablement.
 
 

mood
Publicité
Posté le 24-02-2006 à 13:45:40  profilanswer
 

n°1313001
++fab
victime du syndrome IH
Posté le 24-02-2006 à 13:48:05  profilanswer
 

BenO a écrit :

D n'est pas une évolution du C++, et heureusement :o


+1, ;)

n°1313009
++fab
victime du syndrome IH
Posté le 24-02-2006 à 13:59:08  profilanswer
 

nargy a écrit :

En ce qui concerne la sécurité, le véritable élément de sécurité et le double-codage par deux équipes. Le reste, c est pour mettre les programmeurs dans le bain. (conclusion personnelle à la suite d un stage chez sextant avionique)


Et on merge le résutat ?  
 

Citation :

typedef/alias: en cours j ai appris à éviter le typedef-alias, les contre-exemples sont rares (Rech&Dev?).


Pas tant que ça. Personnellement, je les évite dans un cas : j'ai besoin de faire une déclaration anticipée -- et je ne peux pas le faire sur un typedef.
 

Citation :

PS: la norme C++ cétait une joke relatif au flou et aux évolutions. Un meilleur langage que D: <<man guru>>.


J'aime bien les histoires, et je déteste ne pas en comprendre le sel, tu peux étayer stp ? :)

n°1313043
nargy
Posté le 24-02-2006 à 14:47:52  profilanswer
 

Citation :


PS: la norme C++ cétait une joke relatif au flou et aux évolutions.


 
J ai écrit plus haut ironiquement: ha bon une definition de C++?
 
Au début du C++, les programmeurs osaient à pène appeler le C++ du <<C avec des classes>>. La norme était plutot floue, et d un compilateur à l autre il y avait des différences notables, aussi bien dans le code généré que le code source. Depuis de nombreuses évolutions ont permis de standardiser ce langage, bien qu il soit toujours en évolution. Tous les langages en passent par là, et les programmeurs qui en font les frais préfèrent ironiser.
 

Citation :


man guru


 
Tu tapes <<man guru>> dans to shell linux, si tu trouves pas essaye avec google. Il y en a d autres dans le même genre (man boss par ex.)
 
fab> Pour le ramasse miette, tu peut le désativer en surchargeant le destructeur. Perso, je préfèrerait l inverse pour satisfaire: ajouter du code <=> ajouter fonctionnalité
 
double-codage par deux équipes: Et on merge le résutat ? oui, exemple: win98+winNT=winXP :D . Pour les applis sécurité quand un des deux programmes plante l autre prends la relève.
 

n°1313044
BenO
Profil: Chercheur
Posté le 24-02-2006 à 14:50:37  profilanswer
 

le ramasse miette est une fonctionnalité de base de D..
ca me ferrait chelou de devoir activer les classes en c++ =)

n°1313057
nargy
Posté le 24-02-2006 à 15:03:22  profilanswer
 

Tu les actives en utilisant le mot-clé <<class>> au lieu de <<struct>>.

n°1313067
BenO
Profil: Chercheur
Posté le 24-02-2006 à 15:16:05  profilanswer
 

dans le même principe ^^ tu es contre le GC dans java ?

n°1313076
++fab
victime du syndrome IH
Posté le 24-02-2006 à 15:22:16  profilanswer
 

nargy a écrit :

Au début du C++, les programmeurs osaient à pène appeler le C++ du <<C avec des classes>>. La norme était plutot floue, et d un compilateur à l autre il y avait des différences notables, aussi bien dans le code généré que le code source. Depuis de nombreuses évolutions ont permis de standardiser ce langage, bien qu il soit toujours en évolution. Tous les langages en passent par là, et les programmeurs qui en font les frais préfèrent ironiser.


Disons que faut avoir un peu de bouteille pour ironiser. Du temps de L'ARM, j'étais dans les limbes, aujourd'hui, je me contente de m'extasier du résultat ( ... à venir ... ).
 

Citation :

fab> Pour le ramasse miette, tu peut le désativer en surchargeant le destructeur. Perso, je préfèrerait l inverse pour satisfaire: ajouter du code <=> ajouter fonctionnalité


ça ne me dérange pas. C'est le seul moyen ?

n°1313082
skelter
Posté le 24-02-2006 à 15:25:05  profilanswer
 

nargy a écrit :

Tu les actives en utilisant le mot-clé <<class>> au lieu de <<struct>>.


 
struct sert aussi à déclaré une classe
 
sinon c++ est multi-paradigmatique et on n'est pas obligé d'utiliser le support oo du langage


Message édité par skelter le 24-02-2006 à 15:26:26
n°1313107
nargy
Posté le 24-02-2006 à 15:45:53  profilanswer
 

fab> je vois que tu as un peu de bouteille :)
 
skelter> je la sentais venir cette remarque, struct au lieu de class, c est quand même pas propre.
 
benO> je dois répondre là? ya déjà des thèses et des thèses qui ont été écrites sur le sujet du GC.
D après mon expérience personnelle, j évite d utiliser le GC, donc j évite Java. Si quelq un me prouve que GC a de meilleures perfs, je veux bien changer d avis. Idem si quelq un me démontre mathématiquement que les programmes avec alloc. dynamique ont une probabilité de bug supérieure à GC.
 

n°1313108
nraynaud
lol
Posté le 24-02-2006 à 15:48:07  profilanswer
 

nargy a écrit :


benO> je dois répondre là? ya déjà des thèses et des thèses qui ont été écrites sur le sujet du GC.
D après mon expérience personnelle, j évite d utiliser le GC, donc j évite Java. Si quelq un me prouve que GC a de meilleures perfs, je veux bien changer d avis. Idem si quelq un me démontre mathématiquement que les programmes avec alloc. dynamique ont une probabilité de bug supérieure à GC.


ben il suffit de les lires les thèses que tu cites [:el g]


---------------
trainoo.com, c'est fini
n°1313109
nraynaud
lol
Posté le 24-02-2006 à 15:48:39  profilanswer
 

nargy a écrit :


benO> je dois répondre là? ya déjà des thèses et des thèses qui ont été écrites sur le sujet du GC.
D après mon expérience personnelle, j évite d utiliser le GC, donc j évite Java. Si quelq un me prouve que GC a de meilleures perfs, je veux bien changer d avis. Idem si quelq un me démontre mathématiquement que les programmes avec alloc. dynamique ont une probabilité de bug supérieure à GC.


ben il suffit de les lires les thèses que tu cites [:el g]


---------------
trainoo.com, c'est fini
n°1313110
chrisbk
-
Posté le 24-02-2006 à 15:49:32  profilanswer
 

nargy a écrit :

Si quelq un me prouve que GC a de meilleures perfs, je veux bien changer d avis.


 
Que ? par rapport a quoi ? Un GC aura tjs de moins bonne perf (vitesse) face un langage sans GC pour la bete raison qu'il fait du boulot que l'autre ne fait pas
 
par contre quand t'as une appli qui tourne en continu t'as interet a bien assurer tes desalloc, paske un leaks ca devient vite problématique, sans GC [:el g]

n°1313113
++fab
victime du syndrome IH
Posté le 24-02-2006 à 15:54:27  profilanswer
 

nargy a écrit :

fab> je vois que tu as un peu de bouteille :)


Non :)
 

Citation :

Je la sentais venir cette remarque, struct au lieu de class, c est quand même pas propre.


Aux spécificateurs d'accès près, c'est identique. Pour en revenir au sujet qui provoque cette digression, une façon d'"activer" les classes C++, c'est de les rendre non POD, d'une manière ou d'une autre.
 

Citation :

Si quelq un me prouve que GC a de meilleures perfs, je veux bien changer d avis. Idem si quelq un me démontre mathématiquement que les programmes avec alloc. dynamique ont une probabilité de bug supérieure à GC.


H. Boehm et les papiers qui trainent sur son site devrait pouvoir te convaincre du contraire -- dans certaines situations.


Message édité par ++fab le 24-02-2006 à 16:17:16
n°1313114
BenO
Profil: Chercheur
Posté le 24-02-2006 à 15:56:18  profilanswer
 

nargy : ton opinion sur le GC est louable.
 
Mais ta volonté à modifier un lang pour le faire coller à ta vision
du monde est incompréhensible ^^
 
D et Java, ont été concu avec une GC par défaut par leurs auteurs respectifs, et vouloir les voir sans cet attrribut est aussi inapproprié
que de vouloir voir le c++ avec une GC par défaut xD
( quoique ^^ sur ce point, c'est discuté :> )
 
Nous programmeurs, avons un ensemble de languages à notre disposition
et devons nous demerder avec ^^
 
Même si j'étais convaincu que les GC étaient inutiles, j'irais pas proposer
qu'on l'enlève de Java..
 
Je respecte ton avis , je comprend ton point de vue sur les GC,  
mais je ne suis pas d'accord avec le fait d'appliquer notre point de vue n'importe ou xD
 
Si on t'écoutait, Il n'y aurait de GC nulpart :p et on ne laisserait
pas la chance à cette techno/concept d'exprimer tout son potentiel.
 
que penses tu de http://www.digitalmars.com/d/garbage.html ? :o


Message édité par BenO le 24-02-2006 à 15:57:33
n°1313116
nraynaud
lol
Posté le 24-02-2006 à 15:57:47  profilanswer
 

rien que l'allocation, un first-fit ou un best-fit contre un eden space, c'est vite vu.


---------------
trainoo.com, c'est fini
n°1313147
push
/dev/random
Posté le 24-02-2006 à 16:57:10  profilanswer
 

nraynaud a écrit :

rien que l'allocation, un first-fit ou un best-fit contre un eden space, c'est vite vu.


surveuille un peu ton langage stp


Message édité par push le 24-02-2006 à 16:57:20
n°1313148
nargy
Posté le 24-02-2006 à 16:57:31  profilanswer
 

Citation :


Si on t'écoutait, Il n'y aurait de GC nulpart :p et on ne laisserait
pas la chance à cette techno/concept d'exprimer tout son potentiel.  


 
Non, si on me lisais seulement, on prendrait en considération que j ai proposé de créer des mots-clés spécifiques pour allocation GC: create et destroy.
 
Pour moi, il ne s agit pas de mettre en conflit les méthodes de gestion mémoire, simplement d avoir le choix, et si possible un choix cohérent avec:
plus de code source <=> (équivaut) plus de fonctionnalité <=> (équivaut) plus de code machine
(Note: je n ai pas dit qu il faut recoder la gestion GC à chaque programme, ni l allocation dynamique, d accord pour la simplification syntaxique)
 
GC est un progès indéniable en matière de simplifcation de code source. Mais c est aussi une opération coûteuse en temps machine. Aussi, une solution de compromis est nécessaire. L important, c est d avoir le choix pour pouvoir utiliser la bonne méthode au bon moment.
 

Citation :


H. Boehm et les papiers qui trainent sur son site devrait pouvoir te convaincre du contraire -- dans certaines situations.


 
(certaines situations = aucune allocation croisée) => eden space
 

n°1313159
masklinn
í dag viðrar vel til loftárása
Posté le 24-02-2006 à 17:15:59  profilanswer
 

nargy a écrit :

Citation :


Si on t'écoutait, Il n'y aurait de GC nulpart :p et on ne laisserait
pas la chance à cette techno/concept d'exprimer tout son potentiel.  


 
Non, si on me lisais seulement, on prendrait en considération que j ai proposé de créer des mots-clés spécifiques pour allocation GC: create et destroy.


J'vois pas où est l'intérêt, si tu veux un GC tu utilises un langage garbage-collecté, si t'en veux pas tu utilises un langage non garbage collecté, terminé

nargy a écrit :

Pour moi, il ne s agit pas de mettre en conflit les méthodes de gestion mémoire, simplement d avoir le choix, et si possible un choix cohérent avec:
plus de code source <=> (équivaut) plus de fonctionnalité <=> (équivaut) plus de code machine


Ca n'a rien de cohérent, d'habitude c'est même l'inverse, moins on a de code source (langages fonctionnels/très haut niveau) plus le langage est expressif et a de fonctionalités, et ces constantes inverses sont grandement indépendantes du montant de code machine généré derrière [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1313161
nraynaud
lol
Posté le 24-02-2006 à 17:21:04  profilanswer
 

par contre, il manque des trucs dans les debuggers par rapport au GCs, pour suivre les chaines de pointeurs entre les roots et les objets dont on pense qu'il devraient être détruits.


---------------
trainoo.com, c'est fini
n°1313211
++fab
victime du syndrome IH
Posté le 24-02-2006 à 19:29:34  profilanswer
 

masklinn a écrit :

J'vois pas où est l'intérêt, si tu veux un GC tu utilises un langage garbage-collecté, si t'en veux pas tu utilises un langage non garbage collecté, terminé


Avoir besoin d'un GC pour certains objets au sein d'une application, pouvoir basculer le tout en utilisant un GC sauf pour certains objets, etc, ce sont des besoins qui existent. le WG21 prends en compte ces besoins.  
 

n°1313247
nraynaud
lol
Posté le 24-02-2006 à 20:19:51  profilanswer
 

et tu ferais quoi des objets sans GC ??
 
pour quel use-case veux-tu virer le GC ?

n°1313272
masklinn
í dag viðrar vel til loftárása
Posté le 24-02-2006 à 20:42:55  profilanswer
 

nraynaud a écrit :

et tu ferais quoi des objets sans GC ??


Il les manipulerait probablement manuellement (au risque de tout faire pêter, mais c'est un risque de la manipulation manuelle dans tous les cas) à coup de malloc ou new [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1313273
++fab
victime du syndrome IH
Posté le 24-02-2006 à 20:43:27  profilanswer
 

nraynaud a écrit :

et tu ferais quoi des objets sans GC ??


 
Je les détruit à la main avec delete ( suivant les pragma/autres ), possiblement de la meme manière qu'un objet garbage collecté -- pour lequel le delete est ignoré. Voir tout les proposals sur les GC ici : http://www.open-std.org/jtc1/sc22/ [...] pers/2005/ (et antérieur à 2005)
C'est pas facile à suivre parce que certaines propositions en évincent d'autres, mais on voit les idées.
 

Citation :

pour quel use-case veux-tu virer le GC ?


- je suis dans un contexte non multithread, et pour des raisons de perfs, je préfère utiliser un pointeur intelligent. (éventuellement Juste pour les objets qui représente le goulet d'étranglement)
- j'ai des contraintes fortes d'occupation mémoire, je dois pouvoir garantir à quel moment seront libérer mes objets, et je n'ai pas besoin d'avoir une allocation rapide.
- ... (probablement énormément de situations que je ne connais pas)


Message édité par ++fab le 24-02-2006 à 20:44:42
n°1313279
nraynaud
lol
Posté le 24-02-2006 à 20:49:39  profilanswer
 

1) mais un GC est au moins aussi rapide qu'un pointeur intelligent, ne serais-ce que parce que l'affectation ne nécessite pas d'accès au référé.
 
2) tu peux utiliser un GC exact si tu veux troquer de la perf contre de la mémoire.
 
comment gères-tu un GC avec du non-GC ? l'intégrité de ta mémoire n'est plus garantie.

n°1313284
++fab
victime du syndrome IH
Posté le 24-02-2006 à 21:06:48  profilanswer
 

nraynaud a écrit :

1) mais un GC est au moins aussi rapide qu'un pointeur intelligent, ne serais-ce que parce que l'affectation ne nécessite pas d'accès au référé.


D'apres les tests de h. boehm pour son GC, un pointeur intelligent type shared_ptr, sans controle de référence circulaire, serait "globalement" plus efficace dans un contexte monothread que son GC.
 

Citation :

2) tu peux utiliser un GC exact si tu veux troquer de la perf contre de la mémoire.


Je ne connais pas. Mais je doute que ça rende la libération d'un objet prévisible, si ? Et accessoirement, il faut pouvoir en disposer d'un. En existe t'il un pour C++? est-ce que boehm est configurable pour ça ?
 

Citation :

comment gères-tu un GC avec du non-GC ? l'intégrité de ta mémoire n'est plus garantie.


Je ne connais pas les détails de l'implémentation, mais apparemment ça fonctionne bien.

n°1313290
nraynaud
lol
Posté le 24-02-2006 à 21:19:26  profilanswer
 

++fab a écrit :

D'apres les tests de h. boehm pour son GC, un pointeur intelligent type shared_ptr, sans controle de référence circulaire, serait "globalement" plus efficace dans un contexte monothread que son GC.
 

Citation :

2) tu peux utiliser un GC exact si tu veux troquer de la perf contre de la mémoire.


Je ne connais pas. Mais je doute que ça rende la libération d'un objet prévisible, si ? Et accessoirement, il faut pouvoir en disposer d'un. En existe t'il un pour C++? est-ce que boehm est configurable pour ça ?
 

Citation :

comment gères-tu un GC avec du non-GC ? l'intégrité de ta mémoire n'est plus garantie.


Je ne connais pas les détails de l'implémentation, mais apparemment ça fonctionne bien.


1) son GC est la technomogie la plus mauvaise qui existe (c'est pas de sa faute, il a pas le choix), les GCs conservatifs. Un GC normal est bien plus efficace (en fait c'est toujours plus effice un Gc en environnement sûr : comme c'est un assemblage de techniques, quand ton contradicteur commence à te chauffer, tu changes les réglages vers la technique qui donne le mieux pour un problème donné et en voiture Gertrude).
 
2) exact, ça veut dire "exactement au moment où c'est plus nécessaire", exactement lors de la destruction de le dernière référence depuis une racine. Donc c'est plus où moins prévisible, en moyenne, ça arrive avant un destructeur explicite. Et si ça produit pas avant l'endroit où tu pensais que ça arriverait, ben c'est que t'as encore une référence sur l'objet et que t'aurais fait une connerie avec un destructeur.
 
3) bah t'a intérêt à t'y intéresser, parce que ça sert à rien d'avoir un GC avec un trou dans le graphe des objets, il te sauvera pas la mise.

n°1313294
masklinn
í dag viðrar vel til loftárása
Posté le 24-02-2006 à 21:28:25  profilanswer
 

Je constate quand même que malgré le fait que le troll la discussion lancée sur les GC par nargy concerne initialement les performances avec/sans GC, personne n'a encore fait remarquer que quasiment tous les langages fonctionnels sont implémentés avec un GC, et que pourtant certains sont plus rapides que le C/C++ (notablement certaines implémentations de Common Lisp, légèrement plus lentes en moyenne mais plus rapides sur certains champs spécifiques comme la manip' de listes, et surtout Standard ML avec le compilo MLTon qui a la caractéristique de switcher dynamiquement entre 3 stratégies de CG et 4 de Copying Collector au runtime, en fonction du mode le plus efficace sur les données courantes)
 
sinon, il me semble bien que Modula-3 gérait à la fois le GC et la gestion manuelle, mais il utilisait deux heaps séparées (une pour le GC et une pour l'alloc' manuelle) et je ne sais pas du tout comment étaient gérée les références entre les deux heaps (genre un objet alloué manuellement qui référence un objet garbage collecté et qu'on oublié de dégager [:petrus75])


Message édité par masklinn le 24-02-2006 à 21:31:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1313308
el muchach​o
Comfortably Numb
Posté le 24-02-2006 à 21:59:43  profilanswer
 

++fab a écrit :

Boost.Spirit n'est pourtant pas anachronique ;)


Effectivement, je m'étais un peu avancé. Il est vrai que le templates de C++ sont censés être Turing-complets et qu'ils doivent donc en principe permettre tout type de programme. M'enfin je n'ose pas imaginer la gueule du code derrière Spirit. D'ailleurs il y a du monde pour le codage...
 

nargy a écrit :

muchacho> merci pour tes comments


Je t'en prie.  :)
 

Citation :

ramasse-miettes: ce serait plus normal qu on puisse l activer si necessaire. par exemple, la déclaration d un tableau statique en C se fait sans mot clé particulier, et prends 1 instruction machine. l opération new du C++ ne se fait pas en 1 seule instruction et est plus long à écrire. Si le gc était activé avec des mots clés style <<create/destroy>> ce serait sympa: la taille du source reflète la taille du code compilé. C est un détail, pourtant c est important quand tu débute dans un language pour prendre de bonne habitude.


Sauf que d'un coté tu parles d'allocation statique et de l'autre d'alloc dynamique. En C, malloc prend bcp plus d'une instruction machine, et je ne parle pas de calloc, "équivalent" des déclarations de tableaux en D.
 

Citation :

En ce qui concerne la sécurité, le véritable élément de sécurité et le double-codage par deux équipes. Le reste, c est pour mettre les programmeurs dans le bain. (conclusion personnelle à la suite d un stage chez sextant avionique)


Le double-codage coûte plus de 2x plus cher et n'existe pratiquement que dans l'avionique à ma connaissance car bien peu d'industries peuvent se permettre de doubler les coûts de dev pour s'assurer un petit delta supplémentaire de sécurité. Je ne suis même pas sûr que ce soit pratiqué dans le contrôle nucléaire, ni même dans le contrôle aérien. Et il me semble que Sextant a à son passif l'explosion d'Ariane 5, donc c'est un peu normal qu'ils aient renforcé la sécurité. Bref, c'est une pratique très exceptionnelle. Par contre, la programmation par contrats, sans être une pratique extrêmement répandue, est parfois utiisée dans l'industrie. L'idée étant que quand tu livres ton bout de code, il soit à peu près blindé contre toutes les conneries que peuvent faire les utilisateurs.
 

Citation :

<<ne dispense pas le codeur de faire ce travail d'initialisation>> -> j en revient à <<de bonnes habitudes dès le départ>>.


Les bonnes habitudes, c'est une chose, mais l'erreur est humaine, et aucun programmeur ne peut se targuer de ne jamais en faire.  
 

Citation :

Autre solution de déboggage: plutot que d attendre le bug, passer toutes les fonction pas à pas au debugger. Dans le cas contraire, prévoir une version NewTech du logiciel faite par une autre équipe, et merger les bouts de code qui marchent :D
 
Solution plus conciliante: ne pas intitialiser par défaut Sauf si le type possède une valeur par défaut dans sont typedef. (sympa, ça, non?)


C'est strictement impossible la plupart du temps. Ne serait-ce qu'essayer de passer dans plus de 80% des branchements, c'est déjà bien souvent prohibitif pour un programme modérément complexe (et je parle d'expérience). Quand tu as atteint ce taux de couverture, tu as déjà mieux testé ton code que 95% du code de production pondu quotidiennement dans le monde entier. Là encore, il n'y a guère qu'en avionique qu'on exige 100% de couverture des branchements possibles.
 
A mon avis, l'initialisation de données doit compter pour 1% du temps machine pour une appli standrd avec un taux d'utilisation CPU non négligeable. Les quelques boucles et tableaux à optimiser peuvent se passer d'initialisation, mais pour la grande majorité du code, ça ne va strictement rien changer aux perfs.
 

Citation :

Pour les pointeurs: dans la partie Types/ chapitre 2/ titre <<les pointeurs>> tu expliques que on utilise peu les pointeurs qui peuvent mener à une perte de perf par rapport aux autres utilisation possibles en D. A défaut d avoir des exemple concrets, je trouve ça bizarre. (pointeurs sont lents? ou reférences automatique sont plus rapides? ou références donc plus besoin de pointeurs?)


Relis-ma phrase, tu l'as comprise à l'envers. J'ai écrit "D supporte les pointeurs de la même manière que C++, mais le langage allant dans le sens de la simplification, il offre des facilités qui font qu'en pratique, on s'en sert relativement peu sans risque de perte de performances."
Je dis donc que malgré le fait qu'on se serve peu des pointeurs, il n'y a pas de pertes de perfs. Ce qui implique que les pointeurs sont un moyen de programmation performant.
 

Citation :

typedef/alias: en cours j ai appris à éviter le typedef-alias, les contre-exemples sont rares (Rech&Dev?).


Ce sont des mots-clés qui servent à la compatibilité avec du code dont on n'a pas forcément la maîtrise. Ce n'est pas là pour être élégant, c'est juste parfois nécessaire.
 

Citation :

En gros, pour résumer, D a quelques raccourcis de syntaxe qui peuvent faire prendre de mauvaises habitudes, car ne décrivant pas assez explicitement/logiquement ce qu en fait le processeur. C est ce qu on reproche en général aux langages que l on compare à C, ça vaut pour C++ (au moins dans ses premières versions).


Comme tous les langages, c'est un compromis. A chacun de faire son choix.
Je n'entrerai pas dans le débat pour/contre les GC, on sait que c'est stérile. Je me bornerai simplement à dire que l'auteur de D, Walter Brght, connait parfaitement les implications de son choix sur le design de son langage, et qu'il n'est pas vraiment un petit nouveau dans le monde de la compilation, étant aussi l'auteur de plusieurs compilateurs C++, dont l'un des meilleurs parmis les premiers compilos C++, à savoir Zortech C++, puis de celui de Symantec (qui a longtemps été le seul pour Mac).


Message édité par el muchacho le 24-02-2006 à 22:18:52
n°1400148
el muchach​o
Comfortably Numb
Posté le 04-07-2006 à 12:49:00  profilanswer
 

eupe ni vu ni connu avec une bonne page sur les templates: http://www.digitalmars.com/d/templates-revisited.html


Message édité par el muchacho le 04-07-2006 à 12:51:43
n°1477865
el muchach​o
Comfortably Numb
Posté le 18-11-2006 à 20:16:59  profilanswer
 

Le langage va tout doucement vers sa version 1.0.
Walter Bright le fait évoluer à toute vitesse, c'est impressionnant.
Il intègre désormais, entre autres:
- des tuples sous forme de templates
- l'évaluation paresseuse avec le mot-clé lazy
- la RAII et les scopeguards avec le mot-clé scope. Les scopeguards sont une manière alternative de traiter les erreurs inventée par A. Alexandrescu.
 
A titre utile, lorsque le GC se révèle lent:

Citation :

Mike Parker wrote:
> I haven't used D extensively enough to know what "coding to the GC" means for the current implementations, but developers who do understand it should be able to avoid the lion's share of issues.
 
FWIW, the worst I've run into with the D GC was by aggressive use of opCat (opérateur de concaténation ~):
 
uint[] arr;
for(uint i=0; i<65535; i++){
  arr ~= i;
}
 
Code like this was causing a good amount of memory to be allocated, and then subsequently abandoned - a very small fraction of the heap was actually in use.  After I had some help with the guys out on #D to try and track this down, we found that the internal array allocator that was the culprit.
 
The "heap bloat" was easily circumvented with a struct that pretends to be an array, and uses a more conservative re-allocation algorithm by way of using a less conservative *pre*-allocation algorithm.  It wasn't rocket-science or anything - anyone who understands what CoW (copy-on-write) means could hardly call it surprising.
 
So in short: In my experience, GC issues in D aren't uncommon, but then "coding to the GC" is pretty easy to do with some very rudimentary analysis.  IMO, wise use of smart datatypes, scope() and delete pretty much cover the rest of the places where the GC is too lazy/slow/dumb to do the job. :)
 
--  
- EricAnderton at yahoo


Message édité par el muchacho le 22-11-2006 à 23:28:29

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1479962
BenO
Profil: Chercheur
Posté le 22-11-2006 à 15:16:36  profilanswer
 

ca fait longtemps que j'ai pas regardé du côté de D.
 
existe-t-il des IDEs performants actuellement?


Message édité par BenO le 22-11-2006 à 15:17:09
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8  9  10

Aller à :
Ajouter une réponse
 

Sujets relatifs
Upload en JAVA[Java] Architecture pipes-filters
[java] Tracer un rectangle en temps réel[Java] Aide sur projet avec interface graphique ( Pas des fenêtres)
[JAVA] Empecher la saisie dans une jtableimpossible d'éxécuter un programme en java !!!
programmation jeux java sur samsung Z300Envoyer des fichiers sur un FTP depuis un programme Java...
[java] Agrandir le contenu d'une tab en même temps que la tab[Java] Les hint
Plus de sujets relatifs à : [Langage D]C++ + Java + Python = D


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