🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309483

Re: Zabrali kopiowanie przy zapisie...

#309483
From: (fir)
Date: Fri, 13 Oct 2017 22:53
132 lines
6950 bytes
W dniu sobota, 14 października 2017 00:31:41 UTC+2 użytkownik (fir) napisał:
> W dniu wtorek, 10 października 2017 03:35:56 UTC+2 użytkownik bartekltg napisał:
> > On Monday, October 9, 2017 at 9:33:33 AM UTC+2, Wojciech Muła wrote:
> > > On Monday, October 9, 2017 at 7:23:19 AM UTC+2, bartekltg wrote:
> > > > On Saturday, October 7, 2017 at 3:20:51 PM UTC+2, Wojciech Muła wrote:
> > > > > On Saturday, October 7, 2017 at 11:16:42 AM UTC+2, Roman Tyczka wrote:
> > > > > > On Fri, 6 Oct 2017 06:08:35 -0700 (PDT), M.M. wrote:
> > > > > > 
> > > > > > >> C++ ma wybitnie spieprzony design stringów; pomysł mutowalnych
> > > > > > >> stringów jest głupi z definicji. Napis to napis, zwykła wartość.
> > > > > > >> Modyfikacja napisu nie powinna być odpowiedzialnością klasy
> > > > > > >> std::string.
> > > > > > > 
> > > > > > > I do takich wniosków doszli twórcy Javy. Osobiście jednak nie mam
> > > > > > > preferencji ani do jednego, ani do drugiego rozwiązania.
> > > > > > 
> > > > > > Czyli jak jest w Javie?
> > > > > 
> > > > > String jest immutable. Wszystkie operacje na stringach tworzą
> > > > > nowe instancje.
> > > > 
> > > > 
> > > > Ale chcieliśmy zwiększyć wydajność, nie zmniejszyć ;-)
> > > 
> > > Zacytuję klasyka: "serwery są teraz tanie". :)
> > 
> > :-)
> > 
> > Niby tak, ale w pewnym momencie trafiamy na poziom googlo facebooka
> > i takie ilości serwerów już tak tanie nie są:) Albo biolog napisał 
> > sibie na stringach przetwarzanie DNA i mi klaster zapycha...
> > 
> > A na poważnie, dlaczego string ma być immutable? 
> > Przecież moge chcieć tworzyć string literka po literce. 
> > Mogę chcieć zrobić jakieś operacja na nim, 
> > std::sort czy std::next_permutation
> > W tym wypadku będą(?) miał metodę która mi to wywala wynik
> > jako string. 
> > Bawiłem się chwilę (czysto rozrywkowo) c#, i tam literki stringa 
> > są immutable. Więc waliłem .ToCharArray(), robiłem swoje i 
> > konstruowałem nowego stringa. 
> > Pomijając wydajność, było to też brzydkie. 
> > std::string nie służy tylko do trzymania napisu, ale 
> > i przetwarzania, składania.   
> > 
> > Ale od drugiej strony, jakie zalety ma niezmienny string? 
> 
> niezmienny string ma na przyklad ta niebagatelna zalete ze jest niezniszczalny, nie mozna go wiec w szczegolnosci zamazac/zepsuc/zniszczyc informacje - wiekszosc stringow jest po to by niesc jakas informacje (np lądja na ekranie czy na kontrolkach itd i nie sa po to by je niszczyc)
> 
> na niejako podobnej zasadzie stringi nie sa po to by do nich pisac (tj o ile wejsciowe stringi nie sa po to by je niszczyc to wyjsciowe stringi nie sa po to by je tworzyc) dlatego ze ram nie jest po to by ja opisywac stringami dla dekoracji, jesli ktos tworzy jakis nowy string to po to by on trafil gdzies na zewnatrz a do teo mozna wykorzystac - jak pisalem printfa i stworzyc string na wyjsciu a nie w ramie
> 
> pominawszy to resizowalny string mozna zrobic dla zabawy - podalem ilustracje jak mozna i jak wlasciwie nalezy to zrobic
> 
> taki string nie bylby raczej w ogolnosci za mocny wydajnosciowo ale mialby chyba dosyc ciekawe wlasnosci 'wygodnosciowo'
> - byc moze warto nawet na ten temat troche pomyslec
> 
> ciekawa jest na przyklad opcja zmergeowania dwu takich resizowalnych stringow wtedy ten drugi po prostu znika
> 

a+=~b;


