thrift/LANGUAGES.md
James E. King, III 0ad20bdbfe THRIFT-4351: use travis build stages to optimize build,
avoiding duplicate rebuilds of the same image, and also
allow personal docker hub repositories for private fork
builds to be optimized. Move ubsan build to artful image
because it catches more stuff and fix what was found.

THRIFT-4345: solidify docker build strategy for maximum
coverage: trusty, xenial, artful as stock as they can be

THRIFT-4344: add top level language summary markdown and
update readme with a new image on the layered architecture

THRIFT-3847: remove VERSION macro from config.h which
was causing a conflict on artful builds.

THRIFT-4359: fix haxe map/set decode when key is binary,
as a missing break statement caused it to use an int
during decode

This closes #1389
2017-10-19 11:29:04 -04:00

38 KiB

Apache Thrift Language Support

Last Modified: 2017-10-05
Version: 0.10.0+

Thrift supports many programming languages and has an impressive test suite that exercises most of the languages, protocols, and transports that represents a matrix of thousands of possible combinations. Each language typically has a minimum required version as well as support libraries - some mandatory and some optional. All of this information is provided below to help you assess whether you can use Apache Thrift with your project. Obviously this is a complex matrix to maintain and may not be correct in all cases - if you spot an error please inform the developers using the mailing list.

Apache Thrift has a choice of two build systems. The autoconf build system is the most complete build and is used to build all supported languages. The cmake build system has been designated by the project to replace autoconf however this transition will take quite some time to complete.

The Language/Library Levels indicate the minimum and maximum versions that are used in the continuous integration environments (Appveyor, Travis) for Apache Thrift. Note that while a language may contain support for protocols, transports, and servers, the extent to which each is tested as part of the overall build process varies. The definitive integration test for the project is called the "cross" test which executes a test matrix with clients and servers communicating across languages.

Language Build Systems Lang/Lib Levels Low-Level Transports Transport Wrappers Protocols Servers Open Issues
autoconfcmake MinMax Domain File Memory Pipe Socket TLS  Framed http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool
ActionScript NoNo ActionScript 3 NoNoNoNoYesNo NoYesNo YesNoNoNo NoNoNoNoNo ActionScript
C (glib) YesYes 2.40.22.54.0 NoYesYesNoYesYes YesNoNo YesYesNoYes NoNoYesNoNo C (glib)
C++ YesYes C++98, gcc YesYesYesYesYesYes YesYesYes YesYesYesYes NoYesYesYesYes C++
C# YesNo .NET 3.5 / mono 3.2.8.0.NET 4.6.1 / mono 4.6.2.7 NoNoYesYesYesYes YesYesNo YesYesYesYes NoNoYesYesYes C# (.NET)
Cocoa NoNo unknown NoYesYesNoYesYes YesYesNo YesYesNoYes NoNoNoNoYes Cocoa
D YesNo 2.070.22.076.0 NoYesYesYesYesYes YesYesYes YesYesYesNo NoYesYesYesYes D
Dart YesNo 1.20.11.24.2 NoNoNoNoYesNo YesYesNo YesYesYesYes NoNoNoNoNo Dart
Delphi NoNo 2010unknown NoNoNoNoYesNo YesYesNo YesYesYesYes NoNoYesNoNo Delphi
.NET Core NoNo 2.0.0 NoNoYesYesYesYes YesYesNo YesYesYesYes NoYesNoNoNo .NET Core
Erlang YesNo R16B0320.0.4 NoYesYesNoYesYes YesYesNo YesYesYesYes NoNoYesNoNo Erlang
Go YesNo 1.2.11.8.3 NoNoYesNoYesYes YesYesYes YesYesYesYes NoNoYesNoNo Go
Haskell YesYes 7.6.38.0.2 NoYesYesNoYesYes YesYesNo YesYesYesNo NoNoYesYesNo Haskell
Haxe YesNo 3.2.1 NoYesNoNoYesNo YesYesNo YesYesYesYes NoNoYesNoNo Haxe
Java (SE) YesYes 1.7.0_1511.8.0_144 NoYesYesNoYesYes YesYesYes YesYesYesYes NoYesYesYesYes Java SE
Java (ME) NoNo unknown NoNoYesNoYesYes NoYesNo YesNoYesNo NoNoNoNoNo Java ME
Javascript YesNo unknown NoNoNoNoYesYes NoYesNo NoNoYesYes NoNoNoNoNo Javascript
Lua YesNo 5.1.55.3.3 NoNoYesNoYesNo YesYesNo YesYesYesNo NoNoYesNoNo Lua
node.js YesNo 4.2.66.11.2 NoNoNoNoYesYes YesYesNo YesYesYesYes NoNoYesNoNo node.js
OCaml NoNo 4.02.34.04.0 NoNoNoNoYesNo YesNoNo YesNoNoNo NoNoYesYesNo OCaml
Perl YesNo 5.18.25.26.0 YesNoYesNoYesYes YesYesNo YesNoYesYes YesNoYesNoNo Perl
PHP YesNo 5.5.97.1.8 NoNoYesNoYesYes YesYesNo YesYesYesYes YesNoYesNoNo PHP
Python YesYes 2.7.6, 3.4.32.7.14, 3.6.3 NoNoNoNoYesYes NoYesYes YesYesYesYes YesYesYesNoNo Python
Ruby YesNo 1.9.3p4842.3.3p222 YesNoYesNoYesYes YesYesNo YesYesYesYes NoYesYesYesYes Ruby
Rust YesNo 1.15.11.18.0 NoNoYesNoYesNo YesNoNo YesYesNoYes NoNoNoYesNo Rust
Smalltalk NoNo unknown NoNoNoNoYesNo NoNoNo YesNoNoNo NoNoNoNoNo Smalltalk
Language autoconfcmake MinMax Domain File Memory Pipe Socket TLS  Framed http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool Open Issues
Build Systems Lang/Lib Levels Low-Level Transports Transport Wrappers Protocols Servers