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