Pouvons-nous construire un ordinateur fonctionnel?


12

Tout comme FP l'a fait, au final, tous nos programmes sont structurés. Autrement dit, peu importe à quel point nous les fabriquons, purs ou fonctionnels - ils sont toujours traduits en assemblage, donc ce qui se passe réellement derrière les capots, ce sont les instructions, les états et les boucles. Nous sommes une sorte d'émulation de FP.

En tant que noob matériel, ma question est: pourquoi n'utilisons-nous pas des architectures informatiques qui calculent réellement les choses dans un style fonctionnel? Par exemple, un ordinateur pourrait être constitué de "puces fonctionnelles" primitives telles que "concat", "mapper" et "réduire", et un programme dirait simplement à l'ordinateur comment faire circuler les données entre ces puces afin de calculer le résultat souhaité , comme dans les langues concaténatives.

croquis absurde

Cela n'a pas vraiment de sens mais pourrait illustrer ce que je pense.


5
Ne pas avoir le lien à portée de main, mais une puce Haskell a été créée, les systèmes experts avaient également du matériel spécialisé. Je pense que vous seriez peut-être plus proche du paradigme carte / réduction du matériel qu'autre chose. Le seul avantage de perf pour FP est l'évolutivité au parallélisme. De toutes les autres façons, fp est moins performant car il est moins fin dans ses instructions en raison d'un niveau d'abstraction plus élevé. Au niveau métal, la performance est reine, et d'ailleurs même au niveau abstraction mathématique, tout est impératif dans l'exécution. Calculez 2 * 3 + 5 sans effectuer deux étapes ordonnées. Tout est impératif
Jimmy Hoffa

3
@ Lien de puce haskell hors main de JimmyHoffa : Reduceron .
Dan D.

1
Vous pourriez également être intéressé par Verity qui est un compilateur pour un calcul Lambda appelé par nom avec une récursion d'ordre supérieur et affine qui a également des effets locaux impératifs sur le matériel statique via VHDL.
Dan D.

5
@Dokkat: if we could make a specialized chip for Filter, for example, it would need just a single clock for a Filter operation. Pas vraiment, car Filter n'est pas "une opération"; c'est une fonction d'ordre supérieur qui applique une opération externe arbitraire à une liste. Vous ne pouvez pas réduire cela à un seul cycle d'horloge.
Mason Wheeler

2
@Dokkat C'est une fonction d'ordre supérieur, car elle prend en entrée une fonction. La spécificité ridicule est ce qui fait de votre exemple quelque chose qui peut être fait "en une seule opération". La fonction de prédicat spécifique est constante, et donc ce n'est pas vraiment un vrai filtre. Faire un filtre qui prend une fonction de prédicat arbitraire ne peut pas être réduit à un seul cycle d'horloge car vous n'avez aucun contrôle sur le nombre de cycles d'horloge que prend la fonction d'entrée.
Chewy Gumball

Réponses:


11

Ils font des ordinateurs comme ça. Cela s'appelle un FPGA . Bien sûr, les FPGA prennent en charge la logique séquentielle et combinatoire, mais rien ne vous empêche d'utiliser simplement la partie combinatoire comme vous le suggérez.

En pratique, cependant, la logique séquentielle (du type avec état) est extrêmement utile même au niveau de la puce. D'une part, il réduit considérablement le nombre de portes logiques nécessaires pour résoudre un problème. D'autre part, il résout de nombreux problèmes de conception liés à des signaux ayant des retards de propagation différents.

Si vous êtes intéressé par ce genre de chose, les FPGA valent la peine d'être vérifiés. Il existe une planche peu coûteuse de type arduino appelée papilio , idéale pour les débutants. Les gens l'utilisent pour tout, du contrôle du robot à l'extraction de bitcoins.


Merci pour la réponse, je lis la page de Wikipedia à ce sujet - mais le FPGA n'est-il pas un matériel programmable générique plutôt qu'un matériel spécialisé pour la programmation fonctionnelle, comme sur mon croquis?
MaiaVictor

1
Google "algorithme de tri fpga" si vous voulez voir comment cela se fait. Ce que vous avez dessiné est un circuit logique combinatoire programmable, qui est précisément ce pour quoi un FPGA est conçu.
Karl Bielefeldt

Splendide, je ferai mes recherches!
MaiaVictor

si vous n'avez pas de séquençage du tout, vous regardez vraiment l'électronique analogique
jk.

2
@jk Ce n'est pas vraiment vrai; prenons par exemple l'unité arithemtic-logique dans une CPU simple qui est numérique et (pure) combinatoire.
m3th0dman

8

Essentiellement, oui, les ordinateurs analogiques fonctionnaient de cette façon: vous changiez les paramètres et un courant électrique était modifié en conséquence. C'est ce qui les a rendus "plus rapides", pendant un certain temps, dans les années 1950 - vous ne vous êtes pas souciés de la lente création et modification des "états" séparés comme dans les mastodontes numériques d'autrefois.

Et sans doute, les ordinateurs quantiques pourraient également fonctionner de cette façon: si l'état de certains phénomènes quantiques dépend de l'état d'autres, alors changer un état "initial" changera simultanément les états suivants - pas d '"états" entre les deux.


3
+1 pour mentionner les ordinateurs quantiques, je pense que la capacité de faire des choses comme l'OP suggère sera le principal avantage de ces derniers lorsqu'ils se matérialiseront réellement
Jimmy Hoffa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.