Go 1.2 erschienen

Weil sie einen Sonderfall geregelt haben, können die Macher der Programmiersprache Go ihr Versprechen der Kompatibilität in Version 1.2 nicht mehr ganz einhalten.

So führen nun bestimmte Einsätze des Nil-Pointers aus Sicherheitsgründen zwangsläufig zu einem Laufzeitfehler, weil der Entwickler darüber andernfalls ungewollt auf Speicher zugreifen könnte. In der Folge müssen Entwickler bereits existierenden Code, der solche Konstrukte verwendet, händisch anpassen, was das Versprechen der Kompatibilität einschränkt.

Wer in Go Slice-Operationen auf existierende Arrays oder Slices anwendet, darf nun sowohl die Kapazität als auch die Länge definieren, etwa über:

var array [10]int
slice := array[2:4]  

Die Kapazität entspricht dabei der maximalen Anzahl an Elementen, die ein Slice halten darf und verweist auf die Größe des darunterliegenden Arrays. Im Beispiel beträgt die Kapazität der Slice-Variable 8 Elemente, weil man von den anfänglichen 10 zwei Elemente (2 und 4) abzieht. Ein anderes Beispiel wäre

slice = array[2:4:7]

wobei die 7 hier eine Obergrenze setzt. Die Kapazität beträgt 5 Elemente (7-2). Existierende Programme sind von der Änderung nicht betroffen.

Neben diesen großen Änderungen gibt es noch einige kleinere. Dank Pre-Emption im Scheduler können bestimmte Loops in einem Thread nicht mehr alle Ressourcen belegen und andere Loops aushungern. Die Zahl der Threads lässt sich zudem über SetMaxThreads() begrenzen. Die Minimalgröße für Goroutines-Stacks wurde von 4 auf 8 KByte erhöht, zugleich lässt sich über SetMaxStack() eine Maximalgöße festsetzen. Dank des Cgo-Befehls baut nun der C++-Compiler die C++-Teile des Codes, der auf eine verlinkte Bibliothek verweist.

Weitere Details zu den Neuerungen von Go liefern die Release Notes, zum Download steht der Code in Googles Code-Repository bereit.

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben