2010-12-12 42 views
0

MISE À JOUR: Reçu beaucoup d'excellentes informations, merci - est revenu pour lire ma question encore, basé sur certaines des réponses indiquant qu'il est possible de faire XYZ, qui n'est pas la question. Le cœur de la question est: "L'objectif principal de cette question est de trouver une réponse en anglais, expliquant pourquoi Python, Perl et Ruby sont ce qu'ils sont quand il s'agit de les transférer dans une autre langue."En anglais, quelle est la différence entre Python, Perl et Ruby quand il s'agit de les traduire dans une autre langue?


regardé les différences entre Perl, Python et Ruby - et je l'ai trouvé ce qui m'a été l'une des différences les plus intéressantes à ce jour, que d'être qu'il semble qu'il est possible de transcribe Python into C , mais il n'est pas possible de transcrire Perl into any language. Je n'ai rien trouvé à propos de Ruby, mais deviner que c'est l'approche de 99,99% de tout ce qui est un objet pourrait rendre cela difficile, voire impossible, de faire une transcription dans une autre langue.

Le but principal de cette question est de trouver une réponse en anglais, expliquant pourquoi Python, Perl et Ruby sont ce qu'ils sont quand il s'agit de les porter dans une autre langue.

+2

Voici une question Perl-> Python sur un sujet similaire: http://stackoverflow.com/questions/3399781/why-is-it-not-possible-to-create-a-practical-perl-to- python-source-code-converter –

+7

Votre prémisse n'est pas correcte. Il est possible de convertir toutes ces langues entre elles. Ce n'est pas pratique. – kikito

+0

@Pavel Shved: +1 Merci, ce fut une aide énorme, presque même une réponse à ma question. – blunders

Répondre

2

Je comprends ce que vous demandez, mais ce n'est pas la bonne question (j'y reviendrai dans un instant). La réponse est parce que Perl n'est pas défini par une définition formelle du langage. Perl est quelque peu inhabituel dans la mesure où la référence pour le langage EST l'implémentation de l'interpréteur. D'autres langages tels que Python et C ont une définition de langage. Cette définition est la référence et le compilateur/interpréteur est implémenté pour se conformer à cette définition.

Cette référence permet à quelqu'un de prendre les étapes lexer/parser pour une langue et de l'appliquer à l'inverse de l'arbre syntaxique d'une autre langue.

ie.Python Lexer -> Python Parson -> AST -> C Parser -> C Lexer

Cela vous permet de créer facilement un programme de retranscrire Python à C. Bien sûr, il est pas facile, mais vous voyez l'idée .

Pour Perl, il n'y a pas de référence autre que l'interpréteur Perl. Parce qu'il y a une référence, il est possible de créer un programme qui va traduire le code, CEPENDANT ce serait très difficile par rapport à un langage qui avait leur référence en BNF (par exemple).

La question que vous vouliez poser est la suivante:

Pourquoi est-il tellement plus difficile de traduire automatiquement Perl à C et vice-versa, que Python à C?

+0

+1 J'ai entendu ça, merci. Donc, est-ce vraiment plus la raison que les raisons énumérées ici: http://stackoverflow.com/questions/3399781/why-is-it-not-possible-to-create-a-practical-perl-to-python- source-code-converter – blunders

+0

En vous choisissant comme réponse, car cela m'a conduit à trouver la réponse que je cherchais, et j'ai abordé la question en couvrant un autre sujet. À votre santé! – blunders

10

Ce n'est pas qu'il est impossible de les traduire, car n'importe quel langage Turing-complete peut émuler n'importe quel autre langage Turing-complet. Le problème génère une traduction efficace, car certaines langues prennent en charge des fonctions qui sont très difficiles ou très complexes à émuler dans un autre.

+4

Turing-complétude implique également qu'il sera impossible de vérifier * l'exactitude * d'une telle traduction en général. – reinierpost

+0

@reinierpost: +1 Intéressant, merci de le signaler. À votre santé! – blunders

7

Votre question fait peu — si un — sens, surtout compte tenu des questions que vous avez lié.

Lecture Why not translate Perl to C? peut vous aider à donner un sens à la vie, à l'univers et à tout.

+0

@Sinan Ünür: Mon but n'est pas de traduire Perl en C, bien que cela ait été une requête d'un client; Pour moi, ce serait une question différente. Mon but est d'avoir une compréhension de haut niveau de ce qui rend cela possible en Python, mais aussi pourquoi l'approche de Perl est si différente que ce n'est pas possible; ce qui n'est pas une mauvaise chose, juste différent. Donc, loin le lien de Pavel Shved à cette question a été le plus utile: http: // stackoverflow.com/questions/3399781/pourquoi-est-ce-pas-possible-de-créer-un-pratique-perl-à-python-source-code-convertisseur – blunders

+2

La mesure dans laquelle la question est inutile est indépendante du langage de script Dans la question. Par, la façon dont le point de l'article "Pourquoi ne pas traduire Perl en C?" n'est pas qu'il n'est pas possible de traduire Perl en C mais qu'il n'y a aucune raison pour laquelle un ι d'énergie mentale ne devrait pas être gaspillé sur la tâche. –

+0

@Sinan Ünür: Ce qui est drôle, c'est que Sinan considère que c'est une faiblesse de Perl, et qu'il manque le point de cette question, qui est la différence entre Perl, Python et Ruby. Runtime n'a rien à voir avec le point de la question. N'hésitez pas à harponner sur la gravité de la question, vous ne faites pas de Perl ou de la communauté des faveurs. Au lieu de cela, vous pourriez vous concentrer sur - pourquoi - ceci est spécial, et fait de Perl un langage pour lui-même. – blunders

4

Toute langue Turing-complete peut être traduite dans n'importe quel autre langage complet, cela demande beaucoup d'efforts et peut paraître très moche. Perl est spécial car son analyseur est plein de cas particuliers, mais cela ne rend pas Perl impossible, juste très dur. Python a une grammaire plutôt sympa et est facilement analysable. Ruby a quelques particularités de Perl, mais est relativement propre. Pensez-y comme ceci: Chaque langue exécute le code sur votre CPU tôt ou tard. Vous pouvez toujours prendre ce code machine et le "décompiler" dans n'importe quel langage de niveau supérieur, mais en fonction de la complexité du code, vos résultats pourraient ne pas être très utiles à comprendre pour les humains.