Re: Proè to není chyba?

Miroslav Mraz mrazik na volny.cz
Neděle Duben 28 11:52:25 CEST 2024


To je velmi dobré shrnutí. Na druhou stranu ty akademické výdobytky ve 
všem dělají jen bordel. Zkuste si rust. Možná je bezpečný, ale dělat v 
tom nějaký bare-metal systém je peklo. C/C++ vám dovolí zapsat cokoli 
kamkoli a ta pravidla jsou v zásadě pochopitelná. Borrow checker v rustu 
je zřejmě dobrý nápad, ale pochopitelnost je už horší. Ale jsem v 
podstatě samouk, možná po absolvování pár semestrů teorie na matfyzu 
bych to viděl jinak. Bohužel studovat právě tohle mě nebaví. Nevidím v 
tom nějaký okamžitý praktický přínos. A ještě ke všemu tyhle teoretické 
partie se vysvětlují stylem "Nicolas Bourbaki", což je pro mne naprosto 
nepochopitelné.

Mrazík



On 28. 04. 24 10:15, Jan Waclawek wrote:
> 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.
> 


Další informace o konferenci Hw-list