Skip to content

Latest commit

 

History

History
676 lines (473 loc) · 27.7 KB

CHANGELOG.rst

File metadata and controls

676 lines (473 loc) · 27.7 KB

Pygolang change history

0.1 (2022-01-26)

  • Add os.signal package that provides signal handing via nogil channels. This allows to build concurrent systems without limitation of Python's standard signal module: signal delivery is not delayed, potentially indefinitely, if main thread is blocked or is busy doing any non-Python work (commit 1, 2, 3, example usage).
  • Add C++ API for IO. (commit 1, 2, 3, 4, 5, 6).
  • Fix segmentation-fault crashes on unhandled panic with gevent backend (commit, greenlet bug).
  • Fix print(qq(·)) crash on Python2 (commit).

0.0.9 (2021-12-08)

  • Fix deadlock when new context is created from already-canceled parent (commit 1, 2).
  • Add support for "with" statement in sync.WorkGroup. This is sometimes handy and is referred to as "structured concurrency" in Python world (commit, discussion).
  • Fix strconv.unqoute to handle all input that Go strconv.Qoute might produce (commit).
  • More fixes for gpython to be compatible with CPython in how it handles program on stdin, interactive session and __main__ module setup (commit 1, 2, 3, 4, 5).

0.0.8 (2020-12-02)

0.0.7 (2020-09-22)

  • Add way to run gpython with either gevent or threads runtime. This allows gpython usage without forcing projects to switch from threads to greenlets (commit 1, 2, 3).
  • Fix gpython to be more compatible with CPython on command line handling (commit 1, 2, 3, 4, 5, 6, 7).
  • Teach qq to be usable with both bytes and str format whatever type qq's argument is (commit 1, 2).
  • Teach recover to always return exception with .__traceback__ set even on Python2 (commit).
  • Fix pyx.build for develop install (commit).
  • Fix pyx.build on macOS (commit).
  • Add tests for IPython and Pytest integration patches (commit 1, 2, 3, 4, 5, 6, 7).
  • Add support for Python38 (commit 1, 2).
  • Fix ThreadSanitizer/AddressSanitizer support on upcoming Debian 11 (commit).
                By this release Pygolang was included into Nexedi Software Stack.

0.0.6 (2020-02-28)

  • Provide support for error chaining. In concurrent systems operational stack generally differs from execution code flow, which makes code stack traces significantly less useful to understand an error. Error chaining gives ability to build operational error stack and to inspect resulting errors. (commit 1, 2, 3, 4, 5, 6, overview 1, overview 2).
  • Provide unicode ↔ bytes conversion: b(obj) converts str/unicode/bytes obj to UTF-8 encoded bytestring, while u(obj) converts str/unicode/bytes obj to unicode string. The conversion in both encoding and decoding never fails and never looses information: b(u(·)) and u(b(·)) are always identity for bytes and unicode correspondingly, even if bytes input is not valid UTF-8. (commit 1, 2, 3, 4, 5, 6, 7).
  • Provide sync.RWMutex (commit 1, 2).
  • Provide nil as alias for nullptr and NULL (commit 1, 2, 3, 4).
  • Add io package with io.EOF and io.ErrUnexpectedEOF (commit).
  • Correct cxx.dict API to follow libgolang comma-ok style (commit).
  • Provide pyx.build.DSO for projects to build dynamic libraries that use/link-to libgolang (commit 1, 2).
  • Fix pyx.build.build_ext to allow customization (commit).
                This release is driven by wendelin.core v2 needs.

0.0.5 (2019-11-27)

  • Add support for typed Python channels. For example chan(dtype='C.int') creates channel whose elements type is C int instead of Python object. Besides providing runtime type-safety, this allows to build interaction in between Python and nogil worlds (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).
  • Provide automatic memory management for C++/Cython/nogil classes. Used approach complements "Automatic multithreaded-safe memory managed classes in Cython" (Gwenaël Samain et al. 2019, blog post) (commit 1, 2, 3, 4, 5, 6, 7).
  • Provide minimal support for interfaces with empty and error interfaces provided by base library (commit 1, 2).
  • Provide sync.Mutex and sync.Sema as part of both Python and Cython/nogil API (commit 1, 2, 3, 4, 5, 6).
  • Provide C++/Cython/nogil API for time package. Python-level time becomes a small wrapper around Cython/nogil one (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).
  • Provide C++/Cython/nogil API for context package. Python-level context becomes a small wrapper around Cython/nogil one (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).
  • Provide C++/Cython/nogil API for sync package. Python-level sync becomes a small wrapper around Cython/nogil one (commit 1, 2, 3, 4, 5, 6, 7, 8, 9).
  • Add errors package with errors.New to create new error with provided text (commit).
  • Add fmt package with fmt.sprintf and fmt.errorf to format text into strings and errors (commit).
  • Add strings package with utilities like strings.has_prefix, strings.split and similar (commit).
  • Add cxx package with cxx.dict and cxx.set providing ergonomic interface over STL hash map and set (commit).
  • Teach defer to chain exceptions (PEP 3134) and adjust traceback dumps to include exception cause/context even on Python2 (commit 1, 2, 3, 4, 5).
  • Provide defer as part of C++ API too (commit 1, 2, 3).
  • Provide build_ext as part of pyx.build package API. This allows projects to customize the way their Pygolang-based extensions are built (commit 1, 2).
  • Fix recover to clean current exception (commit 1, 2).
  • Fix select to not leak object reference on error path (commit).
  • Fix gevent runtime to preserve Python exception state during runtime calls (commit 1, 2).
                This release is driven by wendelin.core v2 needs.
                This release is dedicated to the memory of Бася.

