Vykon jsem s troskou sebezapreni ochoten uverit, ale bezpecnost C/C++ je legendarni. Neco tak spatne navrzeneho z hlediska bezpecnosti aby clovek pohledal.
Takle (v konkrétních příkladech) to samozřejmě platí, ale obecně se velmi málokdy dá říct, že jazyk A je bezpečnější (výkonnější) než jazyk B. Krom toho, ten příklad nedokazuje, že Java je bezpečnější než C, ale spíš to, že v C je těžší napsat program, který je v tomto ohledu (buffer overflow) bezpečný. Nebo ještě jinak – těžko lze tvrdit: „je to v jazyce XY, tak je to výkonné a bezpečné.“ Tyhle věci záleží mnohem víc na programátorovi, nasazení, úloze, knihovnách, administrátorovi.
>Krom toho, ten příklad nedokazuje, že Java je bezpečnější než C, ale spíš to, že v C je těžší napsat program, který je v tomto ohledu (buffer overflow) bezpečný.
V podstatě jinými slovy říkáš, že je java bezpečnější:)
V javě samozřejmě jde napsat útok typu buffer overflow, protože nakonec běží na stejném hardwaru jako program v C, ale je to prakticky nemožné(je třeba najít chybu v jvm a potom nějakým způsobem využít v javovském programu).
to ja naopak neverim moc tomu vykonu. O bezpecnost C++ bych se nebal, nikdy jsem nemel zadny vaznejsi problem, vlastne uprimne, mne osobne se bezpecna aplikace v C++ dela lip nez v PHP. Podle mne s bezpecnosti C/C++ maji problemy jen lide co jsou a) patlalove b) pouzivaji nevhodnou metodiku vyvoje a nastroje pro vyvoj
Kdo tohle pripustil v C, je zlocinec, ktery by mel byt exemplarne popraven tim nejnechutnejsim znamym zpusobem. Slova bezpecnost a C/C++ by se nemely objevovat v jedne spolecne vete. A to jsem jen u jednoho operatoru. Treba o ukazatelich by se daly psat eseje.
Jiste, genialni programator napise kod vzdy bezpecne, ale genialni programator neexistuje, a proto by jazyk mel byt od pocatku navrzen s tim, ze jej budou pouzivat omylni lide.
Vite ze Assembler je take programovaci jazyk? To je asi velmi spatne navrzeny, protoze v nem jdou delat chyby.
Svet neni CB, vse ma sva uskali, chce to pouze programatora, co si je uvedomuje. Uznavam, ze treba u open source to je trochu castejsi problem, protoze kdektery jouda se do projektu zapoji, pokud chce.
Assembler se bezpecnosti snad vubec nezabyva, navic to neni vyssi programovaci jazyk, takze ten argument moc nechapu.
Asi se shodnem, ze JAVA nebo Python je bezpecnejsi jazyk nez C, protoze nektere zhovadilosti tam udelat proste nejdou. Neznamena to ale, ze se v tech jazycich pisou programy bez chyby :-)
if ( a = b ) je docela sikovna moznost, prave pokud mate spravne nastroje a metodiky.
Takhle jak jste to napsal bez dalsi zavorky gcc hodi warning pri kompilaci, a pak jeste existuji veci jako splint a valgrind. To k tem nastrojum.
A pokud programujete s UnitTesty, tak vam nefunguji testy i kdyby to proslo skrz nastroje, takze to je ta cast s metodikou.
Na druhou stranu kdyz nactete ze vstupu od uzivatele 4096B, tak vite ze mate 4kB binarnich dat.. v PHP kdyz parsujete treba POST request a nedate si bacha na kodovani a validaci, tak vam treba nekdo podstrci nevalidni UTF-8 string ktery treba zpusobi ze vase dalsi kontroly neprokousaji pres cely obsah vstupu a nasledne vam premaze celou databazi. Porad myslite ze Buffer Overflow v C je nejvetsi zlo sveta? Ja myslim ze bezpecny jazyk neexistuje. Jsou jen aplikace ktere maji tak malo chyb, ze na ne nikdo neprijde a ty vypadaji bezpecne. Bez ohledu na programovaci jazyk.
Samozrejme kdyz upatlate 100 radkove C++ bez navrhu, testovani a dodrzovani urcite metodiky, tak nejspis budete mit v prumeru aspon jednu chybu na 10 radku, z toho 20% bude zpusobovat padani aplikace. U javy je jediny vetsi rozdil v tom ze to tolik nepada, mnozstvi chyb bude jen malinko nizsi, jenom se projevi mirneji. Co je nekdy jeste horsi, protoze si je pak nemusite vsimnout. Je pravda ze stejna aplikace ma obvykle v Jave kratsi zdrojovy kod, takze tam prijde dalsi snizeni absolutniho poctu chyb.
Ale rikat ze C/C++ je nebezpecne a Java je fajn je jako rikat ze F1 je nebezpecna a cestovni BMW je fajn … ale zkuste v 150km/h napalit do svodidel s F1 a pak s BMW (a hlavne to nezkousejte v opacnem poradi).
>U javy je jediny vetsi rozdil v tom ze to tolik nepada, mnozstvi chyb bude jen malinko nizsi, jenom se projevi mirneji. Co je nekdy jeste horsi, protoze si je pak nemusite vsimnout.
Já bych řekl, že to je přesně naopak. Java hodí výjimku, pokud se děje něco nekalého, ale v C/C++ se může stát, že program běží dál se špatnými daty a chyba se projeví jenom občas(např. překročení mezí polí, čtení neinicializovaného ukazatele). V podstatě jediná věc co mě napadá, která by mohla skrýt místo chyby je prázdný blok catch a to lze napsat v obou jazycích.
Co se výkonu týče, tak na tom C/C++ je velmi dobře.
Ale tvrdit, že C je bezpečné může jen někdo kdo nikdy neprogramoval v C, nebo naopak programoval jen v C. Sice souhlasím, že Unit testy, valgrind a správný návrh udělají hodně… ale při použití správných nástrojů by se dal označit každý jazyk za bezpečný. Jenomže valgrind a testy odchytávají až chyby, které jazyk dovolil. C/C++ Vám bez okolků dovolí číst a zapisovat nealokovanou paměť. Pointery jsou sice silná věc, ale o bezpečnosti opět nemůže být řeč.
A jestli tou bezpečností má být silná typová kontrola, tak to pardon…ale to je opět dvojsečná zbraň.
To jste tomu, vy mudrlanti v redakci, dali. Zminit se o bezpecnosti C/C++ – diskuze je pohrbena v nesmyslnych hadkach na nerozhodnutelnym tematem…
--
Jinac jazyk je to zajimavy, goroutines okouzlujici, myslenka vyhnout se OO taky celkem ok, co se mi nelibi je znovuobjeveni kola co se tyce syntaxu na nekterych mistech.
Ze for bere 1 nebo 3 parametry prez carku se mi libi, ale ze se NESMI davat kulata zavorka kolem celyho vyrazu pro for kdyz nasleduje blok kodu uvedenej slozenou zavorkou, to mi prijde trochu necitelny a krkolomny (neco jako povinny slozeny zavorky za ifem v perlu).
Taky bych mozna trochu vyjadril obavu nad pouzitelnosti myslenky ortogonality interfacu a jejich implementaci – to v tech jmenech metod bude IMHO za chvili peknej bordel.
Taky by me zajimalo, pravda neshlidnul jsem jeste to uvodni video, jak budou resit platformni nezavislost. Zatim to vypada na potencialne stejnej prusvih jako s paltforme zavislou delkou intu v C, no aspon se zda ze maji zabudovany i typy s pevnou bitovou delkou.
ach ta podoba s kompilaci a linkovanim.
a ta podoba mezi weby.
borci z plan9 nam nejak odesli do google!!!
http://golang.org/…utorial.html
http://plan9.bell-labs.com/…oc/comp.html
http://www.plan9.bell-labs.com/…plan_9_wiki/
a po tomhle videu (http://www.youtube.com/watch?…)
je vsecko jasne, je to russ cox co delal na plan9.