🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #4717

Re: Prawda o C++

#4717
From: Sektor van Skijlen
Date: Tue, 19 Jan 1999 13:04
79 lines
4716 bytes
In pl.comp.objects Adam Karpierz <karpierz@itl.pl> wrote:
:>> A jak inaczej je zrealizowac ?
:>> Referencja to nie alias (przezwisko) ale rzeczywista zmienna przeciez.

Watek za szybko sie rozrosl, a ja ostatnio nie wyrabiam z czasem, totez
niezdazylem odpowiedziec, ze jest to niestety bzduda. Zmienna to moze i jest,
ale na poziomie jezyka, a niekoniecznie na poziomie programu. W przykladzie,
ktory podalem (tym drugim) zadnej zmiennej referencyjnej (zaimplementowanej
przez wskaznik) zaden normalny kompilator przy zdrowych zmyslach nie utworzy,
bo niby po co. Zamiast tego, zastapi ja zmienna, do ktorej sie ta referencja
odnosi. Jezeli przez wskaznik bedzie blizej, to zastosuje wskaznik. Poza tym
dobrze optymalizujacy kompilator dla takich sekwencji:

	damn->it->head = head;
	damn->it->tail = head->next;
	damn->it->next = 0;

od razu zapamieta sobie w rejestrze wartosc wskaznika damn->it, zeby szybciej
go uzywac. Wiec - de facto - utworzy sobie nowa zmienna ?

:>... In some cases, the compiler can optimize away a reference ..."
No wlasnie.


:>Proponuje uwaznie przeczytac.

: Przeczytalem i nie jestem przekonany
: Referencja to przeciez osobny typ.
: Gdzie indziej wyraznie pisze:
: "Poniewaz dla dowolnego typu T, _typy_ T i T& dopuszczaja
: ten sam zbior wartosci inicjatora, wiec funkcje z _typami_
: argumentow rozniacymi sie jedynie w tym zakresie nie moga
: miec tej samej nazwy"

No wiec moze sie zdecyduj ? Nie da sie myslec o referencjach kategoriami
jezyka C. Jasne, ze to jest inny typ, z punktu widzenia JEZYKA jest to
zmienna, czy tez - powiedzmy inaczej - l-wartosc, tylko to chyba nie ma az
takiego znaczenia, jak to jest optymizowane ?

: Zmienna referencyjna ma inny typ niz zmienna "niereferencyjna".
: Dowodem jest jest inne zachowanie jako parametru funkcji
: (mozna przekazac wartosc z powrotem, mimo ze sama
: zmenna referencyjna (jak wszystko w C) jest przekazywana przez
: wartosc. A wiec jednak nie jest to tylko alias (alternative name).

I po raz kolejny mowie, ze nie mozna myslec o referencjach kategoriami jezyka
C. NIGDY NIE JEST przekazywana zmienna referencyjna! Jezeli wystepuje na
liscie parametrow funkcji, to trzeba przekazac do funkcji l-wartosc (lub po
prostu obiekt, jesli mamy stala referencje). Jesli juz chcemy to powiedziec w
kategorii C to - gwoli scislosci - NIGDY nie sa przekazywane zmienne, a
wartosci. W przypadku przekazywania parametrow, jezeli mamy na liscie
parametrow zmienna referencyjna, to jest tworzona wtedy zmienna wskaznikowa
(niewidoczna dla funkcji), do ktorej referencja jest wlasnie ta zmienna
referencyjna. W tym przypadku zmienna referencyjna jest niejako zmienna
wskaznikowa, ale jest to juz kwestia implemetnacji (mimo, ze wszedzie wyglada
tak samo). Zmienna referencyjna jest aliasem, tylko ze - w przypadku
przekazywania parametru - nie jest widoczna zmienna wskaznikowa, ktora trzyma
wskaznik, a do wskazywanego obiektu referuje zmienna referencyjna. Powiem
wiecej: zmienne referencyjne istnieja tylko w czasie kompilacji programu.

: To osobny typ z wszelkimi tego konsekwenscjami.
: Ja przynajmniej tak to rozumiem.
W moim mniemaniu, niewlasciwie podchodzisz do tego.

: Zreszta co tu duzo mowic. Referencje sa wymienione
: jako jedne z typow pochodnych w raporcie C++.
: A przez co zrealizowane ?.
: Tu sie poprawiam. Faktycznie niewazne i powiem wiecej,
: niepowinno to wlasiwie nikogo obchodzic.

O! Wlasnie, dokladnie! Nie wnikajmy po prostu.



-- 
                        -=* P O Z D R A W I A M ! *=-
    [-=* Ij waiet salden mijn spijr, ta faenen aire ats trauven diaenna *=-]
     ____....----````Sektor van Skijlen: sektor at beer.com''''----....____
                                         <sPAm  @  pROtEctIOn>
Technical Details
Message-ID: <781vtm$9l8$3@polonez.man.lodz.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.icm.edu.pl!news.man.poznan.pl!news.man.lodz.pl!not-for-mail
References: <77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!news.icm.edu.pl!news.man.poznan.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <sektor@spam.org>
Newsgroups: pl.comp.lang.c,pl.comp.objects
Subject: Re: Prawda o C++
Date: 19 Jan 1999 13:04:54 GMT
Lines: 79
Message-ID: <781vtm$9l8$3@polonez.man.lodz.pl>
References: <77o3bl$j0q$1@polonez.man.lodz.pl> <369FDDCE.7B94748A@interdata.com.pl> <77q41i$j7f$1@polonez.man.lodz.pl> <wU3o2.25549$U1.4744058@news.tpnet.pl> <77qi2q$42a$1@polonez.man.lodz.pl> <77qk38$ken$1@zeus.polsl.gliwice.pl> <77vn97$j3l$1@polonez.man.lodz.pl> <77vsod$l0u$1@zeus.polsl.gliwice.pl> <36A3823B.1950@bear.com> <78073r$t5p$1@zeus.polsl.gliwice.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
User-Agent: tin/pre-1.4-981225 ("Volcane") (UNIX) (SunOS/5.5.1 (i86pc))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit