Je suis un nouveau venu à SmallTalk, et je l'ai appris à grincer. Mais je trouve beaucoup de choses déroutant en smalltalk. Dans SCREAK, Bien sûr, je peux créer les objets de grincement maintenant, car la classe code> METACLASS Y a-t-il quelque chose qui ne va pas avec le raisonnement ci-dessus? Merci d'avance. P> METACLASS CODE> ET
La classe de métaclass code> est la classe de l'autre mutuellement mutuellement. Si je veux créer l'objet
métaclass code> i doit envoyer un message
nouveau code> à sa classe qui est
classe métaclass code>. Mais cela devait déjà exister comme un objet en premier lieu d'accepter le message. Donc je dois créer l'objet
la classe métaclass code> d'abord, ce qui ne peut être effectué qu'en envoyant un message
nouveau code> à l'objet
métaclass code> qui n'a pas été créé encore. Donc, c'est un problème de poulet ou d'œuf. P>
et
Les objets code> ont déjà été créés par magie par magie lorsque vous êtes ouvert. Mais je ne sais pas comment. Peut-être qu'ils sont créés plutôt plutôt en envoyant des messages. Mais ensuite, il contredit les esprits de SmallTalk: tout se passe en envoyant des messages sauf quelques points (déclaration variable, affectations, retours et primitives). P>
3 Réponses :
Votre question est double, répondons-leur séparément. P>
Comment les classes dépendantes mutuelles sont-elles créées? strong> p>
Vous avez raison, Cela dépend du smalltalk que vous utilisez. Pour GNU SmallTalk, je ne suis pas sûr, mais pour les descendants de l'original SmallTalk-80 (Visualworks, Vaaka Visualage, Squeakpharo), sont créés dans un processus de bootstrap qui crée une image initiale. P>
Cependant, au moins pour grincement, cette bootstrap s'est produite au moins 15 ans, sinon plus. Histoire longue, les deux classes sont créées en dehors du traitement d'image typique et liées manuellement. p>
Mais si les objets sont âgés d'années, cela conduit à la question p>
Que se passe-t-il au démarrage de SmallTalk? strong> p>
Contrairement aux langues telles que Ruby ou Python, qui sont également orientées objet, SmallTalk n'a pas besoin de créer un environnement d'objet de base avec des objets tels que Lorsque SmallTalk sauve et s'arrête, cela prend essentiellement un instantané de tout son objet et enregistre l'objet en direct dans un fichier. Quand il recommence, il suffit de lire les objets de l'instantané et de "les faire revivre". p>
Par conséquent, pour métaclass code> et
classe de métaclass code> est une singularité dans la hiérarchie parallèle des classes de SmallTalk et des métaclasses. Comment sont-ils créés? p>
METACLASS CODE> Et sa classe peut même être aussi âgée que 30 ans. p>
objet code> à chaque démarrage. Pourquoi? P>
métaclass code> et
METACLASS Classe code>, les deux objets sont lus à partir de l'instantané et relancé, et à partir de ce point, ils sont entièrement fonctionnels; ils n'ont plus besoin d'être créés manuellement. p>
Est-ce qu'après que je définis une classe, telle que a code>, l'objet
A code> sera créé par SmallTalk System et sera enregistré à l'image lors de la fermeture?
Oui, lorsque vous enregistrez l'image, l'objet de la classe A code> survivra.
Le processus "automatiquement créé" s'appelle en fait bootstrapping . C'est ainsi que le problème du poulet et de l'œuf est résolu. Une fois que le système est bootstraduit, tout le reste peut être exprimé en termes de système lui-même. Donc, il n'ya aucune contradiction avec la philosophie de SmallTalk que tout se passe en envoyant des messages, car il ne devient qu'un système de smalltalk une fois qu'il est bootsTrapped. P>
Je vous laisse continuer la liste par vous-même. p>
Quelle que soit la mise en œuvre, la question ultime est de savoir si vous pouvez ou non concevoir un système auto-décrivant comme SmallTalk sans ces étranges boucles, et vous pouvez grever une réponse non si positive si vous suivez les sulfinks de http://fr.wikipedia.org/wiki/kurt_g%C3%B6Del#The_incompéeness_theorem < / p>
liée au problème de bootstrap rencontré avec un tel système, une manière efficace consiste à se cloner pour se changer, et ceci est particulièrement vrai dans la petite image lorsque vous souhaitez modifier des classes de base que vous utilisez pour changer / décrire les classes. de Et voici comment il a été résolu: em> http: // fr. wikipedia.org/wiki/drawing_hands p>
Le dernier point, j'aurais préféré lire, consistance incroyable de SmallTalk em> strong>, mais je suis définitivement biaisé. P> METACLASS Class Class = METACLASS CODE> est un exemple académique classique d'étrange boucle. Mais si vous vous renseignez un peu, vous pourriez trouver beaucoup d'autres dans SmallTalk. P>
Superclass Superclass Class Superclass = Objet Code>) LI>
ModyDictionary ModyDictionary Class = ModyDictionnaire code>). Li>
BYTESYMBOL Nom Class = BYTESYMBOL CODE>). LI>
Sous-classes de superclasses de réseau = tableau code>). LI>
(SmallTalk Globals à: #smalltalk) = SmallTalk code>). Li>
ul>
D'où ma réponse précédente et concise supprimée en appliquant la lettre des règles ( https://stackoverflow.com/help/DeLEted-answers ) Plus que l'esprit à mon avis: P>
Est-ce que " une consistance incroyable de SmallTalk i>" Un livre? Mais je ne trouve pas beaucoup d'informations sur Google.
Ne vous inquiétez pas, la qualité de la modération sur Stackoverflow est terrible. Cela doit être attendu avec le niveau de connaissance actuel de celui-ci. Règles majoritaire
@spockwang Ce n'est pas un livre, c'est une référence au fait que Smalltalk est beaucoup plus cohérent que toute langue traditionnelle