Metadata-Version: 2.1
Name: pygolang
Version: 0.0.0.dev4
Summary: Go-like features for Python
Home-page: https://lab.nexedi.com/kirr/pygolang
Author: Kirill Smelkov
Author-email: kirr@nexedi.com
License: GPLv3+ with wide exception for Open-Source
Description: ========================================
         Pygolang - Go-like features for Python
        ========================================
        
        Package golang provides Go-like features for Python:
        
        - `go` spawns lightweight thread.
        - `chan` and `select` provide channels with Go semantic.
        - `method` allows to define methods separate from class.
        - `gimport` allows to import python modules by full path in a Go workspace.
        
        
        Goroutines and channels
        -----------------------
        
        `go` spawns a thread, or a coroutine if gevent was activated. It is possible to
        exchange data in between either threads or coroutines via channels. `chan`
        creates a new channel with Go semantic - either synchronous or buffered. Use
        `chan.recv`, `chan.send` and `chan.close` for communication. `select` can be
        used to multiplex on several channels. For example::
        
            ch1 = chan()    # synchronous channel
            ch2 = chan(3)   # channel with buffer of size 3
        
            def _():
                ch1.send('a')
                ch2.send('b')
            go(_)
        
            ch1.recv()      # will give 'a'
            ch2.recv_()     # will give ('b', True)
        
            _, _rx = select(
                ch1.recv,           # 0
                ch2.recv_,          # 1
                (ch2.send, obj2),   # 2
                default,            # 3
            )
            if _ == 0:
                # _rx is what was received from ch1
                ...
            if _ == 1:
                # _rx is (rx, ok) of what was received from ch2
                ...
            if _ == 2:
                # we know obj2 was sent to ch2
                ...
            if _ == 3:
                # default case
                ...
        
        Methods
        -------
        
        `method` decorator allows to define methods separate from class.
        
        For example::
        
          @method(MyClass)
          def my_method(self, ...):
              ...
        
        will define `MyClass.my_method()`.
        
        
        Import
        ------
        
        `gimport` provides way to import python modules by full path in a Go workspace.
        
        For example
        
        ::
        
            lonet = gimport('lab.nexedi.com/kirr/go123/xnet/lonet')
        
        will import either
        
        - `lab.nexedi.com/kirr/go123/xnet/lonet.py`, or
        - `lab.nexedi.com/kirr/go123/xnet/lonet/__init__.py`
        
        located in `src/` under `$GOPATH`.
        
        ----
        
        Pygolang change history
        =======================
        
        0.0.0.dev4 (2018-07-04)
        -----------------------
        
        - Add `py.bench` program and `golang.testing` package with corresponding bits (commit__).
        
          `py.bench` allows to benchmark python code similarly to `go test -bench` and `py.test`.
          For example, running py.bench on the following code::
        
              def bench_add(b):
                  x, y = 1, 2
                  for i in xrange(b.N):
                      x + y
        
          gives something like::
        
              $ py.bench --count=3 x.py
              ...
              pymod: bench_add.py
              Benchmarkadd    50000000        0.020 µs/op
              Benchmarkadd    50000000        0.020 µs/op
              Benchmarkadd    50000000        0.020 µs/op
        
          __ https://lab.nexedi.com/kirr/pygolang/commit/9bf03d9c
        
        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__).
        
          __ https://lab.nexedi.com/kirr/pygolang/commit/02dddb97
          __ https://lab.nexedi.com/kirr/pygolang/commit/e01e5c2f
          __ https://lab.nexedi.com/kirr/pygolang/commit/622ccd82
        
        - `golang/x/perf/benchlib:` New module to load & work with data in Go benchmark
          format (commit__).
        
          __ https://lab.nexedi.com/kirr/pygolang/commit/812e7ed7
        
        
        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.
        
          __ https://lab.nexedi.com/kirr/pygolang/commit/afa46cf5
        
        
        0.0.0.dev1 (2018-05-21)
        -----------------------
        
        - Initial release; `gimport` functionality only (commit__).
        
          __ https://lab.nexedi.com/kirr/pygolang/commit/9c61f254
        
Keywords: go channel goroutine GOPATH python import
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Provides-Extra: test
