Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update to go1.21 #1598

Merged
merged 15 commits into from
Mar 4, 2024
Merged

update to go1.21 #1598

merged 15 commits into from
Mar 4, 2024

Conversation

ldez
Copy link
Contributor

@ldez ldez commented Nov 6, 2023

Co-authored-by: Marc Vertes mvertes@free.fr

This is necessary to fully support go1.21 and beyond, which now
provide some generic packages such as `cmp`, `maps` or `slices`
in the standard library.

The principle is to embed the generic symbols in source form (as
strings) so they can be instantiated as required during interpretation.

Extract() has been modified to skip the generic types, functions and
constraint interfaces which can't be represented as reflect.Values.

A new stdlib/generic package has been added to provide the corresponding
source files as embedded strings.

The `Use()` function has been changed to pre-parse generic symbols as
doing lazy parsing was causing cyclic dependencies issues at compiling.
This is something we may improve in the future.

A unit test using `cmp` has been added.

For now, there are still some issues with generic stdlib packages
inter-dependencies, for example `slices` importing `cmp`, or when
generic types or function signatures depends on pre-compiled types
in the same package, which we will support shortly.
In go1.21, the reflect rtype definition has been move to internal/abi.
We follow this change for maintainability, even if there is no layout
change (the go1.20 unsafe2 is compatible with go1.21).

We have isolated a few problematic tests which are failing sometimes
in go1.21, but work in go1.20, and also in go1.22. Those tests are
skipped if in go1.21. A preliminary investigation can not confirm that
something is wrong in yaegi, and the problem disappears with go1.22.
@mvertes mvertes marked this pull request as ready for review March 3, 2024 12:04
Copy link
Member

@mvertes mvertes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@mloiseleur
Copy link

@mvertes @ldez Config of this repo has been updated with go 1.21 jobs. CI checks are now green.

@mvertes mvertes merged commit 1990b96 into traefik:master Mar 4, 2024
12 checks passed
@ldez ldez deleted the feat/go1.21 branch March 4, 2024 12:16
@ldez ldez added this to the v0.16.x milestone Mar 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/stdlib enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants