diff --git a/py4j-java/ant.properties b/py4j-java/ant.properties index b69a4ad4..dd2eb2ae 100644 --- a/py4j-java/ant.properties +++ b/py4j-java/ant.properties @@ -1,5 +1,5 @@ # Version of the software -version=0.10.9.9 +version=0.11 # Path to the JUnit 4 jar. YOU MUST SET THIS VALUE. Otherwise, the test classes won't compile. junit.path=junit-4.10.jar diff --git a/py4j-java/build.gradle b/py4j-java/build.gradle index 1a2bff91..a8518c6b 100644 --- a/py4j-java/build.gradle +++ b/py4j-java/build.gradle @@ -168,7 +168,7 @@ task createPom { packaging 'jar' groupId 'net.sf.py4j' artifactId 'py4j' - version '0.10.9.9' + version '0.11' name 'Py4J' description 'Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects.' scm { diff --git a/py4j-java/gradle.properties b/py4j-java/gradle.properties index 69f0e6d9..d12c475c 100644 --- a/py4j-java/gradle.properties +++ b/py4j-java/gradle.properties @@ -1,6 +1,6 @@ group=py4j -bundleVersion=0.10.9.9 -version=0.10.9.9 +bundleVersion=0.11 +version=0.11 sourceCompatibility=1.6 targetCompatibility=1.6 # Define the jdk6BootClasspath in your ~/.gradle/gradle.properties diff --git a/py4j-java/pom.xml b/py4j-java/pom.xml index 1c00f161..89015e1e 100644 --- a/py4j-java/pom.xml +++ b/py4j-java/pom.xml @@ -8,7 +8,7 @@ net.sf.py4j py4j - 0.10.9.9 + 0.11 Py4J Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects. diff --git a/py4j-python/src/py4j/version.py b/py4j-python/src/py4j/version.py index 259653bd..438a041f 100644 --- a/py4j-python/src/py4j/version.py +++ b/py4j-python/src/py4j/version.py @@ -1 +1 @@ -__version__ = '0.10.9.9' +__version__ = '0.11' diff --git a/py4j-web/changelog.rst b/py4j-web/changelog.rst index 1f9e39f2..b6591f72 100644 --- a/py4j-web/changelog.rst +++ b/py4j-web/changelog.rst @@ -4,8 +4,20 @@ Changelog The changelog describes in plain English the changes that occurred between Py4J releases. -Unreleased ----------- +Py4J 0.11 +--------- + +- Release date: TBD + +This is the first release since Py4J 0.10.9.9 (January 2025). It drops Python 2 +support, adds a suite of performance improvements, introduces a local +performance-testing framework and continuous benchmarking in CI, and fixes +several lifecycle and correctness bugs. The most important +backwards-incompatible changes are listed first. + +- Python side: **Python 2 is no longer supported.** The Python 2 compatibility + layer has been removed. Py4J now requires Python 3.9 or newer (tested on + 3.9–3.13). (#585) - Python side: Memoize attribute lookups on ``JVMView``, ``JavaPackage``, and ``JavaClass`` via a per-instance bounded LRU @@ -21,6 +33,26 @@ Unreleased attribute cache so cached references no longer pin the gateway client past shutdown. Closes issue #128; refs #557. +- Python side: Faster ``bytearray`` decoding and hot-path shortcuts in + ``smart_decode`` on the protocol layer. Closes #570; credit to @markjm + (#575). (#593) + +- Python side: Cold-start improvements — tight-polling callback-server + readiness instead of a blind sleep, plus cold-start benchmark scenarios. + Refs #557. (#595) + +- Python + Java side: Disable Nagle's algorithm (``TCP_NODELAY``) on all Py4J + socket connections, reducing small-message round-trip latency. (#592) + +- Python side: Python 3 modernization — ``super()`` without arguments, + ``raise ... from``, packaging/version metadata, and light type hints. (#594) + +- Python side: Use the module logger instead of the root logger when sending a + command. (#499) + +- Java side: ``Iterator.next`` no longer silently ignores exceptions other than + the end-of-iteration signal. (#554) + - Java side: Fix listener-lifecycle correctness bugs in ``GatewayServer`` / ``ClientServer``: @@ -49,7 +81,15 @@ Unreleased ``shutdown(boolean)`` is unchanged (``gracePeriodMs == 0`` = abrupt, back-compat). Before this fix, ``shutdown()`` immediately force-closed all active connections, silently dropping work in flight — a real-world - data-loss risk for callback-heavy workflows. + data-loss risk for callback-heavy workflows. (#582) + +- Build, CI & testing: Add a local-run performance-testing framework (#578) and + CodSpeed continuous benchmarking, opt-in on pull requests via the + ``perf-check`` label (#584, #586, #587). Add bandwidth / cold-start / + latency-curve baseline coverage (#591) and close protocol / auth / + concurrency test-coverage gaps while hardening flaky tests and process + teardown (#590). Drop the sunset jcenter repository and retry Gradle on + transient CDN failures (#589). Upgrade GitHub Actions versions (#572). Py4J 0.10.9.9 ------------- diff --git a/py4j-web/index.rst b/py4j-web/index.rst index 0a84685e..3328ddca 100644 --- a/py4j-web/index.rst +++ b/py4j-web/index.rst @@ -73,6 +73,9 @@ Support & Resources News ==== +* **TBD** - Py4J 0.11 has been released. See the + :doc:`changelog` for more details about the bug fixes and new features. + * **January 15th 2024** - Py4J 0.10.9.9 has been released. See the :doc:`changelog` for more details about the bug fixes and new features.