eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingSkładnia pętli (ogólnie i filozoficznie)Re: Składnia pętli (ogólnie i filozoficznie)
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!postnews.google.com!glegro
    upsg2000goo.googlegroups.com!not-for-mail
    From: Roman W <b...@g...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Składnia pętli (ogólnie i filozoficznie)
    Date: Sat, 17 Mar 2012 09:19:18 -0700 (PDT)
    Organization: http://groups.google.com
    Lines: 93
    Message-ID: <3360685.2549.1332001158521.JavaMail.geo-discussion-forums@vbbfw10>
    References: <4f647cff$0$1273$65785112@news.neostrada.pl>
    <jk221o$5ii$1@mx1.internetia.pl>
    NNTP-Posting-Host: 91.125.135.206
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1332001488 21573 127.0.0.1 (17 Mar 2012 16:24:48 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Sat, 17 Mar 2012 16:24:48 +0000 (UTC)
    In-Reply-To: <jk221o$5ii$1@mx1.internetia.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=91.125.135.206;
    posting-account=EexxQQoAAAAkOfWz0VZRKLcHNpXJZLB9
    User-Agent: G2/1.0
    Xref: news-archive.icm.edu.pl pl.comp.programming:196126
    [ ukryj nagłówki ]

    On Saturday, March 17, 2012 1:01:53 PM UTC, bartek szurgot wrote:
    > On 03/17/2012 01:01 PM, slawek wrote:
    > > Czy jest jakiś ładny sposób zapisu if-wewnątrz-for (ew. innych pętli)
    > > takich, że jest GWARANTOWANE przeniesienie if przed for w wyniku
    > > kompilacji, tak aby test if wykonywał się tylko jeden raz - a nie np. 10
    > > milionów razy - i to bez sięgania po optymalizację?
    > >
    > > Jeżeli jest coś takiego for{ if } -- czyli instrukcja warunkowa
    > > wewnątrz pętli, np.:
    > >
    > > for (i = 0; i < 10; i++)
    > > if(x > y)
    > > {
    > > ...a...
    > > ...b1...
    > > ...c...
    > > ...d...
    > > ...e1...
    > > ...f...
    > > }
    > > else
    > > {
    > > ...a...
    > > ...b2...
    > > ...c...
    > > ...d...
    > > ...e2...
    > > ...f...
    > > }
    > >
    > > Oczywiście kumaty kompilator (x i y są ustalone z zewnątrz) powinien to
    > > sobie zoptymalizować do
    > >
    > > if
    > > {
    > > for
    > > for
    > > }
    > >
    > > Ale jak to zapisać bez potrzeby odwoływania się do mądrości kompilatora
    > > i bez rozwlekania jak niżej?
    > >
    > > if(a > b)
    > > for (i = 0; i < 10; i++)
    > > {
    > > ...a...
    > > ...b1...
    > > ...c...
    > > ...d...
    > > ...e1...
    > > ...f...
    > > }
    > > else
    > > for (i = 0; i < 10; i++)
    > > {
    > > ...a...
    > > ...b2...
    > > ...c...
    > > ...d...
    > > ...e2...
    > > ...f...
    > > }
    > >
    > > W kodzie źródłowym niepotrzebne są dublowane linie ...a... ...c...
    > > ...d... ...f..., co jest nieprzyjemne jeżeli jest ich za mało aby robić
    > > z nich procedurę (i nie chcemy mieć narzutów na call/ret - no, ale to
    > > też powinien zoptymalizować kompilator) - a jednocześnie MUSZĄ one być
    > > dokładnie takie same (i np. poprawka w jednym miejscu pociąga za sobą
    > > poprawianie w tuzinie podobnych.
    >
    >
    > poczytaj o metaprogramowaniu. w połączeniu ze wzorcem strategii, będzie
    > to to, czego szukasz.

    Tez bym tak zrobil, w polaczeniu z funckjami lambda z C++ 0x moze to byc ladne i
    eleganckie rozwiazanie. Ale wtedy nadal bedzie mial narzut na wolanie funkcji, jezeli
    kompilator nie zdecyduje sie na inlining funkcji (nie musi).

    Jezeli to jest NAPRAWDE koniecznie zeby uniknac wolania funkcji, to pozostaja makra
    preprocesora.

    RW

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: