Optimisation de l'inlining dans Go
Contrairement à certains langages, Go n'autorise pas l'inlining de fonctions explicites. Au lieu de cela, le compilateur évalue dynamiquement les fonctions pour une éventuelle inlining. Ce mécanisme est aidé par une option de débogage qui permet aux utilisateurs d'observer des scénarios potentiels en ligne. Cependant, la logique exacte derrière les décisions d'intégration du compilateur Go reste largement non documentée.
Considérez le code suivant, où une boucle chiffre les données de manière itérative à l'aide de la fonction Encrypt :
func Encrypt(password []byte) ([]byte, error) {
return bcrypt.GenerateFromPassword(password, 13)
}
for id, data := range someDataSet {
newPassword, _ := Encrypt([]byte("generatedSomething"))
data["password"] = newPassword
someSaveCall(id, data)
}
Copier après la connexion
Pour intégrer efficacement le Fonction de chiffrement, les considérations suivantes doivent être prises en compte :
-
Jusqu'à ce que les performances deviennent un problème, les optimisations en ligne sont inutiles. Les fonctions en ligne et non en ligne donneront le même résultat.
-
Lorsque les performances sont critiques, évitez les fonctions séparées. Au lieu de cela, incluez directement le body sans le définir indépendamment.
-
Modifiez l'indicateur de débogage 'l' pour un contrôle supplémentaire. Cet indicateur ajuste l'agressivité du processus d'inlining. Reportez-vous au fichier inl.go dans $GOROOT/src/cmd/compile/internal/inline/ pour les règles et directives.
-
Activez la sortie de diagnostic à l'aide de l'indicateur 'm'. Cela fournit un aperçu des appels intégrés ou exclus. Des valeurs plus élevées de « m » peuvent faciliter le débogage, mais il n'est pas garanti qu'elles persisteront dans les futures versions de Go.
-
Consultez l'article de blog de Dave Cheney (2014) : "Cinq choses qui rendent Go rapide" pour plus d'informations sur l'inlining.
-
Suivez la discussion dans le numéro GitHub #17566 pour les discussions en cours liées aux améliorations intégrées dans Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!