On 29 July 2013 22:43, Tina Harriott <tina.harriott.mathemat...@gmail.com>wrote:

> On 29 July 2013 03:17, Wendy Lin <wendlin1...@gmail.com> wrote:
> > On 28 July 2013 06:17, Roland Mainz <roland.ma...@nrubsig.org> wrote:
> >> On Fri, Jul 12, 2013 at 4:42 AM, Wendy Lin <wendlin1...@gmail.com>
> wrote:
> >>> On 12 July 2013 04:35, David Korn <d...@research.att.com> wrote:
> >>>> cc: wendlin1...@gmail.com
> >>>> Subject: Re: [ast-users] ksh -c 'namespace a.c.b { integer i=5 ; } ;
>  ' => a.c.b: is not an identifier?
> >>>> --------
> >>>>
> >>>>> How do I create a nested namespace?
> >>>>>
> >>>>> I tried this but it fails:
> >>>>> ksh -c 'namespace a.c.b { integer i=5 ; } ; '
> >>>>> /home/wlin/bin/ksh: a.c.b: is not an identifier
> >>>>>
> >>>>> Wendy
> >>>>>
> >>>>
> >>>> namespace a
> >>>> {
> >>>>         namespace c
> >>>>         {
> >>>>                 namespace b
> >>>>                 {
> >>>>                         integer i=5
> >>>>                 }
> >>>>         }
> >>>> }
> >>>
> >>> I still get an error for this:
> >>> ksh -c 'namespace a { namespace b { integer i=5 ; } ; } ; printf
> "%d\n" .a.b.i'
> >>> /home/wlin/bin/ksh: printf: .a.b.i: no parent
> >>>
> >>> I don't think this is the right way (semantically) because you can't
> >>> switch from namespace a.b.c to namespace b.g.y on the fly.
> >>
> >> The following test patch "fixes" the problem:
> >> -- snip --
> >> diff -r -u original/src/cmd/ksh93/sh/xec.c
> >> build_i386_64bit_debug/src/cmd/ksh93/sh/xec.c
> >> --- src/cmd/ksh93/sh/xec.c     2013-07-25 02:37:26.000000000 +0200
> >> +++ src/cmd/ksh93/sh/xec.c       2013-07-28 05:36:31.827214685 +0200
> >> @@ -2710,8 +2710,10 @@
> >>                                 Namval_t *oldnspace = shp->namespace;
> >>                                 int offset = stktell(stkp);
> >>                                 int
> flag=NV_NOASSIGN|NV_NOARRAY|NV_VARNAME;
> >> +#if 0
> >>                                 if(cp)
> >>
> >> errormsg(SH_DICT,ERROR_exit(1),e_ident,fname);
> >> +#endif
> >>                                 sfputc(stkp,'.');
> >>                                 sfputr(stkp,fname,0);
> >>                                 np =
> >> nv_open(stkptr(stkp,offset),shp->var_tree,flag);
> >> -- snip --
> >>
> >> If this gets applied then the following sample code finally works:
> >> -- snip --
> >> # the next three lines are placeholders for the parent namespaces
> >> namespace com { true ; }
> >> namespace com.att  { true ; }
> >> namespace com.att.research { true ; }
> >>
> >> # test namespace for AT&T Research
> >> namespace com.att.research.hello
> >> {
> >>         function print_hello
> >>         {
> >>                 print 'Hello World'
> >>         }
> >> }
> >>
> >> # do somthing
> >> .com.att.research.hello.print_hello
> >> -- snip --
> >>
> >> IMO this would finally a major step forward towards a common
> >> function/type library where each party has it's own namespace which is
> >> organised like DNA (see java why this is a good idea)
> >>
> >> * Notes:
> >> - At some point namerefs to functions, e.g. typeset -f -n would be
> >> usefull... e.g. nameref -f hello=.com.att.research.hello.print_hello #
> >> would map the function .com.att.research.hello.print_hello to the
> >> short name "hello" without requiring a wrapper function (saving
> >> execution name)
> >>
> >> - Known bugs:
> >> $ ksh -c 'namespace a { true ; } ; namespace a.sp1 { integer i=5 ;
> >> function inc { let i++ ; } ; } ; print ${.a.sp1.i} ; .a.sp1.inc ;
> >> print ${.a.sp1.i} ' # print $'5\n5' but should print $'5\n6'
> >>
> >> Comments/feedback/rants/etc. wecome...
> >
> > I like it. It improves a lot over perl module madness.
> >
> > One rfe: mkdir has option -p to create missing parent dirs. Could you
> > add namespace -p to add missing namespaces, i.e. create empty
> > namespaces if they are not set yet?
> >
> > Aside from namespace -p the idea of adding namespaces like a DNS tree is
> GREAT!!
> >
>
> Not that this is a beauty contest, but I like the concept of
> com.att.research.hello or ca.uwaterloo.math.statistics1.util, too. It
> would be very very useful if you can get it working.
>
> I'd imagine it would just work like wrapping your favourite functions
> into a statement like namespace ca.uwaterloo.math.statistics1.util {}
> and you can share them without risk, right?
>
> Tina
> --
> Tina Harriott  - Women in Mathematics
> Contact: tina.harriott.mathemat...@gmail.com
> _______________________________________________
> ast-users mailing list
> ast-users@lists.research.att.com
> http://lists.research.att.com/mailman/listinfo/ast-users
>

But for stuff that is standard/builtin/core for ksh93, rather than:

  com.att.research.hello

I think this would be much nicer:

  std.hello

-- 
Regards

Danny
_______________________________________________
ast-users mailing list
ast-users@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to