LV 8.5 i In Place
: 25 cze 2008 07:42
Ja odnośnie tego tematu. In Place jest jednym z tych elementów (obok break i rekurencji), dla których rozważam przejście na 8.5, które jak do tej pory leży sobie w kopercie nawet nieodfoliowane. Zawsze mnie dziwiło, że żeby zmienić jeden element tablicy trzeba robić taki wygibas, a w dodatku cała tablica jest kopiowana. Tym bardziej jest to dla mnie istotne, że często operuję na dużych tablicach idących w miliony elementów - nierzadko rozbudowanych klastrów. Co prawda nie zauważyłem, żeby podmiana elementów w tych tablicach była jakimś wąskim gardłem, ale perspektywa przyspieszenia i zwiększenia przejrzystości kodu jest dla mnie kusząca. I dlatego zdziwiły mnie opinie, że to wcale nie jest takie piękne jak się wydaje.
Mam więc prośbę do kogoś kto dysponuje LV8.5 i chwilką czasu by przeprowadził jakieś miarodajne testy, które byśmy tu wcześniej zaprojektowali i obdyskutowali.
Nasunął też mi się pomysł "trzeciego przypadku": funkcja w C, skompilowana do DLL, która umieszcza przekazanego jej stringa w miejscu pamięci wyznaczonym przez przekazany wskaźnik i ofset (iloczyn przekazanego indeksu i długości stringa), po czym zwraca wskaxnik, który dostała. Pełniłoby to taką rolę jak In Place - przekazuje się tablicę przez wskaźnik, indeks do podmiany i "zflatenowany" do stringa element do podmiany. String musiałby oczywiście mieć na początku zapisaną swoją długość ze względu na to, że może zawierać zera. Ciekawi jak miałoby się wywoływanie tego za pomocą Call Library Function Node do wersji klasycznej i In Place. Czy LV kopiowałoby całą tablicę?
Mam więc prośbę do kogoś kto dysponuje LV8.5 i chwilką czasu by przeprowadził jakieś miarodajne testy, które byśmy tu wcześniej zaprojektowali i obdyskutowali.
Nasunął też mi się pomysł "trzeciego przypadku": funkcja w C, skompilowana do DLL, która umieszcza przekazanego jej stringa w miejscu pamięci wyznaczonym przez przekazany wskaźnik i ofset (iloczyn przekazanego indeksu i długości stringa), po czym zwraca wskaxnik, który dostała. Pełniłoby to taką rolę jak In Place - przekazuje się tablicę przez wskaźnik, indeks do podmiany i "zflatenowany" do stringa element do podmiany. String musiałby oczywiście mieć na początku zapisaną swoją długość ze względu na to, że może zawierać zera. Ciekawi jak miałoby się wywoływanie tego za pomocą Call Library Function Node do wersji klasycznej i In Place. Czy LV kopiowałoby całą tablicę?