[Click] ANNOUNCE/RFC: Type-safe argument parsing
Eddie Kohler
kohler at cs.ucla.edu
Tue May 10 10:40:50 EDT 2011
Whoops! Sorry about that; fixed.
E
On 5/10/11 2:52 AM, Roberto Riggio wrote:
> Something is missing:
>
> CXX ../elements/standard/addressinfo.cc
> ../elements/standard/addressinfo.cc: In member function ‘virtual int
> AddressInfo::configure(Vector<String>&, ErrorHandler*)’:
> ../elements/standard/addressinfo.cc:97: error: ‘EtherAddressArg’ was not
> declared in this scope
>
>
> Il 10/05/2011 02:35, Eddie Kohler ha scritto:
>> All,
>>
>> The argument parsing branch is merged! Thanks for your comments.
>>
>> Eddie
>>
>>
>> On 04/28/2011 01:26 PM, Eddie Kohler wrote:
>>> Hi all,
>>>
>>> A longstanding Click annoyance is argument parsing, which has been rewritten
>>> more than once.
>>>
>>> There are still problems with the current cp_va_kparse versions.
>>>
>>> - Type safety: Did you know that this is a serious bug, that the compiler
>>> cannot catch?
>>>
>>> #include<click/confparse.hh>
>>> bool b;
>>> ...
>>> if (cp_va_kparse(conf, this, errh,
>>> "I_FORGOT_WHAT_B_WAS", cpkP+cpkM, cpInteger,&b,
>>> cpEnd)< 0)
>>> return -1;
>>>
>>> - Multithread safety: Did you know that if cp_va_kparse is called in parallel
>>> in two threads, the two calls will unsafely collide on a static array of
>>> "cp_value" objects?
>>>
>>> - Multithread safety: Did you know that cp_integer() and friends set a global
>>> variable, cp_errno -- and that cp_errno settings can collide across threads?
>>>
>>> -*-
>>>
>>> The github "argparse" branch, which will soon be shifted to master, fixes
>>> these problems with a new Args class. Args is much nicer to type and read
>>> than cp_va.
>>>
>>> #include<click/args.hh>
>>> bool b;
>>> ...
>>> if (Args(conf, this, errh)
>>> .read_mp("B", b)
>>> .complete()< 0)
>>> return -1;
>>>
>>> There are other advantages: it's easier and cleaner to write and refer to new
>>> parser types, for example.
>>>
>>> -*-
>>>
>>> I am interested in feedback and comments. Please look and report any
>>> problems. Thanks to Cliff for discussion.
>>>
>>> Eddie
>>> _______________________________________________
>>> click mailing list
>>> click at amsterdam.lcs.mit.edu
>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>> _______________________________________________
>> click mailing list
>> click at amsterdam.lcs.mit.edu
>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>
>
More information about the click
mailing list