pl.comp.lang.c
  Home FAQ Contact Sign in
pl.comp.lang.c only
 
Advanced search
December 2006
motuwethfrsasuw
    123 48
45678910 49
11121314151617 50
18192021222324 51
25262728293031 52
2006
 Jan   Feb   Mar   Apr 
 May   Jun   Jul   Aug 
 Sep   Oct   Nov   Dec 
2008 2007 2006  
total
pl.comp.lang.c Profile…
RELATED GROUPS

POPULAR GROUPS

more...

 Up
  Re: Czego unikać z C pisząć w C++ ?         


Author: Tomasz Kaczanowski
Date: Dec 7, 2006 23:11

SasQ napisał(a):
> Dnia Thu, 07 Dec 2006 09:32:52 -0800, jolz napisał(a):
>
>> void f(void*a =NULL) {
>
> Affff co to jest? :P
>
>> Ja natomiast mowie o samym fakcie, ze do_sth(Optional* o = NULL);
>> nie jestem w stanie zrobic za pomoca referencji wlasnie dlatego,
>> ze referencja nie moze byc NULL.
>
> No i właśnie dlatego Tomek Rydzyk wspomniał, że referencje są dobre
> do tworzenia zrozumiałego interfejsu. Gdy programista widzi, że
> jakaś funkcja pobiera referencję, to wie, że jakiś obiekt musi
> podać, nie może podać "pustego". W przypadku wskaźnika nie wiadomo,
> jak funkcja zareaguje na podsunięcie jej NULLa w miejscu, gdzie
> spodziewa się wskaźnika, i jeśli nie jest to udokumentowane
> gdzieś osobno [komentarz, dokumentacja], to można się spodziewać
> najgorszego :P
Show full article (1.17Kb)
no comments
  Re: Czego unikać z C pisząć w C++ ?         


Author: Marcin 'Qrczak' Kowalczyk
Date: Dec 7, 2006 20:26

SasQ writes:
> w pewnych przypadkach kompilator MOŻE zoptymalizować wywołania
> w taki sposób, by wplatać odwołania do referowanych adresów
> bezpośrednio w kod funkcji [takie coś jakby "obiekty inline" :P].
> Jest to możliwe tylko w przypadku referencji, gdzie już na etapie
> kompilacji jest zapewnione, że referencja będzie się odnosić
> zawsze do tego samego obiektu.

W praktyce jeśli to jest prawda, to dla wskaźnika z constem też,
a jeśli zmienna wskaźnikowa jest zdefiniowana lokalnie, to nawet
bez consta.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
no comments
  Re: Czego unikać z C pisząć w C++ ?         


Author: Tomek Rydzyñski
Date: Dec 7, 2006 17:25

Dnia Fri, 08 Dec 2006 01:39:42 +0100, SasQ napisał(a):
> Tomek Rydzyk
Drugi raz nie popuszczę. Rydzyński. Nie, nie gniewam się. Nie, nie
odpowiadaj.

Pozdrowienia
--
Tomek 'QsoRiX' Rydzyński Linux Registered User #178082
Po pierwsze, należy działać perfekcyjnie.
no comments
  Re: Czego unikać z C pisząć w C++ ?         


Author: Tomek Rydzyñski
Date: Dec 7, 2006 17:23

Dnia Thu, 07 Dec 2006 15:51:37 -0800, jolz napisał(a):
>>>> 1. A std::vector też nie używasz?
>>>
>>> A jaki to pytanie ma zwiazek z czymkolwiek?
>>
>> std::vector powoduje dublowanie kodu. Podobnie większość szablonów.
>
> Ale templaty sa wlasnie po to zeby nie pisac kilka razy tego samego
> kodu.
Prawda, ale samego kodu jest więcej, tylko sam się pisze.
> A ty chcesz pisac 2 funkcje zamiast 1. I nie jestem pewny czy potem i tak
> to sprowadzisz do 1 ale prywatnej,
Czy to sprowadzę czy nie, to jest szczegół implementacyjny. Analogicznie
tablicę 2D można dla wydajności zaalokować jako tablicę 1D i przeliczać
adresy x*Y+y. Ale to jest szczegół implementacji i użytkownik raczej
wolałbym inteferjs array[x][y] niż array[x*Y+y].

Na poziomie implementacji użycie wskaźnika czy referencji (w tym przypadku
z przekazywaniem parametru) jest już mniej istotne i kwestia gustu.
Show full article (5.70Kb)
no comments
  Re: Re: Czego unikać z C pisząć w C++ ?         


Author: SasQ
Date: Dec 7, 2006 16:39

Dnia Thu, 07 Dec 2006 15:51:37 -0800, jolz napisał(a):
> Tak wiec pisanie np ze umozliwiaja zoptymalizowanie wywolan

A co? Może to nie jest prawda?
Dla kompilatora referencja to coÅ› jak inna etykietka do
tej samej komórki pamięci. Gdy wysyła do funkcji referencję,
to wysyła adres do którego ta referencja się odnosi [czyli
w tym przypadku owszem, jest równoważna wskaźnikowi]. ALE :)
w pewnych przypadkach kompilator MOŻE zoptymalizować wywołania
w taki sposób, by wplatać odwołania do referowanych adresów
bezpośrednio w kod funkcji [takie coś jakby "obiekty inline" :P].
Jest to możliwe tylko w przypadku referencji, gdzie już na etapie
kompilacji jest zapewnione, że referencja będzie się odnosić
zawsze do tego samego obiektu. Tomek Rydzyk o tym zdaje siÄ™
wspominał...

