Client: rb
Run RuboCop safe autocorrection for the Ruby library, cross-language
tests, and tutorial through the existing Autotools style hooks.
Co-authored-by: OpenAI Codex (gpt-6.1-sol) <codex@openai.com>
Client: rs
All Rust crates declare edition 2024 and rust-version 1.85. Edition 2024
turns on Cargo's MSRV-aware resolver, so dependencies resolve to versions
that still build on 1.85 even when a newer toolchain runs the build.
CI, the crates.io release and the Docker images use Rust 1.99.0, pinned
rather than "stable": the Rust jobs run clippy with -D warnings, and each
new release adds lints. Bump the pin on purpose, together with any lint
fixes it needs.
The generated ok_or() now matches with if-let instead of is_some() and
unwrap(), which clippy 1.99 rejects in every generated client.
Client: netstd
smoketest.sh starts the tutorial server and runs the client against it
with -mc:2, once for each transport and with the compact and JSON
protocols, the buffered and framed transports and multiplexing. "make
check" in tutorial/netstd runs it, and so does a new step in the
lib-netstd job.
The client now exits with 1 when one of its clients fails. It used to
log the error and exit with 0, so a script could not tell a failed run
from a good one.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Client: netstd
With -mc greater than 1, all clients ran over the one transport and
protocol that RunAsync() created, so none of them completed its calls.
Create a transport and a protocol for each client inside the loop, as
the tutorial did before 0d12832d.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Client: netstd
UseMiddleware<THttpServerTransport>() left ASP.NET Core only the
RequestDelegate to match, and all three public THttpServerTransport
constructors accept one, so the host stopped at startup. The tutorial
now also passes the processor and a TConfiguration.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Client: java, tutorial
Migrated tutorial/java from Apache Ant (build.xml, build.properties) to Gradle:
- Added build.gradle with Java and Application plugins.
- Configured Gradle composite build (includeBuild) to build and consume libthrift directly.
- Added generateThrift task to invoke thrift compiler on tutorial.thrift and shared.thrift.
- Added tutorial, tutorialServer, and tutorialClient tasks for running the tutorial.
- Updated JavaServer and JavaClient SSL keystore/truststore paths to valid crossTest resource locations.
- Updated Makefile.am to invoke Gradle instead of Ant and updated EXTRA_DIST.
- Updated README.md with Gradle execution instructions.
- Added /tutorial/java/.gradle/ to .gitignore.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Client: docs
Rule [36] in doc/specs/idl.md defined Literal as ('"' [^"]* '"') |
("'" [^']* "'"). Read literally, a backslash is an ordinary character, a
double quote cannot appear in a double-quoted literal and line breaks are
allowed; none of that matches the compiler. Correct the rule, add an Escape
rule for the six supported escape sequences and renumber the rules after
it. The IDL page on thrift.apache.org is generated from this file.
Describe the same syntax next to MAPCONSTANT in tutorial.thrift. The text
is a plain /* */ comment rather than a doc comment, so it does not reach
generated code: all 29 generators, plus the option variants used by the
tutorial builds, produce byte-identical output before and after.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adjust what "make dist" ships in the release tarball.
Dropped (build output and generated code that a built tree leaves behind,
swept in via whole-directory EXTRA_DIST entries and pruned in dist-hook;
none of it is tracked, so a clean checkout never contained it):
- lib/haxe/test/{bin,gen-haxe}, lib/javame/gen-javame
- lib/netstd bin/obj/gen-netstd across the test and benchmark projects
- test/netstd/{Client,Server}/ThriftTest
- tutorial/netstd/Interfaces/{shared,tutorial} (tracked project
scaffolding is kept so the tutorial still builds from the tarball)
- test/cpp/gen-cpp* (nodist generated sources)
- build/__pycache__ and stray *.pyc
Also no longer shipped: the .github/ CI configuration and
doc/thrift-threat-model.md.
Added (tracked sources that were missing from EXTRA_DIST):
- lib/lua/test/{RecursionDepth.thrift,test_recursion_depth.lua}
- lib/netstd/Tests/codegen/run-NetStd-Codegen-Tests.ps1
- test/JsRecursionDepthTest.thrift
- lib/php/{phpstan.neon,phpstan-baseline.neon}
- SECURITY.md
Verified end-to-end with make dist in a clean container: 4317 -> 3480
tarball entries, and the only tracked files removed are .github/* and
doc/thrift-threat-model.md.
Client: netstd,haxe,javame,lua,php,cpp
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Client: swift
Remove the Swift compiler generator, library, tests, tutorial, and all
associated build system, CI, and documentation references. No maintainer
has been available for this binding; the lib-swift CI job has been
disabled since 0.23.0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Client: netstd
The core ApacheThrift package no longer depends on the ASP.NET Core stack or
the Microsoft.Extensions.Logging providers, so non-web projects no longer pull
in all of those DLLs. THttpServerTransport (the only ASP.NET Core type) moves to
a new ApacheThrift.AspNetCore package; the core library keeps only the
Microsoft.Extensions.Logging.Abstractions dependency used by the TServer types.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Client: rb
Ruby is on a gradual path toward frozen string literals by default. That
transition began in Ruby 3.4.0 with chilled strings, but we can get the
benefits today by explicitly enabling `# frozen_string_literal: true`.
Doing so reduces avoidable string allocations and copies, lets the VM do
less work, removes many manual .freeze workarounds, and can deliver
meaningful performance improvements in allocation-heavy code paths.
This change adds frozen string literal to all generated files, and also
library files. There is one performance issue in JSON protocol I noticed
where we used += on strings instead of <<, which allocates much more
objects than necessary, and you can clearly see the gain in the profile
table below.
Co-Authored-By: OpenAI Codex (GPT-5.4) <codex@openai.com>