You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by Apache Wiki <wi...@apache.org> on 2008/06/16 17:32:28 UTC

[Thrift Wiki] Update of "ThriftTypes" by ChadWalters

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Thrift Wiki" for change notification.

The following page has been changed by ChadWalters:
http://wiki.apache.org/thrift/ThriftTypes

The comment on the change is:
Initial version.

New page:
= Introduction =

The Thrift type system is intended to allow programmers to use native types as much as possible, no matter what programming language they are working in. This information is based on, and supersedes, the information in the Thrift white paper. The ["ThriftIDL"] provides descriptions of the types which are used to generate cde for each target language.

= Base Types =

The base types were selected with the goal of simplicity and clarity rather than abundnace, focusing on the key types available in all programming languages.

'''{{{bool}}}''': A boolean value ({{{true}}} or {{{false}}})

'''{{{byte}}}''': An 8-bit signed integer

'''{{{i16}}}''': A 16-bit signed integer

'''{{{i32}}}''': A 32-bit signed integer

'''{{{i64}}}''': A 64-bit signed integer

'''{{{double}}}''': A 64-bit floating point number

'''{{{string}}}''': A text string encoded using UTF-8 encoding

Note the absence of unsigned integer types. This is due to the fact that there are no native unsigned integer types in many programming languages.

== Special Types ==

'''{{{binary}}}''': a sequence of unencoded bytes
  * N.B.: This is currently a specialized form of the {{{string}}} type above, added after the white paper to provide better interoperability with Java, which does not support encoding-agnostic text strings. The current plan-of-record is to elevate this to a base type at some point.

= Structs =

Thrift structs define a common object -- they are essentially equivalent to classes in OOP languages. A struct has a set of strongly typed fields, each with a unique name identifier. Fields may have various annotations (numeric field IDs, optional default values, etc.) that are described in the ["ThriftIDL"].

= Containers =

Thrift containers are strongly typed containers that map to commonly used and commonly available container types in most programming languages.

There are three container types:
 * '''{{{list<}}}''type''{{{>}}}''': An ordered list of elements. Translates to an STL {{{vector}}}, Java {{{ArrayList}}}, native arrays in scripting languages, etc.
 * '''{{{set<}}}''type''{{{>}}}''': An unordered set of unique elements. Translates to an STL {{{set}}}, Java {{{HashSet}}} {{{set}}} in Python, etc.
 * '''{{{map<}}}''type1''{{{,}}}''type2''{{{>}}}''': A map of strictly unique keys to values. Translates to an STL {{{map}}}, Java {{{HashMap}}}, PHP associative array, Python/Ruby dictionary, etc.

While defaults are provided, the type mappings are not explicitly fixed. Custom code generator directives have been added to allow substitution of custom types in various destination languages.

Container elements may be of any valid Thrift type.

 * N.B.: For maximal compatibility, the key type for {{{map}}} should be a basic type rather than a struct or container type. There are some languages which do not support more complex key types in their native {{{map}}} types. In addition the JSON protocol only supports key types that are base types.

= Exceptions =

Exceptions are functionally equivalent to structs, except that they inherit from the native exception base class as appropriate in each target programming language, in order to seamlessly integrate with the native exception handling in any given language.

= Services =

''To be added''