News for hackers. Stuff that matters.
Re:Go 1.23 Released by rkharsan64 on Tuesday August 13, 2024 @03:39PM (#41238919)
From the release notes [1], which I think this post should actually point to:

> For backward compatibility, existing usages of //go:linkname found in a large open-source code corpus remain supported. Any new references to standard library internal symbols will be disallowed.

How does this work? Does the compiler have a whitelist of allowed uses?

[1]: https://go.dev/doc/go1.23

Re:Go 1.23 Released by tedunangst on Tuesday August 13, 2024 @04:17PM (#41239342)
The source has to be annotated to export the function.
Re:Go 1.23 Released by rkharsan64 on Tuesday August 13, 2024 @04:26PM (#41239429)
Just confirming if I understand this correctly: they went through a big chunk of existing code, and then made any internal symbols used in that corpus accessible via //go:linkname?

I don't know why, but I (stupidly) assumed that they wouldn't allow new code to be written that uses those symbols, while allowing old code to work. :)

This explanation makes a lot more sense. So, you can keep using the symbols exposed with this change (until a future release hides/changes them), but cannot use any other internal symbol(s) anymore.

Re:Go 1.23 Released by ianlancetaylor on Tuesday August 13, 2024 @04:57PM (#41239765)
Yes.