> mozna sobie powyobrazac rozne operacja na takich stringach i zbudowac pewna 'algebre' operacji na takich stringach - i to tym razem bardziej pod wzgledem wygody niz speedu (programistow c tez czasem moze byc stac na wygode ;c choc oczywiscie lepiej wiedziec co sie robi)
> 
> przyklady:
> 
> dodanie stringa na poczatku
> 
> a = b + a;
> 
> dodanie stina na koncu
> 
> a = a + b;
> 
> zmergeowanie stringow:
> 
> d=a+b+c;
> 
> a.size = 0;
> b.size = 0;
> c.size = 0;
> 
> tutaj co prawda nie wiem czy faktyczni enie warto dodac czegos w rodzaju 'destruktora' by bylo krocej
> 
> d=~a+~b+~c; //? dodaj i zresizuj na zero 
> 
> w moim siclu mam typ chunks czyli tablice chunkow a dokladnie chunk chunkow,
> 
> przy takim typie mozna dodac tez dzielenie stringow
> 
> chunks l = txt/'\n';
> 
> chunks l = "ala ma kota"/" ";
> 
> pytanie czy tekst dzilacy pownien sie znalezc w skladnikach czy powinien byc usuniety..
> 

dla uproszczenie mozna by dac na początek ze tak

dzielenia wtedy my uzyc niejako do liczeni podstringow, np

"rabarbar"/"b" 
by dalo {"ra", "ar", "ar"}
czyli
 printf("%d", ("rabarbar"/"b").size - 1 ) wypisaloby 2

dzilenie przez "r" by jednak nie dzialalo chyab zeby dodac puste stringi "". "aba", , "ba", ""  wtedy by niby dzialalo

przydala by sie funkcja na scalenie chunksa spowrotem w chunka ale nie wiem czy zwykle mnozeni by dalo rade

("rabarbar"/"r")*"x"

powinno chyba dac "xabaxbax"

pytanie jak wogole powinno dzialac odejmowanie albo jakies inne opki



> 
> co tam jeszcze....
> 
> 
> 
>  
> 
> 
> > Szybkie googlanie podaje powody, które można załatwić
> > const, albo są specyficzne dla określonego jezyka (np cachowanie
> > hashy stringów, bo są często używane).
> > 
> > pzdr
> > bartekltg
Technical Details
Message-ID: <03ca728f-cae4-43b7-bee8-88bb5e591ccb@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!z50no450996qtj.0!news-out.google.com!r5ni1312qtc.1!nntp.google.com!z50no450993qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <or4v67$ene$1@node1.news.atman.pl> <72ac4d9c-806c-4c0d-9d17-e6a1bca634cb@googlegroups.com> <148be543-e417-4b7b-aaa1-5fad87fe41bd@googlegroups.com> <137swhz7qzvw7.dlg@tyczka.com> <6a1a94c7-2d75-4569-8fae-574fb23c919e@googlegroups.com> <d73024b7-92e0-49f9-b827-bfc7b639739b@googlegroups.com> <73ec442f-1a8b-43fc-a06f-a5534a6f3438@googlegroups.com> <da509e00-e7ff-49bb-8870-b77b25bcc560@googlegroups.com> <3d6d153f-34d8-4ee9-b333-9e3072a072c9@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.55.139.135 with SMTP id n129mr2291878qkd.48.1507935216625;        Fri, 13 Oct 2017 15:53:36 -0700 (PDT)
X-Received: by 10.31.7.137 with SMTP id 131mr178859vkh.5.1507935216595; Fri, 13 Oct 2017 15:53:36 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!z50no450996qtj.0!news-out.google.com!r5ni1312qtc.1!nntp.google.com!z50no450993qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Fri, 13 Oct 2017 15:53:36 -0700 (PDT)
In-Reply-To: <3d6d153f-34d8-4ee9-b333-9e3072a072c9@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.47.38.173; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 37.47.38.173
References: <or4v67$ene$1@node1.news.atman.pl> <72ac4d9c-806c-4c0d-9d17-e6a1bca634cb@googlegroups.com> <148be543-e417-4b7b-aaa1-5fad87fe41bd@googlegroups.com> <137swhz7qzvw7.dlg@tyczka.com> <6a1a94c7-2d75-4569-8fae-574fb23c919e@googlegroups.com> <d73024b7-92e0-49f9-b827-bfc7b639739b@googlegroups.com> <73ec442f-1a8b-43fc-a06f-a5534a6f3438@googlegroups.com> <da509e00-e7ff-49bb-8870-b77b25bcc560@googlegroups.com> <3d6d153f-34d8-4ee9-b333-9e3072a072c9@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <03ca728f-cae4-43b7-bee8-88bb5e591ccb@googlegroups.com>
Subject: Re: Zabrali kopiowanie przy zapisie...
From: "(fir)" <profesor.fir@gmail.com>
Injection-Date: Fri, 13 Oct 2017 22:53:36 +0000
Lines: 168
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit