RE: Proè to není chyba?

Aleą Procháska ales.prochaska na divesoft.com
Pondělí Duben 29 11:14:24 CEST 2024


A důsledek těch hacků je, že C je ukecaný jazyk kde se pořád něco přetypovává, referencuje, dereferencuje a memcpyuje a lepší to nebude, protože si všechnu syntaktickou munici vystřílel na naprosto marginální konstrukce 😃

Aleą Procháska

>-----Original Message-----
>From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Jan Waclawek
>Sent: Sunday, 28 April, 2024 10:16
>To: HW-news <hw-list na list.hw.cz>
>Subject: Re: Proè to není chyba?
>
>Historicko-kulturno-normativna odpoved na otazku v subj.:
>
>Koncom 60tych rokov mal navrh vyssich programovacich jazykov za sebou uz
>asi 15 rokov intenzivneho rozvoja (od FORTRANu
>(https://www.mikrozone.sk/pluginy/content/content.php?content.66 ) po
>Algol68 a v "americkej vetve" PL/1 z programu Multics, s "praktickym
>nasledkom" vo forme Pascalu) a mnozstvo teoretickej prace akademikov aj
>praktikov, namierenej najma na sposoby, ako jazyk moze napomahat pisaniu
>programov s co najmensim mnozstvom chyb.
>
>Ale C necerpalo z tejto prace, teda len nepriamo.
>
>Thompson a Ritchie (a aj ini) boli zamestnancami AT&T/Bell Labs v programe
>Multics, a AT&T sa z toho programu stiahlo (kvoli prietahom, sposobenym
>okrem ineho prave akademickostou a snahou o dokonalost). Oni takto prisli o
>pristup k relativne modernemu a velkemu pocitacu, OS aj programovaciemu
>jazyku; a zostal im nejaky stary a obmedzeny PDP-7 (neskor sa mi podarilo
>vymamit od zamestnavatela PDP-11) s assemblerom. A tak Thompson zacal
>bastlit nejaky primitivny operacny system zalozeny na skusenostiach s
>Multicsom, a Ritchie mu k tomu pisal nejaky o chlpok vyssi programovaci jazyk
>nez assembler na zaklade cohosi, co mali od kamarata, ktory sa s myslienkou
>primitivneho vyssieho jazyka uz predtym zahraval.
>
>Aby som to skratil, takto vznikli UNIX a C.
>
>A aby som to povedal jasne, oboje je hack.
>
>Ono to je vlastne sucast uspechu, kedze vela programatorov (ak nie vsetci)
>maju k hackom uctu, maju ich radi a obdivuju inych programatorov, co pisu
>hacky. Len to ma nasledky, ktore nesieme dodnes.
>
>Takze jeden z tych hackov, ktore robia dojem, je fakt, ze priradenie v C nie je
>*prikaz*, ale *vyraz* - na rozdiel od programovacich jazykov "akademickej
>linie" (napr. Pascal, ISO7815, 6.8.2.2 Assignment-statements). T.j. v C
>priradenie ma vysledok (je nim priradovana hodnota po prislusnych
>konverziach) a da sa nadalej priradit (t.j. da sa napisat a = b = sin(x);) , pouzit
>ako parameter (printf("%d\n", a = sin(x));) apod.
>
>Cool, vsak? Tak sa poznaju hacky, ze su cool.
>
>Ale aby sa priradenie - ktore uz vieme, ze je *vyraz* - dalo pouzit v programe,
>co je sekvencia *prikazov*, tak nastupuje dalsi cool hack, ktorym je
>"expression statement" t.j. "prikaz typu vyraz", C99 6.8.3, ktory hovori, ze ak
>za *vyraz* napiseme bodkociarku, stane sa *prikazom*; s tou semantikou, ze
>vysledok vyrazu je zahodeny.
>
>Nasledok napriklad je, ze volanie funkcie foo(); nemusi byt priradene nikam,
>aj ked foo() ma ne-void navratovu hodnotu (v povodnom C mala kazda
>funkcia uniformne navratovu hodnotu int; navratova hodnota void je
>dodatocna snaha trocha ten hack umravnit).
>
>Ale nasledok, ktory nas tu zaujima, je aj to, ze *akykolvek vyraz* za ktorym
>nasleduje bodkociarka, t.j. aj +10; (co je unarny operator "prefixove +"
>aplikovany na celociselnu konstantu 10 - mimochodom, C nema zaporne
>celociselne konstanty a -10 je vyraz, kde unarny operator "prefixove -" je
>aplikovany na celociselnu konstantu 10), alebo trebars samotne foo; (kde
>foo(); by bolo volanie funkcie ale foo samotne je vyraz ktory sa vyhodnoti ako
>smernik na tu funkciu; toto je pomerne casta chyba) su plne legalne prikazy,
>t.j. prekladac kvoli tomuto nesmie skoncit chybou (moze upozornit
>warningom - a ano, prekladace vedia mat rezim kde kazdy warning je chybou,
>ale to, vzate zbytocne prisne, nie je podla normy).
>
>Inaksie povedane, hacky so cool, ale maju nasledky.
>
>wek
>
>PS. ... no a C++ je hack na druhu.
>
>
>----- Original Message ---------------
>
>Subject: Proč to není chyba?
>   From: Martin Záruba <swz na volny.cz>
>   Date: Sat, 27 Apr 2024 14:39:26 +0200
>     To: Martin Zaruba <hw-list na list.hw.cz>
>
>Chtěl jsem napsat (zjednofu±eno, pro přehled, obě řádky byly velmi dlouhé)
>
>a = 5
>   + 10;
>
>Výsledek by pochopitelně byl 15, jenµe já omylem za 5 udělal středník, takµe
>vzniklo
>
>a = 5;
>   + 10;
>
>A kompilátor nehlásí µádnou chybu a výsledek je 5, druhý řádek se ztratil. Proč
>ale neřve, ľe to je syntaktická chyba, vľdy» nemá s tou 10 co udělat?
>
>--
>
>Martin Záruba
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list
>
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list