Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

Pourquoi certains langages ont-ils plusieurs versions ?

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
En ligne Oyabi # Posté le 26/11/2010 à 16:57:49
Avatar
Flux RSS

Bonjour à tous,
je me suis posé une question et j'aurais aimé une réponse.
Je ne suis pas un programmeur averti, je m'intéresse à la programmation de loin seulement, mais j'ai remarqué que certains langages comme le python ( v 3.x je crois), le PHP ( v 5.x) et tout un tas d'autres avaient des numéros de version. Alors que le C lui n'en a pas tout comme le C++.
Comment est ce possible ? Est-ce que le C++ a des « add-on » le faisant évoluer ? Ou est-ce tout simplement la programmation du langage (« lol ») qui est pensée pour ne pas évoluer ou justement évoluer grâce aux librairies ( « c'est peut être ça les « add-on » dont je parlais).
J'espère que j'ai était clair et que vous saurez m'apporter une réponse =).
A+

Nobody knows who I really am.
J'attire les injures et non les louanges. J'offre la peur et non le respect. Voici ma résurrection.
 
Publicité # Posté le 26/11/2010 à 16:57:49

Hors ligne Tosh # Posté le 26/11/2010 à 17:01:33
EOT
Avatar

Le C et le C++ ont aussi des versions, ou plus exactement des normes.

Par exemple, tu as le C89, C90, C99.

Vous trouverez mes codes et articles sur mon site web ou sur mon SVN.

 
Hors ligne Ssanguine # Posté le 26/11/2010 à 18:58:23
Avatar

Et on peut même rajouter des fonctionnalités au langage!
Par exemple Apple a ajouté les blocks, une sorte de fonction qui permet de profiter de plusieurs coeurs en "découpant" les taches. Il n'est disponible que sur Mac OS X avec la version Apple de GCC ou avec LLVM-Clang.

Bon, en réalité, Apple "triche" un peu, puisque les additions faites au C utilisent des fonctionnalités de la runtime Objective C. Mais l'idée est la...

Projet d'agrégateur de réseaux sociaux sur Mac |||||||||||||||||||| 10%
 
Hors ligne Harfangdesneiges # Posté le 27/11/2010 à 08:43:22
Je suis bête.
Avatar

Les langages ont plusieurs versions, tout simplement parce qu'ils évoluent, aussi bien pour corriger des bugs que pour ajouter des fonctionnalités. Un langage, c'est comme n'importe quel autre logiciel, ça doit savoir s'adapter à son temps et aux envies des utilisateurs.

Après le C c'est un peu différent, parce que il existe plusieurs compilateurs, c'est pour ça qu'il faut définir une norme commune ; comme il n'existe qu'un seul interpréteur PHP, là on peut parler de version.

EDIT : des trucs sont faux, cf le post de Bluestorm en dessous ;)
Édité le 27/11/2010 à 10:05:31 par Harfangdesneiges


Citation : plougue
Enculer les mouches (même consentantes) n'a jamais mené à rien à part chopper des MST bizarres.

M. \LaTeX vous dit l'heure : \time
 
Hors ligne bluestorm # Posté le 27/11/2010 à 09:56:17
dont ask to ask
Avatar
Groupe : Anciens
Flux RSS

Dans ton message Harfangdesneiges tu fais une confusion entre un langage, qui est un ensemble de règle d'écriture de programmes, et une implémentation d'un langage, qui est un logiciel qui prend en entrée des programmes écrits dans un langage et permet de les exécuter.

Les langages et les implémentations ont des bugs, des fonctionnalités, et évoluent, mais ils sont de nature différente.

Par exemple, un langage aura un bug "conceptuel" : telle construction complique le langage en rendant les programmes moins lisibles, il faudrait essayer de la retirer; par exemple les variables variables en PHP ou le traitement des variables de boucle et son interaction avec les closures en Javascript, Python, C#, etc. Une implémentation aura des bugs logiciels concrets (quand on fait ça, le programme plante alors qu'il ne devrait pas, ou l'inverse).

On peut donc parler indépendamment de versions du langage et de versions des implémentations. Par exemple GCC sort de nouvelles versions de ses compilateurs (C, C++, Ada, Fortran, etc.), alors que les langages implémentés ne changent pas forcément. Dans l'autre sens, une modification d'un langage est souvent accompagnée d'une modification des implémentations pour la mettre en œuvre, même s'il y a des fonctionnalités qui sont considérées et ajoutées avant que les principales implémentations ne les aient intégrées (par exemple les fonctionnalités de C++0x).


Le flou relatif vient que les langages n'ont souvent qu'une seule implémentation, et qu'on tend donc à confondre le langage et son implémentation. Par exemple on confond allègrement le langage PHP et son implémentation par Zend. De même, on a longtemps confondu "Python" et "Ruby" et leur unique implémentation, jusqu'à que d'autres implémentations essaient de se développer; ça pose des problèmes pratiques parce qu'on découvre alors que certaines fonctionnalités ne sont pas ou peu documentées, et que la définition implicite c'était "faire comme l'implémentation fait, c'est naturel"; cela rend difficile aux autres implémentations le fait d'avoir un comportement compatible, et cela limite la flexibilité du langage.