--
SasQ
no comments
  Re: Czego unikać z C pisząć w C++ ?         


Author: jolz
Date: Dec 7, 2006 16:12

>> A gdyby nazwac referencje inaczej, np uchwytem to juz by nie bylo tego
>> problemu (mozna chyba niczego nie uchwycic?) ? Nikt sie nie dziwi ze
>> mozna wskazywac do 0x00000. Gdyby standart umozliwial puste referencje
>> to tez nikt by sie temu nie dziwil.
>
> Po co standard miałby wprowadzać takie referencje? Pytam poważnie. Pokaż i
> uzasadnij każdy argument. W szczególności pokaż czym się one różnią od
> wskaźników.

Z tym odroznieniem od wskaznikow nie bedzie proste, bo nie widze
zadnego sensu stosowania obydwu. Wskaznik, ktory wyglada jak referencja
a zachowuje sie jak wskaznik by mi pewnie wystarczyl. Java tak umie.
Tak, w C++ trzeba sie jeszcze martwic pamiecia, ale pewnie gdyby nie
trzeba bylo trzymac sie zgodnosci z C nie byl by to poblem
nierozwiazywalny.
> To coś co w Javie nazywa się referencjami wcale nie jest referencją w myśl
> C++. A NullPointerException chyba mówi samo za siebie, że ludzie tworzący
> Javę myśleli o nich jak o wskaźnikach.
Show full article (1.27Kb)
1 Comment
  Re: Czego unikać z C pisząć w C++ ?         


Author: jolz
Date: Dec 7, 2006 15:51

>>> 1. A std::vector też nie używasz?
>>
>> A jaki to pytanie ma zwiazek z czymkolwiek?
>
> std::vector powoduje dublowanie kodu. Podobnie większość szablonów.

Ale templaty sa wlasnie po to zeby nie pisac kilka razy tego samego
kodu. A ty chcesz pisac 2 funkcje zamiast 1.I nie jestem pewny czy
potem i tak to sprowadzisz do 1 ale prywatnej, czy bedziesz sie
kurczowo trzymal zasady "nie stosowac wskaznikow" i powielenie bedzie
wieksze niz tylko przy deklaracji funkcji.
> W tym momencie neguję zasadność istnienia tej dyskusji.

O tu sie zgadzamy.
> A wcięcia w kodzie po co robisz? Jedne zasady ci pasują, a inne olewasz?
Show full article (3.14Kb)
no comments
  Re: trzeba uwazac co sie czyta         


