Je me base sur un vieux code Common Lisp écrit par d'autres, qui comprend des lignes telles que la suivante au début de quelques fonctions :
(declare (ftype (function (&rest float) float) + - * min max))
Si je comprends bien, le but est d'indiquer au compilateur que les cinq fonctions énumérées à la fin du formulaire ne recevront que des flottants. Le compilateur peut utiliser cette information pour créer un code plus efficace.
Certains Lisps ne se plaignent pas de cette déclaration (ABCL, CCL, ECL, LispWorks, CLISP), mais la SBCL n'acceptera pas cette déclaration dans la configuration par défaut. Il est possible de faire en sorte que SBCL l'accepte en plaçant
(unlock-package 'common-lisp)
dans le fichier d'initialisation .sbclrc. C'est ce que je fais depuis environ un an. Je suppose que c'est nécessaire parce que +, -, etc. sont dans ce paquet, et le code modifie les déclarations de ces fonctions.
Ma question est la suivante : la déclaration du type de fonction des fonctions intégrées telles que + et min peut-elle avoir un effet bénéfique sur le code compilé dans SBCL ? (Si c'est le cas, alors pourquoi SBCL se plaint-il de ces déclarations par défaut ?) Serait-il préférable de supprimer ces déclarations de type de fonction, et ensuite de se débarrasser de l'attribut unlock-package
dans le fichier .sbclrc ?
Merci.