Z tego co rozumiem, ciągi znaków w Nim są w zasadzie zmienną sekwencją bajtów i są kopiowane na przypisanie.Co dokładnie są ciągi w Nim?
Biorąc pod uwagę, że Sądziłem, że sizeof
powie mi (jak len
) liczbę bajtów, lecz ona zawsze daje 8
na moim komputerze 64-bitowym, więc wydaje się, że trzyma wskaźnik.
Biorąc pod uwagę, że mam następujące pytania ...
Jaka była motywacja za kopię na przydział? Czy to dlatego, że są zmienne?
Czy jest jakiś czas, kiedy nie jest kopiowany po przydzieleniu? (Zakładam, że parametry funkcji nie są kopiowane.) Coś jeszcze?)
Czy są one zoptymalizowane w taki sposób, że są kopiowane tylko wtedy, gdy są zmutowane?
Czy istnieje jakaś znacząca różnica między ciągiem a sekwencją, czy też odpowiedzi na powyższe pytania można w równym stopniu zastosować do wszystkich sekwencji?
Coś jeszcze wartego uwagi?
Dziękujemy!
dla kompletności, życie definition NIM string [na github] (https: //github.com/Araq/Nim/blob/master/lib/system.nim#L56), co może pomóc wyjaśnić, dlaczego raportuje to, co zgłasza. –
@ Mike'Pomax'Kamermans: Dzięki za link, ale nie wiem, co 'string * {.magic: String.}' Próbuje mi powiedzieć. ;-) –
tak, niezbyt pewny siebie, po prostu pomyślałem, że może to być dobra informacja, aby mieć w pytaniu możliwą przewagę dla ludzi lepiej w odkrywaniu, co jest od nas =) –