Author: Marcin 'Qrczak' Kowalczyk
Date: Dec 7, 2006 15:34

Sektor van Skijlen guess.if.gmail.com.is.valid.or.invalid> writes:
> Istnieją jednak języki, w których zmienna oznaczana jest odpowiednim
> symbolem, ale żeby odczytać cokolwiek z tej zmiennej należy posłużyć
> się odpowiednim operatorem. Samej nazwy zmiennej można używać m.in
> do zapisywania do niej. Takie języki znam tylko dwa: Tcl i Forth.
> W tych jezykach, jak się okazuje, nie ma w ogóle potrzeby stosowania
> pojęcia l-wartości.

SML, OCaml, Haskell: mamy referencje (nazywane tam zmiennymi)
i zmienne (nazywane referencjami). Hmm, terminologia się pomieszała,
więc niżej będę używał terminologii z tych języków, mimo że moja jest
akurat odwrotna.

Mamy zmienne, czyli identyfikatory widoczne w jakimÅ› zakresie;
identyfikator wskazuje na jakiś obiekt za każdym razem, kiedy dany
zakres jest wykonywany. Wskazuje cały czas na ten sam obiekt.

Mamy referencje, czyli obiekty oferujÄ…ce dwie operacje: odczyt
bieżącej wartości i zmianę wartości na nową. Utworzenie referencji
wymaga podania jej początkowej wartości.
Show full article (1.87Kb)
no comments
  Re: Czego unikać z C pisząć w C++ ?         


Author: Tomek Rydzyñski
Date: Dec 7, 2006 14:35

Dnia Thu, 07 Dec 2006 13:15:43 -0800, jolz napisał(a):
>> Pustą referencję? Jak można referować coś, czego nie ma?
>
> A gdyby nazwac referencje inaczej, np uchwytem to juz by nie bylo tego
> problemu (mozna chyba niczego nie uchwycic?) ? Nikt sie nie dziwi ze
> mozna wskazywac do 0x00000. Gdyby standart umozliwial puste referencje
> to tez nikt by sie temu nie dziwil.

Po co standard miałby wprowadzać takie referencje? Pytam poważnie. Pokaż i
uzasadnij każdy argument. W szczególności pokaż czym się one różnią od
wskaźników.
> Zreszta nigdy sie nie spotkalem zeby ktorykolwik z programistow javy byz
> zaskoczony ze mozna napisac Object o = null;

To coś co w Javie nazywa się referencjami wcale nie jest referencją w myśl
C++. A NullPointerException chyba mówi samo za siebie, że ludzie tworzący
Javę myśleli o nich jak o wskaźnikach.
Show full article (1.28Kb)
no comments
  Re: trzeba uwazac co sie czyta         


Author: Sektor van Skijlen
Date: Dec 7, 2006 14:31

Dnia Thu, 07 Dec 2006 08:58:37 +0100, Maciej Sobczak skrobie:
> Sektor van Skijlen wrote:
>>> Tylko wtedy czym by się różniła l-wartość od r-wartości oprócz
>>> tego, po której stronie dowolnego operatora leżą? :P
>>
>> Taka, że r-wartość wisi w powietrzu, a l-wartość siedzi w pamięci. Dlatego np.
>> z r-wartości nie możesz pobrać wskaźnika.
> Okazało się, że bezbłędnie posługiwał się pojęciami "pudełko" i
> "zawartość" oraz "wyciągnąć zawartość z pudełka".
> Uważam, że to są świetne intuicje. Odpowiednio: l-wartość, r-wartość
> oraz konwersja z l- na r.
> Oczywiście, pudełko może być niemodyfikowalne, ale można mieć jego
> adres. I tak dalej.
> Ja ktoś ma problem z l- i r-wartościami, to niech się zastanowi gdzie
> jest pudełko a gdzie zawartość.

No super! I to jest idealne wyjaśnienie sprawy.

Proponowałbym jeszcze ewentualnie dobrać podobieństwa do pozostałych pojęć:
Show full article (2.20Kb)
no comments
1 2 3