Såg förresten en liten förbättring till din kod nu när jag kom hem till datorn. Du allokerar onödigt mycket minne för resultat-strängen i before_delimiter
. Du kan söka upp delimitern först, räkna hur lång prefix-strängen är, och bara allokera och kopiera över så många tecken som behövs:
char* before_delimiter(const char* str, char del) {
const char* p = strchr(str, del);
const size_t i = (size_t)(p - str);
char* new = malloc(i + 1);
strncpy(new, str, i);
new[i] = 0;
return new;
}
Jag tycker Rust är ett väldigt trevligt språk. Det trevligaste jämfört med C tycker jag är det avancerade typsystemet med bl.a. generics/polymorfism. Speciellt polymorfism gör det så mycket enklare att återanvända datastrukturer för olika typer, istället för att ad-hoc behöva återuppfinna hjulet varje gång man vill, säg, lägga sin egna datatyp i ett hash-träd utan att behöva lägga allting bakom massa indirektion med void-pekare. C går nog alltid att göra snabbare än Rust om man är villig att lägga ned jobbet, men i min erfarenhet känns det som att man med Rust når 90% av prestandan av optimal C, med 30% av koden. Och detta är ju då jämfört med just optimal C, vilket man sällan orkar ta fram.