Python 3.12
New syntax features:
PEP 695, type parameter syntax and the type statement
New grammar features:
PEP 701, f-strings in the grammar
Interpreter improvements:
PEP 684, a unique per-interpreter GIL
PEP 669, low impact monitoring
Improved ‘Did you mean …’ suggestions for NameError, ImportError, and SyntaxError exceptions
Python data model improvements:
PEP 688, using the buffer protocol from Python
Significant improvements in the standard library:
The pathlib.Path class now supports subclassing
The os module received several improvements for Windows support
A command-line interface has been added to the sqlite3 module
isinstance() checks against runtime-checkable protocols enjoy a speed up of between two and 20 times
The asyncio package has had a number of performance improvements, with some benchmarks showing a 75% speed up.
A command-line interface has been added to the uuid module
Due to the changes in PEP 701, producing tokens via the tokenize module is up to up to 64% faster.
Security improvements:
Replace the builtin hashlib implementations of SHA1, SHA3, SHA2-384, SHA2-512, and MD5 with formally verified code from the HACL* project. These builtin implementations remain as fallbacks that are only used when OpenSSL does not provide them.
C API improvements:
PEP 697, unstable C API tier
PEP 683, immortal objects
CPython implementation improvements:
PEP 709, comprehension inlining
CPython support for the Linux perf profiler
Implement stack overflow protection on supported platforms
New typing features:
PEP 692, using TypedDict to annotate **kwargs
PEP 698, typing.override() decorator
Important deprecations, removals or restrictions:
PEP 623: Remove wstr from Unicode objects in Python’s C API, reducing the size of every str object by at least 8 bytes.
PEP 632: Remove the distutils package. See the migration guide for advice replacing the APIs it provided. The third-party Setuptools package continues to provide distutils, if you still require it in Python 3.12 and beyond.
gh-95299: Do not pre-install setuptools in virtual environments created with venv. This means that distutils, setuptools, pkg_resources, and easy_install will no longer available by default; to access these run pip install setuptools in the activated virtual environment.
The asynchat, asyncore, and imp modules have been removed, along with several unittest.TestCase method aliases.
This library is a rewrite of pythonfinder project by @techalchemy. It
simplifies the whole code structure while preserving most of the original
features.
Go+ is a statically-typed language designed for data
science. It is fully compatible with the Go language, but
has a more script-like style, being more readable code
for data science than Go.
The latest Go release, version 1.20, arrives six months after Go 1.19. Most of
its changes are in the implementation of the toolchain, runtime, and libraries.
As always, the release maintains the Go 1 promise of compatibility. We expect
almost all Go programs to continue to compile and run as before.
https://go.dev/doc/go1.20
Packaged by charlotte@ in wip.
Fennel is a lisp that compiles to Lua. It aims to be easy to use,
expressive, and has almost zero overhead compared to writing Lua directly.
Features:
- Full Lua compatibility: Easily call any Lua function or library from
Fennel and vice-versa.
- Zero overhead: Compiled code should be just as efficient as hand-written
Lua.
- Compile-time macros: Ship compiled code with no runtime dependency
on Fennel.
- Embeddable: Fennel is a one-file library as well as an executable.
Embed it in other programs to support runtime extensibility and interactive
development.
Does not compile in any bulk build I could find, sources from 2007.
(Possibly now part of root if I understand
https://aur.archlinux.org/packages/cint correctly, so that could
be packaged instead)
This does not build in any bulk build I can find; the package is for the
last available upstream version from 2010. (This version does not even
suport 64-bit machines.)
Qt declarative is a Qt6 module that provides the possibility of writing
Qt apps in a declarative fashion using the QML language. It also includes
Qt quick that is standard library for QML applications.
Kona is the open-source implementation of the k3 programming language.
k is a synthesis of APL and LISP. Although many of the capabilities
come from APL, the fundamental data construct is quite different.
In APL the construct is a multi-dimensional matrix-like array, where
the dimension of the array can range from 0 to some maximum (often 9).
In k, like LISP, the fundamental data construct is a list. Also, like
LISP, the k language is ASCII-based, so you don't need a special keyboard.
For many people, k was the preferred APL dialect.
When it was available, it tended to be popular with investment bankers,
the performance obsessed, and analysts dealing with lots of data.
It is a demanding language.
Python 3.11 is between 10-60% faster than Python 3.10. On average, we measured a 1.25x speedup on the standard benchmark suite. See Faster CPython for details.
New syntax features:
PEP 654: Exception Groups and except*
New built-in features:
PEP 678: Exceptions can be enriched with notes
New standard library modules:
PEP 680: tomllib — Support for parsing TOML in the Standard Library
Interpreter improvements:
PEP 657: Fine-grained error locations in tracebacks
New -P command line option and PYTHONSAFEPATH environment variable to disable automatically prepending potentially unsafe paths to sys.path
New typing features:
PEP 646: Variadic generics
PEP 655: Marking individual TypedDict items as required or not-required
PEP 673: Self type
PEP 675: Arbitrary literal string type
PEP 681: Data class transforms
Important deprecations, removals and restrictions:
PEP 594: Many legacy standard library modules have been deprecated and will be removed in Python 3.13
PEP 624: Py_UNICODE encoder APIs have been removed
PEP 670: Macros converted to static inline functions
Go 1.9 and 1.10 are no longer useful because they do not support
module-based builds, which is most other packages now.
Go 1.16 and 1.17 are end of life.
ok to remove from gdt@ on tech-pkg@.
The only consumer was wip/pure. But that needs LLVM 3.5 now.
Will import libLLVM35 to wip instead where it may peacefully
rot until wip/pure upstream supports newer LLVM.
camlp4 is an outdated way to build packages with caml and does not work
with pkgsrc ocaml versions for more than a year.
Remove camlp4 and all packages using it.
Ok jaapb@
GCC 12
Caveats
An ABI incompatibility between C and C++ when passing or returning by value certain aggregates containing zero width bit-fields has been discovered on various targets. As mentioned in PR102024, since the PR42217 fix in GCC 4.5 the C++ front-end has been removing zero width bit-fields from the internal representation of the aggregates after the layout of those aggregates, but the C front-end kept them, so passing e.g. struct S { float a; int : 0; float b; } or struct T { float c; int : 0; } by value could differ between C and C++. Starting with GCC 12 the C++ front-end no longer removes those bit-fields from the internal representation and per clarified psABI some targets have been changed, so that they either ignore those bit-fields in the argument passing by value decisions in both C and C++, or they always take them into account. x86-64, ARM and AArch64 will always ignore them (so there is a C ABI incompatibility between GCC 11 and earlier with GCC 12 or later), PowerPC64 ELFv2 and S/390 always take them into account (so there is a C++ ABI incompatibility, GCC 4.4 and earlier compatible with GCC 12 or later, incompatible with GCC 4.5 through GCC 11). RISC-V has changed the handling of these already starting with GCC 10. As the ABI requires, MIPS takes them into account handling function return values so there is a C++ ABI incompatibility with GCC 4.5 through 11. For function arguments on MIPS, refer to the MIPS specific entry. GCC 12 on the above targets will report such incompatibilities as warnings or other diagnostics unless -Wno-psabi is used.
C: Computed gotos require a pointer type now.
C++: Two non-standard std::pair constructors have been deprecated. These allowed the use of an rvalue and a literal 0 to construct a pair containing a move-only type and a pointer. The nullptr keyword should be used to initialize the pointer member instead of a literal 0, as this is portable to other C++ implementations.
The configuration option --enable-libstdcxx-allocator no longer supports the bitmap, mt, and pool arguments. Those configurations had been broken for some time.
Fortran: OpenMP code using the omp_lib.h include file can no longer be compiled with -std=f95 but now requires at least -std=f2003. Alternatively, use the omp_lib module, which still supports -std=f95 and is recommended to be used instead in general.
OpenMP offloading to Intel MIC has been deprecated and will be removed in a future release.
The cr16 target with the cr16-*-* configuration has been obsoleted and will be removed in a future release.
The hppa[12]*-*-hpux10* and hppa[12]*-*-hpux11* configurations targeting 32-bit PA-RISC with HP-UX have been obsoleted and will be removed in a future release.
The m32c*-*-rtems* configuration has been obsoleted and will be removed in a future release.
The support for the m32r-*-linux*, m32rle-*-linux*, m68k*-*-openbsd* and vax-*-openbsd* configurations has been removed.
STABS: Support for emitting the STABS debugging format is deprecated and will be removed in the next release. All ports now default to emit DWARF (version 2 or later) debugging info or are obsoleted.
The optimization level -Ofast now implies -fno-semantic-interposition.
General Improvements
Vectorization is enabled at -O2 which is now equivalent to the original -O2 -ftree-vectorize -fvect-cost-model=very-cheap. Note that default vectorizer cost model has been changed which used to behave as -fvect-cost-model=cheap were specified.
GCC now supports the ShadowCallStack sanitizer, which can be enabled using the command-line option -fsanitize=shadow-call-stack. This sanitizer currently only works on AArch64 targets and it requires an environment in which all code has been compiled with -ffixed-r18. Its primary initial user is the Linux kernel.