Comme tu ne vois pas l'intérêt du D, voici un petit exemple simple, il s'agit d'une fonction qui calcule la longueur d'un vecteur en coordonnées cartésiennes: import std.math : sqrt;
float vectorLength(float[] v)
in
{
assert(v.length==3);
}
out(result)
{
assert(result>=0);
}
body
{
return sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);
}
En C/C++, il n'y a pas de moyen simple de mettre des conditions à l'entrée et à la sortie des fonctions.
Par ailleurs, en C/C++, tu aurais été obligé d'utiliser les pointeurs (ou éventuellement les références). Mais en pratique, on alloue les vecteurs de manière dynamique, donc on se retrouve à utiliser tout le temps les pointeurs.
Pour un débutant, le concept (qui vient du C) selon lequel une variable qui décrit un tableau est en fait un pointeur vers son premier élément est complètement foireux (c'est mon avis et je le partage!!). Je trouve que cela rend le code C assez difficile à comprendre.
Exemples en D:
+ un int est un entier
+ un int* est un pointeur d'entier
+ un int[] est un tableau d'entier
+ un int*[] est un tableau de pointeurs d'entiers...
+ un int[][] est un tableau d'entiers à deux dimensions
En C cela donne:
+ un int est un entier
+ un int* est un pointeur d'entier
+ un int* est un tableau d'entier
+ un int** est un tableau de pointeurs d'entiers...
+ un int** est un tableau d'entiers à deux dimensions
On voit bien qu'il y a un problème en C pour distinguer certains cas. Ce n'est pas idéal, en particulier pour les débutants!
[^] # Re: Le C++ peut être simple
Posté par Gilles G. . En réponse au journal Un langage pour les nuls? Le langage D!. Évalué à 6.
import std.math : sqrt;
float vectorLength(float[] v)
in
{
assert(v.length==3);
}
out(result)
{
assert(result>=0);
}
body
{
return sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);
}
En C/C++, il n'y a pas de moyen simple de mettre des conditions à l'entrée et à la sortie des fonctions.
Par ailleurs, en C/C++, tu aurais été obligé d'utiliser les pointeurs (ou éventuellement les références). Mais en pratique, on alloue les vecteurs de manière dynamique, donc on se retrouve à utiliser tout le temps les pointeurs.
Pour un débutant, le concept (qui vient du C) selon lequel une variable qui décrit un tableau est en fait un pointeur vers son premier élément est complètement foireux (c'est mon avis et je le partage!!). Je trouve que cela rend le code C assez difficile à comprendre.
Exemples en D:
+ un int est un entier
+ un int* est un pointeur d'entier
+ un int[] est un tableau d'entier
+ un int*[] est un tableau de pointeurs d'entiers...
+ un int[][] est un tableau d'entiers à deux dimensions
En C cela donne:
+ un int est un entier
+ un int* est un pointeur d'entier
+ un int* est un tableau d'entier
+ un int** est un tableau de pointeurs d'entiers...
+ un int** est un tableau d'entiers à deux dimensions
On voit bien qu'il y a un problème en C pour distinguer certains cas. Ce n'est pas idéal, en particulier pour les débutants!