Jojo, co bychom si bez pánů K&R počali....
C je geniální nástroj ve kterém se dá dělat vše :-). Dost nízko na to, aby byl člověk blízko u stroje a dost vysoko na to, aby to bylo pohodlné a snadno portovatelné. Nic neodpouští a proto jej frikulíni nemají rádi.
Když před pár lety Dennis Ritchie umřel, skoro nikdo si toho nevšiml(byl zrovna v kurzu jakýsi užvaněný kšeftař s ovocem). Přitom jeho význam byl naprosto zásadní. Divný svět.
Bezpečnostním problémům vděčíme programátorům, ne C jako nástroji. Vysloveně nějaká bezpečnostní zrada tam není. Velká část chyb byla způsobena nedomyšlenou prací se stringy a buffery. Laik si to může představit takto :-)
https://www.youtube.com/watch?v=Hwin1V4kLb8
Jestlize je predpokladana chybovost programatoru nejaka v jazyce A, jina v jazyce B a jeste jina v jazyce C a jde nam o snizeni chybovosti, nepomuze nam lamentovat nad tim, ze jsou programatori jelita, ale pouze volba jazyka, ktery povede k mensim chybam. Samozrejme, jeste muzeme najmout lepsi programatory. Pokud jsou. Je to podobne jako v jinych oborech, velka cast bezpecnostnich opatreni je zavadeno proto, ze lidi delaji chyby.
... jo, kde ja to jen ... ze prej java/c#/... nemuzou mit memoryleak ... protoze ono si to prej vsechno samo ... A proc by sme kontrolovali jestli do toho intu leze int, sak ono si to nejak samo, a kdyztak to prej vyhodi exepsnu ...
Prodobny mrvilove v Ccku chvala bohu nezvladnou ani helo world. Zhruti se jim to uz pri kompilaci.
Tvrdil tu někdo, že Java nemůže mít memoryleak? (Nutno ovšem říct, že možností, jak ho vyrobit je o dost méně než v C).
Java úplně stejně jako C požaduje u primitivních typů downcasty, takže by mne zajímalo, jaký konkrétní případ máš na mysli? Co přesně se ti v C zhroutí už při kompilaci a v Javě projde?
Zase to obracíš. Tvrdil jsi, že v sofistikovanějším jazyce vznikají sofistikovanější chyby a nepřímo, že vyšší jazyky pustí to, co C odmítne už při kompilaci.
Bohužel nebo bohudík jsem v C a C++ nějakou dobu dělal a vím, co všechno dokážou borci napsat. A to jsem zcela jistě nepracoval s nejhoršími kusy, které kdy kdo pustil k programování v těchto jazycích a to Hello World uměli napsat.
Netusim, co si takovy j predstavuje pod sofistikovanejsim jazykem, ale urcite neplati, ze nizkourovnovej jazyk je bezpecnejsi v tom, ze prasarnu neprelozi. Ocividne
- C prelozi spoustu prasaren
- naopak vysokourovnove jazyky (rekneme Haskell nebo jeste dal Agda) spoustu prasaren odhali
(Netvrdim, ze nutne kazdy vysokourovnovy jazyk chrani pred vsemi prasarnami, jen ze to tvoje tvrzeni je mimo. Z velke casti je to spis otazka typoveho systemu a ne "vysokourovnovosti")
Pamet je asi nejbolavejsi misto, ale ne jedine. Ocividne spatne je navrzeny switch, diky goto jsme se dockali gotofailu v Apple SSL, spatne se v C navrhuji API s jednoduchou obsluhou chyb...
Samozrejme, ze vsechno to jsou veci, kterym se v principu muzes postavit, byt opatrny a napsat spravny kod. Prakticky se ukazuje, ze zbytecne chyby proklouznou i schopnym vyvojarum v jinak dost opatrnych projektech. (Casto je to napoprve napsane spravne, ale casem to nekdo rozbije, protoze se programatorum nedari udrzet v hlave kontext.)
moje slova, moje slova.
Toto jsem si dal na fejsbuk kdysi:
http://www.maniacworld.com/steve-jobs-vs-dennis-ritchie.html
Všeříkající anglický komentář.
Mohl by mi někdo vysvětlit, proč Go vzniklo (to nemyslím hanlivě, ale ať hledám na Google jakkoliv, tak nenacházím proč ano a aproč ne - našel jsem jen, že performance je horší - mínus, a dá se v něm udělat web server - plus?).
Tím nechci říct, že mám něco proti tomuto jazyku, ale spíš nevím, proč bych na něj měl přejít (přidaná hodnota mi uniká).
Mimo jine rychlejsi kompilace nez v C (o C++ nemluve), ale i vyssi a relativne jednoduchy jazyk - vylepsilo to nektere procesy v Google. Jestli to spravne chapu, vzniklo proto, aby mohli prepsat nektere interni veci z Pythonu.
tl;dr - Pokud nejsi Google, je dost mozne, ze Ti prechod na Go nic neda. To ale nevadi.
Tvorba nových programovacích jazyků je jako hledání Grálu. Najít nějakou mezeru, kde se ujme a dostane dost času, aby se mohl rozvinout a uchytit. Není to jednoduché, třeba ještě před 2 lety to vypadalo, že se uchytí CoffeeScript, dnes s ES2015 a ES7 na obzoru jeho sláva prudce uvadá.
Dříve měly jazyky delší dobu na uchycení, na druhou stranu dnes může vzniknout nový jazyk a zítra o něm ví celý svět. Podle mne Go více cílí na Javu než na C, i když jeho uchycení je momentálně spíš bližší C než Javě. A protože setrvačnost hlavně v enterprise sféře je obrovská, je otázkou jestli dostane dost času.
Jeden z dulezitych duvodu je concurrency - predavani dat mezi gorutines je pomerne jednoduche a tudiz bezpecnejsi. Navic gorutines jsou jeste lehci nez thready, takze na jednom serveru jich muzes pustit treba milion (a obslouzit tak milion lidi). To se ti tezko udela s thready.
Tipuju ze dalsi vyhodou bude nativni binarka, coz pri sirokem nasazeni (pouziti v ramci datacentra) resi problemy se spravou knihoven nebo virtualnich stroju.
Performance je horsi nez Java, a lepsi nez Ruby a spol, na druhou stranu v momente kdy dokazes jednoduse napsat aplikaci ktera vyuzije vsechny jadra asi ten vykon dohonis a navic skalujes. Hardware je levny...
Obecne mi v nem kopec veci chybi nebo stve, ale kupodivu sem ho stale neodepsal. Takze neco na nem je, a i kdyz nevim co, zrejme to nebude uplne spatne :-)
(Samozrejme spolukomentujicich kteri veri ze jeden jazyk by mel byt vhodny na kazde pouziti je mi lito...)
Přečetl jsem si odkazy zde v diskusi, dověděl se o Go víc, než jsem kdy chtěl a už už jsem se ho nadšeně začínal učit, když jsem na konci jednoho dlouhého článku našel informaci o tom, že C kód doslova přepsaný do Go je minimálně 2x, spíš vícekrát pomalejší než originál. To je poměrně velká daň, se obávám. U kompilovaného jazyku jsem ji tak nějak nečekal.