Quesoft
:
Il est de plus haut niveau que COBOL et que fortran (bon, j'ai jamais programmé en ça alors je parle au travers de mon chapeau, mais je sais qu'il n'y a qu'une seule structure de donnée : l'array ...)
Je connais pas trop non plus, mais tu as l'air de penser que le fait qu'il y ait plusieurs types de données est une caractéristique de haut niveau... Mais comme je l'ai dit, si tu veux faire un assembleur portable, tu n'as pas trop le choix. Exemple : tu veux porter un OS (disons PedroM) pour le mettre dans ton assembleur portable. Tu tombes sur un tableau où chaque élément est constitué de deux entiers (sur 2 octets) et un pointeur (sur 4 octets). Si tu n'as qu'un seul type de données, soit :
[ul][li]tu imposes que tous les éléments soit de taille maximale (par exemple, ici tu imposes que les entiers soient de taille 4) ; malheureusement, ça veut dire que tes structures de données seront 2x plus grosses, les multiplications plus de 3x plus lentes, etc... C'est incompatible avec le fait d'être aussi efficace que l'assembleur.
[li]au contraire, tu imposes que tous les éléments soient de taille minimale (par exemple, ici tu imposes de découper toutes les données octets par octets) ; mais ça a plein d'inconvénients :
[ul]* soit tu représentes un entier 32 bits par un quadruplet (a,b,c,d), et pour faire une addition, tu dois faire (a3,b3,c3,d3) = add32((a,b,c,d),(a2,b2,c2,d2)), ça oblige le compilateur à détecter des motifs pour pouvoir le transformer en l'instruction add32 native du processeur (tu ne pourrais pas l'utiliser pour faire add32((d,c,b,a),...) par exemple), ce qui est contraire à la contrainte de simplicité de l'implémentation
* soit tu représentes un entier 32 bits juste par l'adresse de son premier octet, et tu auras d'autres problèmes, notamment : ça va être compliqué de mettre le *contenu* de cette adresse dans un registre pour optimiser (problèmes d'aliasing, il faut faire des analyses qui étaient très très coûteuses à l'époque de la conception du C, et qui de toutes façons ne sont pas parfaites), tu vas dupliquer le type à chaque opération, tu vas devoir utiliser sizeof() partout, etc...[/ul]
Bref, tu vas devoir gérer plusieurs types de données, avec des tailles qui varient selon la plateforme, donc après les notions de struct et d'union viennent toutes seules... Tu pourras difficilement faire plus bas niveau. Tu peux peut-être faire plus "primitif" en supprimant certaines contraintes d'efficacité, mais c'est tout...
De toute façon haut niveau != nécessairement bon et puissant. Le basic est de haut niveau, pourtant, il offre excessivement peu d'avantages.
On est bien d'accord, mais ça n'empêche pas que le C n'est pas un langage de haut niveau
