2010-08-16 12 views
3

En regardant certaines fonctionnalités du langage, je me demande parfois comment quelqu'un pourrait implémenter une fonctionnalité comme celle-ci. Donc, ma question est, laquelle des nombreuses fonctionnalités de langue existantes sont le plus difficile à mettre en œuvre? Une explication pourquoi est-elle la plus bienvenue (peut-être même nécessaire?).Quelles fonctionnalités linguistiques sont les plus difficiles à implémenter et pourquoi?

Pour maintenir l'ordre, veuillez ne fournir qu'une seule fonctionnalité par publication.

Répondre

4

MHMH - n'a pas encore été demandé?

Manipulation efficace de la fermeture. Comme les fermetures sont utilisées dans Lisp et Smalltalk (appelé "Bloc" là-bas) MUCH plus souvent que dans presque tous les autres langages de programmation, la mise en œuvre doit être très rapide. L'allocation de pile est ce que nous voulons pour la vitesse. Mais, comme les fermetures «réelles» peuvent survivre à la définition du cadre de pile de méthodes, il faut prendre soin de les retirer de la pile si nécessaire. Les fermetures sont utiles partout: callbacks, protocoles d'énumération/de collection, longjumps, files d'attente pour les travailleurs, protocoles d'observateur, évaluation retardée (futures et fainéants) et bien d'autres. BTW: JavaScript prend également en charge les fermetures!

+0

En outre, Ruby s'appuie beaucoup sur des blocs (fermetures). La plupart des boucles Ruby sont mises en œuvre en utilisant des fermetures. Aussi, probablement l'une des raisons de la mauvaise réputation qui suit les implémentations de Ruby pour leur mauvaise performance. :) –

2

Même les fonctionnalités de langage les plus étranges et complexes, telles que les modèles C++, sont en réalité relativement faciles à implémenter. Ce qui est vraiment difficile, c'est d'implémenter ces fonctionnalités efficacement.

Pour moi, la caractéristique la plus difficile était de se lancer dans des langages de type ML. Trivial pour une mise en œuvre ad hoc, il est assez difficile si vous voulez qu'il soit efficace sur un matériel de stock. Voir toute implémentation ML décente pour plus de détails.