guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

wip-namespace review


From: Ludovic Courtès
Subject: wip-namespace review
Date: Sat, 24 Apr 2010 18:55:45 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

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 <address@hidden>
  Date:   Thu Apr 22 15:08:13 2010 +0200

      (app modules) -> (%app modules)

  commit c9904ab0406d0bf3415696f319760f67b218a638
  Author: Andy Wingo <address@hidden>
  Date:   Tue Apr 20 13:41:41 2010 +0200

      formally deprecate `app'

  commit cb67c838f5658a74793f593c342873d32e4a145c
  Author: Andy Wingo <address@hidden>
  Date:   Thu Apr 22 15:25:09 2010 +0200

      deprecate %app

  commit 635a8b36b1dbed877fb8df752600870e9e1ee625
  Author: Andy Wingo <address@hidden>
  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 <address@hidden>
  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 <address@hidden>
  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’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]