Silex v0.47.1 / Docs Source canonique ↗

Composer des fragments portables et ciblés

Un package nommé peut fournir le même chemin relatif dans sa racine portable, sa racine de plateforme et sa racine de cible exacte :

Module/Randomizer.sx
Platform/MacOS/Module/Randomizer.sx
Target/macos-arm64/Module/Randomizer.sx

Pour la cible active, ces fichiers contribuent au même module logique. Leurs portées lexicales ne fusionnent toutefois jamais.

Atteindre un fragment spécialisé

Le code portable nomme explicitement une déclaration spécialisée :

let handle:Platform.Handle = Platform.open()
let layout:Target.Layout = Target.layout()

Platform et Target sont des qualificateurs contextuels dérivés du package, du module logique et de la cible. Ils n'exigent aucun use et ne deviennent pas des espaces de noms exportés.

Chaque fichier conserve ses propres use et déclarations local. Les déclarations package restent partagées dans le package. Une déclaration spécialisée non publique est accessible seulement par son qualificateur ; une déclaration publique contribue à l'interface composée du module.

Préserver les frontières de package

Cette composition ne traverse normalement jamais un package. Deux packages qui partagent un préfixe de nom ne peuvent fournir le même module exact, sauf si le parent accorde au module principal exact de l'enfant la permission merge: true.

Cette fusion étroite compose uniquement les déclarations publiques, conserve le propriétaire de chaque déclaration et refuse toute collision de nom public. Les fragments de plateforme ou de cible, les modules plus profonds et les portées module ou package restent la propriété de leur package d'origine.

Revenir aux modules · Comprendre les frontières d'un package