Kevin Kofler
:Pollux
: Mon post était surtout pour répondre au post de Kevin qui disait qu'il n'aimait pas le fait que GCC deprecate des trucs (et/ou les enlève)... Pour l'exemple des multi-line string literals (dont il s'est plaint des dizaines de fois),
Pas seulement moi! Pas mal d'utilisateurs de TIGCC aussi, et des commentaires sur Slashdot aussi (à chaque newsitem parlant de GCC!).
Oué, enfin les commentaires de Slashdot, c'est pas forcément une référence en terme de pertinence
je pense que les mainteneurs de GCC avaient raison.
Et il y a pas mal d'extensions un peu "expérimentales" et bancales qui doivent être dans le même cas. Celle dont tu parles n'est pas dans ce cas-là, puisqu'elle a le mérite d'avoir une sémantique très claire...Et les chaînes de caractères multi-lignes, elles n'ont pas une sémantique très claire???
Non, justement. Sous Win32, par exemple, un retour à la ligne doit être traduit par un \r\n ou par un \n ? Si j'utilise des routines spécifiques à Win32, je vais vouloir le premier choix, et si j'utilise des routines de la libc, ce sera plutôt le deuxième. Malheureusement, le compilo ne peut pas deviner à ma place...
Et il y a aussi les pbs de parsing que ça pose (non pas au niveau du compilo, où c'est une véritable trivialité, mais au niveau d'outils de recherche/manipulation/formattage)
La taille et la vitesse du compilateur ne sont pas ce qu'il y a de plus important... La taille et la vitesse du code produit sont beaucoup plus importants.Je parlais du code du compilo...* ça accroît la taille du code
dans ce cas la, ca la decroit, et de bcp si tu log massivement.
le seul truc que ca accroit, c'est eventuellement la taille de l'exe, et de facon negligeable. au final, ca fait plus chier le programmeur qu'autre chose... genial non?
Absolument. Mais les multi-line strings n'y changent strictement rien... (j'aurais même tendance à penser que ça l'affecte de manière négative, puisque si je l'utilise dans un contexte où le whitespace n'importe pas (qui est à peu près le seul contexte raisonnable où je peux l'utiliser), je vais rajouter des indentations et des newlines que je n'aurais pas eu en concaténant bêtement les chaînes).
si la feature est utile est tres utilisee (comme c'est le cas la), mieux vaut ne pas la supprimer ni la casser du tout...vi... mais ce n'est pas le cas des multi-line string literals, par exemple.Hein???
Cette extension était (et est toujours dans le cas de TIGCC) utilisée dans des centaines de sources! Même le noyau Linux les utilisait dans tous les sens!
<troll> Cette feature est d'autant plus néfaste qu'elle est utilisée
</troll>
Plus sérieusement, je n'ai aucune idée de l'ampleur du travail de conversion, donc je ne peux pas me prononcer : mais je soupçonne que s'ils l'ont fait, ça n'était pas si grave que ça.
Pollux :Il suffit de savoir qu'il ne faut pas indenter à l'intérieur de la chaîne (normal, c'est une chaîne de caractères, donc le whitespace est significatif).
Non, c'estprintf("truc machin bidule marmotte\n");qui est bien plus gore (pbs avec l'indentation
Bravo, tu viens de souligner l'un des problèmes clé : c'est carrément _incompatible_ avec un formatage lisible de la source !!! (ou alors le whitespace n'importe pas dans la chaîne produite, et alors ça encourage à faire un binaire avec des caractères inutiles : je pense que cet argument te convaincra, même si personnellement j'aurais un peu tendance à m'en taper puisque le gâchis sera négligeable : le pb est surtout dans les cas où le whitespace compte)
Ca signifie aussi qu'un éditeur ne peut pas se charger automatiquement de l'indentation pour ces endroits-là sans risquer de changer la sémantique du programme : je trouve ça plutôt flippant...
et les retours à la ligne qui dépendent de la plateforme,
On utilise les retours à la ligne de la plateforme sur laquelle on travaille. C'est bon dans pratiquement tous les cas. (Surtout parce que des trucs comme printf acceptent à la fois \n et \r\n sans problèmes normalement.)
Ca m'étonnerait énormément que \r\n soit tjs accepté en remplacement de \n... Et pour un prog qui n'utilise que l'API portable, ça impliquerait qu'il se mettrait à foirer sous Win32
on ne peut pas déterminer si on est dans une chaîne sans avoir lu tout le fichier depuis le début,
Et alors? On ne peut pas non plus déterminer si on est dans un commentaire /**/ sans avoir lu tout le fichier depuis le début (ou depuis le dernier */ dans certains cas).
Oui, mais déterminer si on est dans un commentaire n'est pas forcément indispensable... Par exemple on peut avoir envie de faire grep -i '^([^"]*"(\[^\"]*\[^\"]*)*")[^"]*"(\[^\"]*\[^\"]*)*marmotte' pour avoir la liste de tous les fichiers contenant potentiellement la chaîne de caractères "marmotte", en étant certain de ne pas en rater...
J'ajouterais aussi que le statut d'un commentaire n'est pas tellement différent de celui d'une directive de compilation conditionnelle, donc à moins d'implémenter un test de satisfaisabilité d'une clause (problème NP-complet, hein
), il est impossible de savoir si un bout de code peut potentiellement être parsé par le compilateur ou s'il est mort... (et il m'arrive souvent d'utiliser des #if 0 avec du code syntaxiquement invalide, même si c'est peut-être Mal...)
Hein???
Tu es tout aussi arrogant que les mainteneurs de GCC. Ça promet pour ton compilateur...
(ou presque)


