Une spécificité de la force élémentaire électromagnétique induit des comportement que nous avons sût mesurer et utiliser.
Ces comportements permettent l’apparition du principe de Diode (qui ne laisse passer le courant que dans un seul sens), puis si l’on ajoute une seconde entrée à la diode cela devient un transistor… je simplifie volontairement. Un assemblage de transistors permet l’émergence des portes logiques et enfin l’assemblage de portes logiques permet l’émergence de fonctions primitives.
Ces fonctions peuvent être divisées en 3 catégories :
- les adresses
- les données
- les opérations
Ces seuls outils sont nécessaires au fonctionnement de l’écosystème informatique complet existant aujourd’hui, car tous les autres concepts héritent de ces primitives. Une suite structurée de ces éléments peut être identifié comme une brique contributive. Ces briques pourront être à leurs tour utilisées par d’autres briques, cela s’appelle l’encapsulation. Ceci permet de considérer certaines briques comme élémentaires à tout moment pour aider à simplifier la modélisation d’un outil plutôt que de repartir à chaque fois de la base sémantique physique primaire.
C’est le principal intérêt de la technologique informatique, en effet si l’on devait reproduire chaque mécanique physique avant de pouvoir opérer le moindre calcul arithmétique même de bas niveau, le chemin serait long.
Aujourd’hui nous sommes donc capable de décrire des mécaniques utilisables rapidement et les briques élémentaires ne sont mises à contribution que lorsque le processus est alors déclenché.
En revanche on observera que l’intérêt pour les briques élémentaires diminue considérablement du fait qu’elle soient tenues pour acquises et qu’a moins d’un profond bouleversement des structures de logiques elles n’ont pas besoin d’être retravaillées, dès lors que leur utilitée est fonctionnellement reconnue.
Cependant se serait sans voir la fondation sur laquelle reposent ces primitives, si je m’autorise un parallèle à formuler en philosophie, je mentionnerai probablement le fonctionnalisme, qui dit entre autre … «peut importe le support sur lequel repose la fonction»
Mais du coup le support choisi qui est à l’œuvre dans les micro-processeurs ne sont que partiellement partagé, nous entendons peu de communauté qui en parle, même si certains on put lire des articles et regarder des vidéos très biens faites sur le net, et je remercie ceux qui ont fait ces efforts. Mais seules les briques élémentaires sont connues. Elles sont, d’une certaine manière, notre bien commun issue de logiques humaines et il serait important voir impératif des les protéger en tant que telles.
Mais voila, passée cette barrière de l’élémentaire, le spectre s’agrandit considérablement, la base de compréhension ne se discute que dans de rares bureaux d’experts.
Par ailleurs, peut-être est-il impensable que nos esprits soient en mesure de maîtriser intégralement les processus depuis les primitives jusqu’aux plus belles réalisations d’algorithme, réalisme des images de synthèses, apprentissage de réseaux de neurones.
J’imagine que n’est pas par hasard si nous organisons l’information sous forme d’encapsulation, car c’est peut-être un des mécanismes à l’œuvre dans nos cerveaux.
Or ces mécanismes et toute l’intelligence qu’ils hébergent ne sont relatées pour l’instant que sous forme écrite et/ou partiellement sous forme UML (Aïe, çà y est j’ai dit un gros mot)
Tout cela pourrait paraître complexe ou rébarbatif, mais surtout sans intérêt car il s’agit seulement de documenter les concepts physiquement implémenté dans les programmes.
Prises séparéments, chacune des notions sont abordable par tous, il suffit de se pencher sur ces pratiques pour comprendre pourquoi elles ont émergée et comment elles rendent service au quotidien. Même si nous ne devenons pas tous des développeurs ou des électros, nous devrions partager ce qui semble si naturel alors qu’une part gigantesque de nos congénères passe à côté.
Évidemment, nous n’avons pas besoin de savoir comment nous fonctionnons pour fonctionner et pourtant d’une certaine manière c’est un gage de liberté qui se cache derrière des rapports de force futurs.
La genèse de ces principes est absolument vérifiable dans le cas des programmes informatiques on peut relativement bien admettre que ces techniques existent belles et bien, vu l’usage que l’on en fait et qu’il y aurait éventuellement un intérêt à les étudier comme une matière générale.
Je revient donc à mon sujet pour poser la question :
Cela prendrait-il vraiment beaucoup de temps de recomposer la « matrice » informatique primitive (somme de processus physique) qui fournirait par exemple le premier niveau d’instanciation d’une chaîne de caractères.
Prenons le problème à l’envers dans un premier temps, nous pouvons pratiquer l’inverse d’une modélisation puisque ces notions existent déjà et qu’il nous suffit de décrire le comment.
Proposons la construction suivante communément utilisés lors d’exemples simples :
{var1: »hello world »}
On dit que la variable var1 a pour valeur « hello world »
Une variable, c’est un bloc de mémoire. Un bloc de mémoire nécessite une adresse, une adresse c’est un nombre, c’est une position dans la mémoire, on utilisera le point 34869 de notre barrette de mémoire. On peut utiliser comme convention le @ pour désigner que l’on parle d’une adresse
Il faudrait donc dire {var1:{@:34869, « hello world »}}
Sauf que la machine ne comprends que des nombres, aussi, la notation » signifie qu’il y a un traitement.
La donnée, c’est « hello world », il y a encore un peu de travail avant de savoir concrètement comment c’est modélisé par la machine, mais c’est plutôt simple.
Voyons déjà comment se propage cette donnée :
« hello world » c’est une chaîne de caractère, dans l’histoire de l’informatique il y a eu plusieurs essai, mais pour simplifier admettons qu’aujourd’hui on utilise la table ASCII.
Cette table ASCII associe à chaque caractère un nombre :
104=h, 101=e, 108=l, 111=o, etc…
Cette table existe «quelque-part» dans nos ordinateurs, c’est donc identifié par une adresse et même peut-être qu’on va pouvoir préciser cette adresse pour la table entière, on s’en doute, il y a du monde dans cette table, les caractères minuscules mais aussi les majuscules et aussi les chiffres et un tas d’autres choses qui nous intéressent moins pour cet exemple mais qui sont très utile et efficace dans certains cas, comme les sauts de lignes …
Arrivé à la table ASCII qui a pour adresse (par exemple) 66536, cette table devrait pouvoir nous donner quelques indications sur son identité et la manière de l’interroger, c’est le rôle de l’encodage, il y en a de très nombreux, pour faire simple, c’est la grille de lecture/écriture de symboles pour la machine, ces symboles peuvent représenter absolument tout et n’importe quoi… ASCII=@66536
Bref, nous pourrions noter l’égalité suivante :
ASCII{@104} = {« h »:{type:char}}
Le principe est à appliquer sur chacune des lettres. Il faudra au final obtenir quelque chose que l’on pourrait écrire {var1 :{string :{char :[« h », »e », »l », »l », »o »,…]}}}
Il y a plusieurs points a observer et respecter…
Il est imperatif que les nouvelles creations tentent de reutiliser les briques des niveaux adaptés les plus bas. Ceci dans le but de ne pas empiler des concepts equivalents qui pourraient exister sur des niveaux d’encapsulation differents. Ou du moins que dans le moteur ou dans sa definition puissent y etre reperées ces équivalences.
Reperons par des exemples simples
{tata :{string: »tata »}}
on dit que la variable tata a pour valeur « tata »
mais il faudrait dire que string est {tata :{string :{char :[« t », »a », »t », »a »]}}}
puis on pourrait decendre plus loin en donnant une definition des ´char’
nous pourrions donner la representation suivante
{« t » :{char :{ascii(<index>), index:{decimal :116}}}}
quand aux chiffres ils existent surtout sous une forme binaire
{116 :{01110100}}
Meme à ce stade il y a des raccourcis du a mon manque de connaissances sur la couche électronique, car il fo ensuite passer du coté physique pour finaliser les definitions qui restent « ascii() , decimal et enfin 01110100 la suite de pont de diode qui doit etre mise a contribution pour representer cette valeur binaire.
Par exemple la fonction ascii() doit permettre de rentrer dans les details sur la table ascii elle-meme car il faut bien qu’elle existe quelque-part pour traduire des nombres en lettres.
Et de maniere generale tout ce qui possede un type de donnees est oppsable a un mecanisme permettant de le determiner et de conditionner son traitement.
Cette notation serait donc incomplete :
{116 :{type :integer, value :{type :binary, value :[0,1,1,1,0,1,0,0]}}}
il faudrait definir integer…
Selon les langages il n’a pas completement la même definition, les seuls constantes, sans garantie, c’est qu’il s’agit uniquement de nombres entiers ensuite qu’il est codé en binaire sur 16 bits (voir 8) et que s’il devait être negatif il doit posséder un bit de signe (- ou +)
donc 17 bits en tout
on pourrait donc avoir quelque chose comme ça :
{integer :{value :{binary[16]}, sign :{binary[1]}}}
Meme de cette facon il nous faut alors definir sign… et que dire de value qui semble si naturelle pour que je l’utilise depuis le début sans rapeller le concept d’adressage de la donnée, on pourrait le representer par exemple comme suit :
{value :{@ :{type :binary, value:[0,0,1,0,1,0,1,1,1,0]}}}
on voit bien la recursivite sur value qui n’est pas resolu…
Le mecanisme d’adressage est connu pour etre lier au principe de registres micro-processeurs…
un registre c’est une adresse fixe, il est alors possible de déposer dans une adresse fixe une valeur représentant une adresse vers une valeur qui n’est pas fixe. Et nous obtenons alors une fonction read() qui résoudra pour une adresse donnée … une valeur
On a donc à notre disposition:
a :
read() : {{value :{@ :{type :binary, value:[0,0,1,0,1,0,1,1,1,0]}}}}
{integer :{value :{binary[16]}, sign :{binary[1]}}}
Est-il necessaire de rapeller que l’informatique est entièrement fabriquée sur des concepts qui sont le resultat d’adherences entre plusieurs personnes qui se sont mises d’accord à un instant pour permettre d’empiler d’autres concepts par dessus.
Pour ce que j’en connais, on peut eventuellement transposer ce phenomene sur les mathématiques excepte que pour les math il est constamment necessaire de demontrer ses concepts avant que d’autres veuillent seulement s’interesser à les utiliser. En informatique c’est autre chose… Vous pouvez utiliser tellement de pratiques differentes, disponibles de suite, que vous allez verifier rapidement si cela fonctionne ou non.
Et ce langage ne ferait pas exception, il pourrait même permettre a chacun de constituer une batterie de fonctions primaires de très bas niveaux, créé par des agencements totalement differents d’une personne à une autre. Cela peut etre aussi un piège et rendre difficile et/ou infonctionnels certaines tâches que nous considerons comme acquises aujourd’hui, car elles sont rendues possible par l’empilage des conventions etablies, sous forme de protocole de communication ou dans d’autres contextes appelés driver.
Cependant, avec un tel langage, serait rendu possible la lecture du programme en même temps que l’execution, en même temps que la modification, d’autres langages le font dejà, mais jamais le spectre de l’encapsulation n’aura-t-il été parcourus aussi profondemment. Vous possederiez aussi bien la puissance d’un langage comme l’assembleur ou des premiers compilateurs, en passant par la gestion d’événements, de classes puis les notions de design pattern ou d’agent, jusqu’aux
Ceci pourra être considerer comme un espace de cumul des libertés inaltérables bien que perilleux (dangereux meme en terme de cracking), pourra en fait devenir un formidable terrain d’echange, c’est l’open source poussé jusqu’au niveau physique (theorique certe, mais il est envisageable de mappé ce langage sur des architechtures physique réels)
Bref on voit qu’il y a beaucoup de notions à aborder et de travail d’écriture à realiser.