thrift/LANGUAGES.md
James E. King III 93ff9b0053 Update language levels, fix erlang and rust in CI
- Include rebar3 in docker image so erlang builds in CI
- Include the correct path in docker image so rust builds in CI
- Updated common lisp (sbcl) to 1.5.3 in docker image
- Updated dlang to 2.087.0 in docker image
- Updated dart to 2.0.0 in xenial docker image
- Updated dart to 2.4.0 in bionic docker image
- Updated erlang to 22.0 in docker image
- Updated openjdk to 11.0.3 in docker image
- Updated node.js to 10.16 in docker image
- Updated rust to 1.34.0 in xenial docker image
- Updated rust to 1.35.0 in bionic docker image

THRIFT-4905: Disable hanging experimental dlang async ssl test
2019-07-07 12:16:52 -04:00

50 KiB

Apache Thrift Language Support

Guidance For: 0.13.0 | 0.12.0 | 0.11.0

Thrift supports many programming languages and has an impressive test suite that exercises most of the languages, protocols, and transports. Each build exercises 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. The information provided below will 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, or better yet, Edit on GitHub.

Apache Thrift currently uses two build systems. The autoconf build system is the most complete and builds all supported languages, however it does not support Windows.. The cmake build system works on Linux and Windows, and has been designated by the project to replace autoconf however this transition will take quite some time to complete. During that transition, the cmake build will not support all languages.

The Language/Library Levels indicate the minimum and maximum versions that are used in the continuous integration environments (Appveyor, Travis) for Apache Thrift. Other language levels may be supported for each language, however tested less thoroughly; check the README file inside each lib directory for additional details. Note: 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.

Thrift's core transport (supported by all languages) is TSocket. Thrift's core protocol is TBinary, supported by all languages except for JavaScript.

Language Since Build Systems Lang/Lib Levels (Tested) Low-Level Transports Transport Wrappers Protocols Servers Open Issues
autoconfcmake MinMax Domain File Memory Pipe Socket TLS  FramedHeader http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool
ActionScript 0.3.0 YesYes FLEX SDK 4.6 Yes Yes Yes ActionScript
C (glib) 0.6.0 YesYes 2.48.22.56.4 YesYesYesYesYes Yes YesYesYes Yes C (glib)
C++ 0.2.0 YesYes C++11 YesYesYesYesYesYes YesYesYesYes YesYesYesYes YesYesYesYes C++
C# 0.2.0
Deprecated
use netstd
Yes .NET 3.5 / mono 3.2.8.0.NET 4.6.1 / mono 4.6.2.7 YesYesYesYes YesYes YesYesYesYes YesYesYes C# (.NET)
Common LISP 0.12.0 Yes SBCL 1.4.xSBCL 1.5.3 YesYes Yes YesYesYes Yes Common LISP
Dlang 0.9.0 Yes 2.075.12.087.0 YesYesYesYesYes YesYesYes YesYesYes YesYesYesYes D
Dart 0.10.0 Yes 2.0.02.4.0 Yes YesYes YesYesYesYes Dart
Delphi 0.8.0 2010unknown Yes YesYes YesYesYesYes Yes Delphi
.NET Core 0.11.0
Deprecated
use netstd
Yes 2.1.42.2.101 YesYesYesYes YesYes YesYesYesYes Yes .NET Core
.NET Standard 0.13.0 Yes .NET 4.5+, .NET Standard 2.x YesYesYesYes YesYes YesYesYesYes Yes .NET Standard
Erlang 0.3.0 Yes 18.322.0 YesYesYesYes YesYes YesYesYesYes Yes Erlang
Go 0.7.0 Yes 1.10.81.12.6 YesYesYes YesYesYes YesYesYesYes Yes Go
Haskell 0.5.0 YesYes 7.10.38.0.2 YesYesYesYes YesYes YesYesYes YesYes Haskell
Haxe 0.9.3 Yes 3.2.13.4.4 YesYes YesYes YesYesYesYes Yes Haxe
Java (SE) 0.2.0 YesYes 1.8.0_15111.0.3 YesYesYesYes YesYesYes YesYesYesYes YesYesYesYes Java SE
Java (ME) 0.5.0 unknown YesYesYes Yes YesYes Java ME
Javascript 0.3.0 Yes ES5ES6 YesYes Yes YesYes Javascript
Lua 0.9.2 Yes 5.1.55.2.4 YesYes YesYes YesYesYes Yes Lua
node.js 0.6.0 Yes 6.x10.x YesYesYes YesYesYes YesYesYesYes Yes node.js
node.ts 0.12.0 Yes 3.1.6 YesYes Yes Yes node.ts
OCaml 0.2.0 4.04.0 Yes Yes Yes YesYes OCaml
Perl 0.2.0 Yes 5.22.15.26.1 YesYesYesYes YesYes YesYesYes YesYes Perl
PHP 0.2.0 Yes 7.0.227.2.19 YesYesYes YesYes YesYesYesYes YesYes PHP
Python 0.2.0 YesYes 2.7.12, 3.5.22.7.15, 3.6.8 YesYes YesYesYes YesYesYesYes YesYesYes Python
Ruby 0.2.0 Yes 2.3.1p1122.5.1p57 YesYesYesYes YesYes YesYesYesYes YesYesYesYes Ruby
Rust 0.11.0 Yes 1.35.01.35.0 YesYes Yes YesYesYes Yes Rust
Smalltalk 0.2.0 unknown Yes Yes Smalltalk
Swift 0.12.0 Yes 4.2.1 YesYesYesYes YesYes YesYesYes Yes Swift
Language Since autoconfcmake MinMax Domain File Memory Pipe Socket TLS  FramedHeader http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool Open Issues
Build Systems Lang/Lib Levels (Tested) Low-Level Transports Transport Wrappers Protocols Servers