{{backlinks>.}}
====== Le Moteur ======
{{https://upload.wikimedia.org/wikipedia/commons/thumb/6/66/NAMA_Machine_d%27Anticyth%C3%A8re_1.jpg/538px-NAMA_Machine_d%27Anticyth%C3%A8re_1.jpg?400}}
Image: la [[wpfr>Machine d'Anticythère]]
[[icn>sloyd:fordj|Fordj]] est le [[wpfr>Moteur de jeu|moteur]] (//engine// en anglais) qui fait tourner [[icn>alphaville:start|Alphaville]].
À chaque fois qu'une joueuse ou qu'un joueur participe au Jeu, une nouvelle itération, une nouvelle étape dans l'histoire d'Alphaville est générée automatiquement par la plateforme. Ce mécanisme automatique réalise deux opérations fondamentales\ : (1) l'assemblage automatique des Parcelles qui viennent former la Ville ((assemblage qui est stocké chez l'utilisateur Zeth)), et (2) l'évaluation automatique des «\ fichiers sources\ » qui composent cet assemblage.
Ces «\ fichiers sources\ » sont les données qui sont «\ générées\ » par les acteurs humains du jeu, joueurs et joueuses. Ces fichiers sont de deux types\ : les fichiers 3D créés à partir de [[icn>blender:start|Blender]] et les fichiers [[icn>sloyd:markdown|Markdown]] créés directement sur la plateforme.
Lorsqu'un Participant.e modifie ou dépose un fichier sur la plateforme, le «\ moteur\ » réalise les deux opérations d'assemblage (1) et d'évaluation (2). La phase d'évaluation comporte une partie d'évaluation des fichiers 3D et une partie d'évaluation des fichiers Markdown\ :
* L'interprétation des fichiers 3D comporte des opérations telles que la recherche d'objets et leur évaluation\ : nom, dimensions, etc.
* L'évaluation des fichiers Markdown consiste principalement à «\ lire\ » les données textuelles présentes dans les fichiers ''README.md'' de la plateforme. Cette «\ lecture\ » est sujette à une phase cruciale\ : l'**interprétation**.
===== L'Interprétation =====
Les machines numériques qu'on appelle des ordinateurs ne sont pas tant des «\ machines à ordonner\ », comme l'étymologie du mot le suggère, mais des «\ machines à interpréter\ », ou pour être plus précis, des machines d'//interprétation-action//. Pour comprendre ce principe fondamental du numérique, il faut s'intéresser au «\ moteur universel\ » qui fait «\ tourner\ » ces machines et qui porte le nom de [[wpfr>machine de Turing]].
{{https://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/Maquina.png/640px-Maquina.png?400}}
Image: wikipedia
Cette «\ machine théorique\ » fonctionne ainsi\ : une «\ tête de lecture\ » glisse le long d'un ruban d'information. Ce ruban est composé de cases qui chacune contient une information stockée sous la forme d'un symbole, ce qui correspond pour nous autres humains, à une lettre ou à un chiffre.
La «\ tête\ » se déplace le long du ruban et «\ lit\ » les symboles qui sont présents dans les «\ cases\ ». À chacun des symboles présents dans ces cases correspond un «\ sens\ », ou plutôt une action qui est associée à cette information. Cette information, ce peut être par exemple de se «\ déplacer d'une case à droite\ », « lire la prochaine instruction » ou « écrire un symbole » dans une case. Ce principe d'//interprétation-action// à la base théorique du numérique, c'est ce qu'on appelle plus généralement un **calcul**. Il s'agit donc d'un calcul qui ne se réduit pas à de simples opérations mathématiques telles que l'addition ou la multiplication, mais d'un «\ calcul\ » qui est plus «\ général\ » dans le sens où il s'agit avant tout d'interpréter et d'agir. Les ordinateurs sont les objets d'un «\ calcul universel\ » dont l'idée est aussi ancienne que la [[wpfr>Caractéristique universelle]] de Leibniz (XVIIIe) ou la [[wpfr>Machine analytique]] de Charles Babbage (XIXe). Ce «\ calcul\ » c'est le sens du mot anglais //computation// que l'on retrouve dans l'expression //computational Design// (CD) et que l'on traduit en français par //conception numérique//.
===== La Traduction =====
Fondamentalement, une machine numérique, c'est donc une machine de Turing qui «\ lit et interprète\ » des [[icn>numerique:data|données]] numériques ; des données qui sont, fondamentalement, des nombres binaires stockés sous la forme de ''0'' et de ''1''. On peut donc envisager ces machines comme de vastes systèmes très complexes basés sur un principe pourtant très simple de «\ lecture-écriture\ » de 0 et de 1. Mais dans la pratique, on ne «\ dialogue\ » pas avec une machine numérique au format binaire, mais à l'aide de «\ langages intermédiaires\ » tels que le langage Markdown par exemple. Le travail principal d'une machine numérique, c'est de «\ traduire\ » ces langages intermédiaires, des langages de «\ haut de niveau\ » ((aujourd'hui avec l'IA, il s'agit des «\ langages naturels\ » tels que le français ou l'anglais)) vers des langages de plus «\ bas niveau\ », tels que le «\ langage binaire\ ».
===== La Fragmentation =====
Comment une machine numérique interprète-t-elle ces langages\ ? Il existe pour cette opération fondamentale des programmes qu'on appelle des [[wpfr>compilateurs]] qui ont pour tâche de partir d'un «\ fichier source\ » et d'organiser les informations qu'il contient sous une forme «\ interprétable\ » par la machine. Ce travail passe par un certain nombre d'étapes qui peuvent-être plus ou moins complexes en fonction du langage à interpréter. Mais tous les compilateurs partagent la même étape initiale qu'on appelle l'[[wpfr>analyse lexicale]] ou [[wpfr>tokenization]] qui consiste à identifier les mots du [[icn>numerique:code|code]] à interpréter. Ces mots que l'analyse lexicale identifie, nous les appelons des [[wpfr>token]]. Le //token// ((Le mot « token » signifie « jeton ». En numérique, ce terme peut faire référence à un type de [[wpfr>Mot_clé|mot]] très précis qu'on appelle un [[wpfr>Fonction de hachage|hash]]. Nous pouvons l'employer dans un sens plus général pour faire référence à cette « plus petite entité linguistique » qu'on appelle un [[wpfr>Lemme (linguistique)|lemme]])), c'est la plus petite entité d'un texte interprétable, un peu comme un [[wpfr>pixel]] pour une [[wpfr>image matricielle]]. En règle générale, ces //tokens// sont «\ extraits\ » du texte en prenant en compte les espaces qui séparent les mots. On peut dire qu'un //token//, c'est simplement un mot. La première étape de la compilation réside donc dans cette opération qui consiste à bien séparer les mots et à les stocker sous la forme d'une liste avant de passer à l'étape suivante de l'interprétation.
===== Les Niveaux =====
Sloyd interprète les textes numériques suivant plusieurs «\ niveaux de langage\ ». Il en existe plusieurs, mais nous retenons pour l'instant **deux niveaux** fondamentaux\ : le «\ langage Markdown\ » et le «\ langage Alpha-1\ ».
__Le langage [[icn>sloyd:markdown|Markdown]]__ est le premier langage que les Participant.es d'Alphaville apprennent à écrire. Pour bien écrire en Markdown, il s'agit de respecter un certain nombre de règles de syntaxe très simples. Si l'on respecte correctement ces règles, le [[icn>sloyd:markdown#moteur|moteur Markdown]] est capable de les interpréter et de générer un document [[icn>numerique:web|web]].
__Le «\ langage Alpha-1\ »__ est le plus petit des interpréteurs que l'on puisse imaginer. Il s'agit d'une fonctionnalité minimale de la plateforme qui va lire certaines «\ données\ » présentes dans les fichiers Markdown. Cette fonctionnalité, nous la trouvons au niveau du [[https://fordj.org/rvba/fordj/src/branch/main/engine|moteur]] de la plateforme dans le fichier qui indique comment [[https://fordj.org/rvba/fordj/src/branch/main/engine/alphengine/check.py|vérifier]] des données. Une [[https://fordj.org/rvba/fordj/src/commit/94151b57131bf057c0a9b006f23388f7bc2e3d58/engine/alphengine/check.py#L419|fonction en particulier]] décrit les étapes permettant d'interpréter les données.
Ce « langage Alpha-1 » doit pouvoir nous aider à comprendre toutes les petites erreurs que nous pouvons commettre lorsque nous [[icn>numerique:data#encodage|nommons des fichiers]] numériques. Voir les [[icn>travaux:j1c|Commentaires J1]].