17.5.2024 | Svátek má Aneta


Diskuse k článku

SOFTWARE: Velká díra v malém programu

Pokud ve vás počítače vzbuzují chlad či přímo odpor, asi raději běžte číst něco jiného. Ale pokud rádi posloucháte šum běžícího PC a barevná hra LEDek na jeho krytu vám vždycky zlepší náladu, tento článek je určen pro vás.

Upozornění

Litujeme, ale tato diskuse byla uzavřena a již do ní nelze vkládat nové příspěvky.
Děkujeme za pochopení.

Zobrazit příspěvky: Všechny podle vláken Všechny podle času
V. Kot 19.10.2023 2:22

Jakožto člověk, co se čtvrt století živí vývojem SW, si dovolám trošku oponovat. Jazyk C není žádné zlo, bez přehánění na něm stojí IT infrastruktura celého světa. I v dnešní době jsou programátoři, kteří preferují C a troufám si tvrdit, že za 50 let tomu nebude jinak. O nějakém přepisu světového codebase z C do "lepšího" jazyka nemůže být ani řeči, nikdo to nevyžaduje a už vůbec to není potřeba. Naopak, veškerý nový SW např. v Aerospace industry se píše v C, všechny vesmírné sondy nebo poslední Boeing 787 řídí SW napsaný v C. Je k tomu mnoho dobrých důvodů. V dnešní době jsou nástroje, které vám umožní automaticky analyzovat kód a odchytit nebezpečné konstrukty, či chyby

Linus Torvalds napsal relativně nedávno verzovací SW Git, který naprosto vládne SW světem, v céčku, protože primárně nechtěl, aby do toho fušovali soy devs, za které považuje i C++ vývojáře.

A že by byl jazyk C snadný? To si taky nemyslím, spousta lidí to vzdala kvůli "těm šíleným pointerům" - trivialita, ale pro začátečníka těžko uchopitelná věc, kterých je v C více. C je jazykem počítačů, jen jednu vrstvu nad assemblerem, je vzdálený lidskému uvažování, nejsou tam žádné velké abstrakce.

Od vzniku jazyka C vznikají další a další jazyky, které mají jakože být už těmi nejdokonalejšími, aby se pak profesionálové různých profesí stejně vraceli k C. Například vývoj aplikací pro Android se děje v Javě/Kotlinu, že? Ano, ale jen do doby, než narazíte na výkonnostní problém a musíte se "ponořit" do Linux vrstvy.

Disclaimer: nejsem C programátor, mé jazyky jsou C++/Go/Java/Python.

F. Žůrek 17.10.2023 21:32

Byl jsem programátorem, ale bez OS a za systému DOS. Za Windows již ne. Tedy od počítače Zuse až po PC. Většinou jsem používal asembler, takže jsem mohl programovat i v BIOS.

Měl jsem řadu knihoven programů, ale jen pro sebe. Inu, byla to jště stará doba... Céčko jsem již nepoužíval, to jsem již programování zabalil. Bylo to vlastně dáno... pádem komunismu... A závěrem.

Nejdůležitější jsou dvě věci... tj. mít věrná data a k tomu bezchybné programy... a to jsou stále... vážné problémy... Zdař!

F. Žůrek 17.10.2023 21:36

Letos mám věk 84 let.

P. Skřivan 18.10.2023 0:10

Tak to jsem dělal taky. Dokázal jsem na pozadí, tj. na časovač, volat i DOS. Spolehlivě a používalo se to i v aplikaci.

Bylo to fajn, ale Windows 16-bit a poté 32-bit, také měly své kouzlo. Tam to bylo vždy lepší v C (Windows API nebo Win32 API), používal jsem hlavně to druhé. Ale v Makroassembleru se dal psát ovladač .386 nebo VxD. Psal jsem to poslední, a to ne pro konkrétní zařízení, ale pro rozhraní VCOMM. Jojo, chodilo to. :-) Od 95 po ME.

P. Skřivan 17.10.2023 20:24

