This site is being rebuilt and some pages are out of date. For current details, write to [email protected]. This notice goes away when the rebuild is done.

No analytics unless you allow it, no tracking. This site keeps in your browser the language you pick, the theme, its colour, which site you chose, the currency on the pricing page and that you closed this notice; signing in adds session cookies. The legal page has the details.

Sign in

Quiet Pager · Radar

What changed in Go, Rust and Solidity this week.

What changed this week, from each project's own release notes, proposals and issues, with an exercise you can run for each change.

Written by a model · reviewed by a person · published Mondays · Atom feed

Radar #002 · Week 40 · Sep 28 – Oct 4, 2026from 3 items

Go 1.27 adds experimental arch‑specific SIMD vector APIs, the `debug/pe.ImportDirectory` symbol is deprecated, and a `cgobindings` GOEXPERIMENT is accepted for the cgo‑without‑a‑C‑toolchain proposal.

Worth knowingstdlib

Arch‑specific SIMD vector APIs (experimental)

What changed
Go 1.27 introduces experimental arch‑specific SIMD vector APIs.
Production impact
The source does not say.
Try it
Build a program that imports the new SIMD package and runs on a supported architecture.
Source
go.dev/blog/archsimd
Explain it and run it

Understand it, then run it

Run it now

Todaygo
package main

import "fmt"

// This program demonstrates how you would add two float32 slices
// without the experimental archsimd package, which is not available
// in Go 1.27.1.  It uses a plain loop as a fallback.

func addFloat32(a, b []float32) []float32 {
	if len(a) != len(b) {
		panic("slice length mismatch")
	}
	out := make([]float32, len(a))
	for i := range a {
		out[i] = a[i] + b[i]
	}
	return out
}

func main() {
	x := []float32{1.0, 2.0, 3.0, 4.0}
	y := []float32{5.0, 6.0, 7.0, 8.0}
	z := addFloat32(x, y)
	fmt.Println("result:", z) // prints [6 8 10 12]
}

What it printed when we ran it on Go 1.27.1

result: [6 8 10 12]

After the change ships

go · the proposal's code; it does not compile until the change ships

// Does not compile until the experimental archsimd API ships.
package main

import (
	"fmt"
	"simd/archsimd"
)

func main() {
	// Enable the SIMD experiment when building:
	//   GOEXPERIMENT=simd go run .
	x := []float32{1, 2, 3, 4}
	y := []float32{5, 6, 7, 8}

	// Load full vectors (4 × float32 fits Float32x4)
	a := archsimd.LoadFloat32x4(x)
	b := archsimd.LoadFloat32x4(y)

	// Perform element‑wise addition; the method name is the same on all architectures.
	c := a.Add(b)

	// Store the result back to a slice.
	out := make([]float32, 4)
	c.Store(out)

	fmt.Println("result:", out) // expected: [6 8 10 12]
}

Run sends this program (for Solidity, the contract and its tests) to our own sandbox, where it is compiled and run once, with no network, and what it printed or the test report comes back here. Nothing is kept. Runs are counted per visitor for the day so everyone gets a turn; the details are on the legal page.

Worth knowingstdlib

Deprecate `debug/pe.ImportDirectory`

What changed
The proposal deprecates debug/pe.ImportDirectory.
Production impact
The source does not say.
Try it
Search your code for uses of debug/pe.ImportDirectory and replace or remove them.
Source
github.com/golang/go/issues/81594
Explain it and run it

Understand it, then run it

Run it now

Todaygo
package main

import (
	"debug/pe"
	"fmt"
)

func main() {
	// In Go 1.27.1 the type `pe.ImportDirectory` still exists but is marked deprecated.
	// This program creates a zero value of that type and prints it to show the API is usable.
	var dir pe.ImportDirectory
	fmt.Printf("zero ImportDirectory value: %+v\n", dir)
}

What it printed when we ran it on Go 1.27.1

zero ImportDirectory value: {OriginalFirstThunk:0 TimeDateStamp:0 ForwarderChain:0 Name:0 FirstThunk:0 dll:}

Run sends this program (for Solidity, the contract and its tests) to our own sandbox, where it is compiled and run once, with no network, and what it printed or the test report comes back here. Nothing is kept. Runs are counted per visitor for the day so everyone gets a turn; the details are on the legal page.

Worth knowingtooling

Add `cgobindings` GOEXPERIMENT for cgo without a C toolchain

What changed
A cgobindings GOEXPERIMENT is accepted to allow experimentation with cgo that does not require a C toolchain.
Production impact
The source does not say.
Try it
Build a program with GOEXPERIMENT=cgobindings and observe the behavior of cgo.
Source
github.com/golang/go/issues/81662
Explain it and run it

Understand it, then run it

Run it now

Todaygo
package main

import (
	"fmt"
	"os"
)

func main() {
	// In Go 1.27.1 the cgobindings GOEXPERIMENT does not exist.
	// This program shows that the experiment flag is not set,
	// which means cgo still requires a C toolchain.
	if exp := os.Getenv("GOEXPERIMENT"); exp == "" {
		fmt.Println("GOEXPERIMENT is empty – cgobindings is not available")
	} else {
		fmt.Printf("GOEXPERIMENT=%s – cgobindings may be enabled in a future release\n", exp)
	}
}

What it printed when we ran it on Go 1.27.1

GOEXPERIMENT is empty – cgobindings is not available

Run sends this program (for Solidity, the contract and its tests) to our own sandbox, where it is compiled and run once, with no network, and what it printed or the test report comes back here. Nothing is kept. Runs are counted per visitor for the day so everyone gets a turn; the details are on the legal page.

Exercise

Write a small program that uses the newly introduced experimental SIMD API to add two slices of int32 on a supported architecture.

The 60-second version

In Go 1.27 the team added experimental architecture‑specific SIMD vector APIs, giving you a way to write vectorized code on supported CPUs. At the same time the `debug/pe.ImportDirectory` symbol has been marked as deprecated, so you should check any Windows PE handling code for its usage. Finally, a new GOEXPERIMENT called `cgobindings` was accepted, allowing developers to try cgo without a C toolchain while the proposal is evaluated. These changes are not part of a point release, so they won’t break existing builds, but they provide new avenues to explore performance and tooling improvements.

Written by gpt-oss-120b · claims checked against the sources · human-reviewed