Hello, Here’s a quick review of Andy’s ‘wip-namespace’ and related changes. We’re rushing and I’m probably misunderstanding things, or not understanding things at all, but it’s hard for me to keep up.
Regarding the single module/variable name space, I was convinced that it was annoyingly constraining module names; however, as illustrated at <http://thread.gmane.org/gmane.lisp.guile.devel/10166> that constraint has vanished somehow, making it less of a problem IMO. Besides, you said at <http://thread.gmane.org/gmane.lisp.guile.devel/10132> that this is “not something we can change right now.”. :-) So, apologize if that should be obvious to me, but can you please re-explain why this is important? To app or not to %app? commit 30ce621c5ac9b67420a9f159b2195f6cd682e237 Author: Andy Wingo <wi...@pobox.com> Date: Thu Apr 22 15:08:13 2010 +0200 (app modules) -> (%app modules) commit c9904ab0406d0bf3415696f319760f67b218a638 Author: Andy Wingo <wi...@pobox.com> Date: Tue Apr 20 13:41:41 2010 +0200 formally deprecate `app' commit cb67c838f5658a74793f593c342873d32e4a145c Author: Andy Wingo <wi...@pobox.com> Date: Thu Apr 22 15:25:09 2010 +0200 deprecate %app commit 635a8b36b1dbed877fb8df752600870e9e1ee625 Author: Andy Wingo <wi...@pobox.com> Date: Fri Apr 23 15:58:08 2010 +0200 deprecated %app shims use module-define-submodule! I have a hard time following that story. :-) commit 993dae8623e0fe6195000afb81902ea466bd2dc4 Author: Andy Wingo <wi...@pobox.com> Date: Fri Apr 23 17:03:34 2010 +0200 module-public-interface in Scheme [...] diff --git a/libguile/modules.c b/libguile/modules.c index ccb68b7..c8a4c2a 100644 --- a/libguile/modules.c +++ b/libguile/modules.c @@ -44,7 +44,16 @@ scm_t_bits scm_module_tag; static SCM the_module; +static SCM module_make_local_var_x_var; Please keep comments above variables, or add one for all of them (info "(standards) Comments"). commit 4e48b4950ecaa10265de6709bf87597a818cf44d Author: Andy Wingo <wi...@pobox.com> Date: Fri Apr 23 17:16:56 2010 +0200 module-public-interface is a field in the module record [...] +;; Allow code that poked %module-public-interface to keep on working. +;; +(set! module-public-interface + (let ((getter module-public-interface)) + (lambda (mod) + (or (getter mod) + (cond + ((and=> (module-local-variable mod '%module-public-interface) + variable-ref) + => (lambda (iface) + (issue-deprecation-warning +"Setting a module's public interface via munging %module-public-interface is +deprecated. Use set-module-public-interface! instead.") + (set-module-public-interface! mod iface) + iface)) + (else #f)))))) + +(set! set-module-public-interface! + (let ((setter set-module-public-interface!)) + (lambda (mod iface) + (setter mod iface) + (module-define! mod '%module-public-interface iface)))) Nice! There also needs to be the C counterpart: #define scm_module_index_import_public_interface 9 #define SCM_MODULE_PUBLIC_INTERFACE(module) \ SCM_PACK (SCM_STRUCT_DATA (module) [scm_module_index_public_interface]) and change ‘scm_module_public_interface ()’ to use that instead of ‘scm_call_1 (...)’. Finally there needs to be ‘scm_set_module_public_interface_x ()’ as discussed at <http://thread.gmane.org/gmane.lisp.guile.devel/10136>. Thanks, Ludo’.