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?
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?
Réponses:
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?
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:
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.
Clojure, Scala et F # sont des langages fonctionnels moins purs, mais plus pratiques et populaires. F # est également favorable au style sans point.
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 .
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.
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:
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 .