Le langage C Map/Reduce

Le langage C Map/Reduce (C M/R) est un langage pour l'écriture de codes parallèles sur une machine multicoeurs, utilisant 2 constructeurs pour le parallélisme: les fonctions map et reduce. Le langage est basé sur le C. En cas d'ambiguité sur la façon d'interpréter le langage, on se basera sur C.

1. Les variables

Les variables peuvent manipuler des entiers, des flottants, des fonctions et des tableaux: Les variables ne peuvent avoir le même nom que les mots clés du langage. En particulier, 2 fonctions sont réservées, map et reduce. Une discussion plus approfondie sur ce système de typage est faite dans la suite.

Opérateurs

On définit à présent les opérations qui sont réalisables entre ces types.

2. Map, reduce et autres fonctions

Le langage implémente les fonctions suivantes. Les fonctions map et reduce font partie de la grammaire, les autres fonctions peuvent être définies comme des variables extern.

3. Les instructions

Les instructions sont l'affectation, la boucle for, la boucle while et la conditionnelle.

4. Tableaux

Allocation

Les tableaux peuvent être soit déclarés statiquement avec une taille, soit sans. Dans le premier cas, les éléments du tableau sont alloués. La fonction map permet également de créer un tableau. La fonction map retourne un tableau dont la taille est la même que celle passée en entrée. Il s'agit d'un nouveau tableau, qui devra donc être alloué dynamiquement. La fonction map permet d'écrire un code comme celui qui suit:
int B[]; int A[1000]; B = map(g,map(f,A));
Le tableau B sera un tableau de 1000 éléments.

Typage

Un tableau non alloué correspond juste à un pointeur. Il est recommandé de typer les tableaux en incluant également leur taille dans leur type. Les affectations autorisées entre tableaux doivent vérifier la propriété suivante: un tableau ne peut prendre que la valeur d'un tableau plus grand.
int A[100]; int B[]; int C[200]; int D[50]; int E[]; int F[]; B = A; // valide. Le tableau B a maintenant 100 elements C = A; // non valide D = A; // valide. Le tableau D a maintenant 100 elements D = B; // valide si l'affectation B=A est faite avant. D a 100 elements E = F; // valide, 0 elements
La fonction map créé un tableau de même longueur que celui passé en paramètre. On définira un comportement lors qu'on passe un tableau à 0 éléments à map et reduce.

Libération de la mémoire

On devra spécifier comment la mémoire est allouée (sur la pile, sur le tas, statiquement) et comment elle est désallouée, si elle l'est.