Bref, même quand les langages ont une seule implémentation, il est important de bien faire la différence entre les deux, et si possible de spécifier proprement le langage indépendamment de son implémentation, pour éviter les parties mal définies. Cela renforce aussi la qualité du langage.
 
Hors ligne ProgVal # Posté le 30/12/2010 à 11:07:21
Catapoulpe !
Avatar

Ville : Jouy aux arches
Pays : France métropolitaine
Études : Lycée Fabert - Metz

Bonjour,

Par exemple, si je prend le C ou le C++, une fois passée l'étape de la
compilation (c'est le développeur qui s'en occupe), la "version" (par abus
de... langage) du C ou du C++ est invisible à l'utilisateur.
Alors que par exemple pour Python, il faut que le programme soit compatible
avec la version de Python installée sur l'ordinateur de l'utilisateur.



Mais il y a un autre fait à noter : Python est livré "batteries included",
c'est à dire que sa bibliothèque standard est très complète. D'une version à
l'autre, c'est donc majoritairement cette bibliothèque qui change (à part pour
le passage de Python 2 à Python 3, qui occasionne également des changements de
syntaxe).

Alors que pour le C ou le C++ (c'est encore une fois un exemple), il faut
charger les bibliothèques séparément : soit elles sont livrées avec le
programme, comme c'est majoritairement fait sous Windows (les fameuses DLL) ;
soit elles doivent être téléchargées séparément à la main (c'est une technique
archaïque, aujourd'hui trop difficile pour être envisagée), soit avec un
gestionnaire de paquets (comme c'est de coutume sous GNU/Linux, *BSD, etc.).

J'en profite pour faire un petit troll : la première méthode peut sembler plus
attrayante à première vue, mais en fait, elle cache un problème majeur : si
deux programmes utilisent la même bibliothèque, et que chacun a la sienne,
dans C:\Program Files\ExplorezLEnfer\ et C:\Program Files\ConqueteDuMonde, on
va avoir deux fois le même .dll. En sachant qu'il y a bien plus de programmes
que ça, et que chaque programme peut utiliser plein de DLL, ça fait pas mal
d'espace disque qui se fait avaler bêtement.

Cordialement,
ProgVal
Édité le 30/12/2010 à 11:11:34 par ProgVal

Image utilisateur
 
Connecté bubuche # Posté le 30/12/2010 à 20:05:45
I miss you...
Avatar

Études : Université Paris XII

Bonjour,

Citation : ProgVal
J'en profite pour faire un petit troll : la première méthode peut sembler plus attrayante à première vue, mais en fait, elle cache un problème majeur : si
deux programmes utilisent la même bibliothèque, et que chacun a la sienne,
dans C:\Program Files\ExplorezLEnfer\ et C:\Program Files\ConqueteDuMonde, on
va avoir deux fois le même .dll. En sachant qu'il y a bien plus de programmes
que ça, et que chaque programme peut utiliser plein de DLL, ça fait pas mal
d'espace disque qui se fait avaler bêtement.


D'accord avec toi, sauf qu'alors tu créés un petit dossier que tu mets dans le path et roulez jeunesse (voir Système 32). Jusqu'à ce que Windows commence à inclure les liens comme le fait le système Unix. Mais de toute façon, la taille commence à se compter en Terras, alors ...


Les langages qui ont plusieurs versions sont les langages "récents". De nos jours, tout ce qui a plus de deux ans est "vieux" et "archaïque". Et comme dans notre monde si quelque chose n'est plus à la mode il ne se vend plus, on nous sors des nouvelles versions tous les ans/6 mois pour essayer de nous convaincre que ça roxx.

Où va la monde ... ? :-°

"Il ne faut pas confondre rêver sa vie et vivre ses rèves."
"Je pleurais quand je vins au monde, et chaque jour me montre pourquoi."
 
Hors ligne ProgVal # Posté le 31/12/2010 à 08:48:26 Message supprimé pour le motif suivant : Message complètement hors sujet.
Hors ligne Ice_Keese # Posté le 31/12/2010 à 08:51:46 Message supprimé pour le motif suivant : Message complètement hors sujet.
Hors ligne spider-mario # Posté le 31/12/2010 à 14:24:31 Message supprimé pour le motif suivant : Message complètement hors sujet.
Hors ligne GuilOooo # Posté le 01/01/2011 à 13:12:16
Attention, je mords !
Avatar
Modérateurs

On va arrêter la dérive ici et repartir sur le sujet initial, merci.

HaskellReal World HaskellLearn yourself HaskellGentille intro à HaskellTuto SdZ
ErlangBuzzerl@home???

Modérateur spécialiste du langage C.
Bien poster sur le forum de CMe contacter
 

Retour au forum "Autres langages, outils et approches" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx


Lire aussi