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?
Tina
--
Tina Harriott - Women in Mathematics
Contact: [email protected]
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users