Problém autora je, že nějak pominul, že v C je napsána většina základů všech systémů. Kromě toho, co pracuje s přímo s HW, to je někdy i v Assembleru. No a ? Prostě vyšší jazyky jsou pro aplikace, ne pro jádro systému.

Umím programovat jak v několika Assemblerech, tak v C i v C++, což není až tak zásadní rozdíl, jak si někteří myslí. Čuňačiny, tam jde dělat dost podobné, pokud je člověk chce dělat. Jde o to, aby nechtěl. Muset používat dnes C, je jen o dostupnosti kompilátoru pro danou platformu, což platí jen pro některé platformy značně exotické. Jinak není důvod C++ nepoužít a používat staré C.

Samozřejmě programovat běžné aplikace v C/C++ je neefektivní zvrácenost. Jeden by se divil, co se tak i dělá, např. jedno velmi známé účetnictví, které stále používá mrtvou knihovnu MFC.

Jinak ale autora potěším: víte co je naprogramované v C ? Mj. i řízení letového provozu. :-))) TV vysílání ... . :-))) Prostě na C a ani C++ bych neplival. Stojí na nich dnešní svět. Přes tyhle programy lezete na Internet, koukáte se na TV, perete své prádlo, čtete si zprávy, elektronickou knihu, prostě vlastně všechno, co má nějaký procesor. ... a to má dnes skoro všechno. I robertek :-))) Pokud má procesor malý, je šance, že program je v Assembleru, což je na chyby ještě možná horší, i když já v něm paradoxně dokážu napsat program bez chyby poměrně s vysokou úspěšností.

M. Kechlibar 17.10.2023 21:57

"že nějak pominul, že v C je napsána většina základů všech systémů."

Nepíšu tam náhodou, že programů v C je strašně moc a že jejich přepis by trval velmi dlouho?

Já vím, jak rozšířené je C. Proto mu říkám, že je to "dar z pekel", nikoliv že je zbytečné. C je krásné, funkční, rychlé ... a bohužel taky umožňuje programátorům střelit se do nohy z pouhé vteřinové nepozornosti, což značně pomáhá "černým kloboukům".

Ale to jsem zase jen stručně shrnul článek.

P. Skřivan 18.10.2023 0:03

Co píšete je fajn. Bohužel jste nepochopil základní věc: nic jiného na jeho místo neexistuje. Samozřejmě tam, kde je použito právem. Ne v účetním programu.

M. Kechlibar 18.10.2023 9:37

"Bohužel jste nepochopil základní věc: nic jiného na jeho místo neexistuje"

Vy jste fakt zbytečně útočný. Co víte o tom, co jsem pochopil a co ne?

Pole legitimního nasazení C je dnes značně omezené, v běžných PC a mobilech naprosto titěrné. Napadají mě jen specializované drivery pro stejně specializovaný hardware, virtualizaci atd.

Nejenom účetní programy, ale i běžné systémové knihovny typu CURLu se dávno mohou psát v jiných jazycích, a při vhodné volbě jazyka nebudou mít problém s výkonem.

P. Skřivan 18.10.2023 22:37

Jsem útočný, protože na rozdíl od vás tuším, kde to všude je. 1) nemáte používat C, ale C++. 2) malý čip jinak nenaprogramujete. Nebo to jako si myslíte, že tam budete portovat Javu ? A jak byste to asi tak provedl ? V C/C++ ? Ježiši !

V C a C++ jsou napsaná prakticky veškerá jádra všeho, ovladače, apod. I hloupý ovládací prvek v C# končí na okně v C ve Win32 API a výměně zpráv. Samozřejmě, když to nevíte, myslíte si něco jiného y pak píšete nesmysly.

Kromě toho u síťových prvků jste na takové hraně výkonu, že tam si nic jiného než C/C++ absolutně nemůžete dovolit. A ani k tomu není důvod, protože ne vždy je nutná/výhodná zcela dynamická alokace paměti a přenositelnost na jiný HW.

D. Polanský 17.10.2023 17:56

