J'écris mon premier langage de programmation orienté objet et jusqu'ici tout va bien avec la création d'une seule «classe». Mais, disons que je veux avoir des cours, disons ClassA
et ClassB
. À condition que ces deux-là n'aient rien à voir l'un avec l'autre, alors tout va bien. Cependant, disons ClassA
crée un ClassB
- ce qui pose 2 questions liées:
-Comment le compilateur saurait-il lors de la compilation ClassA
que ClassB
cela existe, et, si c'est le cas, comment sait-il que ce sont ses propriétés?
Jusqu'à présent, je pensais: au lieu de compiler chaque classe à la fois (c'est-à-dire scanner, analyser et générer du code) chaque "fichier (pas vraiment un fichier en soi, mais une" classe ") dois-je scanner + analyser chaque premier , puis générer du code pour tous?
la source
Les langues plus anciennes sont parfois plus strictes; considérez ce qui est possible en Java:
J'ai vu l'anti-pattern ci-dessus, et c'est vraiment moche (je l'aurais interdit). Les deux unités de compilation s’utilisent. Mais Ifc peut être compilé en code sans avoir d'implem compilé. Le code compilé, .class, comparable à un C .obj, contient des "informations de liaison:" une importation d'Implem, appelant un constructeur sans paramètre
Implem()
. La classe Implem peut ensuite être compilée sans problème. En partie le ClassLoader - faisant l'initialisation / la construction des données de classe JVM, et en partie la machine virtuelle Java elle-même, jouent un peu comme l' éditeur de liens , intégrant tout.Par exemple, la compilation avec une version d'une bibliothèque spécifique et son exécution avec une autre version de cette bibliothèque reconnaîtront les erreurs d'exécution.
Donc, la réponse: la compilation fournit des unités de code objet compilé, que l'on doit voir comme code + données + API pour les relier ensemble.
Le compilateur doit ensuite également effectuer un regroupement et vérifier l'API de liaison; une deuxième phase.
Cela peut irriter et paraître inélégant, mais les preuves mathématiques peuvent fonctionner de la même manière: en prouvant l'exactitude entière, on peut déjà considérer qu'une partie est vraie jusqu'à la vérification.
la source