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

Jens Geyer commented on THRIFT-5823:
------------------------------------

This is from the 
[whitepaper|https://thrift.apache.org/static/files/thrift-20070401.pdf] (the 
only real spec we have):
{quote}2.4 Exceptions
Exceptions are syntactically and functionally equivalent to structs except that 
they are declared using the exception keyword instead of the struct keyword. 
The generated objects inherit from an exception base class as appropriate in 
each target programming language, 
in order to seamlessly integrate with native exception handling in any given 
language. Again, the design emphasis is on making the code 
familiar to the application developer.
{quote}
Given the (rather incomplete and raw) IDL syntax alone both on the web site and 
in {{{}thriftl.ll{}}}, and ignoring anything else, it is not fully clear what 
the intention was. But if we also look at the paragraph above and at the test 
cases that were originally given, at least to me it looks pretty much as if 
nobody had that such a use case in mind even remotely. Particularly the 
emphasized special case "inherit from an exception base class [...] to 
seamlessly integrate with native exception handling in any given language" 
would have implied a strong need for such test cases, because it is not only 
obvious, but +expected+ that exceptions and structs are different beasts in 
most (if not all) languages, thus requiring special care and tests. But such 
tests never existed (not counting the two deeply buried under lib/go that were 
added much later).

So from the overall picture I think it is fair to say that the original design 
did even remotely have in mind to really use exceptions where structs are 
allowed, hence the part "syntactically and functionally equivalent to structs" 
above should most likely be interpreted as "regarding wire representation of 
the data". I agree there's a lot of interpretation in this, but I think we can 
safely summarize it as: "That's really not how it was meant to be used at all."

On the other hand, of course, the WP like any other spec is not a sacred holy 
document and surely can evolve and change.

So what we could do is to make in an official feature and allow that an 
exception could be treated like any struct data type, only with the additional 
feature that it can be thrown and caught. That would require to make sure that 
all target languages understand that conceptual change (which they do not as it 
is now - whole reason why I came across this) and thus have a dedicated test 
case for it in the test suite, similar to what I we did with the uuid data 
type. That's where it should start IMHO.

Last not least, we should have a separate ticket for it.

 
----
PS: TBH I find the term "partial error" quite irritating. What is a partial 
error again? It failed, but only a bit? Could that still be an idempotent 
operation? I gave you 10 bookings about 100 dollar each and got a partial error 
"some money could not be send to your bank account". Now what do I do with that 
information? Can I throw and catch that error? Or better not, because at least 
I got some money, just not all of it? And which of the bookings did fail? How 
money do I have now? Hard to tell ...

> Fix illegal uses of exceptions as normal struct type
> ----------------------------------------------------
>
>                 Key: THRIFT-5823
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5823
>             Project: Thrift
>          Issue Type: Bug
>          Components: Compiler (General)
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Major
>             Fix For: 0.22.0
>
>         Attachments: THRIFT-5823.thrift
>
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> Fix illegal uses of exvceptions as normal struct type, which it really isn't. 
> Applies to a number of test IDL files and various tickets.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to