Portál AbcLinuxu, 27. května 2024 22:00


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
22.10.2010 14:16 black boy
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Odpovědět | Sbalit | Link | Blokovat | Admin
už som to skoro prečital ako "Masturbujete pole v céčku" :-)
22.10.2010 20:16 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Ono to ale tak nějak ve výsledku je.
In Ada the typical infinite loop would normally be terminated by detonation.
mess avatar 22.10.2010 15:45 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Odpovědět | Sbalit | Link | Blokovat | Admin
Zní to zajímavě, pokračuj :-)
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
22.10.2010 19:27 realharo
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Odpovědět | Sbalit | Link | Blokovat | Admin
Je nejaký rozdiel medzi int x(char *c) {} a int x(char c[]) {}?
22.10.2010 19:32 ____ | skóre: 15 | blog: _
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Prakticky snad ne.
22.10.2010 20:30 Dadam | skóre: 12 | blog: dadamovo
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Tohle je to samé. Pro dvojrozměrné pole to už ale neplatí (dostanu se k tomu).
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
23.10.2010 15:17 ext3fs
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Odpovědět | Sbalit | Link | Blokovat | Admin
Me by treba zajimalo zda je naprosto akvivalentni z hlediska kompilatoru:

*(pole + i) = 1; a pole[i] = 1;

Nekde jsem cetl ze praci s poli pres [] si stejne kompilator prevadi na *(). Je tomu tak?
David Watzke avatar 23.10.2010 15:25 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Zkusil jsem zkompilovat obě varianty pomocí GCC a binárky nejsou zcela identické.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
michich avatar 23.10.2010 19:42 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Binárky se blbě porovnávají. Zkompiluj si to do assembleru s gcc -S soubor.c. Tam by mělo být vidět, že je to stejné.
David Watzke avatar 23.10.2010 20:03 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Není to stejné.
$ diff -u test1.s test2.s
--- test1.s     2010-10-23 20:01:04.090000164 +0200
+++ test2.s     2010-10-23 20:01:08.480000156 +0200
@@ -1,4 +1,4 @@
-       .file   "test1.c"
+       .file   "test2.c"
        .text
 .globl main
        .type   main, @function
@@ -10,9 +10,7 @@
        movq    %rsp, %rbp
        .cfi_offset 6, -16
        .cfi_def_cfa_register 6
-       leaq    -16(%rbp), %rax
-       addq    $4, %rax
-       movl    $1, (%rax)
+       movl    $1, -12(%rbp)
        movl    $0, %eax
        leave
        .cfi_def_cfa 7, 8
test1 používá *(pole+1)=1 a test2 používá pole[1]=1.

Ovšem jakmile povolím optimalizaci, alespoň -O1, tak to stejné je.

“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
24.10.2010 09:37 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Ano. Operátor a[b] je definován jako *(a+b).

A jelikož *(a+b) je totéž jako *(b+a), pak také a[b] je totéž jako b[a].
24.10.2010 10:31 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Není to hezké, když je implementace vzdálena účelu natolik že z ní lezou obskurní vedlejší efekty typu i[pole]=1.
In Ada the typical infinite loop would normally be terminated by detonation.
24.10.2010 10:49 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Hu? Vzdálena účelu? V čem?
24.10.2010 21:47 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
No, účel pole[i] je ítý prvek pole, ne? Tak by měla znít definice. Že je to interně v implementaci převedeno na *(pole+i) by mělo být každému putna respektive do toho by nikomu nemělo být nic. A nezávisle na tom na co se to interně převede by němělo jít napsat i[pole] protože to je prostě sémantický nesmysl...
In Ada the typical infinite loop would normally be terminated by detonation.
24.10.2010 22:28 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Ono je to jinak: Céčkové pole prostě je definováno jako ta pointerová konstrukce (data chovající se jako pole mohou vzniknout spoustou způsobů, které mají společné jen to, že se dají indexovat pomocí pointerové aritmetiky) a hranaté závorky jsou jen a pouze syntaktická zkratka. To je propastný rozdíl od pole definovaného pomocí hranatých závorek a pak nějak přes pointery (interně) implementovaného.
25.10.2010 06:56 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
hranaté závorky jsou jen a pouze syntaktická zkratka
S tím souhlasím, i když je to zkratka jen pro indexování, nikoliv definice což je matoucí věc č.1 (int[2][3] a int** není totéž; nelze napsat int 3[foo] místo int foo[3])

