🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Zabrali kopiowanie przy zapisie...

#309510
From: (fir)
Date: Mon, 09 Oct 2017 12:48
63 lines
4209 bytes
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)
Technical Details
Message-ID: <1020c67b-4039-4505-98a2-36c3768e420d@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!peer02.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!k31no324795qta.1!news-out.google.com!r5ni820qtc.1!nntp.google.com!k31no324792qta.1!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>

Show Full Headers
Complete Article Headers
X-Received: by 10.233.220.132 with SMTP id q126mr5900808qkf.41.1507553288263;        Mon, 09 Oct 2017 05:48:08 -0700 (PDT)
X-Received: by 10.31.115.6 with SMTP id o6mr191538vkc.13.1507553288236; Mon, 09 Oct 2017 05:48:08 -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!peer02.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!k31no324795qta.1!news-out.google.com!r5ni820qtc.1!nntp.google.com!k31no324792qta.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Mon, 9 Oct 2017 05:48:08 -0700 (PDT)
In-Reply-To: <75c91d58-447b-4703-b00c-9e5328950bfa@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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1020c67b-4039-4505-98a2-36c3768e420d@googlegroups.com>
Subject: Re: Zabrali kopiowanie przy zapisie...
From: "(fir)" <profesor.fir@gmail.com>
Injection-Date: Mon, 09 Oct 2017 12:48:08 +0000
X-Received-Body-CRC: 902369092
X-Received-Bytes: 4327
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit