Le C et le C de C++ doivent-ils rester compatibles ? - C++ - Programmation
Marsh Posté le 02-12-2002 à 22:31:20
Lectures à propos:
Incompatibilities Between ISO C and ISO C++
The C/C++ Programming Language
Sibling Rivalry: C and C++ (par Bjarne)
C and C++: Siblings (par Bjarne)
C and C++: Wedding Bells?
Désolé, c'est tout en anglais.
Oui, car...
-La communauté de programmeurs est alors plus grande.
-Du code C peut (souvent) être réutilisé en C++.
-Du code peut être compatible C et C++.
-Le passage de C à C++ peut se faire en douceur.
Non, car...
-Cela impose à chaque langage des contraintes issues de l'autre, gênant l'évolution.
-C et C++ ne sont pas les mêmes langages, ils ont une philosophie différente.
-Il semble que dans les faits, il y a deux communautés ayant tendance à s'ignorer.
-Il restera toujours des ambigüités d'interprétation.
Considérant l'ensemble, je n'arrive pas à me décider.
Cette compatibilité à amené des défauts dans C++, et si C++ n'est plus compatible C, alors autant rompre complètement et le changer en profondeur.
Mais une rupture impliquerait des sacrifices sur les outils de développement communs, et amènerait une scission irréversible.
Des avis ?
Marsh Posté le 02-12-2002 à 23:02:54
Je repons non car je pense qu'il ne suffit de pas grand chose pour corriger les défauts les plus génants du C++, mais qu'il n'est pas possible de garder la compatibilité avec le C de cette façon. Et de toute façon, les programmes en C doivent déjà être réécris en C++ pour en profiter. Sinon quel intéret y a-t-il à utiliser un compilo C++ à la place d'un compilo C vu qu'il est déjà possible de lier du code C avec du code C++.
Sinon, quelques trucs que je changerais en C++ :
- opérateur = interdit la ou un "boolean" est attendu ( if/while/for ... )
- tous les opérateurs d'affectation sauf = retournent void ( cela inclus ++,++,--,-- et les +=,-= etc... )
- pas de cast à la C, seul subsistent les nouveaux cast C++.
- Suppréssion de l'opérateur -> au profit de l'opérateur . Ca doit être possible et cela permettra de simplifier la syntaxe.
Eventuellement, pas de void * mais ça aussi ça pourrais poser quelques problèmes.
Je serais même plus radical en disant que seul static_cast et dynamic_cast sont autorisés mais je me ferais pas beaucoup d'amis comme ça
Marsh Posté le 02-12-2002 à 23:06:57
les codes ne sont déjà plus compatible: le C++ supporte le C89/90 alors que C99 est sortit.
le plus flaggrant: les tableaux a taille variables. c'étati une nécessité pour le C, le C++ n'en a que faire puisqu'il vaut mieux utiliser les std::vector
Marsh Posté le 02-12-2002 à 23:12:04
tres bons liens musaran.
si vous ne comprenez pas ces articles, pas la peine de voter.
d'ailleurs pour moi la question ne se pose pas: 2 langages différents qui ne visent pas le meme type d'application et d'utilisation.
mais je sens que ca va partir en troll
Marsh Posté le 02-12-2002 à 23:21:59
L'inconvénient de la séparation du C et du C++ que je vois (parce qu'il me concerne un peu) c'est pour les autres langanges.
Je m'explique : que vous preniez python, perl, ou ruby, tous ont la possibilité d'être étendu par une interface relativement simple en C.
Tant que C et C++ sont compatibles, cela ne pose aucun problème, il suffit de déclarer en extern "C" {...} les fonctions a exporter. Ces fonctions sont ensuite récupérée par l'interpreteur du langage qui peut les appeler pour initialiser ses structures.
Maintenant imaginons une séparation nette entre C et C++. Je fais comment ? J'impose l'écriture des extensions dans le langage qui me plait, ou je fais 2 interfaces différentes, sachant que quand je dois charger un .so je ne sais pas d'ou il vient, je connais juste le symbole a repérer ?
Bref mon avis qui n'engage que moi (cad une personne qui ne fait pas de C++) : foutez leur la paix !
Marsh Posté le 03-12-2002 à 02:04:44
la reponse c'est simplement NON
parceque un jour ou l'autre en C++ y'a toujours besoin d'une lib ecrite en C
pour "ameliorer" le C++ il faudrait deja virer tous les compilos de merde qui trainent (genre MS visual C-- , ca ferait du nettoyage...
ha oui, le truc qui me vient a l'esprit c'est des erreurs comprehensibles quand on utilise les templates (enfin ca c'est le pb du compilo, pas du language)
Marsh Posté le 03-12-2002 à 08:47:49
tanguy a écrit a écrit : la reponse c'est simplement NON parceque un jour ou l'autre en C++ y'a toujours besoin d'une lib ecrite en C |
ben la réponse est plutot OUI alors, non ?
Marsh Posté le 03-12-2002 à 09:34:43
Kristoph a écrit a écrit : - Suppréssion de l'opérateur -> au profit de l'opérateur . Ca doit être possible et cela permettra de simplifier la syntaxe. |
c'est vrai que "->" c'est horrible (à taper et à lire)
c'est comme le ^. du Pascal... sauf qu'en Pascal si tu mets . au lieu de ^. en général ça passe (du moins sous Delphi).
Marsh Posté le 04-12-2002 à 03:45:55
Kristoph a écrit a écrit : Sinon, quelques trucs que je changerais en C++ : - opérateur = interdit la ou un "boolean" est attendu ( if/while/for ... ) - tous les opérateurs d'affectation sauf = retournent void ( cela inclus ++,++,--,-- et les +=,-= etc... ) |
Il ne faut pas restreindre le langage.
Par contre, c'est très bien d'avoir un environnement qui émette de grosses alertes.
Citation : - pas de cast à la C, seul subsistent les nouveaux cast C++. |
Bjarne lui-même en parles, mais ils doivent rester principalement par compatibilité.
Citation : - Suppréssion de l'opérateur -> au profit de l'opérateur . Ca doit être possible et cela permettra de simplifier la syntaxe. |
Impossible. Il faut pouvoir faire la différence:
Code :
|
Taz@PPC a écrit a écrit : les codes ne sont déjà plus compatible: le C++ supporte le C89/90 alors que C99 est sortit. |
Ce sera très probablement rattrapé avec la nouvelle norme du C++ qui arrive.
A noter qu'on pourrait imaginer une incompatibilité de code source, mais gardant une compatibilité d'édition de liens.
Marsh Posté le 04-12-2002 à 07:37:34
tanguy a écrit a écrit : la reponse c'est simplement NON parceque un jour ou l'autre en C++ y'a toujours besoin d'une lib ecrite en C pour "ameliorer" le C++ il faudrait deja virer tous les compilos de merde qui trainent (genre MS visual C-- ![]() ha oui, le truc qui me vient a l'esprit c'est des erreurs comprehensibles quand on utilise les templates (enfin ca c'est le pb du compilo, pas du language) |
Il y a quand même un problème inhérent au langage, c'est la complexité de sa grammaire. C'est d'ailleurs pour ça qu'il n'y a à l'heure actuelle aucun compilateur c++ complet.
Celle du C++ est nettement plus simple, dans sa spécification et son implémentation.
Marsh Posté le 04-12-2002 à 23:32:09
Kriscool a écrit a écrit : Il y a quand même un problème inhérent au langage, c'est la complexité de sa grammaire. C'est d'ailleurs pour ça qu'il n'y a à l'heure actuelle aucun compilateur c++ complet. Celle du C est nettement plus simple, dans sa spécification et son implémentation. |
faut croire que la syntaxe est pas encore assez complique :
http://developers.slashdot.org/art [...] ad&tid=156
"the first C++ compiler that can actually handle the whole language"
et gcc en dehors de export je vois pas trop ce qui manque par rapport au standard
Si on enleve tout les trucs un peu complique de C++, ca va donner quoi ? Java ?
- pas de const
- pas de pointeur
- pas d'heritage multiple
- pas de surcharge des operateurs
- pas de template
...
Marsh Posté le 07-12-2002 à 02:03:40
Quand je parle de "rester compatible", il ne s'agit pas de faire régresser C++ au niveau du C, ou de greffer au C toutes les fonctions de C++.
Il s'agit simplement de garder synchonisés le C et le sous-ensemble C de C++.
Et ça n'est pas une mince affaire, vu que leur philosophies sont bel et bien différentes.
Les compilateurs complets existent (Comeau).
Il suffit d'aller les chercher, si on en a l'utilité...
oui: 6
non: 6
Vous le faites exprès pour ne pas m'aider à me décider ?
Marsh Posté le 07-12-2002 à 05:28:48
ReplyMarsh Posté le 07-12-2002 à 17:38:40
Musaran a écrit : Il ne faut pas restreindre le langage. |
En fait, en quoi la suppression de ces "options" restreint le langage ? C'est simplement pour interdire les trucs du genre :
- if (a=0)
- a = b+= (--a)
Je te met au defi de me trouver une situation ou c'est vraiment profitable
Citation : - Suppréssion de l'opérateur -> au profit de l'opérateur . Ca doit être possible et cela permettra de simplifier la syntaxe. |
Impossible. Il faut pouvoir faire la différence:
Code :
|
[/quote]
Pointeur amélioré ? Je n'avais pas pensé à ça mais ça n'empeche pas l'opérateur . de fonctionner comme je le pense pour les pointeurs normaux.
Marsh Posté le 08-12-2002 à 02:47:08
legreg a écrit a écrit : hein? tu decides quoi ? |
Moi-même.
Je pose cette question ici parce que j'arrive pas a me faire une opinion.
Donc je cherche des avis novateurs.
Kristoph a écrit a écrit : En fait, en quoi la suppression de ces "options" restreint le langage ? |
Il faut éviter d'encombrer un langage avec des règle spour des cas particuliers.
Soit = renvoie une valeur et je peut l'utiliser partout ou une valeur est attendue.
Soit = n'a pas de résultat et je peut pas du tout l'utiliser dans une expression.
Mais le cul entre deux chaises, c'est pas bien .
Simplement, le compilateur doit avertir des bourdes probables.
Pour relever le défi, on peut à la rigueur envisager:
Code :
|
Ça reste des détails...
Citation : Pointeur amélioré ? Je n'avais pas pensé à ça mais ça n'empeche pas l'opérateur . de fonctionner comme je le pense pour les pointeurs normaux. |
Très Mauvaise Idée®.
Les pointeurs normaux et améliorés se comporteraient différemment pour une même opération, il ne serait plus possible d'écrire du code générique.
Il y a un concept, celui de l'indirection.
En C++ il a deux l'incarnations:
Grâce au patrons, on peut se composer un type indirect intermédiaire, qui peut:
...ou pas.
Mais ça pose de sérieux problèmes sur les sens des instructions qui leur sont appliquées.
Marsh Posté le 02-12-2002 à 22:30:39
(post vide pour n'éditer ni le sondage ni le titre)
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone