Odin: Eine von C inspirierte Sprache, die moderne Best Practices integriert

2025-05-13
Odin: Eine von C inspirierte Sprache, die moderne Best Practices integriert

Der Autor hebt basierend auf seiner Erfahrung bei der Entwicklung einer Spiele-Engine in C die Integration verschiedener C-Best Practices in Odin hervor. Dazu gehören benutzerdefinierte Allokatoren (mit integrierter Unterstützung in Odins Kernbibliotheken), temporäre Allokatoren für framebasiertes Speichermanagement, Tracking-Allokatoren zur Leckerkennung, Null-Initialisierung, designierte Initialisierer und cachefreundliche Programmierung durch SoA-Unterstützung. Odin erreicht dies, während es die Einfachheit von C beibehält und moderne Funktionen wie Generics und (explizite) Überladung hinzufügt. Der Autor betont, dass Odins Funktionen zwar sehr vorteilhaft für diejenigen mit ähnlichem C-Hintergrund sind, aber auch für diejenigen zugänglich ist, die mit diesen Konzepten nicht vertraut sind, und empfiehlt sein Buch als Einführung.

Mehr lesen
Entwicklung

Odin Arena-Allokatoren und dynamische Arrays: Versteckte Fallstricke

2025-04-13
Odin Arena-Allokatoren und dynamische Arrays: Versteckte Fallstricke

Die Verwendung von Arena-Allokatoren mit dynamischen Arrays in Odin birgt subtile Fallstricke. Arenen verwalten effizient Allokationen mit der gleichen Lebensdauer und geben alles gleichzeitig frei. Allerdings lässt der Wachstumsmechanismus dynamischer Arrays alte Speicherblöcke ungenutzt, wenn ein Arena-Allokator verwendet wird, was zu Speicherverschwendung führt. Der Artikel erklärt warum: Arena-Allokatoren unterstützen keine einzelnen Freigaben, und das Wachstum dynamischer Arrays erzeugt einen „Friedhof“ alter Blöcke. Lösungen umfassen die Verwendung des Standardallokators, die Vorabzuweisung der maximalen Größe oder die Verwendung einer virtuell wachsenden Arena. Obwohl die virtuell wachsende Arena das Verschieben von Speicherblöcken verhindert, ist sie nicht gegen potenziellen Verlust gefeit. Der Artikel schlussfolgert, dass es ratsam ist, Arena-Allokatoren zu vermeiden, wenn die Speichernutzung sehr dynamisch ist.

Mehr lesen