Re: Proè to není chyba?

Pavel Kořenský pavel.korensky na dator3.cz
Neděle Duben 28 12:06:35 CEST 2024


Okamžitý praktický přínos jazyka Rust je bezpečnost kódu. Tedy 
bezpečnost ve smyslu počítačové bezpečnosti a omezené možnosti zneužít 
případné chyby či nejednoznačnosti v kódu k nějakým lotrovinám typu 
spuštění škodlivého kódu s vysokým oprávněním.

Nicméně souhlasím, že programovat v Rustu je peklo, zejména pro 
programátora ze "staré školy". Vyžaduje to totiž do jisté míry změnit 
zažité algoritmické myšlení a návyky se kterými C/C++ generace vyrůstala 
a které celý život používala. Konkrétně u jazyka Rust platí, že mnohem 
snáz se ho naučí dítě, které nikdy neprogramovalo a pro které je to 
první programovací jazyk, než programátor, který celý život programoval 
v C/C++ a jehož prvním programovacím jazykem byl BASIC nebo Fortran.

Zdraví PavelK

Dne 28.04.2024 v 11:52 Miroslav Mraz napsal(a):
> 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.
>>
> _______________________________________________
> 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