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

  FORUM HardWare.fr
  Programmation
  C++

  Le C et le C de C++ doivent-ils rester compatibles ?

 

 

Le C et le C de C++ doivent-ils rester compatibles ?




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

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Le C et le C de C++ doivent-ils rester compatibles ?

n°259320
Musaran
Cerveaulté
Posté le 02-12-2002 à 22:30:39  profilanswer
 

(post vide pour n'éditer ni le sondage ni le titre)


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le 02-12-2002 à 22:30:39  profilanswer
 

n°259321
Musaran
Cerveaulté
Posté le 02-12-2002 à 22:31:20  profilanswer
 

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 ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°259347
Kristoph
Posté le 02-12-2002 à 23:02:54  profilanswer
 

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 ;)

n°259350
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-12-2002 à 23:06:57  profilanswer
 

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


---------------
du bon usage de rand [C] / [C++]
n°259351
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-12-2002 à 23:12:04  profilanswer
 

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  :whistle:


Message édité par Taz@PPC le 02-12-2002 à 23:13:40

---------------
du bon usage de rand [C] / [C++]
n°259353
lorill
Posté le 02-12-2002 à 23:21:59  profilanswer
 

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 !

n°259454
tanguy
Posté le 03-12-2002 à 02:04:44  profilanswer
 

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)

n°259479
lorill
Posté le 03-12-2002 à 08:47:49  profilanswer
 

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 ?

n°259498
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-12-2002 à 09:34:43  profilanswer
 

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) :o
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).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°260377
Musaran
Cerveaulté
Posté le 04-12-2002 à 03:45:55  profilanswer
 

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++.
Eventuellement, pas de void * mais ça aussi ça pourrais poser quelques problèmes.

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 :
  1. itor->value_type //attribut de l'objet pointé
  2. itor.value_type //attribut du pointeur amélioré


 

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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le 04-12-2002 à 03:45:55  profilanswer
 

n°260393
KrisCool
“Verbeux„
Posté le 04-12-2002 à 07:37:34  profilanswer
 

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-- ;), 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)




 
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.

n°261240
tanguy
Posté le 04-12-2002 à 23:32:09  profilanswer
 

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
...

n°263955
Musaran
Cerveaulté
Posté le 07-12-2002 à 02:03:40  profilanswer
 

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 ?


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°264273
LeGreg
Posté le 07-12-2002 à 05:28:48  profilanswer
 

hein? tu decides quoi ?
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°264411
Kristoph
Posté le 07-12-2002 à 17:38:40  profilanswer
 

Musaran a écrit :

Il ne faut pas restreindre le langage.
Par contre, c'est très bien d'avoir un environnement qui émette de grosses alertes.


 
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 :
  1. itor->value_type //attribut de l'objet pointé
  2. itor.value_type //attribut du pointeur amélioré

[/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.


Message édité par Kristoph le 07-12-2002 à 17:39:27
n°264609
Musaran
Cerveaulté
Posté le 08-12-2002 à 02:47:08  profilanswer
 

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 :non: .
 
Simplement, le compilateur doit avertir des bourdes probables.
Pour relever le défi, on peut à la rigueur envisager:

Code :
  1. if(p= malloc()); //allocation réussie
  2. //(je préfères le ==0 explicite)
  3. a=b=c= 0; //affectation groupée

Ç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:

  • Au plus bas niveau, les pointeurs. L'indirection est explicite, ils peuvent désigner n'importe quoi, y compris nul.
  • Au plus haut niveau, les références. Indifférenciables d'un vrai objet.


Grâce au patrons, on peut se composer un type indirect intermédiaire, qui peut:

  • être nul...
  • partager un objet/compter les références...
  • allouer automatiquement l'objet...
  • être déréférencé automatiquement...
  • parcourir un tableau
  • changer de référent

...ou pas.
 
Mais ça pose de sérieux problèmes sur les sens des instructions qui leur sont appliquées.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Le C et le C de C++ doivent-ils rester compatibles ?

 

Sujets relatifs
Pourquoi rester en C au lieu d'utiliser C++ ?couleurs compatibles HTML
[open GL] je n'arrive pas à rester sur mon repère global fixe ![php] & PWS 4.0 <--- Sont-ils compatibles ??
Livres C++/Visual C++ 6, si il ne devait en rester qu'un lequel ?DHTML : compatibles IE et Netscape ?
Plus de sujets relatifs à : Le C et le C de C++ doivent-ils rester compatibles ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)