Stavo conversando con un amico sulla classe diStringBuilder
C #%, e qual era il suo comportamento. Parafrasando, ma il mio lato della conversazione è stato qualcosa di simile (ho semplificato eccessivamente perché esattamente come StringBuilder
funziona non è importante per la mia domanda)
StringBuilder
is more efficient to use for extensive string concatenation than to simply use+
. The reason is thatStringBuilder
doesn't dynamically create a newstring
for each concatenation operation. It waits until all of your desired concatenations are "built" and only then does it dynamically allocate the space and give you back yourstring
.
Il mio amico ha detto qualcosa sulla falsariga di
That may be true today, but if you are reliant on such optimizations, then you should make your own
StringBuilder
. In future versions, there's no reason thatStringBuilder
couldn't use simple string concatenation (str1 = str2 + str3
). Libraries only guarantee functional equivalence, not runtime equivalence.
È vero per le biblioteche?
- Se utilizzo la funzione
Sort()
di una libreria con runtimeO(n*log(n))
, è possibile che una versione futura cambi il tempo di esecuzione inO(n^2)
?
Lo stesso vale per gli strumenti eseguibili?
- Potrebbe (ad esempio) il tempo di esecuzione di
grep
cambiare radicalmente in futuro?
A parte questo, non sarebbe una buona pratica per uno sviluppatore di librerie / API / strumenti mantenere i runtime per le stesse chiamate simili nel tempo?