Ich lerne gerade selbst, Haskell, und ich frage mich, was die besten Praktiken sind, wenn man mit Strings in Haskell arbeitet.Effiziente String-Implementierung in Haskell
Die Standard-String-Implementierung in Haskell ist eine Liste von Char. Dies ist ineffizient für Datei-Input-Output, nach Real World Haskell, da jedes Zeichen separat zugeordnet ist (ich nehme an, dass dies bedeutet, dass ein String ist im Grunde eine verkettete Liste in Haskell, aber ich bin mir nicht sicher.)
Aber wenn die Standard-String-Implementierung ist ineffizient für Datei-E/A, ist es auch ineffizient für die Arbeit mit Strings im Speicher? Warum oder warum nicht? C verwendet ein Array von Zeichen, um einen String darzustellen, und ich nahm an, dass dies die Standardmethode in den meisten Sprachen wäre.
Wie ich es sehe, wird die Listenimplementierung von String mehr Speicher belegen, da jedes Zeichen Overhead benötigt und auch mehr Zeit zum Iterieren benötigt, da ein Zeiger-Dereferenzieren erforderlich ist, um zum nächsten Zeichen zu gelangen. Aber ich habe bisher gerne mit Haskell gespielt, also möchte ich glauben, dass die Standardimplementierung effizient ist.
Die Standardimplementierung ist das, was am bequemsten zu handhaben ist, für kleine Strings und die allgemeinen Operationen, die man an ihnen ausführen möchte. Bei großen Strings, die Sie grundsätzlich als Block von Bytes betrachten möchten, ist dies nicht effizient. Verwenden Sie Data.ByteString oder Data.ByteString.Lazy – ShreevatsaR