Releases: evhub/coconut
Coconut v3.1.2
See Coconut's documentation for more information on all of the features listed below.
Bugfixes:
Language features:
- #846:
reduce
,takewhile
, anddropwhile
now support keyword arguments. - #848: Class and data patterns now support keyword argument name elision.
- #847: New pattern-matching syntax for matching anonymous named tuples.
Compiler features:
- #843: Added compiler warnings for (some cases of) undefined variables.
Coconut v3.1.1
See Coconut's documentation for more information on all of the features listed below.
Language features:
- #833: New
case def
syntax for more easily defining pattern-matching functions with many patterns. - #811: New
f(name=)
syntax as a shorthand forf(name=name)
, replacing the now deprecatedf(...=name)
syntax. - #836: New
CoconutWarning
built-in used for Coconut runtime warnings.
Compiler features:
- #837: Coconut will now warn about implicit string concatenation and disable it completely with
--strict
. - #718: Coconut will now warn about use of
addpattern def
without a priormatch def
. This was a previously-supported feature to make pattern-matching functions with many patterns easier to write, but the new recommended way to do that is now viacase def
. - #785: Initial pyright support via the
--pyright
flag.
Bugfixes:
Coconut v3.1.0
See Coconut's documentation for more information on all of the features listed below.
Language features:
- #814: Changes to statement lambda scoping rules, including capturing names introduced in the surrounding expression.
- #618: Changes to handling of pattern-matching function defaults including support for e.g.
match def f(x, y=x) = (x, y)
. - #809: New array concatenation implicit partials (e.g.
[. ; a]
). - #823: New
(x := .)
implicit partial syntax (only available in pipes). - #807: New
lift_apart
built-in combinator. - #813: New
(if)
operator function. - #826 (thanks @JayXon!): Better universalization and
fmap
support forbytes
andbytearray
. - #816: Support for
xarray
to match existingnumpy
/pandas
support. - #817: New
to
argument toall_equal
. - #821 (thanks @GolfingSuccess!): Expanded implicit function application syntax to support string literal methods.
Compiler features:
- #799:
coconut-run
andcoconut --run
now work on packages rather than just files. - #812: Better formatting of Coconut exceptions.
Bugfixes:
- #810: Fixed an issue compiling certain syntax constructs in the Coconut Jupyter kernel.
- #818, #825 (thanks @kg583, @dokutan!): Fixed parsing of different Unicode line break characters.
- #822 (thanks @JayXon!): Fixed parsing of Unicode backward pipe operators.
- #819, #820 (thanks @kg583!): Fixed some incompatibilities between Python and Coconut syntax.
Coconut v3.0.4
This is primarily a bugfix release to resolve #804. See Coconut's documentation for more information on all of the features listed below.
Language changes:
- #784:
where
statements now use temporary variable names to limit the scope of contained assignments. - #795: New
async_map
function utilizinganyio
to work withasyncio
ortrio
. - #793: New
mapreduce
,collectby.using_threads
,collectby.using_processes
,mapreduce.using_threads
, andmapreduce.using_processes
built-ins. - #787: Support for
.method[index]
implicit partials. - #749, #792: Some built-ins have been renamed for clarity (the old names will still work unless
--strict
is passed). Specifically:recursive_iterator
->recursive_generator
parallel_map
->process_map
concurrent_map
->thread_map
- #797: Partial application objects now preserve the original function's
__name__
attribute. - #789: Coconut will automatically backport
ExceptionGroup
using theexceptiongroup
module.
Compiler changes:
- #772: Substantial improvements to recompilation speed for most files.
- #798: New
api.find_packages
andapi.find_and_compile_packages
utilities for working with Coconut packages. - #803: New
--fail-fast
option to fail upon the first error when compiling multiple files. - #778: The
--history-file
command-line option has been removed; useCOCONUT_HISTORY_FILE
environment variable if you really need it.
Bugfixes:
Coconut v3.0.3
See Coconut's documentation for more information on all of the features listed below.
New features:
- #738: New
and_then
andand_then_await
built-ins for async function composition.
Language changes:
- #763: Lambdas now support fat arrows (
x => x
) as an alternative to skinny arrows (x -> x
) to better distinguish them from type annotations. Skinny arrow lambdas will be deprecated at some later date. - #756: Coconut now fully supports Python 3.12's enhanced
f
-string syntax on all targets. - #773:
f
-strings with no expressions in them (e.g.f"why does this have an f"
will now show a warning by default and an error on--strict
.
Compiler changes:
- #761:
--line-numbers
are now on by default. Pass--no-line-numbers
to turn them off. - #768 (thanks @kxmh42!): Automatic compilation now uses a cache directory rather than compiling files in-place; additionally, automatic compilation options can now be set via
coconut-run
. - #767: New
--target psf
support for targeting all versions not considered end-of-life. - #765 (thanks @rtbs-dev!): New
coconut --jupyter install
command for easily installing all Jupyter kernels added as an alternative to the existingcoconut --jupyter
syntax. - #766: Coconut now internally supports an incremental parsing mode that is used in some situations (e.g. in the Jupyter kernel) to substantially improve recompilation times.
Bugfixes:
- #759 (thanks @Starwort!):
multiset
methods should now always returnmultiset
s when the arguments are allmultiset
s rather thanCounter
s. - #764 (thanks @koraa!): An issue that caused function definitions to take much longer to compile when compiling from the interpreter has now been fixed.
- #762 (thanks @Starwort!): Semicolon-separated commands should now always work properly on
xonsh
. - #775: Coconut should no longer set the
MYPYPATH
to include the entire directory that Coconut has been installed into when running with--mypy
. - #777: Docstrings should now show up properly in any third-party tools that look at Coconut's stub files.
Coconut v3.0.2
See Coconut's documentation for more information on all of the features listed below.
This is another patch release, mainly for #751 and #755.
New features:
- #753:
async with for
loops provide a simple syntax for implementing the recommended pattern for handlingasync
generators.
Language changes:
- #752:
typing
imports will redirect totyping_extensions
whenever possible to ensure you always get the latest implementation oftyping
objects on all versions. - #754:
async
generators and some related utilities will now be automatically backported to 3.5 via theasync_generator
library. - #748: Certain confusing Unicode operator alternatives removed.
Compiler changes:
- #750:
coconut.convenience
renamed tococonut.api
(coconut.convenience
is still available as an alias for backwards compatibility).
Bugfixes:
Coconut v3.0.1
See Coconut's documentation for more information on all of the features listed below.
This is a patch release primarily aimed at fixing #746, though it also brings a couple of new features and other fixes as well.
New features:
- #743: New
f(...=long_name)
syntax as a shorthand forf(long_name=long_name)
. - #744:
f ..> g
will now preserve the signature off
when inspected usinginspect.signature
.
Language changes:
- #736:
fmap
will now raiseTypeError
rather than falling back to a default implementation when it encounters an unknown type. For backwards compatibility, the old behavior can be recovered withfmap$(fallback_to_init=True)
. - #737:
fmap
now works properly onmultiset
.
Bugfixes:
- #746: Syntax errors produced when using Coconut's Jupyter kernel will now present themselves nicely rather than causing an error.
- #745 (thanks @Starwort!):
xonsh
will no longer fail on semicolon-seperated commands when using the Coconut extension. - #739 (thanks @yggdr!): Compiling a single directory in
--stand-alone
mode will now properly make use of--jobs
. - #742 (thanks @kloczek!): Fixed a deprecation warning when installing Coconut.
Coconut v3.0.0
Coconut v3! See Coconut's documentation for more information on all of the features listed below.
Note that v3 is a major version release that comes with some breaking changes, though Coconut will do its best to warn you if your code does anything that changed from v2 to v3.
Breaking changes:
- #714:
set
patterns now work likedict
patterns where they allow extra keys, such that{1, 2}
will match{1, 2, 3}
. To get back the strict behavior, use the{1, 2, 3, *()}
pattern. Coconut will warn you if your code contains set patterns without an explicit strictness marker. - #707: the precedence of implicit function application has been changed to be compatible with implicit coefficients, such that
f x**2
is now equivalent tof(x**2)
rather thanf(x)**2
. Coconut will warn you if your code contains expressions with new precedence. - #733:
.$[]
will now only default to using an existing__getitem__
if the object is registered as acollections.abc.Sequence
.__iter_getitem__
will still always be used. Lets you do things like{"k": "v"}$[0]
. - #730:
obj.
syntax as a shorthand forgetattr$(obj)
deprecated. - #732:
--jobs
now defaults tosys
rather than0
.
New features:
- #707: New implicit coefficient syntax! Polynomials are just
a x**2 + b x + c
, with support for single variable names and numeric constants as coefficients. - #731: New
copyclosure def
functions that copy their closures on function creation, allowing them to e.g. hold on to loop variables. - #709:
(+)
syntax in a typing context now yields atyping.Protocol
that requires supporting that operator. - #709: New
&:
operator for combining multipletyping.Protocol
's into a single protocol. - #718 (thanks @yggdr!): You can now use
addpattern def
even if there's no existing function of that name, allowing you to useaddpattern def
for every pattern rather than having to usematch def
for the first one. - #727: New
x |> await
syntax for usingawait
in pipes. - #734: Substantially improved
pandas
support. - #714: New
frozenset
andmultiset
patterns.
Bugfixes:
- #725 (thanks @yggdr!): Fixed
(in)
operator function argument ordering. - #721 (thanks @yggdr!):
is not
andnot in
operator functions now supported. - #724 (thanks @Starwort!): Coconut no longer slows down
xonsh
loading and fixedxontrib unload coconut
. - #726 (thanks @caedmon-kitty!): Fixed certain
xonsh
commands when using Coconut'sxonsh
plugin. - #723:
dict
now always functions as on the latest Python 3 on any Python version. - #728 (thanks @yggdr!): Fixed
super
compatibility across Python versions and some cases wheresuper()
wouldn't work. - #717 (thanks @kksgandhi!): Fixed
coconut --jupyter qtconsole
.
Coconut v2.2.0
See Coconut's documentation for more information on all of the features listed below.
Major changes:
- #694: New
multiset
built-in based oncollections.Counter
, including new multiset literal syntax (m{1, 1, 2, 3, 3, 4}
). - #691: New
Expected
built-in based on Haskell'sEither
, plus newsafe_call
built-in that calls a function while collecting any errors into anExpected
. Additionally, theof
built-in has been renamed tocall
(of
is still available as a deprecated alias when compiled without--strict
). - #701: New
windowsof
built-in for iterating over sliding windows of the given iterable. - #688: New
cartesian_product
built-in as an enhanced version ofitertools.product
includingnumpy
support. - #690: New
cycle
built-in as an enhanced version ofitertools.cycle
. - #704, #703, #702, #693, #692: Lots of improvements to existing built-ins:
map
now supports astrict=True
keyword-only argument that works as inzip
.flatten
now supports alevels
argument for how many levels to flatten.groupsof
now supports afillvalue
argument to pad the last group.addpattern
now accepts any number of pattern-matching functions.memoize
now accepts a function to memoize as the first argument.
- #710: New
None
-aware function composition pipes (e.g.f ..?> g
).
Minor changes:
- #686: Type parameter bounds can (and should) now use
<:
syntax instead of:
or<=
(e.g.def f[T <: int[])(xs: T) -> T = ...
). - #711: Backwards
None
-aware pipes now supported (e.g.<?|
). - #708: Pattern-matching against
data
types with default arguments now allows those defaults to be elided in thematch
. - #697:
::
now produces a reiterable object when called on reiterable objects. - #706: Multiple Coconut projects should now be able to seamlessly use each other's
MatchError
s when compiled in--package
mode. - #695: Set literal syntax now supports star unpacking.
- #699: Support for
__bool__
magic method fixed on Python 2. - #687: Jupyter kernel and other automatic compilations now uses
--no-wrap
. - #685, #684: Improved detection of code issues on and off
--strict
. - #700: Some confusing unicode alternatives were removed.
- #698: Typing for
fmap
has been improved. - #689: Improved
numpy
support for some built-ins. - #705: Many Coconut built-ins have now been made
weakref
able.
v2.1.1 [The Spanish Inquisition]
v2.1.1 is a relatively small release on top of v2.1.0 primarily releasing now to provide Python 3.11 support, though v2.1.1 also has a couple of exciting new features, primarily Coconut's new type parameter syntax. See Coconut's documentation for more information on all of the features listed below.
Bugfixes:
- #682: Coconut no longer errors out on Python 3.11.
Major changes:
- #677: New type parameter syntax following PEP 695! For example: type a generic function as
def ident[T](x: T) -> T = x
.
Minor changes:
- #679: Error and logging output is now colored on terminals that support it.
- #678: Non-
mypy
type checkers should now have an easier time type-checking Coconut code. - #680: New
async (...) -> ...
and(..., **P) -> ...
enhanced type annotation constructs for Callables following PEP 677. - #644:
f = async def x -> x
async statement lambda syntax now supported. - #624:
x |> (.+1)
syntax now produces better optimized compiled Python. - #681:
case
/match
syntax now deprecated on--strict
in favor of Python 3.10match
/case
syntax.