On 29 July 2013 14:43, Tina Harriott
<[email protected]> wrote:
> On 29 July 2013 03:17, Wendy Lin <[email protected]> wrote:
>> On 28 July 2013 06:17, Roland Mainz <[email protected]> wrote:
>>> On Fri, Jul 12, 2013 at 4:42 AM, Wendy Lin <[email protected]> wrote:
>>>> On 12 July 2013 04:35, David Korn <[email protected]> wrote:
>>>>> cc: [email protected]
>>>>> 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?

Yes, that would be the general idea.

Ced
-- 
Cedric Blancher <[email protected]>
Institute Pasteur
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to