2010-01-06 4 views
1

Si je conçois un nouveau langage avec l'inférence de type, aucun type explicite et aucune prise en charge de l'héritage de classe et souhaitez ajouter l'héritage, quelles sont les minimum indications supplémentaires au compilateur résoudre l'ambiguïté de type lors de l'ajout de la fonctionnalité?obtenu l'inférence de type, voulez ajouter l'héritage de classe

Les noms de classe sont-ils nécessaires?

EDIT

Le type-altération est tracée au moyen d'affectations dans tout le programme y compris entre les fonctions.

OK dans la langue de départ, vous avez des noms de classe comme MyTypeName1 de choses comme:

myVariable1 = New(MyTypeName1) 
myVariable2 = New(MyTypeName2) 

et types MyTypeName1 et MyTypeName2 sont inférées pour myVariable1 et myVariable2 respectivement. Mais si nous voulons améliorer la langue pour soutenir:

MyVariable3 = myVariable1 
MyVariable3 = myVariable2 

qui peut être tracée à travers le code (myVariable3 peut maintenant contenir deux types qui sont sans doute dans une hiérarchie).

EDIT

Les membres de MyTypeName1 et MyTypeName2 sont déduites des déclarations comme:

myVariable1.name="Fred" 
myVariable2.name="JX3009" 

si le membre name dans MyTypeName1 et MyTypeName2 ne doivent pas être dans une classe de base commune? Que faire si nous voulons une propriété de nom différente dans MyTypeName1 et MyTypeName2 et aucune dans une classe de base? Existe-t-il une manière élégante de dire au compilateur quoi faire/comment manipuler? (L'idée avec l'inférence de type est de réduire le typage et non de l'augmenter ...?)

Ou devons-nous spécifier explicitement la hiérarchie?

+3

Question de devoirs? –

+2

Jim: Si c'est le cas, je suis content que ce ne soit pas mes devoirs, parce que je me bats vraiment pour savoir de quoi il parle :) –

+1

C'est un plaisir de te faire chier messieurs. :) – martinr

Répondre

1

Ce champ contient des résultats indécidables, mais je les ai tous oubliés. Si vous êtes prêt à confondre l'héritage avec le sous-typage, alors vous n'avez aucun problème. Si vous voulez quelque chose de plus ambitieux (et il semble que si vous le faites), je jeter un oeil à

  • le manuel de Benjamin Pierce Types and Programming Languages, qui couvrira les résultats de base pour la largeur et le sous-typage de profondeur et comment ils le font ou ne jouez pas bien avec l'inférence de type. (Je regarderais moi-même mais ma copie est au travail.)

  • Fran & ccedil; thèse de doctorat de Pottier.

Un autre nom pour vérifier est Joe Wells, qui a été responsable d'un grand nombre de résultats d'indécidabilité dans les systèmes de type et langages de programmation.

Quels sont les minimum conseils supplémentaires au compilateur nécessaire pour résoudre l'ambiguïté de type?

S'il y a une réponse unique à cette question, je serai très surpris.Je pense qu'il est beaucoup plus probable que ce soit un de ces problèmes de conception de langage où il y a un tas de solutions qui sont strictement incomparables en ce qui concerne la minimalité et les annotations.

Questions connexes