You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2023/12/18 11:50:00 UTC

[jira] [Comment Edited] (THRIFT-5749) Option to enable RTTI info

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

Jens Geyer edited comment on THRIFT-5749 at 12/18/23 11:49 AM:
---------------------------------------------------------------

Enabling RTTI comes with small, but necessary changes to the generated code.

*With RTTI enabled:*
 - the interfaces derive from {{IBaseWithTypeInfo}} which in turn derives from {{IBase}}.
 - binary translates to {{TThriftBytes}} instead of {{System.TBytes}} to prevent against {{E2134 "TBytes has no typinfo"}}.

{{TThriftBytes}} is assignment compatible to {{TBytes}} but it may require other code changes, e.g. when using {{Length()}}.

Implementing/querying {{IBaseWithTypeInfo}}  is not necessary/foreseen, its only purpose is to add typeinfo.

*Compatibilty note:*

There may cases where activating RTTI leads to uncompileable code, presenting {{E2134 "TMyEnum has no typinfo"}} where {{TMyEnum}} is an "irregular" enum like {{TNumberz}} from the test suite. This is a known limitation of the Delphi RTTI system [1] and *NOT* a bug in Thrift. At this time, you simply cannot use RTTI with such enums, unless Embarcadero finally does that stuff right.

[1] https://stackoverflow.com/questions/1420562/why-do-i-get-type-has-no-typeinfo-error-with-an-enum-type


was (Author: jensg):
Enabling RTTI comes with small, but necessary changes to the generated code.

*With RTTI enabled:*
 - the interfaces derive from {{IBaseWithTypeInfo}} which in turn derives from {{{}IBase{}}}.
 - binary translates to {{TThriftBytes}} instead of {{System.TBytes}} to prevent against {{{}E2134 "TBytes has no typinfo"{}}}.

{{TThriftBytes}} is assignment compatible to {{TBytes}} but it may require other code changes, e.g. when using {{{}Length(){}}}.

Implementing/querying {{IBaseWithTypeInfo}} is not necessary/foreseen, its only purpose is to add typeinfo.

*Compatibilty note:*

There may cases where activating RTTI leads to uncompileable code, presenting {{E2134 "TMyEnum has no typinfo"}} where {{TMyEnum}} is an "irregular" enum like {{TNumberz}} from the test suite. This is a [well-known limitation of the Delphi RTTI system|[http://example.com|https://stackoverflow.com/questions/1420562/why-do-i-get-type-has-no-typeinfo-error-with-an-enum-type]] and *NOT* a bug in Thrift. At this time, you simply cannot use RTTI with such enums, unless Embarcadero finally does that stuff right.

> Option to enable RTTI info
> --------------------------
>
>                 Key: THRIFT-5749
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5749
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Delphi - Compiler
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Major
>             Fix For: 0.20.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> In some cases it would be helpful to have RTTI info available for generated API interfaces.



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