Qu'est-ce qu'une architecture pratique non von Neumann?


16

Existe-t-il des applications pratiques pour les modèles de programmation autres que von Neumann? Quels sont les langages de programmation non von Neumann les plus largement adoptés?


6
qu'est-ce qu'un modèle de programmation "non-von Neumann"?
Suresh Venkat

Je ne comprends pas non plus la question, vous pouvez peut-être ajouter un peu de contexte à la question afin qu'il devienne plus facile de comprendre ce que vous demandez.
Kaveh

3
L'architecture von Neumann a un CPU. par conséquent, une architecture de traitement parallèle n'est sans doute pas von Neumann (l'architecture neumann a été inventée avant le traitement parallèle). mais d'accord, la question semble ambiguë ou floue. von neumann fait référence à une architecture informatique, pas vraiment à un modèle de programmation. le modèle de programmation et l'architecture cpu / informatique existent dans une sorte de synergie / symbiose mais sont aussi quelque peu indépendants les uns des autres .... différentes architectures peuvent implémenter différents modèles de programmation sans que le modèle de programmation soit "couplé" à l'architecture ...
vzn

1
Qu'est-ce qu'un langage de programmation non von Neumann ? D'ailleurs, qu'est-ce qu'un langage de programmation von Neumann? (Je ne trouve pas la définition de Backus --- essentiellement "langages impératifs" --- même un tout petit peu convaincante.)
Jeffε

1
@Ronny: La page Wikipédia ne fait que lire l'article de Backus.
Jeffε

Réponses:


12

Quand je dis «architecture von Neumann», je veux dire du matériel limité par le «goulot d'étranglement von Neumann» - c'est-à-dire qu'il a toutes les données acheminées via un bus de données étroit.

Les langages de programmation non von Neumann que je rencontre le plus souvent sont VHDL et Verilog . Dans VHDL et Verilog, par défaut, tout se passe en même temps. Le programmeur doit faire un effort supplémentaire pour faire se produire une série d'événements dans un ordre séquentiel. C'est très différent de la plupart des autres langages de programmation qui impliquent un "pointeur d'instruction" qui, par défaut, exécute au plus une ligne de code à un instant donné, et le programmeur doit faire des efforts supplémentaires pour que plusieurs choses se produisent simultanément. temps.

Certaines personnes diraient que c'est un défaut plus naturel. Beaucoup d'étudiants en programmation commencent à attendre une boucle "while (x> 0) {...}" pour quitter l'instant où x devient égal à zéro, et ils sont surpris d'apprendre que l'ordinateur n'évalue pas continuellement cette condition.

La plupart des gens qui écrivent du code VHDL et Verilog compilent leurs programmes sur des FPGA, créant de petits blocs d'activité qui s'exécutent à pleine vitesse tout le temps. Souvent, ces personnes mettent en place un «pipeline» qui lit les données des broches d'entrée, les traite à travers une série de blocs, les broches de sortie d'un bloc directement câblées aux broches d'entrée du bloc suivant, et le bloc final envoie le résultat les broches de sortie. Cela rappelle le pipeline Unix , sauf qu'une nouvelle donnée entre et une nouvelle donnée sort à chaque cycle d'horloge.

Les broches d'entrée, les étages intermédiaires et les broches de sortie sont tous indépendants les uns des autres - vous n'avez pas à réutiliser un seul bus de données multiplexé entre les différentes données.

Vous pourriez également être intéressé par: Existe-t-il d'autres architectures informatiques en dehors des architectures von neumann / turing?


11

Je suppose que par non-Von Neumann, vous voulez dire les langues qui ont contourné le "Von Neumann Bottleneck" selon l'article de Backus "La programmation peut-elle être libérée du style Von Neumann?". Pour les personnes intéressées, vous pouvez en trouver une copie ici: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

La réponse à votre question devra être ambiguë pour plusieurs raisons.

Premièrement, quelles langues satisfaisaient aux critères de son article? Bien qu'il y ait ceux qui retracent la programmation fonctionnelle dans cet article, c'est maintenant considéré comme un malentendu car il signifiait quelque chose comme la programmation sans point. Alors, allez-vous avec le malentendu original ou la véritable intention du document? Pour un peu d'élaboration sur ce qu'il voulait dire, veuillez consulter ce qui suit: http://en.wikipedia.org/wiki/Function-level_programming

Deuxièmement, si vous allez avec le malentendu, comment fonctionnel est fonctionnel? Vous avez des langages fonctionnels purs, des langages fonctionnels impurs et des langages relativement conviviaux au paradigme fonctionnel. Étant donné que vous mentionnez la popularité et qu'il existe une relation inverse entre cela et la pureté fonctionnelle, quelles langues devraient être incluses? Voulez-vous le langage fonctionnel pur le plus populaire (qui ne serait pas du tout populaire), ou un langage plus populaire qui réponde à certains critères minimaux de "fonctionnalité"? Dans ce dernier cas, quels sont ces critères?

Donc selon votre point de vue:

  1. Haskell est le plus populaire des langages fonctionnels complètement purs que je connaisse et il y a des applications écrites dedans. Cependant, bien qu'il soit un poids lourd dans la communauté de programmation fonctionnelle, il n'est pas populaire dans la communauté de programmation plus large. De plus, l'ayant utilisé, je ne pensais pas qu'il était pratique pour une utilisation dans le monde réel, et il semble être apprécié pour un travail théorique. Il permet un style sans point, vous pouvez donc aborder certains des objectifs de Backus avec cela.

  2. Clojure, Scala et F # sont des langages fonctionnels moins purs, mais plus pratiques et populaires. F # est également favorable au style sans point.

  3. Forth est peut-être l'exemple prototypique d'un langage sans points, et il était assez répandu à l'époque, bien que maintenant ... Factor est un autre langage sans points qui a attiré l'attention, mais je doute qu'il corresponde à la popularité de Forth à son apogée .

  4. APL a été mentionné par Backus à un moment donné (peut-être pas dans son article) comme étant un pas vers, mais pas entièrement compatible avec ses objectifs. À l'époque, elle était importante dans le secteur financier. N'oubliez pas de vérifier ses descendants, comme J.

  5. JavaScript n'est pas fonctionnel, mais il est assez convivial pour un style de programmation d'ordre supérieur, comme en témoigne son utilisation intensive des fermetures. Compte tenu de sa popularité, il pourrait bien répondre aux critères. Assurez-vous de vérifier certaines des choses intéressantes faites avec JavaScript, comme le curry et l'implémentation de combinateur.

En note de bas de page, pour vous donner plus de perspective sur ses objectifs, vous pouvez consulter les deux langues qu'il a conçues pour répondre à ses critères. Ils ne sont pas du tout populaires AFAIK, donc ce serait purement par souci de savoir:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
Il semble maintenant qu'il voulait dire quelque chose comme la programmation sans point plutôt que la programmation fonctionnelle - y a-t-il un pointeur vers une discussion à ce sujet? Ça semble intéressant.
Suresh Venkat

Le modèle de programmation de Backus est appelé "Programmation au niveau des fonctions", et il y a un article ici: en.wikipedia.org/wiki/Function-level_programming . Je ne connais pas de très bons liens (j'aimerais savoir si vous en trouvez!), Mais googler "Function-level Programming" révèle des liens intéressants, y compris une vidéo.
Ronny

1
@SureshVenkat: Les langages FP et FL ont été créés par Backus spécifiquement pour soutenir son idée de programmation au niveau des fonctions. Voir aussi "programmation tacite" et plus spécifiquement le langage J , qui combine APL et FP / FL pour créer ce qui peut être à la fois le langage polyvalent le plus cryptique et le plus expressif en utilisation réelle. Je me souviens également d' un article sur SO sur l'utilisation de la programmation tacite dans les langages fonctionnels.
CA McCann

Soit dit en passant, la chronologie de ce post semble significativement erronée. La programmation fonctionnelle (dans les traditions Lisp et ML) est antérieure à la conférence du prix Turing de Backus, tout comme la plupart ou tous les paradigmes de programmation existants - y compris la programmation au niveau des fonctions elle-même, sous la forme de logique combinatoire , qui est antérieure à la fois au calcul lambda de Church et au calcul de Turing. travailler sur la théorie du calcul! (Oh, et je préfère de loin utiliser Haskell à des fins pratiques plutôt que des atrocités comme Javascript.)
CA McCann

@camccann Je n'ai jamais défini de chronologie dans le message. En outre, Lisp est trop large pour soutenir toute affirmation. Par exemple, tous les Lisps ne sont pas fonctionnels car tous ne sont pas récursifs à la queue. J'aime votre référence à la logique combinatoire, mais je pense que le point de Backus était d'avoir un langage avec lequel programmer un ordinateur qui prend en charge le paradigme. Par conséquent, bien que la logique combinatoire éclaire son argument, cela n'affecte finalement pas son argument.
Ronny

2

Je pense que la programmation Linda et tuplespace pourrait faire l'affaire. Les opérations de mémoire d'association / correspondance de modèle avec la simultanéité signifient que (conceptuellement) le goulot d'étranglement de Von-Neuman est éliminé.

En allant dans cette direction, un pur langage de modèle d'acteur modélise également la communication plutôt que la séquence d'instructions. Et bien qu'il s'agisse de formalismes et non de véritables langages de programmation, les calculs de processus comme le calcul Pi, le CSP et les réseaux de Petri modélisent la communication de manière connexe.

Voir wikipedia pour les liens (je suis un nouvel utilisateur et sous protection anti-spam), mais pour un peu d'humour sophomorique concernant le nom de Linda, lisez http://c2.com/cgi/wiki?LindaEtymology .

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.