Já kdysi dávno napsal v Pascalu pro pobavení o strukturovaném programování. Čtivý, metodicky proparcovaný jazyk, ale zapadl.

http://dusanpolansky.cz/clanky/banker.html

J. Jurax 17.10.2023 15:36

Sakra - napsal jsem toho v céčku dost, naštěstí už dávno a jednoúčelového, takže už to bude promlčené ... :-)

P. Kohout 17.10.2023 14:25

Jistič - hlídá velikost proudu a při překročení vypne. Proudový chránič - porovnává proudy tam a zpátky, a pokod nejsou (přibližně) stejné - čili tečou jinudy, což nemají, pak vypne. Prosím, sousloví "proudový jistič" nepoužívat, je špatně.

B. Havel 17.10.2023 10:31

Není nad COBOL

mimochodem vám v něm evidují důchody ;-D;-D;-D

P. Skřivan 17.10.2023 20:25

Když jsem tam u nich byl, tak tvrdili něco o C. Ale jde asi o to, jaká část. COBOL je dnes celkem k ničemu a nemá smysl ho udržovat.

O. M. 17.10.2023 9:32

A v čem jsou napsané kompilátory těch vyšších jazyků? ;-)

J. Jurax 17.10.2023 15:37

Začasté v céčku ...

P. Skřivan 17.10.2023 20:29

Sázel bych spíš na C++. V C bylo a je Win32 API, ale .NET v C nebude a Java také ne. Ale třeba se pletu. :-) Java i .NET jsou totiž vlastně C++++, jak se píše v manuálu k Javě, takže použití C pro jejich tvorbu by bylo hodně zvláštní.

J. Kohout 17.10.2023 9:15

Moc pěkný článek. Jazyk C (vytvořený programátory) má několik výhod, které běžný uživatel běžného PC většinou nepotřebuje.

* Je rychlý. Až na specializované (například matematické) knihovny je prostě nejrychlejší z běžných programovacích jazyků.

* Programy jsou úsporné. Paměťově (přímá práce s pamětí) i kompaktně (i z toho ta rychlost).

* Na každém obsukrním HW (odolné pro auta, do vesmíru, speciální medicínské, ...), který je potřeba naprogramovat, bývá kompilátor (převodník do instrukcí procesoru) pro jazyk C.

* Tento kompilátor je často doplňován pro jednotlivé typy procesorů, takže umí využít nejmodernější schopnosti, což není tak běžné pro "vyšší" jazyky.

P. Skřivan 17.10.2023 20:26

Zapomněl jste dodat, že bez něj se jaksi nehnete: je to všude.

M. Molhanec 18.10.2023 10:29

"prostě nejrychlejší z běžných programovacích jazyků." – ne neni nutne nejrychlejsi, Rust je rychlostne i velikostne srovnatelnej; ostatne proto vzniknul

P. Pepax 17.10.2023 9:10

R^ CURL jsem si velmi oblíbil, pro komunikační aplikace je excelentní nástroj.

M. Gróf 17.10.2023 6:01

Krásný článek, díky.

Dovolím si podotknout, že všude se najdou výjimky. Ne každý kód je "vystaven" útokům a jsou případy, kde je opravdu vhodné využití maximálního výkonu (který je zjevným důsledkem neexistujících kontrol, zda se někdo nepokouší o vlastní podříznutí). Ano, programuji také v C :)

Trochu podobným případem jsou opravy, které se snaží zabránit zneužití bezpečnostních chyb procesorů (Spectre, Meltdown, apod.) - u systémů, kde je relevantní zneužití, to je samozřejmě na místě, ale jsou systémy, kde by si uživatel mohl škodit jen sám sobě a tam je snížení výkonu kvůli takové ochraně nesmyslné.

J. Sevcík 17.10.2023 2:58

Víc takových textu. Porochnil jsem si pri ctení. A to nejsem zadný programátor. ;-)R^

Z. Jemelík 17.10.2023 1:08

Víc takových hudebních epilogů!