2022-08-03 03:04:30 +08:00
|
|
|
Below you can find release notes for each major Codon release,
|
|
|
|
listing improvements, updates, optimizations and more for each
|
|
|
|
new version.
|
2022-08-03 02:53:17 +08:00
|
|
|
|
2022-09-16 03:40:00 +08:00
|
|
|
# v0.14
|
|
|
|
|
|
|
|
## GPU support
|
|
|
|
|
|
|
|
GPU kernels can now be written and called in Codon. Existing
|
|
|
|
loops can be parallelized on the GPU with the `@par(gpu=True)`
|
|
|
|
annotation. Please see the [docs](../advanced/gpu.md) for
|
|
|
|
more information and examples.
|
|
|
|
|
|
|
|
## Semantics
|
|
|
|
|
|
|
|
Added `-numerics` flag, which specifies semantics of various
|
|
|
|
numeric operations:
|
|
|
|
|
|
|
|
- `-numerics=c` (default): C semantics; best performance
|
|
|
|
- `-numerics=py`: Python semantics (checks for zero divisors
|
|
|
|
and raises `ZeroDivisionError`, and adds domain checks to `math`
|
|
|
|
functions); might slightly decrease performance.
|
|
|
|
|
|
|
|
## Types
|
|
|
|
|
|
|
|
Added `float32` type to represent 32-bit floats (equivalent to C's
|
|
|
|
`float`). All `math` functions now have `float32` overloads.
|
|
|
|
|
|
|
|
## Parallelism
|
|
|
|
|
|
|
|
Added `collapse` option to `@par`:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
@par(collapse=2) # parallelize entire iteration space of 2 loops
|
|
|
|
for i in range(N):
|
|
|
|
for j in range(N):
|
|
|
|
do_work(i, j)
|
|
|
|
```
|
|
|
|
|
|
|
|
## Standard library
|
|
|
|
|
|
|
|
Added `collections.defaultdict`.
|
|
|
|
|
|
|
|
## Python interoperability
|
|
|
|
|
|
|
|
Various Python interoperability improvements: can now use `isinstance`
|
|
|
|
on Python objects/types and can now catch Python exceptions by name.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
# v0.13
|
2022-08-03 02:53:17 +08:00
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Language
|
|
|
|
|
|
|
|
### Scoping
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Scoping was changed to match Python scoping. For example:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
if condition:
|
|
|
|
x = 42
|
|
|
|
|
|
|
|
print(x)
|
|
|
|
```
|
|
|
|
|
|
|
|
If condition is `False`, referencing `x` causes a `NameError`
|
|
|
|
to be raised at runtime, much like what happens in Python.
|
|
|
|
There is zero new performance overhead for code using the old
|
|
|
|
scoping; code using the new scoping as above generates a flag to
|
|
|
|
indicate whether the given variable has been assigned.
|
|
|
|
|
|
|
|
Moreover, variables can now be assigned to different types:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
x = 42
|
|
|
|
print(x) # 42
|
|
|
|
x = 'hello'
|
|
|
|
print(x) # hello
|
|
|
|
```
|
|
|
|
|
|
|
|
The same applies in Jupyter or JIT environments.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
### Static methods
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Added support for `@staticmethod` method decorator.
|
|
|
|
Class variables are also supported:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
class Cls:
|
|
|
|
a = 5 # or "a: ClassVar[int] = 5" (PEP 526)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def method():
|
|
|
|
print('hello world')
|
|
|
|
|
|
|
|
c = Cls()
|
|
|
|
Cls.a, Cls.method(), c.a, c.method() # supported
|
|
|
|
```
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
### Tuple handling
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Arbitrary classes can now be converted to tuples via the `tuple()`
|
|
|
|
function.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
### Void type
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
The `void` type has been completely removed in favor of the new
|
|
|
|
and Pythonic `NoneType`, which compiles to an empty LLVM struct.
|
|
|
|
This does not affect C interoperability as the empty struct type
|
|
|
|
is replaced by `void` by LLVM.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
### Standard library
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
The `re` module is now fully supported, and uses
|
|
|
|
[Google's `re2`](https://github.com/google/re2) as a backend. Future
|
|
|
|
versions of Codon will also include an additional regex optimization
|
|
|
|
pass to compile constant ("known at compile time") regular expressions
|
|
|
|
to native code.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## C variables
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Global variables with C linkage can now be imported via `from C import`:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
# assumes the C variable "long foo"
|
|
|
|
from C import foo: int
|
|
|
|
print(foo)
|
|
|
|
```
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Parallelism
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Numerous improvements to the OpenMP backend, including the addition
|
|
|
|
of task-based reductions:
|
|
|
|
|
|
|
|
``` python
|
|
|
|
total = 0
|
2022-08-06 06:14:47 +08:00
|
|
|
@par
|
2022-08-03 02:53:17 +08:00
|
|
|
for a in some_arbitrary_generator():
|
2022-08-06 06:14:47 +08:00
|
|
|
total += do_work(a) # now converted to task reduction
|
2022-08-03 02:53:17 +08:00
|
|
|
```
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Python interoperability
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Included revamped `codon` module for Python, with `@codon.jit` decorator
|
|
|
|
for compiling Python code in existing codebases. Further improved and
|
2022-08-04 04:36:03 +08:00
|
|
|
optimized the Python bridge. Please see the [docs](../interop/decorator.md)
|
|
|
|
for more information.
|
2022-08-03 02:53:17 +08:00
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Codon IR
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
New capture analysis pass for Codon IR for improving tasks such as dead
|
|
|
|
code elimination and side effect analysis. This allows Codon IR to deduce
|
|
|
|
whether arbitrary, compilable Python expressions have side effects, capture
|
|
|
|
variables, and more.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Code generation and optimizations
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
A new dynamic allocation optimization pass is included, which 1)
|
|
|
|
removes unused allocations (e.g. instantiating a class but never
|
|
|
|
using it) and 2) demotes small heap allocations to stack (`alloca`)
|
|
|
|
allocations when possible. The latter optimization can frequently
|
|
|
|
remove any overhead associated with instantiating most classes.
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Command-line tool
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
The `codon` binary can now compile to shared libraries using the `-lib`
|
|
|
|
option to `codon build` (or it can be deduced from a `.so` or `.dylib`
|
|
|
|
extension on the output file name).
|
|
|
|
|
2022-08-03 03:04:30 +08:00
|
|
|
## Errors
|
2022-08-03 02:53:17 +08:00
|
|
|
|
|
|
|
Added support for multiple error reporting.
|