🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Zabrali kopiowanie przy zapisie...

#309512
From: (fir)
Date: Mon, 09 Oct 2017 13:01
79 lines
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-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> <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