Open Source im professionellen Einsatz
Renée French (CC-BY-SA 3.0)

Renée French (CC-BY-SA 3.0)

Go 1.2 erschienen

02.12.2013

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.

256

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.

Ähnliche Artikel

  • Rust 0.12 erschienen

    Die von Mozilla geförderte Programmiersprache Rust erinnert an C und C++ und soll sichere Client- und Serveranwendungen für das Internet ermöglichen. Nun ist Version 0.12 erschienen.

  • Ready, Set, Go!

    Von Google sind mehr als nur Suchergebnisse zu erwarten. Nun stellt sich der Suchmaschinenriese sogar bei den Programmiersprachen in die Startblöcke - glückt der schnelle Antritt?

  • Systemd 228 mit UTC-Support für Timestamps und Task-Limits

    Eine neue Version 228 von Systemd ist erschienen. Sie verändert unter anderem den Umgang mit Units, unterstützt UTC-Timestamps und bringt zusätzliche Schalter für Journalctl und Systemd-nspawn mit.

  • Processing 2.1 erschienen

    Processing liefert Künstlern und Grafikern eine stark vereinfachte Java-Programmierumgebung, um Animationen und Grafiken für das Web und den plattformübergreifenden lokalen Einsatz umzusetzen. Version 2.1 kommt mit Neuerungen im Gepäck.

  • Rust 1.20 bringt assoziierte Konstanten und sichert Cargo ab

    Entwickler können Structs, Traits und Enums ab Rust 1.20 Konstanten zuordnen und Cargo schützt seine Zugangsdaten besser.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.