Article View: pl.comp.lang.c
Article #309508Re: Zabrali kopiowanie przy zapisie...
From: (fir)
Date: Fri, 13 Oct 2017 23:15
Date: Fri, 13 Oct 2017 23:15
155 lines
8028 bytes
8028 bytes
W dniu sobota, 14 października 2017 00:53:37 UTC+2 użytkownik (fir) napisał:
> 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
>
>
o ile takie cos
"ala ma kota" - "kota" + "psa"
wydaje sie dosyc normalne to co z
"ala mma kota" - "ala" + "edmund"
czy robic jakas algebre nawiasami typu
("ala mma kota" - "ala") + "edmund"
daloby " ma kotaedmund"
a
"ala mma kota" +(-"ala"+"edmund")
daloby "edmund ma kota"
ciezko powiedziec niby bardziej uzyteczne ale troche brzydkie
o ile wynik dzielenia "ala ma kota" przez " " daje "ala" "ma" "kota" to co jest tutaj reszta z dzielenia
"ala ma lota"%" "
niby mogloby to byc " " " " ale to nie spalenia analogii 9co prawda nie musi), ale nie wiadomo czy nie ma fajniejszej opcji
jeszcze inna kwestia "kot"/"kot" wynik ""
niby ok aczkoliwek "kot"-"kot" wynik ""
czyli "" robiloby raz za analog 1 a raz za analog 0
>
> >
> > co tam jeszcze....
> >
> >
> >
Technical Details
Message-ID:
<36afc76f-9eda-4ea7-8373-7f819b78c497@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!z50no452160qtj.0!news-out.google.com!r5ni1312qtc.1!nntp.google.com!z50no452157qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<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> <03ca728f-cae4-43b7-bee8-88bb5e591ccb@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.55.160.15 with SMTP id j15mr2323879qke.0.1507936519068; Fri, 13 Oct 2017 16:15:19 -0700 (PDT) X-Received: by 10.31.148.12 with SMTP id w12mr182355vkd.8.1507936518993; Fri, 13 Oct 2017 16:15:18 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.fr7!futter-mich.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!z50no452160qtj.0!news-out.google.com!r5ni1312qtc.1!nntp.google.com!z50no452157qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Fri, 13 Oct 2017 16:15:18 -0700 (PDT) In-Reply-To: <03ca728f-cae4-43b7-bee8-88bb5e591ccb@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> <03ca728f-cae4-43b7-bee8-88bb5e591ccb@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <36afc76f-9eda-4ea7-8373-7f819b78c497@googlegroups.com> Subject: Re: Zabrali kopiowanie przy zapisie... From: "(fir)" <profesor.fir@gmail.com> Injection-Date: Fri, 13 Oct 2017 23:15:19 +0000 X-Received-Body-CRC: 2438147032 X-Received-Bytes: 8401 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit