2009-05-29 10 views

Répondre

5

Oui, définitivement ... ça va aussi dans l'autre sens: de nombreuses architectures matérielles sont conçues pour s'adapter à certaines langues.

  • Les architectures RISC sont une réponse à la migration de personnes vers des langages compilés comme C/C++.
  • BurroughsB5000 avait Algol au lieu de l'assembleur.
  • Il existe plusieurs différents Forth chips.
  • Lisp machine s ont été conçus pour fonctionner efficacement Lisp.
  • Les processeurs Java exécutent le bytecode Java dans le matériel.
  • Certains processeurs ARM ont (en option) Java acceleration technology.

Probablement beaucoup d'autres bons exemples sont disponibles.

+0

+ Battez-moi sur Burroughs et Lisp. Notez que l'architecture "call by name" d'Algol nécessitait une "liste d'affichage" (prédécesseur des "continuations" et des "expressions-lambda" d'aujourd'hui) et le supportait dans le matériel. –

+0

... Il y a eu un moment dans les années 70 et 80 où il a semblé que la prochaine vague devait générer, pas un langage machine spécifique à l'application (ce que font les compilateurs), mais des circuits intégrés spécifiques à l'application (ASIC). Alors, pendant un certain temps, le matériel essayait de devenir le nouveau logiciel. –

4

Oui, ils le font. Par exemple, le langage de programmation Occam a été initialement conçu spécifiquement pour l'architecture Transputer.

2

Peut-être est un peu d'une réponse intelligente cul, mais:

Les langages d'assemblage des processeurs concernés sont étroitement liés à l'architecture, donc, oui, il existent des langues où il est vrai.

Que présentent les mêmes langues de niveau supérieur est peut-être plus intéressant.

0

La plupart des langues ciblent Von Neumann architecture, ce qui constitue la base de la plupart des CPU.

Occam pour Transputer, mentionné par Neil Butterworth est une exception notable.

VHDL est une autre exception, basée sur le concept de flux de données, mais ce n'est pas un langage de programmation, c'est une description matérielle et un langage de simulation.

0

Le meilleur exemple connu est bien sûr c

+0

Pourriez-vous élaborer là-dessus? Pour quelqu'un qui a cette question, votre réponse n'est pas évidente et donc probablement pas utile. Pourquoi "bien sûr"? –

0

C a été écrit au début des années 1970, en fonction de DEC PDP-11 par exemple Sur le PDP-7, le langage de programmation B ne disposait que d'un type de données, mais en le transférant au PDP-11 qui avait des types de données de tailles différentes, les types de données pour les variables étaient ajoutés à la langue.

1

j'ai vu une discussion sur Google Video par Simon Peyton Jones qui a parlé à ce sujet. Il a mentionné qu'à l'époque les gens étaient très intéressés par l'écriture de matériel spécialisé pour exécuter une langue particulière, mais les gens ont trouvé une meilleure façon de résoudre le problème: rendre le compilateur plus intelligent. Jetez un oeil à Haskell. GHC produit un code ridiculement rapide à partir de constructions de haut niveau, mais Haskell est tellement différent de l'assembleur x86 que les deux semblent étrangers l'un à l'autre.Le même genre de chose s'est passé avec Java et Lisp: Java et Lisp sont très rapides sur les ordinateurs modernes et prennent un avantage décent de nos processeurs, mais Java a été initialement compilé pour un bytecode bizarre basé sur une pile et il y a longtemps, les gens construisaient des machines Lisp.

Voici la vidéo, soit dit en passant. La plupart d'entre elles ne sont pas pertinentes pour la question actuelle, mais vous pouvez trouver cela intéressant, c'est pourquoi «la programmation fonctionnelle est importante» et comment simplifier les tests unitaires.

http://video.google.com/videoplay?docid=-4991530385753299192&hl=en

Il a seulement été assez récent (dernière décennie?) Que les compilateurs ont été assez intelligents pour faire Haskell et Java presque aussi vite que C, même si aucun d'entre eux exposent une grande partie de l'architecture sous-jacente. Heck, GHC n'utilise même pas la pile, comment est-ce wacky?