rad bych si poslechl alespon par konkretnich "smeru", protoze podle me je to naopak.
Konkretne treba zde :
https://blog.ntpsec.org/2017/01/18/rust-vs-go.html
copak se dá jazyk hodnotit dříve než po pár letech zkušeností nebo pár desítek KLOC?
U rustu se mi líbí, že mám kontrolu nad stack pamětí, mohu psát realtime, protože není GC, který by mě pausovalo. U GO naopak je rychlost psaní kódu obdivuhodná a jednoduchý daemon je v něm napsaný skoro dříve než v bashi či perlu.
A čet sis ty argumenty?
1. je nerelevantní, nechceš přece, aby programovali na projektu lidi co se teprve učej. A Jsou jazyky co se učí snadno jako třeba C nebo Java, ale skutečné programy jsou ukecanější. Na druhou stranu Scala nebo C++ jsou mrtě složité, ale v rukou zkušeného programátora ušetří dost práce (v rukou nezkušeného práci přidělají).
2. Opravdu chceme automaticky překládat zdrojáky do jiného jazyka? IMHO lepší je postupný přepis, kdy může být většina programu v C a postupně přepisovat jednotlivé části. Rust a C si skvěle rozumí. Nevím jak je na tom v tomhle ohledu Go.
3. Neznalost autora, rust má i jiné možnosti pro paralelní programování než mutexy. Takže v tomhle bodu jsou na tom Go a Rust úplně stejně, protože mutexy nemusíš použít.
Rázem to porvnání vypadá úplně jinak. Ale IMHO nejlepší argument je, že na takhle důležitý program jako NTP daemon je lepší použít něco lety prověřeného, takže bych klidně zatím zůstal u C. Zvlášť pokud mají tolik starého kódu.
No ono je totiz nejlepsi vzit jabka a zacit je srovnavat s hruskama. Jedni tvrdi, ze jabka jsou lepsi, protoze jsou jabkovite a ti druzi to tvrdi naopak.
Ale kdyz delam strudl, tak jsou lepsi jablka a kdyz delam hruskovicu, tak tam taky necpu jabka. Samozrejme, muzu udelat I hnusnej strudl z hrusek nebo hnusnej kalvados z jablek.
Argumenty o tom, že zkušenému programátorovi C++ usnadní práci apod. jsou dle mého názoru typický baby duck syndrom. Samozřejmě že zkušený programátor v kterémkoli jazyce bude vždy produktivnější,než nezkušený (klidně ten samý) v kterémkoli jiném jazyce. Ale jde o to, že zkušený programátor třeba v D typicky vyrobí lepší produkt, než stejně zkušený programátor v C++ (samozřejmě za předpokladu, že jsou všechny potřebné knihovny stejně dostupné). Neboli, abych volně parafrázoval klasika, jsou jazyky, ve kterých zkušený programátor dokáže směle řešit problémy, které se v lepším jazyku ani nevyskytují.
Podle vašeho baby duck syndromu bych dodnes pracoval v Pascalu, nebo možná v Basice. Další na řadě byl čistý C a potom taky Java, dělal jsem v PHP... pravda nevim nic moc o Go, D ani o Rustu (jen to co je v rámci Rootu). Zato se považuju za zkušeného programátora v C++ (tak dalece, že jsem schopen psát webovky v C++ namísto třeba v PHP)
Nesouhlasím s tím, že zkušený programátor bude dobrý ve všem bez ohledu na jazyk. Nebude. Je to o tom, co od jazyka očekáváte. Já se například podivuju, proč se Tor přepisuje do Rustu a ne do C++. Toho C++ se všichni bojí jako čert kříže. Trochu v tom má prsty ale naprosto nevhodné způsoby vyučování tohoto jazyka. Nicméně to co umí Rust, umí samozřejmě C++ (s patříčnými knihovnami)
Právě naopak, vidím, že máme stejný názor. Ve svém příspěvku jsem se snažil vyvrátit argument, že C++ je dobrý jazyk pro zkušené programátory. Je jistě pravda, že zkušený programátor je vždycky lepší, než nezkušený, nezávisle na jazyku, ale zkušený programátor v inteligentně navrženém jazyce je lepší, než zkušený programátor v horším jazyce. Takže přesně jak říkáte, C je objektivně lepší, než Pascal, D, je lepší než C++ a Rust je (dle mého názoru) lepší než oboje, i než Go. A C++ se všemi knihovnami na světě v žádném případě už z podstaty neumí to, co Rust, a to je prokazatelně bezpečnější kód při stejném nebo lepším runtime výkonu. Klíčovým slovem je zde ono "prokazatelně": v Rustu je snažší formálně *prokázat*, že v programu není buffer overflow, race condition, memory leak, pointerové chyby atd (podstatnou část tohoto úkolu zde odvádí už samotný překladač). V C++ můžu klienta nanejvýš ujistit, že prokázat se sice dá kulový, ale psal to "zkušený programátor". A to je dost málo. Respektive sám jsem měl tu "čest" v C++ psát nikoli webovky, ale analyzátor kódu (rovněž v C++) a vím, jak často je prokazatelné, že minimálně memory leak MUSÍ existovat s matematickou jistotou.
ono sa niekedy stava, ze na projekte spolupracuje viacero programatorov a nemusia to byt ani prasce aby doslo k nedorozumeniu a zaniesli do kodu nejaku chybu. Robil som v C/C++ asi 10 rokov a uzil som si s nim vela "zabavy" tykajucej sa chyb pri praci s pamatou, takze vitam akykolvek sposob, ktory mi pomoze tieto chyby minimalizovat.
A tvrdit ze clovek, ktory zanesie do C/C++ kodu memory leak je prasa, je docela silna kava - jednoducho pravdepodobnost chyby rastie s poctom riadkov kodu, takze vacsina ludi zial chyby robi, teda okrem Vas, samozrejme :-)
Tak jeste jednou. Memory leaky, buffer overrun, pointerova aritmetika, NENI C++. Pokud nekdo tohle povazuje za soucasti C++ a rika si programator C++, tak keca, mozna si nevidi do huby. Ve skutecnosti je to normalni Cckar, ktery to ++ pouziva jen jakousi extenzi toho cecka. Prosim nazyvejte tyhle programatory za ceckare prasata. Chapu ze Rust pak nekomu muze pripadat jako zeslan z nebes.
Nejtragictejsi je, ze se C++ takto v drtive vyucuje.
Naopak v jazyce C++ je tak C cast jako extenze pro zkusene programatory kteri by v jinych jazycich museli funkcionalitu dopsat jako nativni modul. Asi tak jako kdyz do jazyku date moznost psat inline assembler.
Memory leak? Nepouzivate unique_ptr a shared_ptr? Buffer overrun? Nepouzivate vector a string? Pointerova aritmetika? To nemame kontejnery.
Nejnestastnejsi je to, ze Rust, tak jak je vyucovan zde na Rootu by se dal jednoduse vztahnout na C++ a hned by vsichni nadsene tleskali jak je to skvelej jazyk. To co ma Rust, ma C++ a da se stejne pouzivat, drobne se akorat lisi syntaxe.
ano - pokial sa dokazete uplne vyhnut C-ckovemu kodu, pravdepodobnost tychto problemov klesa, ale nie som si isty, ci sa to vzdy da. Viem, ze existuju kniznice ako STL, Boost,... kazdopadne na druhej strane mate kopec (vacsinu) kniznic (napr aj priame volania systemu,...), kde sa veciam ako ponitery, referencie, dynamicka alokacia, manualny lifecycle management (a dokonca aj pointerova aritmetika) zial nevyhnete.
Okrem toho tvrdit, ze rust je to iste ako C++ len v inej sytaxii je ukazka toho, ze na rust ste sa poriadne nepozreli a vnimate ho cisto z pohladu programatora v C++ a v tomto smere naozaj neexistuje lepsie C++ ako C++.
Odporucam kratky exkurz do inych jazykov (napr. scala, haskel), pozriet si veci ako pattern matching, funkcionalne programovanie (ano, viem, lambda je aj v C++), fluent API v kolekciach (nie som si presne isty, ci som to nazval presne - napr je aj v jave 1.8) a zistite, ze v ruste mate zaujimavy zoznam vlastnosti z vyssich jazykov bez toho aby ste za to platili sialenymi narokmi na pamat alebo performance overhead...
To je naprostá blbost. Mluvit o "svobodě vyjadřování" tady může mluvit jenom hobyista nebo naprostý ignorant. Vůbec nejde o to, kdo je prase, jde o úroveň GARANCE, jakou je možné poskytnout zadavateli. Vývoj software je inženýrství jako každé jiné a to znamená, že jsou případy (bohužel ani zdaleka ne dost běžné), kdy se očekává víc, než prohlášení "žádný read-after-write tam není, věř mi, že nejsem prase". Od inženýra, který navrhuje letadlo, se očekává, že předloží za a) teoretický DŮKAZ správnosti návrhu a za b) že naplánuje a provede patřičné aerodynamické, strukturální, protipožární atd. testy spolu s DŮKAZEM, že jsou relevantní a kompletní. Ten, kdo by považoval za omezení své svobody vyjadřování, že nemůže mít jedno křídlo z olova, druhé z polystyrénu ale přibité jedním hřebíkem, a že se někdo jaksi nespokojí s jeho ujištěním, že nebezpečné letadlo by postavilo jedině prase, takového inženýra by samozřejmě a po právu na hodinu vyhodili.
Neexisutje proto sebemenší důvod, proč by tomu mělo být jinak u software. Respektive důvody bývají často dva. Buď je manažer posedlý "time to market" a chce za každou cenu něco vydat hned s tím, že chyby a díry se opraví "později" (tj. nikdy). Anebo jde o dětinské ego programátorů, kteří si myslí, že to, že dokáží zbastlit nějakou appku a ona čirou náhodou zrovna nespadne, z nich dělá polobohy jejichž "svobodu" musí každý nade vše respektovat.
Z tohoto hlediska C++ je nekoherentní paskvil. Nejen, že ani sebelepší antiprase nemůže vždycky napsat program bez memory leaků a race conditions (ono úplně stačí zkusit si napsat triviálních pár řádků, kterých něco přečtou z cin a echují to do cout spolu s předponou "hello world" a pustit si to celé ve valgrindu, to je docela legrace), nejen celá řada bugů je v něm téměř nevyhnutelná (někdy sktriktně nevyhnutelná), ale snažit se o onen důkaz je v C++ v obecném případě zcela vyloučené, protože na rozdíl (mimo jiné) od Rustu nebo Haskellu to v případě C++ může znamenat předpovídat výsledek Turingova stroje.
Manazersky pohled ... rozumim, bohuzel plny hloupych zkratek a predsudku a jednoduchych reseni. Staci se podivat na Javascript jak tam se meni moda. Nemam cas ani energii to nikomu vyvracet. Nedavno byla Java pro managery bezpecnym jazykem. No je leckdy stejne nebezpecna jako C++, ale co... managerska zkratka, psali to v prospektu, tak to bude pravda
Dopouštíte se klasického omylu tím, že předpokládáte nějaká jednoznačná objektivní kritéria (...C je objektivně lepší než Pascal...). Nic takového neexistuje. Existuje obrovské množství subjektivních kritérií (které navíc podle osobní zkušenosti každý vyhodnotí úplně jinak), které v celku dají různorodou směs. I pro Brainfuck bychom našli kritérium, ve kterém většina lidí řekne, že je vhodnější než třeba C++. (Pokud si to někdo neumí představit, tak třeba jak co nejvíce studentům ztížit pochopení programu ze zdrojového kódu.)
Jinak cílovky Go a Rustu se v poslední době dost rozešly, takže to moc na soupeření nevypadá (kromě takovýchto diskusí, samozřejmě) :D. Současná popularita Go samozřejmě zvětšuje jeho šíři záběru i do oblastí, kde se s tím kolikrát ani moc nepočítalo. Ale to už je úděl slávy, Java je taky kolikrát tam, kde nemá co dělat a přináší to jen problémy (Javaman jistě promine) :).
S tím paralelním programováním je to ještě jinak. Rust nejen umí všechno to, co Go, ale navíc je i bezpečný proti race condition. Když nepoužívám mutexy, doporučuje se v Go design pattern známý jako "alias xor mutable". Rust totéž pravidlo dokáže vynucovat přes typový systém. Aneb klokanův první zákon: když se v nějakém jazyku rozšíří design pattern, znamená to, že je v tomto konkrétním bodě jazyk špatně navržen.
Tak mimo jiné:
- Rust má skvělý typový systém založený na Hindleyově-Milnerově modelu. Go je proti tomu omezené a současně rigidní, neumožňuje ani genericitu a polymorfismus, natož pokročilejší věci jako kontrolu chyb pomocí pseudomonád.
- Právě kontrola chyb je další z věcí, kde Go falíruje.
- Správa paměti. Rust kontroluje životnost objektů zkrzevá typový systém, Go používá GC. Je to jistě snazší pro nezkušeného programátora a pro některé projekty to může být výhoda, ale zrovna u prohlížeče je Rustovská garance, že nebudou memory leaky, velké plus.
I also don't understand why people compare Go with Rust. If you need a GC-less programming language: Rust; if you need a board game: Go.
https://twitter.com/leonidasfromxiv/status/822375939250135040
Úpravy na straně Toru se zase dostávají do Firefoxu s cílem, aby Tor nemusel být úplný fork https://wiki.mozilla.org/Security/Tor_Uplift
Asi proto, že projekt o mnoha milionech řádcích se nebude hned tak přepisovat do jiného jazyka? Ze stejného důvodu je COBOL stále jedním z nejrozšířenějších jazyků, ačkoli jsem o něm v životě neslyšel nic dobrého (sám jsem neměl tu čest).
Pak je tu skutečnost, že lepší jazyk, kterým Rust bezesporu je (samozřejmě není dokonalý ani jinak "ideální"), je jedna věc, druhá věc jsou disponibilní nástroje, IDE, debuggery, knihovny a v neposlední řadě dostupnost bohaté zásoby průměrných, ale cenově efektivních programátorů.
Nevím, co jsi slyšel o COBOLu špatného, ale každopádně je to velmi dobrý jazyk na to, na co byl navržen. Ostatně... většina používaných jazyků má své klady a zápory a většina jich vznikla s nějakým záměrem, na co mají být dobré. Většina těch větších také časem přibrala další oblasti použití, což už nemusí být tak cool a občas je to lámání přes koleno hodně znát. Potom je z toho měření pinďourů "jazyk ABC je lepší než DEF", případně "ABC je nejlepší na všechno". Blbost. Dnes máme sice obrovský výběr a spoustu jazyků, kterými lze řešit absolutní většinu problémů, ale to neznamená, že to řešení bude efektivní. Nejuniverzálnějším jazykem v rámci jedné platformy je samozřejmě stroják, respektive asm, pokud chceme multiplatformnost, pak buď java, nebo céčko (každé na něco úplně jiného) no a pak je tu asi milión ostatních, s různým zaměřením, na různých platformách, pro různé lidi (vývojáři, vědci, IT analfabeti) a máme tu i skupinu exotických, na práci nepoužitelných, ale nikoliv zcela bezcenných. BrainFuck je výborný jazyk pro mentální cvičení, Karel je super pro výuku malých dětí...
A důvod? COBOL je hodně ukecanej jazyk, ale je to tím, že je postavenej tak, že jednodušší věci si v něm vyřeší i neprogramátor. Dneska už to možná není úplně pravda, ale lidé pracující s počítačem měli v minulosti přeci jenom trochu lepší znalosti, protože práce s počítačem je prostě vyžadovala. Dneska je počítač, včetně SW, spotřebák pro každého, v podstatě není nutné umět vůbec nic, stačí k tomu sednout a "něco" se na tom dá udělat. Jinak z COBOLu mimo jiné vychází i ABAP a v SAPu moc dobře vědí proč - ten jazyk je prostě pro potřeby business logiky stvořen (COBOL = COmmon Business Oriented Language) a obsahuje spoustu užitečných vlastností, konstrukcí atd přímo pro tento specifický obor.
Jeste k tomu "zkusenemu programatoru". To taky zalezi na jazyce. Aby jste byl guru treba v JavaScriptu tak je vam potreba 2-3 roky intenzivniho kodeni. Je to jednoduchy jazyk a co nema se resi design patterny nebo syntaktickymi hratkami. Na druhe strane v C++ je sice kapet slozitejsi ale budete machr uz treba za rok (a i to pul roku jen si budete zvykat jak resit pamet). No a jestli nekdo dokaze byt machr treba v Perlu, tak to ma na dozivoti ;-)