[ 
https://issues.apache.org/jira/browse/THRIFT-2429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13967905#comment-13967905
 ] 

Randy Abernethy commented on THRIFT-2429:
-----------------------------------------

Hey Jens, 

Well said. The discussion really gave me a chance to think about how different 
the PB and Thrift requiredness options are. Perhaps we need a "Thrift for PB 
programmers", page as well.

Like you I remain convinced that we need to add the capability to not transmit 
default values. Because of the push back I have been trying to think of other 
ways we can do it. These are the options I can think of (the first two already 
implemented in fbthrift):

* 1. Compiler switch, e.g.  $ thrift --gen py  --default-off  my.thrift}
* 2. IDL annotation, e.g.   {struct { 1:  i32  "default_off"  x = 10 }
* 3. optional fields with a default value, e.g.  struct { 1:  i32  optional  x 
= 10 } 
* 4. New default value “no serialize” operator, e.g.  struct { 1:  i32  x  ~ 10 
}
* 5. New IDL keyword, e.g.  struct { 1:  i32  x = 10  del  }

Each has pros and cons. 

I personally don't like #1 because it moves important interface mechanics out 
of the IDL and applies to an entire compilation unit. 

I don't like #2 because annotations to me are a way to deploy language specific 
features, there's no reason all languages shouldn't work the same way here. 

We have pretty thoroughly discussed the pros and cons of #3. One of my new 
reservations with this approach is that in Dave's Facebook patch you can omit 
defaults in normal requiredness fields, if this becomes important, solution 3 
will limit us. 

Solution #4 means adding a new operator to the compiler, which upon reflection 
is not awful (could be any operator).

Solution #5 means adding a new keyword to the compiler, which is never a great 
thing to do, though there are plenty of reserved words (like "del") which could 
be deployed with positional semantics to future proof them somewhat.

Curious to see if any of these are preferable to folks or if anyone can think 
of other possibilities.

Best,
Randy

> Provide option to not write default values, rely on receiver default 
> construction instead
> -----------------------------------------------------------------------------------------
>
>                 Key: THRIFT-2429
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2429
>             Project: Thrift
>          Issue Type: Improvement
>          Components: C++ - Compiler
>    Affects Versions: 0.9.1
>            Reporter: Chris Stylianou
>            Assignee: Randy Abernethy
>              Labels: default, optional, required
>
> Would there be any objections to a patch that does not write default values 
> (essentially the same logic as the optional attributes). This obviously 
> relies on the receiving application using the same IDL version to ensure the 
> defaults used on object construction match the senders.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to