2017-06-12 2 views
7

En regardant le source for Int, je vois que toutes les classes sont déclarées avec my, que j'aurais pensé les rendre privées et non disponibles en dehors de ce fichier. Mais, ils le sont évidemment. Pourquoi ont-ils besoin d'être déclarés comme ça?Pourquoi toutes les classes de src/core/Int.pm de Rakudo sont-elles déclarées avec mes?

my class Rat { ... } 
my class X::Numeric::DivideByZero { ... } 
my class X::NYI::BigInt { ... } 

my class Int { ... } 
my subset UInt of Int where {not .defined or $_ >= 0}; 

my class Int does Real { # declared in BOOTSTRAP 

Je pense que le commentaire BOOTSTRAP a quelque chose à voir avec ça. Dans le Perl6/Metamodel/BOOTSTRAP.nqp il y a des lignes comme:

my stub Int metaclass Perl6::Metamodel::ClassHOW { ... }; 

Répondre

7

Les fichiers dans le répertoire de Rakudo src/core/ ne sont pas compilés sous forme de modules séparés avec leur propre champ au niveau du fichier privé, mais concaténés dans un seul fichier, comme gen/moar/CORE.setting lors de la construction proceess. Sémantiquement, ce 'setting' (connu sous le nom de 'prélude' dans d'autres langages) forme une portée lexicale externe entourant implicitement votre programme.

La conception est décrite dans S02: Pseudo-packages, et des parties de cette section l'ont transformée en official documentation.

+0

Eh bien, le design pourrait être décrit dans ces documents, mais je n'aurais pas pensé qu'il était connecté à ce qui se passait dans Int.pm. Merci, –