0.0.4 (2019-09-17)

  • Add ThreadSanitizer, AddressSanitizer and Python debug builds to testing coverage (commit).
  • Fix race bugs in close, recv and select (commit 1, 2, 3, 4, 5, 6). A 25-years old race condition in Python was also discovered while doing quality assurance on concurrency (commit 7, Python bug, PyPy bug).
  • If C-level panic causes termination, its argument is now printed (commit).

0.0.3 (2019-08-29)

  • Provide Cython/nogil API with goroutines and channels. Cython API is not only faster compared to Python version, but also, due to nogil property, allows to build concurrent systems without limitations imposed by Python's GIL. This work was motivated by wendelin.core v2, which, due to its design, would deadlock if it tries to take the GIL in its pinner thread. Implementation of Python-level goroutines and channels becomes tiny wrapper around Cython/nogil API. This brings in ~5x speedup to Python-level golang package along the way (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27).
  • Provide way to install Pygolang with extra requirements in the form of pygolang[<package>]. For example pygolang[x.perf.benchlib] additionally selects NumPy, pygolang[pyx.build] - everything needed by build system, and pygolang[all] selects everything (commit).
  • Improve tests to exercise the implementation more thoroughly in many places (commit 1, 2, 3, 4, 5, 6).
  • Fix race bugs in buffered channel send and receive (commit 1, 2).
  • Fix deadlock in sync.WorkGroup tests (commit).
  • Fix @func(cls) def name not to override name in calling context (commit).
  • Fix sync.WorkGroup to propagate all exception types, not only those derived from Exception (commit).
  • Replace threading.Event with chan in sync.WorkGroup implementation. This removes reliance on outside semaphore+waitlist code and speeds up sync.WorkGroup along the way (commit).
  • Speedup sync.WorkGroup by not using @func at runtime (commit).
  • Add benchmarks for chan, select, @func and defer (commit).

                This release is dedicated to the memory of Вера Павловна Супрун.

0.0.2 (2019-05-16)

  • Add time package with time.Timer and time.Ticker (commit 1, 2, 3).
  • Add support for deadlines and timeouts to context package (commit 1, 2, 3, 4).

0.0.1 (2019-05-09)

  • Add support for nil channels (commit).
  • Add context package to propagate cancellation and task-scoped values among spawned goroutines (commit, overview).
  • Add sync package with sync.WorkGroup to spawn group of goroutines working on a common task (commit 1, 2).
  • Remove deprecated @method (commit).

0.0.0.dev8 (2019-03-24)

  • Fix gpython to properly initialize sys.path (commit).
  • Fix channel tests to pass irregardless of surround OS load (commit).
  • Deprecate @method(cls) in favour of @func(cls) (commit).
  • Support both PyPy2 and PyPy3 (commit 1, 2, 3).

0.0.0.dev7 (2019-01-16)

  • Provide gpython interpreter, that sets UTF-8 as default encoding, integrates gevent and puts go, chan, select etc into builtin namespace (commit).

0.0.0.dev6 (2018-12-13)

  • Add strconv package with quote and unquote (commit 1, 2).
  • Support PyPy as well (commit).

0.0.0.dev5 (2018-10-30)

  • Fix select bug that was causing several cases to be potentially executed at the same time (commit 1, 2, 3).
  • Add defer and recover (commit). The implementation is partly inspired by work of Denis Kolodin (1, 2).
  • Fix @method on Python3 (commit).
  • A leaked goroutine no longer prevents whole program to exit (commit 1, 2).

0.0.0.dev4 (2018-07-04)

  • Add py.bench program and golang.testing package with corresponding bits (commit).

0.0.0.dev3 (2018-07-02)

  • Support both Python2 and Python3; qq now does not escape printable UTF-8 characters. (commit 1, 2, 3).
  • golang/x/perf/benchlib: New module to load & work with data in Go benchmark format (commit).

0.0.0.dev2 (2018-06-20)

  • Turn into full pygolang: go, chan, select, method and gcompat.qq are provided in addition to gimport (commit). The implementation is not very fast, but should be working correctly including select - select sends for synchronous channels.

0.0.0.dev1 (2018-05-21)

  • Initial release; gimport functionality only (commit).