Question

Comment se fait la plupart des Lisps et schémas sont typés dynamiquement? Est-ce que le typage statique pas mélanger avec certains de leurs traits communs?

Était-ce utile?

La solution

Saisie et s-expressions peuvent être faits pour travailler ensemble, consultez la page dactylographiée système .

En partie, il est une coïncidence historique que les langues s-expression sont typés dynamiquement. Ces langues ont tendance à appuyer davantage sur macros , et la facilité d'analyse syntaxique et de correspondance des modèles sur les s-expressions rend le traitement macro beaucoup plus facile. La plupart des recherches sur les macros sophistiquées qui se passe dans des langues s-expression.

dactylographié hygiénique macros sont difficiles.

Autres conseils

Quand Lisp a été inventé dans les années 1958-1960, il a introduit beaucoup de fonctionnalités à la fois comme une langue et une mise en œuvre (collecte des ordures, un compilateur auto-hébergement, ...). Certaines fonctionnalités ont été héritées (avec quelques améliorations) d'autres langues (traitement de liste, ...). Le langage mis en œuvre avec des fonctions de calcul. Les s-expressions étaient plus un détail de mise en œuvre (à l'époque), d'une fonction de la langue. Un système de type ne faisait pas partie de la langue. En utilisant la langue de manière interactive a également une fonction de mise en œuvre rapide.

Les systèmes de type utiles pour les langages fonctionnels n'étaient pas encore inventé à ce moment-là. Encore jusqu'à aujourd'hui, il est relativement difficile aussi d'utiliser les langues statiquement typés de façon interactive. Il existe de nombreuses implémentations de langages statiquement typés qui offrent également une interface interactive - mais la plupart du temps, ils ne proposent pas le même niveau de soutien de l'utilisation interactive comme un système Lisp typique. Programmation en un moyen de système interactif Lisp que beaucoup de choses peuvent être changées à la volée et il pourrait être problématique si le type des changements devaient se propager à travers des programmes entiers et des données dans un tel système Lisp interactif. Notez que certains intrigants ont une vision différente de ces choses. R6RS est surtout une langue de lot généralement pas grand-chose dans l'esprit de Lisp ...

Les langages fonctionnels qui a obtenu inventées plus tard avec les systèmes de type statique, puis a également obtenu une syntaxe non-s-expression - ils n'offrent pas de support pour les macros ou de fonctionnalités. plus tard, certaines de ces langues / mises en œuvre ont utilisé un préprocesseur pour les extensions syntaxiques.

Le typage statique est lexical, cela signifie que toutes les informations sur les types peut être déduite à partir du code source de lecture sans évaluer les expressions ou calcul des choses, conditionals étant le plus important ici. est conçu un langage typé statiquement pour que cela puisse se produire, un meilleur terme serait « lexicalement typé », comme dans un compilateur peut prouver la lecture de la seule source qu'aucune erreur de type se produisent.

Dans le cas de Lisp, c'est gauchement différent parce que le code source de Lisp lui-même est pas statique, Lisp est homo-iconique, il utilise les données que le code et peut dans une certaine mesure modifier dynamiquement sa propre source de fonctionnement.

Lisp a été la première langage typé dynamiquement, et probablement pour cette raison, le code de programme lui-même n'est plus lexical en Lisp.

Edit: une raison beaucoup plus puissante, dans le cas de typage statique que vous auriez à taper des listes. Vous pouvez avoir des types extrêmement complexes pour chaque liste qui représentent tous les éléments, de la demande que chaque élément a le même type et type comme une liste de cela. La première option produira l'enfer avec des listes de listes. Cette dernière option exige que le code source ne contient que le même type pour chaque donnée, cela signifie que vous ne pouvez même pas construire des expressions comme une liste est en tout cas un type différent d'un nombre entier.

Je ose dire qu'il est complètement et totalement infaisable à réaliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top