Bonjour,

Je sollicite une nouvelle fois vos éclairages - la documentation trouvée n'étant pas très claire / complète sur ces sujets.

Concernant require et use-package, peut-on résumer leur différence au (seul ?) respect des espaces de noms pour les variables (quelque soit le type) ? En effet l'expérience :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/sbcl --script 
 
(require 'sb-bsd-sockets) 
 
(print #'sb-bsd-sockets:socket-close) 
 
(use-package 'sb-bsd-sockets) 
 
(print #'socket-close) 
 
(print (eq #'socket-close #'sb-bsd-sockets:socket-close)) ; = T
... m'invite à penser que la principale différence est à ce niveau-là. J'imagine que c'est un peu plus subtile. La documentation CL ne fait pas dans le détail :

"Function: require [cl] module-name &optional pathnames. Loads a module, unless it already has been loaded. pathnames, if supplied, is a designator for a list of pathnames to be loaded if the module needs to be. If pathnames is not supplied, functions from the list *module-provider-functions* are called in order with module-name as an argument, until one of them returns non-NIL. User code is responsible for calling provide to indicate a successful load of the module. " - http://www.sbcl.org/manual/index.html#Package-Variance

J'ai supposé que cet impact se situe aussi au niveau des variables référencées au niveau des packages ? Est-ce une question de portée, de visibilité, les deux... ?

Pour la documentation française, le Traité de Programmation LISP évoque bien l'espace de nom mais reste silencieux sur les packages (mal fouillé ?) :
http://dept-info.labri.u-bordeaux.fr...L/node318.html

Si vous avez des explications et/ou une documentation française sur ce point, ce serait super !

Vous en remerciant par avance,

Julien.