Article View: pl.comp.lang.c
Article #309512Re: Zabrali kopiowanie przy zapisie...
From: (fir)
Date: Mon, 09 Oct 2017 13:01
Date: Mon, 09 Oct 2017 13:01
79 lines
5629 bytes
5629 bytes
W dniu poniedziałek, 9 października 2017 14:54:07 UTC+2 użytkownik (fir) napisał:
> W dniu poniedziałek, 9 października 2017 14:48:08 UTC+2 użytkownik (fir) napisał:
> > W dniu poniedziałek, 9 października 2017 14:30:37 UTC+2 użytkownik (fir) napisał:
> > > W dniu poniedziałek, 9 października 2017 07:23:19 UTC+2 użytkownik bartekltg napisał:
> > > > 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ć ;-)
> > > >
> > > pisanie do stringa jest bardzo malo uzyteczne - rzadko spotykane (dla mnie niemal jak yeti mimo ze ostatnio pisalem nawet cos co operuje na tekstach np swoj asembler x86 czy ostatnio klienta irca)
> > >
> > > zwykle jako output operacji na stringach zamiast pisania do tablicy (a co tu mowic o pisaniu do strainga) wystarczy printf() (na konsole albo do pliku)
> >
> > co zarazem nie znaczy ze jak ktos chce to realokowalnego stringa mozna sobie zrobic, (np bardzo latwo w c)* - zwlaszcza ze ostatnio przekonalem sie troche do reallocka
> >
> > *zob watek "resizable chunks and typesafety" z 11 wrzesnia (i moja nowatorska biblioteke small-icl.c)
> >
> >
> > typedef struct
> > {
> > char* beg;
> > char* end;
> > }
> > chunk;
> >
> > chunk ResizeChunk(chunk x, int size)
> > {
> > x.beg = (char*) realloc(x.beg, size );
> >
> > if((size>0) && (x.beg==NULL)) ERROR_EXIT("AllocChunk failed");
> >
> > x.end = x.beg + size -1;
> > return x;
> > }
> >
> >
> > void main()
> > {
> > chunk dipa;
> >
> > dipa = ResizeChunk(dipa, 10);
> >
> > dipa = ResizeChunk(dipa, 1000);
> >
> > }
> >
> > jako ze reallock 'cacheuje' czy jak to nazwac rezerwe ramu (i to dosyc agresywnie ) to bedzie dzialac calkiem szybko
> > (aczkolwiek moja biblioteka sicl jest bardziej oparta na splitach i indeksowaniu (czyli nie zmienia np ramu do ktorego np wpisano plik tekstowy jedynie go indeksuje na wskazniki i pozwala wybrac to co nas
> > interesuje co z kolei zwykle zrzuca sie do outputu
> > wlasnie printfem czy czyms podovnym, jest to rozwiazanie chyba bliskie idealu)
>
> realizuje to przy tym moja idee stringa czyli ani nie zero na koncu a nie nie basicowe rozmiar na oczatku,
> dobry string imo to para dwu wskaznikow begin i end begin pokazuje na pierwszy znak end na ostatni (wcielilem ta idee w zycie i nazwalem taki obiekt chunk - biblioteka sicl jest tego konsekwencją)
w tym wspomnianym teksie wspomnielem tylko o jednym problemie, c potrzebuje kontroli typow i rozroznienia
miedzy chunkiem na bss-ie (na statycznym ramie) a chunkiem na heapie, bo na pierwszym nie mozna klapnąc reallocka a na drugim mozna, nie wiem jak to najlepiej rozwiazac
jak na dany moment chyba zdefiniuje 2 typy
typedef struct { char* beg,* end; } chunk;
typedef struct { char* beg,* end; } schunk;
chunk zwykly i reSizowalny i bede kastowal resizowalna na zwykle nieststy - nie wiem jak w praktyce to wyjdzie ale kontrola typu tu musi byc
Technical Details
Message-ID:
<66de7734-042a-461e-bc74-9ebee3c6d402@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!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!z50no1296248qtj.0!news-out.google.com!r5ni835qtc.1!nntp.google.com!z50no1296245qtj.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> <75c91d58-447b-4703-b00c-9e5328950bfa@googlegroups.com> <1020c67b-4039-4505-98a2-36c3768e420d@googlegroups.com> <243e7073-e526-4b2a-855f-4c2bc3ed62c4@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.200.18.132 with SMTP id y4mr4948917qti.24.1507554096352; Mon, 09 Oct 2017 06:01:36 -0700 (PDT) X-Received: by 10.31.180.22 with SMTP id d22mr476831vkf.4.1507554096320; Mon, 09 Oct 2017 06:01:36 -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!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!z50no1296248qtj.0!news-out.google.com!r5ni835qtc.1!nntp.google.com!z50no1296245qtj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Mon, 9 Oct 2017 06:01:36 -0700 (PDT) In-Reply-To: <243e7073-e526-4b2a-855f-4c2bc3ed62c4@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.47.41.121; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN NNTP-Posting-Host: 37.47.41.121 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> <75c91d58-447b-4703-b00c-9e5328950bfa@googlegroups.com> <1020c67b-4039-4505-98a2-36c3768e420d@googlegroups.com> <243e7073-e526-4b2a-855f-4c2bc3ed62c4@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <66de7734-042a-461e-bc74-9ebee3c6d402@googlegroups.com> Subject: Re: Zabrali kopiowanie przy zapisie... From: "(fir)" <profesor.fir@gmail.com> Injection-Date: Mon, 09 Oct 2017 13:01:36 +0000 X-Received-Body-CRC: 1597755928 X-Received-Bytes: 5849 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit