Releases: Distributive-Network/PythonMonkey
Releases · Distributive-Network/PythonMonkey
v1.3.0
v1.2.0
PythonMonkey v1.2.0
PythonMonkey now has prebuilt wheels for glibc 2.31+ (Ubuntu 20.04+, Debian 11+, Fedora 32+, ...) on arm64 Linux! 🥳
What's Changed
- Chore: clone SpiderMonkey source code from the official Firefox github repo by @Xmader in #484
- chore: add marker file according to pep561 by @SaidBySolo in #464
- CI: Build on Ubuntu 20.04 for arm64 linux release by @Xmader in #491
- fix the embedded null character issue by @Xmader in #492
New Contributors
- @SaidBySolo made their first contribution in #464
Full Changelog: v1.1.1...v1.2.0
v1.1.0
v1.0.0
PythonMonkey v1.0.0
PythonMonkey is now stable for production, including Distributive's use-case of DCP! 🥳
Bug Fixes:
- calling a python method that has 0 parameters in JavaScript would cause a segfault rather than a
TypeError: Class.method() takes 0 positional arguments but 1 was givenexception - Using a python iterable as the yield of a JavaScript
function*generator would cause a segfault rather than aTypeError: 'iterable' object is not an iteratorexception
v0.9.0
PythonMonkey v0.9.0
This release fixes the long annoying string corruption bug.
PythonMonkey is now super powerful and a lot more stable! 🦾 🦾 🦾
Generated release notes:
What's Changed
- Upgrade SpiderMonkey to mozilla-central commit
a283127a5d0aa005c54d339e8ca27414b55f079bby @github-actions in #424 - Fix the string corruption bug by @Xmader in #428
- Philippe/final edits for first release by @philippedistributive in #427
- Make the wheel packages we build also support lower versions of macOS by @Xmader in #415
- Make easier debugging HTTP errors (such as
DCPError: no transports defined) by @Xmader in #371 - Docs: add uninstallation instructions in the README by @Xmader in #431
- Add CI for publishing to ⊇istributive's archive server by @Xmader in #432
Full Changelog: v0.8.1...v0.9.0
v0.8.1
-
bug fixes:
- segfault could occur if
exit()orquit()were called asynchronously atobdid not include padding- pythonmonkey could not be installed on Windows if cargo was not installed beforehand
- segfault could occur if
-
performance improvements:
- improved memory-use, particularly regarding python strings passed to JavaScript
- increased the maximum JavaScript garbage-collected heap size to the maximum allowed (4 GB)
-
other:
- pythonmonkey now ships pre-built arm64 wheels
- removed Doxygen and Graphviz as mandatory prerequisites to install PythonMonkey (you still need them to build the docs, but you'll have to install them yourself if you wish to do so)
v0.8.0
- python
bytesobjects are now passed to JavaScript as immutableUint8Array - python
dictand user-defined class objects now use the prototype chain for following methods in JavaScript:Object.prototype.toStringObject.prototype.toLocaleStringObject.prototype.valueOf
- python iterator objects passed to JS now have the
[Symbol.toPrimitive]and.valueOfproperties in JavaScript to support use withconsole.log
v0.7.1
v0.7.0
- added a new build type:
- Sanitize: same as Debug, except with AddressSanitizer enabled
- added a new tool inspired by wtfnode called WTFPythonMonkey to track down any hanging
setTimeout/setIntervaltimers that are still ref'd when you hit ctrl-C.- When using
pmjs, to enable it you can simply pass the--wtfflag, like so:
pmjs --wtf <filename>.js
- When using pythonmonkey from python, it can be enabled by using a context manager (
with-statement) around the entry point of the event loop, like so:
import asyncio import pythonmonkey as pm from pythonmonkey.lib.wtfpm import WTF async def pythonmonkey_main(): pm.eval("setInterval(() => console.log(new Date), 500)") await pm.wait() with WTF(): asyncio.run(pythonmonkey_main())
- When using
- implemented JS-like function calling for python functions in JS. Similar to JS functions, you can now call python functions with too few or too many arguments without throwing an error.
- When too many arguments are supplied, those beyond the function's parameter count are ignored, e.g.:
def f(a, b): return [a, b] assert [1, 2] == pm.eval("(f) => f(1, 2, 3)")(f)
- When too few arguments are supplied, those beyond the number of supplied arguments are passed as
Noneto match JS's behaviour of passingundefined, e.g.:
def f(a, b): return [a, b] assert [1, None] == pm.eval("(f) => f(1)")(f)
- This also works for functions with default arguments, or varargs, e.g.:
def f(a, b, c=42, d=43, *args): return [a, b, c, d, *args] assert [1, 2, 3, 4, 5] == pm.eval("(f) => f(1, 2, 3, 4, 5)")(f) assert [1, 2, 3, 4 ] == pm.eval("(f) => f(1, 2, 3, 4)" )(f) assert [1, 2, 3, 43 ] == pm.eval("(f) => f(1, 2, 3)" )(f) assert [1, 2, 42, 43 ] == pm.eval("(f) => f(1, 2)" )(f) assert [1, None, 42, 43 ] == pm.eval("(f) => f(1)" )(f) assert [None, None, 42, 43 ] == pm.eval("(f) => f()" )(f)
- implemented the copy protocol (both
copy.copyandcopy.deepcopy) for JSStringProxies - using the aforementioned WTFPythonMonkey, we've fixed several bugs related to timers, including:
- the
Future object is not initializederror and following segfault - heap-use-after-free in
timerJobWrapper - hitting ctrl-C in
pmjsprinting out the entire PythonKeyboardInterrupttraceback - intervals from
setIntervalwere not being unref'd correctly
- the
- fixed a bug where uncaught JS Promise rejections would result in a
Future exception was never retrievedPython error, rather than the actual JS error - added support for
HTTP-Keep-Alivein our implementation ofXMLHttpRequest - fixed a memory leak related to cross-language strings
- fixed a bug where attempting to install Pythonmonkey from source failed on Ubuntu 24.04
- PythonMonkey now uses the bleeding edge version of SpiderMonkey on this and all future releases
- we now build and distribute binaries for python 3.8 on amd64 Mac OS
v0.6.0
PythonMonkey v0.6.0
- significant performance improvements, particularly in memory usage
- improved build system and build time, including making building the docs optional, and the following build types:
- Release: stripped symbols, maximum optimizations (default, what gets published on pip)
- DRelease: same as Release, except symbols are not stripped
- Debug: minimal optimizations
- Profile: same as Debug, except profiling is enabled
- fixed a bug where users with particularly old versions of PythonMonkey were unable to update to the latest release using pip unless they completely uninstalled PythonMonkey first