===================
**Installation and Setup**
* CharmPy can be installed with pip (``pip install charmpy``) on regular
Linux, macOS and Windows systems
* Support setuptools to build, install, and package CharmPy
* Installation from source is much simpler (see documentation)
* charmpy builds include the charm++ library and are relocatable. ``LD_LIBRARY_PATH`` or
similar schemes are no longer needed.
* charmpy does not need a configuration file anymore (it will automatically
select the best available interface layer at runtime).
**API Changes**
* Start API is now ``charm.start(entry)``, where ``entry`` can be a regular
Python function, or any chare type. Special Mainchare class is no longer needed.
**Performance**
* Added Cython-based C-extension module to considerably speed up the interface with
the Charm++ library and critical parts of charmpy (currently only with Python 3+).
* Several minor performance improvements
**Features**
* *Threaded entry methods*: entry methods can run in their own thread when tagged
with the ``threaded`` decorator. This enables `direct style programming`__ with
asynchronous remote method execution (also see Futures):
- The entry point (main function or chare) is automatically threaded by default
- Added ``charm.awaitCreation(*proxies)`` to wait for Group and Array creation
within the threaded entry method that created them
- Added ``self.wait('condition')`` construct to suspend entry method execution until a condition is
met
* *Futures*
- Remote method invocations can optionally return futures with the ``ret``
keyword: ``future = proxy.method(ret=True)``. Also works for broadcasts.
- A future can be queried to obtain the value with ``future.get()``. This will
block if the value has not yet been received.
- Futures can be explicitly created using ``future = charm.createFuture()``,
and passed to other chares. Chares can send values to the future by calling
``future.send(value)``
- Futures can be used as reduction targets
* Simplified ``when`` decorator syntax and enhanced to support general conditions
involving a chare's state and remote method arguments. New syntax is ``when('condition')``.
* Can now pass arguments to chare constructors
* Can create singleton chares. Syntax is ``proxy = Chare(MyChare, pe)``
* ArrayMap: to customize initial mapping of chares to cores
* Warn if user forgot to call ``charm.start()`` when launching charmpy programs
* Exposed ``migrateMe(toPe)`` method of chares to manually migrate a chare to indicated
PE
* Exposed `LBTurnInstrumentOn/Off`__ from Charm++ to charmpy applications
* Interface to construct topology-aware trees of nodes/PEs
**Bug Fixes**
* Fixed issues related to migration of chares
**Documentation**
* Updated documentation and tutorial to reflect changes in installation, setup,
addition of Futures and API changes
* Added leanmd results to benchmarks section
**Examples and Tests**
* Improved performance of ``stencil3d_numba.py``, and added better benchmarking support
* Added parallel map example (``examples/parallel-map/parmap.py``)
* Improved output and scaling of several tests when launched with many (> 100)
PEs
* Cleaned, updated, simplified several tests and examples by using futures
**Profiling**
* Fixed issues which resulted in inaccurate timings in some circumstances
* Profiling of chare constructors (including main chare and chares that
are migrating in) is now supported
**Code**
* Code has been structured as a Python package
* Heavy code refactoring. Code simplification in several places
* Several improvements towards PEP 8 compliance of core charmpy code.
Indentation of code in ``charmpy`` package is PEP 8 compliant.
* Improvements to test infrastructure and added Travis CI script
.. __: https://en.wikipedia.org/wiki/Direct_style
.. __: http://charm.cs.illinois.edu/manuals/html/charm++/7.htmlSECTION01650000000000000000