thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stuart Reynolds <...@stureynolds.com>
Subject Re: Self referential classes
Date Wed, 28 Jan 2015 06:28:20 GMT
So I guess there two kind of self referencing:

1) type self referencing:  struct A refers to struct A somewhere in
the types of its fields.
2) object self referencing:

A a = new A()
a.selfRef = a
serialize(a)    // infinite loop?


I'm guessing the "&" keyword fixes (1). Is it also a fix for (2)? (by
changing the codec to track already-seen object references)


On Mon, Jan 26, 2015 at 10:21 PM, Stuart Reynolds <stu@stureynolds.com> wrote:
> Got it. Thanks.
>
> On Mon, Jan 26, 2015 at 7:24 PM, Henrique Mendonça <henrique@apache.org> wrote:
>> Sorry for not being clear.
>> As Jens said, it should be all good even on C++, if you use the reference
>> keyword "&" like in:
>> https://github.com/apache/thrift/blob/master/test/Recursive.thrift#L26
>>
>> - Henrique
>>
>> On 27 January 2015 at 13:58, Stuart Reynolds <stu@stureynolds.com> wrote:
>>
>>> Hi Henrique,
>>>
>>> Thanks,
>>>
>>> Just to be super-clear, in 0.9.2 and above, its OK in thrift to have:
>>> (1) structs that have fields of its own type (fine for most languages,
>>> but you'll be sorry if you C++)
>>> (2) structs that have fields that are containers of its own type (i.e.
>>> is allowed in all target languages)
>>>
>>> ?
>>>
>>> I'm working on a scala plugin extensions in the swift2thift project
>>> and want to nail down what *should* be allowed.
>>>
>>> Thanks,
>>> - Stu
>>>
>>>
>>>
>>> On Mon, Jan 26, 2015 at 2:49 PM, Henrique Mendonça <hmendonca@gmail.com>
>>> wrote:
>>> > Hi Stuart,
>>> >
>>> > That should work, are you having any problems? Please have a look on:
>>> > https://issues.apache.org/jira/browse/THRIFT-2421
>>> > and:
>>> > https://issues.apache.org/jira/browse/THRIFT-2471
>>> >
>>> > both already on 0.9.2
>>> >
>>> > Cheers,
>>> > Henrique
>>> >
>>> >
>>> > On 27 January 2015 at 02:05, Stuart Reynolds <stu@stureynolds.com>
>>> wrote:
>>> >
>>> >> Looking at the archives:
>>> >>
>>> >>
>>> http://mail-archives.apache.org/mod_mbox/thrift-user/201011.mbox/%3CAANLkTi=JFbUR1W94dpw3ZPXH=LhE_AVcNDRc_DK=UG_=@mail.gmail.com%3E
>>> >>
>>> >> I understand that the following causes problems for C++:
>>> >>
>>> >> struct A {
>>> >>   1: A a;
>>> >> }
>>> >>
>>> >> because sizeof(A)==infinity.
>>> >>
>>> >>
>>> >> 1-- the above .thrift compiles for in thrift 0.9.2. Are there guards
>>> >> against it in later versions of thrift? If so, can there any
>>> >> configuration possible surround this? (for example, ignoring the error
>>> >> because C++ it not a target, or changing the C++ output to use aptr
>>> >> for field members).
>>> >>
>>> >> 2 -- Are self referencing collections generally allowed? (Can't test
>>> >> locally -- for now stuck with 0.9.2) e.g. :
>>> >>
>>> >> struct A {
>>> >>   1: list<A> children;
>>> >> }
>>> >>
>>> >>
>>> >> Thanks,
>>> >> - Stuart
>>> >>
>>>

Mime
View raw message