A matoucí věc č.2 je že syntaktická zkratka foo[3] nemusí a nemá mít za následek syntaktickou zkratku 3[foo].
In Ada the typical infinite loop would normally be terminated by detonation.
25.10.2010 08:56 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Pokud je ta zkratka syntaktická, tak jí do typů hodnot nic není (na úrovni syntaxe neexistují).
26.10.2010 06:54 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
To je pravda, v tom případě jsem se vyjádřil špatně - ta implementace je vzdálena účelu v tom, že je to jen syntaktická záležitost, protože na hlubší úrovni jedno z toho smysl má a druhé je něco divného.
In Ada the typical infinite loop would normally be terminated by detonation.
26.10.2010 09:05 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Co napáše větší škodu? Featura jazyka, kterou lze použít jak přirozeným, tak nepřirozeným způsobem, nebo taková, která je zbytečně komplikovaně definovaná, jenom proto, aby tím nepřirozeným způsobem použít nešla? Pan Occam by věděl ;-)
29.10.2010 22:01 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Pan Occam by věděl
Cimrman taky... "spočítali jste padlé".

V podstatě by se dalo říct, že škoda na uživatelích toho jazyka je neomezeně velká, protože tuhle pitomost se musí každý učit. Na druhou stranu je jen malé množství překladačů, kde by bylo třeba řešit aby to nebyla pitomost.

In Ada the typical infinite loop would normally be terminated by detonation.
30.10.2010 20:16 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
To je s prominutím naprostá pitomost. Naprostá většina uživatelů Céčka o tom nikdy nepřemýšlela a hranaté závorky nepoužila jiným než intuitivním způsobem. Kde jste vzal nějakou škodu?
31.10.2010 18:21 Dadam | skóre: 12 | blog: dadamovo
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Já jsem tuhle "fíčuru" radši ani nezmiňoval. Jediné, co jsem o ní kdy četl, je, že je to syntaxe podobná některým assemblerům. Neznáte někdo nějaký takový?
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
31.10.2010 20:52 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Naprostá většina uživatelů Céčka o tom nikdy nepřemýšlela a hranaté závorky nepoužila jiným než intuitivním způsobem.
Což je docela dobrý důvod proč by tam ta další "feature" *neměla* být.
Kde jste vzal nějakou škodu?
Já nikde... to byl Váš dotaz. Abychom nemluvili o dvou různých věcech - pro mne je zrovna *tahle* feature dost nezajímavá, respektive chápu důvody jejího vzniku. Spíš mě to štve jako instance neustále opakujícího se principu který jsem naznačil v 1. příspěvku.
In Ada the typical infinite loop would normally be terminated by detonation.
1.11.2010 09:06 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Což je docela dobrý důvod proč by tam ta další "feature" *neměla* být.
Ona to ale není další featura, nýbrž prostý důsledek definice.
1.11.2010 18:14 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
No budiž, tak to řekneme jinak: "... proč by definice měla být taková aby neměla takovéto důsledky [které nikdo nepotřebuje]". Pointa je furt stejná.
In Ada the typical infinite loop would normally be terminated by detonation.
1.11.2010 20:06 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Protože pak ta definice bude zbytečně složitá?
1.11.2010 20:57 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
A takhle jsou zbytečně složité její důsledky - tak si vyberte.
In Ada the typical infinite loop would normally be terminated by detonation.
1.11.2010 23:51 Martin Mareš
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Ty důsledky jsou triviální, pouze pohled, který jste si na ně zvolil Vy, je zbytečně složitý.

(Mimochodem, definice libovolného turingovsky úplného programovacího jazyka má nepředstavitelně složité důsledky, počínaje třeba prostou existencí nevyčíslitelných problémů. Proti tomu jsou nějaké syntaktické a sémantické detaily naprosto irelevantní.)
2.11.2010 07:08 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Masterujeme pole v céčku
Ty důsledky jsou triviální, pouze pohled, který jste si na ně zvolil Vy, je zbytečně složitý.

Já si nemyslím, že by to bylo o složitosti, ale souhlasím, že máme dva různé úhly pohledu.
Mimochodem, definice libovolného turingovsky úplného programovacího jazyka má nepředstavitelně složité důsledky, počínaje třeba prostou existencí nevyčíslitelných problémů. Proti tomu jsou nějaké syntaktické a sémantické detaily naprosto irelevantní.
Nemyslím si, že by míra složitosti měla být záminkou pro "držet hubu a krok" :-)
In Ada the typical infinite loop would normally be terminated by detonation.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.