Vadí tam ten vykřičník nebo ty závorky? Závorky jsou nezvyk, uznávám, ale umožňují některé elegantní věci, například poziční parametry (jeden parametr se může naformátovat vícekrát), pojmenované parametry {resutl}, bližší specifikaci typu, zarovnání atd. Oproti % syntaxi z C (a mnoha dalších jazyků) je to imho čitelnější, protože je krásně vidět začátek a konec formátovacího podřetězce, ale zase se to člověk musí naučit :/
Vykřičník tam je proto, že println! je makro, ne funkce. Je pro to několik důvodů:
- formátovací řetězec je kontrolován v čase překladu při expanzi makra
- makro může akceptovat proměnný počet argumentů (běžná funkce (zatím?) ne)
- může se použít zápis připomínající keyword argumenty známé například z Pythonu
- dokáže rozpoznat, který parametr dereferencovat a udělá to za programátora automaticky (nice to have)
To vám autor (tedy má maličkost) nepoví nemaje křišťálovou kouli :-) ukáže čas.
Na poli "náhradníků céčka" jsou minimálně tři čtyři jazyky: D, Go, Rust, možná částečně i Nimrod. Z této suity má podle mě největší šanci právě Rust, protože Go je přece jen určen hlavně pro "běžné" aplikace a GC ten jazyk dost zabíjí pro MCU, RT systémy, jádra atd. Navíc Rust má dobrou přátelskou komunitu.
Ale...uvidíme...řekneme si za pár let.
Go jde opravdu jiným směrem a podle mého je to opravdu velmi dobře navržený jazyk (však jej navrhli zatraceně zkušení pardi). Trochu mi nahrazuje Python, ekosféra knihoven vyrostla úplně nádherně. Go je solidně rychlé a navržené pro vícevlánkový provoz „by default“. Chce si to přečíst trochu víc, ale ve zkratce: přišel jazyk, který byl navržen tak, aby vyhověl tomu co Google potřebuje.
Když nechci, aby se vrtal v produkčním programu nějaký zvědavec, sestavím binárku (statické linkování, takže je trochu větší) a ta se používá; zdrojáky leží jinde. Další plus.
Go jde opravdu jiným směrem a podle mého je to opravdu velmi dobře navržený jazyk (však jej navrhli zatraceně zkušení pardi).
Svým návrhem připomíná jazyk z roku 1970 (např. kvůli tomu, že uživatel nemůže vytvářet vlastní generické typy). Osobně preferuji modernější jazyky.
Ale GO není navržené aby fungovalo jako technologický demonstrátor. Je to jazyk, ve kterém se jednoduše programují implementace interních služeb - což jsou většinou jednoduché transformace typu vezmi z fronty X první dokument, z nej vezmi položku Y, tu zapiš do fronty Z, a pokud možno tuto operaci prováděj paralelně. Na nic jiného to není dělané.
Určitě existuje hromada skvělých programovacích jazyků, skvělých prostředí - trpí ale jedním drobným problémem - existuje minimum lidí, kteří by ten jazyk dokázali uchopit. To, co se rozšířilo bylo vždy jednoduché, názorné, snadno uchopitelné a to pro téměř všechny vývojáře.
Myslím si, že tak to chápe většina lidí, kteří se kolem GOčka motají. Na GOčku, na tutoriálech a prezentacích je vidět, že je to jazyk (+ knihovny) pro psaní backendových služeb. Samozřejmě, že Google určuje směr - je to firma, které má nejvíc GO vývojářů, a nejvíc sw napsaného v GO. Profitují ale z toho i další - Google vzhledem k zátěži musí myslet na efektivitu provozu, takže nevýmýšlejí nic, co by bylo potenciálně pomalé - a relativně rychle reagují na zkušenosti z provozu.
Zcela pragamticky nezáleží na kvalitě jazyka, jak ukazuje čas, ale na tom, do čeho budou nality prachy.
Z tohoto hlediska D umře, protože ho nikdo a nic masivně nepodporuje - a v zásadě visí a padá na aktivitě několika málo osob. Bez finančního zázemí.
Rust umře. Mozilla jednoduše potřebuje proinvestovat větší peníze, které dostává na svůj provoz, ale její hlanví zaměření je jinde. Nebude proto dostatek energie ani peněz na protlačování Rustu. Případně pokud nějaký nadšenec bude Rust v Mozille protlačovat - možná se znelíbí homosexualistickému lobby a ta ho vyžene, což už se jednomu v Moziile stalo, a taky vymyslel programovací jazyk.
Go by mohlo přežít, ale Google má tendenci každý svůh projekt po nějakém čase pokud možnost drsně pohřbít a skončit s ním.
Takže jediná náhrada Céčka, která bude fungovat, bude C++. Za takových 6 let nikdo nebude tušit, co je to D, Rust ani Go.
Do C lijí velké peníze a energii především lidé odkojení unixy. A pak embedded věci.
Do Ady lije velké peníze ministerstvo obrany USA. Takže sice nebude nikdy přehnaně rozšířeným jazykem, ale bude jazykem, který určité obory budou potřebovat - a tak ho budou vyvíjet, udržovat, vylepšovat.
Python a Perl - tyto dva jazyky udělaly velkou chybu, že bez vážných důvodů došlo ke zpětně nekompatibilní změně syntaxe. Oba jazyky to v rozšíření poslalo hodně dolů. Oba jazyky to udělaly v době, kdy jejich používání šlo strmě vzhůru - a tato akce zastavila jejich růst a strmě poslala v rozšíření dolů.
Python je ale příma jazyk, který udělal to, co málokterý jiný - umožňuje supersnadné nakládání s abstraktními datovými typy. Tak jednoduché, jaký má málokterý jiný jazyk. Pak nemá kryptickou syntaxi jako C/C++, jako D, jako Perl, jako řada jiných - a proto nejspíše přežije. Protože podobně jednoduchý a mocný skriptovací jazyk - těch moc není.
Ovšem možnost stát se významným a hodně rozšířeným jazykem si zničil přechodem z Pythonu 2 -> Python 3. Možná nejde ani o ten přechod, ale Python ho udělal v nejblbějším možném čase, který člo vymyslet. A navíc Rossum protahoval celou nejistotu kolem přechodu na velkou řadu let. Tím ho efektivně zrušil z mainstreamu.
Perl ovšem bude neustále klesat. Bude tu ještě dlouho, ale neustále sešupem pomalu dolů.
C, Python, Perl - jazyky, ktere zaznamenaly obrovske rozsireni i bez nejakych vetsich penez do zacatku.
Ada - protocila se do ni spousta penez... a skutek utek'
Pokousis se vysvetlit jednou veci strasne slozite procesy. To uz pomalu muzes vestit z kavove sedliny nebo podle data vzniku jazyka.
(btw - nerikam, ze penize nehraji roli. Jenom ze to zdaleka neni jediny a nejspis ani nejdulezitejsi faktor)
za C stoji penize vyrobcu procesoru. ciste s asemblerem jsou neprodejny.
ADA = Ada 83) by a team led by Dr. Jean Ichbiah at CII-Honeywell-Bull in France
Python i Perl
vezli se na dot.com buzzword vlne, kterou sponzoroval Sun, kdyz kopal za Javu. oba zalepily stejnou buzzword diru pro "lepidlo" a jak je v korporatu zvykem, z lepidla se stal bumbrlicek.
Tu korelaci tam někde vidět můžeme, někde ne, záleží na tom, jak je velká a kolik je výjimek.
Samozřejmě s jazykem souvisí i debuggery, IDE atd. a tam je asi lití prachů důležitější (viz investice do IDE), ale stejně najdeme i spoustu jazyků, do kterých se lily prachy horem spodem a nepomohlo to (pamatuje někdo na VBScript, který měl podle velkého vizionáře Billa nahradit JS?; kdoví kolik se narvalo prachů do RPG nebo COBOLu - ale tady to jsou prachy na vývoj a udržování).
Na druhou stranu jazyky, které vznikly jako one man show a prosadily se (Python, podle mě prvních deset let žádné velké investice nebyly a ty firmy co investovaly, tak jen do svých balíčků - ActiveState Python například).
Trošku OT: zatím jediné reklamy na programovací jazyk, které jsem viděl v reálném světě (a to ještě na letišti v odletové hale, tam je to IMHO drahé), byly Java za dob Sunu a .NET (s C#).
S prvnim odstavcem souhlasim, u druheho si dovolim podotknout ze je nove zalozena nadace jazyka D, ktera ma za cil zajistit financni zazemi (ale zda bude uspesna si zatim nedovolim tvrdit).
S tim ze rust umre moc nesouhlasim, sam jej moc nemusim (rozumnej zatim jsem se jej nenaucil a jsem fanda jazyka D). Ale verim ze si svoje uplatneni najde a preije.
Go jako nahradu Cecka moc nevidim a prezije urcite, prece jen uz je v nem docela dost projektu a to i vecich, takze i kdyby jej google prestal vyvijet tak vyvoj prevezme nekdo jinej.
Ad D: O jazyku D jsem se dozvěděl já osobně před více než 10 lety. Jazyk sám existuje 15 let.
Ad Rust: Proč by měl Rust přežít? Není splněna ani jedna ze dvou podmínek: Co má tak speciálního, že by stálo za to ho používat proti jiným konkurenčním jazykům? A nebo kdo bude tak velký tahoun, aby ho propagoval, cpal do něho peníze, atd.?
Ad Go: Projekty vznikají a zanikají. Go si myslím, že má nejhorší prognózu. Protože dokud se bude o Go starat Google, tak nemá smysl založit spolek/nadaci/cokoli, která ho bude propagovat a rozvíjet. A až Google Go odstaví, tak už bude pozdě. Pro jistotu: Je přirozeností Google, že projekty bez milosti ukončuje, a umrtvuje - stačí si projet seznam projektů, které Google ruší každý rok.
Celý problém je, že proti C++, do kterého lije velké prachy Microsoft, a proti řekněme Swiftu, kam bude lít Apple - nemá D, Rust ani Go žádnou podstatnou výhodu. Proti C++ jsou určitě lepší, ale zase ne PODSTADNĚ lepší, aby stálo investovat ekonomickou ztrátu za přechod projektů na jiný jazyk. A pochybuji, že někdo tu investici prachama, aby jiný jazyk protlačil udělá. To v případě D/Rustu/Go je velice nepravdědpobné.
@ Miloslav Ponkrác
Pravděpodobně máš pravdu. Jenže jednu důležitou proměnou z celé té rovnice jsi dosadil sám a podle toho pak odhadl výsledek. A to je - do čeho (ne)budou nality peníze. Ať už z jakého koliv důvodu. Pro cokoliv se může někdo zbláznit, třeba jako onen mecenáš do Ubuntu, nebo jak píšeš ta "homosexualistickému lobby" si může zítra usmyslet, že podpořit tento jazyk je IN a hotové. A jelikož to nevíš, tak stejně nevíš, který jazyk padne a nebo ne.
Teoreticky je to pravda. Ale praxe ukazuje, že humanitární a lidskoprávní aktivisté se orientují na boření a protesty, a jen mizivě na budování. Aktivisté obvykle potřebují nepřítele, který něco vybudoval, aby mu to mohli zbořit, prohlásit toho tvůrce za morální hovado, a rozmazat ho v médiích jako nejhoršího člověka pod sluncem.
Upřímněn řečeno nevím a nepamatuji si na žádný případ, kdy by homosexualistická ani jiná humanistická lobby významně podpořila vývoj nějakého programovacího jazyka. Zato si vzpomínám na bezpočet případů, kdy významného tvůrce napadali, ničili, zostuzovali.
Dokonce už i Lunus Torvalds se s nimi setkal, a výsledkem byl hnůj tady na rootu "Dopouští se Linus verbálního zneužívání?".
Pamatuji si, jak raketový technik, který úspěšně poslat družici do kosmu byla napaden feministkami za jakési tričko.
Pamatuji si na útoky homosexualistické lobby na CEO Mozilly.
Zkrátka, nevím, který programovací jazyk přežije, ale jedno jsem si téměř jistý - že podpory homosexualistické lobby, která by se začala starat o nějaký programovací jazyk a podporovat jej - to se spíš stanu čínským papežem a ředitelem vesmíru.
Také jste tvrdil, že PostgreSQL do 5 let umře - a ještě tu je.
Mám pocit, že programátoři se dopouští stejného omylu, jako lidé, kteří prohlašovali, že rádio způsobí konec knih, a pak že kino způsobí zánik rádia, a pak že díky televizi končí kina. Svět se mění, ale dobré věci zůstávají.
Dominující jazyky, které tu máme, dominují kvůli vazbě na určitou technologii - a většinou ve své době neměli konkurenci, nebo konkurence měla nějakou vážnou skvrnu na kráse. Každý jazyk, aby přežil si musel najít svojí niku, která také musela přežít. Pokud přežije nika, tak většinou přežije i s ní spojený programovací jazyk. Což je např. nevýhoda Dčka. Nevšiml jsem si, že by nějaký jazyk nahradil jiný - určitě se ale mění technologie - tak jak se mění hw, a mění se i úlohy, které se programují.
K tomu aby se programovací jazyk masivně rozšířil musí být uchopitelný pro každého programátora - nejen pro absolventy Matfyzu nebo JF - tudíž nemůže být příliš abstraktní. Je hromada vynikajících jazyků, jako je třeba Erlang, Scala - nicméně právě kvůli své originalitě budou vždy okrajové. C, C++, Java se ujalo právě proto, že na nich není nic zvláštního - v podstatě jsou to velice primitivní neabstraktní jazyky. Ale to odpovídá schopnostem většiny programátorů.
GOlang je neabstraktní snadno uchopitelný jazyk, který svou niku má - implementace služeb, kde Python je příliš pomalý a Java příliš těžkotonážní.
Se vším souhlasím, jen si myslím, že C++ primitivní přístup sice umožňuje, ale jdou v něm dělat dost šílené věci, když někdo má přehled např. o Haskellu ... https://bartoszmilewski.com/2009/10/21/what-does-haskell-have-to-do-with-c/
Co například se zjistilo konkrétně až za běhu, co nebylo u šablon jasné?
Že něco nějak jde ještě neznamená, že by se to tak mělo dělat. Když bylo vymýšleno XML, tak asi taky nikoho z autorů nenapadlo, že to někdo znásilní k vytvoření v podstatě turingovského jazyka (Apache Ant). Že to jde ale neznamená, že to není megaprasárna na kvadrát, fuj, e e.
"`JavaScript is Lisp in C's clothing` .)"
Není, ale "prej" bude . . .Co jsem tím chtěl říct bylo, že z jazyka, ve kterém se na client-side dají udělat super věcičky a hejblátka relativně jednoduše skriptíčkem začali "fanoušci" za každou cenu zkoušet udělat plnohodnotný všestraný jazyk - no a nakonec jsou z toho takové podivné úkazy, jako FW to sice funguje jako ostatní FW (ostatní jazyky), ale ne protože je to na to vhodný jazyk, ale protože se to v tom nakonec teda povedlo udělat . . . .
Tak JS má pár zajímavých fičurek (zrovna ty jsou ale dost nepochopené, viz snahy o ohýbání třídního OOP do JS), ale určitě neprorazil proto, že by byl nějak extra výhodný nebo snad jednoduchý, spíš relativně náhodou zrovna byl dostupný na browserech, tak se používal tak dlouho, až se dostal na mainstreamu. Kdyby nebyly první browsery s JS (Netscape, IE atd.) monolitické a umožňovaly pluginovat i další interpretry, byl by vývoj asi úplně jinde (zrovna Python by asi nebyl na client side marný :-)
Protože Elisp není moc dobrý LISP, je to jazyk, kterej vypadá, jakoby se někdo snažil narvat imperativní jazyk do LISPovké syntaxe :(
Není horší ve smyslu, že je to nějaký nedodělaný šmejd, je horší ve smyslu praktického jazyka, viz třeba dost násilné řešení IO (ono to je pro akademický jazyk jedno, tam se jede stylem "program načte ze vstupu X, musí vygenerovat Y"). Navíc v praxi se skutečně upíšeš závorek, v porovnání s Clojure/CLISPem je jich víc a navíc jsou všechny stejné - kulaté, špatně se to čte (no však nemusím připomínat ten hanlivější význam zkratky LISP).
Elisp byl kritizován hlavně pro neexistenci lexikálního scopování. To už neplatí. S použitím moderních knihoven se v něm dá psát celkem elegantně. Já osobně nemám problém s elispem v emacs ani s javascriptem v browserech.
Proč by nešlo řešit IO stejně jako v JS? Existují kompilátory Scheme do JS a IO není problém.
Python? To jako vážně? Jazyk, kde záleží na odsazení?
A jak by se dělala taková minifikace kódu?
Jako sorry, ale některým lidem python vadí... to už raději ruby nebo scheme
a mimochodem... poslední dobou s u svého kódu sleduji velké množství závorek... sice je to kombinace kulatých hranatých a složených závorek... ale říkám si, že to vypadá skoro jako...
minifikace - však jsou moduly i pro Python, ostatně ten rozdíl ve velikosti nebude velkej. V Pythonu musíš (ne vždycky) zachovat konce řádků (jeden bajt) + odsazení (což bude 1, 2 max 3 bajty pro normální kód). V Javasciptu zase máš spoustu jiného balastu, jako závorky všude možně (no je fakt, že zase někdy díky ním ušetříš whitespace, ale ne vždy), někdy delší klíčová slova (def/function, _nic_/var, kratší zápisy smyčky for atd.). Takže předpokládám, že ve výsledku se sice může Pythoní kód zdát delší, protože entery+mezery, ale celková velikost nemusí být nijak odlišná (chce to vyzkoušet, ať zbytečně neplácám).
Nejdřív mi to přišlo jako špatný nápad, ale vzhledem k tomu, že to odsazení ve zdrojáku stejně být musí, tak proč jím nenahradit závorky a vyřešit jím strukturu.
Minifikace Pythonu? To jako že byste chtěl šetřit na pár tabelátorech (které tak jako tak nahradily závorky, které by odstranit nešly)???
Zrovna python není moc dobrý jazyk pro interaktivní aplikace. Nejdou v něm psát callbacky jako anonymní funkce. Nejdou modifikovat vestavěné typy, což je v js nutné pro ošetření nekompatibilit mezi browsery. JS vůbec není špatný jazyk pro webový frontend. I nodejs je IMHO lepší než pythonovské event loopy.
Node.js je jako výkonná platforma určitě zajímavé (ponechávám stranou schopnosti Javascriptu), ale zrovna ona nutnost řešit asynchronní operace callbacky (přenos řešení problému ze systému na vývojáře), i když to zrovna je k ničemu, je nejslabší vlastností, a nepomáhají tomu moc ani ojebávky přes generátory, promises či async-await.
Končí-li novinový titulek otazníkem, odpověď je ne.
a) člověk se nechce učit každý nový free-cool-in jazyk
b) člověk je liný lámat funkční kód do nového jazyka jen tak
c) bůh ví jaké jsou pro to frameworky
Zatím se C nepodařilo nahradit ani Javě, ani .NETu a tyto dva jazyky aspoň neupadly v zapomění po pár letech
Jasne, co sa meni nech lezi na stacku, samozrejme vela udajov sa nemeni a naucit sa tak pisat kod ze naozaj tych 80% je 'final' sa da a ked clovek pochopi vyhody tak je to fajn. Len prosim nech tych ostatnych 20% premennych mozu byt premenne. Jazyk ktory to neumoznuje by som isto nepouzival.
Problém trošku je, že se asi všichni cítíme být "všichni dospělí", ale chyby, které se neustále znovu a znovu objevují v aplikacích psaných v céčku, to trošku nahlodává. Kolik problémů udělala jen taková blbost, jako ten apple goto fail, buffer overflow je taky typická céčkovina atd. Já mám C hodně rád, ale některé typické chybové patterny se tam objevují.
Ahoj, to otázka je položená lehounce nešťastně. Vysvětlím.
Věc - proměnná už ze svého kořene už je určená k tomu, že hodnota té proměnné se bude měnit. I hodnoty "neměnných" proměnných se mění. Tedy immutable proměnné i 'standardní' proměnné mění hodnotu.
Rozdíl mezi nimi je v tom, že neměnná proměnná pokaždé vytváří nový paměťový chlívek pro každou novou hodnotu(Tady je jasný, že kvůli nové přidělení paměti pro novou hodnotu bude něco stát). Zatímco u normálních proměnných stará hodnota sedí ve starém paměťovém chlívku.
Co se týká výchozího stavu, tak bych řekl, že to může být otázka bezpečí při správě paměti ve vnitřní implementaci jazyka.
Pokud si vezmu myšlenku Inkvizitora, tak s ním bych souhlasil, pokud by Rust nebyl představen jako C(++) bez balastu. Protože v těchto jazycích se "jede na krev" a opravdu se předpokládá, že jsou všichni zúčastnění dospělí.
Jinak bych řekl že neexistuje jednoznačná "pravda" co volit jako default a záleží na tom, k čemu se tvůrci přiklonili.
Tak ona je to vec kompilatoru a jeho nastaveni, zda pouzije jeden chlivek pro kazdou "promennou" nebo tu pamet vyuziva efektivneji. S tim "C++ bez balastu" tomu, priznam se, moc nerozumim. Rust se tlaci tam, kde se hodne pouziva C++, znamena to ale, ze ma ignorovat vyvoj programovacich jazyku mimo C++ a nesmi se rozhodnout pro jinou cestu, nez jakou volilo C a jeho odvozeniny?
Tím balastem myslím v podstatě takový ty věci co jsou v h* souborech. Vůbec celá ta myšlenka c a h souborů už se dneska nenosí.
To že by se někdo nesměl ubírat jinou cestou jsem nepsal. Pokud tvůrci tíhnou k "ochranářskému" stylu je to jejich volba. Jen jsem se nad tím lehce pozastavoval. Možná, že bych po chvilce bloumání tíhnul k tomu, že to je lepší volba.
Autoři jazyka se drží doporučení z C++, že jakýkoli neměnný prvek by měl být programátorem označen slovem "const", což je dobré doporučení (i pro další jazyky), a to z více pohledů - bezpečnost, lepší optimalizace atd.
Ovšem v Rustu došlo ke dvěma změnám:
1) Jedna je asi trošku filozofická a říká, že když se tedy const doporučuje všude, kde to jde, udělejme tuto možnost jako výchozí (stejně to má spousta FP jazyků).
2) Druhá změna spočívá v tom, že Rust rozlišuje mezi skutečnými konstantami (const) které mohou být uloženy v code segmentu (a nebo taky nikde, mohou se jen rozkopírovávat) a "neměnnými proměnnými", což sice zní blbě i v angličtině, ale označuje se tím identifikátor (jméno proměnné) navázaný na hodnotu, která se nemění. Takovou proměnnou lze předefinovat, ale to stejně nezmění původní hodnotu, protože nová proměnná stejného jména má svoji oblast paměti.
(ono je to ještě složitější, protože neměnnost se může vztahovat jak na objekt, tak i na jeho vnitřní stav, ale to bych si nechal do dalších dílů, zkratkovitý popis by to mohl ještě víc zamlžit a to bych nechtěl :-)
> Naproti tomu překladač céčka následující (sémanticky prakticky totožný) zdrojový kód přeloží bez problémů
Se zaplymi warningy si GCC take stezuje:
$ gcc -Wall -Wextra aaa.c
aaa.c: In function ‘main’:
aaa.c:7:13: warning: comparison is always true due to limited range of data type [-Wtype-limits]
while (i<200) {
ano takto to samozrejme umi, akorat se pouziva jina terminologie a malinko odlisna semantika. Pekne je to popsane tady https://blog.rust-lang.org/2015/05/11/traits.html
Zrovna dědičnost v Rustu chybí a líbí se mi to víc než C++/Java OOP. Stejně nakonec v tom C++ i v Javě je lepší se dědičnosti vyhnout a programovat jen čistě proti rozhraní. I ty traity (rustový interface) jsou implementované trochu jinak (interface se implementuje ve zvláštní bloku, takže klidně můžu lokálně rozšiřovat rozhraní typů definovaných v jiných modulech - ideální pro DSL).
Dědičnost není realizací rozhraní, jak se někteří pod vlivem Javy a podobných jazyků domnívají, ale realizací pravidla DRY ve specializovaných třídách. V okamžiku, kdy dědičnost zrušíte, buďto musíte funkcionalitu napsat znovu (porušení DRY se všemi důsledky), nebo musíte použít delegaci, což může být značně kostrbaté a porušující zapouzdření.
Ono i v novém C++ je to s pamětí už dost v pohodě. Doporučuju kouknout na https://www.youtube.com/watch?v=JfmTagWcqoE&t=4361s
Celkom pekne a rychle intro do Rustu napisali chalani z Thoughtram.io. Fakt odporucam.
Tak ono hodne zalezi co si predstavis pod pojmem nemuset se starat o pamet. Pokud ti jde o to ze se nechces starat o to jak a co se kde alokuje a aby se to nejak samo odstranilo, tak je asi vhodne pouzit jazyk s GC, tusim ze rust ho ma v planu pridat? Jinak nevim jestli znas jazyk D, ten by ti mel vyhovovat jeho OOP model je blizsi tomu co ma Java
GC můžeš použít i v C++, ale rozhodně to není úplně bezbolestné (potřebuješ sdílený runtime, aby neměla každá knihovna svůj GC, použití speciálních pointerů nebo intrusivních objektů - paměťový overhead pravděbodobně větší než u Javy). Taky budeš limitovaný použitými algoritmy (např. nesmíš použít algoritmy co přesouvají objekty v paměti - neplatné ukazatele po úklidu). IMHO pokud chceš GC, použij Javu, D, Go apod. V C++ nebo i v tom Rustu to bude spíš jen specialita pro omezené části programu.
Jenže tohle obecně nemůžeš použít, protože to rozbije RAII. Vzhledem k tomu, že to je doporučovaný styl v C++, tak bys nemohl použít prakticky žádný cizí kód. A to nemluvím o rychlosti toho algoritmu nebo, že vlastně pořád můžeš mít memory leaky, protože všechno co vypadá jako ukazatel považuje za ukazatel.
RAII to nerozbije, tam, kde je RAII, se nadále bude používat RAII, ten GC podporuje i GC_free. (Mimochodem už i v JVM se lokální proměnné nealokují přes garbage collector, ale používají stack a synchronní finalizaci.)
K memory leakům přímo nedojde. Může dojít k pozdější dealokaci, ale to se obecně může stát v každém jazyce s GC (garbage collector nezaručuje, kdy k úklidu dojde). Problém by ještě mohl nastat, pokud si nějaká třída uloží ukazatel, který nemá ukládat, tak jej GC neuklidí a bude nadále dostupný (de facto memory leak), ale s RAII by v tom případě nastal ještě horší problém (dangling pointer a možné nedefinované chování).
Vzhledem k tomu, že C++ neinicializuje member proměnné, tak opravdu k memory leaku dojít může, i když pravděpodobnější je zpožděná dealokace, další problém třeba std:vector, který si předalokuje více dat a inicializuje je až když jsou potřeba. Musel bys kód přepsat tak, aby všechny proměnné, byly vždy inicializované (což je určitě dobrý přístup, ale rozhodně není používaný všude a třeba u vectoru se podepíše na rychlosti). Stejně tak ti nepomůže když RAII objekt vytvoříš na haldě. GC_free zase rozbíjí sémantiku GC, protože musíš myslet na destrukci objektu. V GC jazycích se tohle řeší blokem finally.
https://news.ycombinator.com/item?id=7824570
https://www.reddit.com/r/rust/comments/2og8xf/why_rust_started_rather_than_ada/
https://www.reddit.com/r/rust/comments/48vh1m/rust_vs_ada/
https://www.quora.com/Which-language-has-the-brightest-future-in-replacement-of-C-between-D-Go-and-Rust-And-Why/answer/Andrei-Alexandrescu
Protože Rust je typický zbytečný programovací jazyk, po kterém za pár let ani pes neštěkne. Byl vyvinut proto, že "chceme používat jen co si vymyslíme sami".
Možná by Mozilla udělala lépe, kdyby namísto vývoje krátkoštěkých operačních systémů a programovacích jazyků konečně udělala solidní browser.
Ada rozhodně Rust přežije. A proč nechce nikdo psát v Adě? Protože je v módním kursu nebezpečnost, tedy něco co je proti filozofii Ady. Browser nesmí nijak bránit vzdálenému webovému serveru dělat jakkoli nebezpečné akce, a pokud možno nesmí mít uživatel browseru kontrolu nad tím, že by detailně nastavil, které akce chce HTML5 a JavaScriptu povilit a které nikoli.
"Browser nesmí nijak bránit vzdálenému webovému serveru dělat jakkoli nebezpečné akce, a pokud možno nesmí mít uživatel browseru kontrolu nad tím, že by detailně nastavil, které akce chce HTML5 a JavaScriptu povilit a které nikoli."
jak to prosím souvisí s programovacím jazykem? to že nějací autoři browseru (většina je zmatlaná v C++ ne?) neumí do GUI přidat dialog s nastavením, je problém v designu aplikace a zvolený jazyk tomu nemůže nijak pomoci ani uškodit.
Souvisí to filozoficky. Pokud někdo myslí na bezpečnost, obvykle si vybírá jak programovací jazyky, tak architekturu programu, tak ovládání programu už od počátku s ohledem na bezpečnost.
Pokud někdo naopak dělá program jako trojského koně s co největšími schopnostmi co může remote server na vzdáleném klientovi provést - což je současný trend, pak si obvykle vybírá i podobné okolí a nástroje pro vývoj.
Dbát na bezpečnost je otravné.
Mimo téma tu (dle mého) "spravedlivě hřímáš" ty.
Ale zřejmě budeš chtít některou z těch svých ohnivých filipik doložit, pro mne začni třeba tím "Pokud někdo naopak dělá program jako trojského koně s co největšími schopnostmi co může remote server na vzdáleném klientovi provést - což je současný trend..."
Tak nejak mam z Tvych prispevku pocit, ze:
1. Nesnasis Mozillu z principu, zvlast po utoku na jejiho CEO (ktery take neschvaluju).
2. Mas ve zvyku delat zavery, ktere neodpovidaji rozsahu znalosti o konkretni situaci.
3. Branis se z principu zmene, protoze si myslis, ze vsechno uz tady bylo (a bylo to lepsi, nez co je ted).
Co se tyce Rustu:
Zbytecny jazyk - to by chtelo definovat. Rozhodne si docela dost lidi, kteri maji zazemi treba v Haskellu a zaroven by chteli nejaky predvidatelnejsi jazyk s praktickym zamerenim, Rust oblibilo. Ted je otazka, jestli se podari dobudovat infrastrukturu a udelat par velkych uspesnych referencnich aplikaci. Dokud nekdo nevymysli nejakou jeho nahradu, bude IMO Rust mit porad docela vyzivnou niku. A ne, Ada, Go, D ani Swift za jeho konkurenty nepovazuju.
Proč ne Ada? Je zavedená i praxí ověřená. Za menším rozšířením IMHO stojej dvě věci:
1. většina projektů ve skutečnosti nepotřebuje k vývoji tak buzerační jazyk, resp. architekti mají pocit, že nepotřebuje; trh ukazuje, že lidé se zkrátka obejdou bez takové robustnosti, jako vyžaduje pár klíčových projektů
2. Ada je velmi přísně hlídána, pokud jde o striktní dodržení standardu; k případným dodavatelům např. embedded kompilátorů vysílá jasný vzkaz: buď to implementujete přesně podle standardu, ani o chlup míň, ani o chlup víc (přičemž existuje, pokud vím, širší a užší varianta), s chováním přesně podle standardu, nebo to raději nedělejte vůbec, jinak s námi budete mít právní problémy
Za takové situace mi ale smysl Rustu také uniká. Budu-li chtít opravdu robustní nástroj, tak budu tak jako tak pokukovat po Adě. Nebudu-li, postačí mi staré, dobré C.
Mimochodem, také tu nějakou dobu vedle C koexistoval PL/M než zmizel. A taky Oberon, který se neujal. Přitom oba posledně jmenované byly navrhovány s podobnými cíli jako Rust, i když samozřejmě o 30-40 let dříve. Jenže to očividně nestačí. Jak už tu padlo, nepřinášejí takové benefity, aby se vyplatilo v nich vyvíjet na úkor C.
Ten "hype" okolo nových jazyků pochází obvykle od lidí, kteří jen neznají historii.
Java je multiplatformní a zastřešená silnými korporacemi. To je důvod její popularity.
C# je zastřešen silnou korporací. To je jediný důvod, proč se používá. Bez toho zmizí.
Objective C - dtto; ovšem v porovnání s výše jmenovanými je IMHO nejlépe navržen.
Python přinesl něco, co tu do té doby nebylo. Praktickým vývojářům přinesl spoustu věcí ze spíše akademického prostředí, navíc velmi stravitelnou formou. Nezopakuje-li se podobná situace, jako problém V2/V3, bude se používat i nadále a nadále poroste.
C/C++ tu prostě jsou. Silné, uspokojivě vyhovující pro "běžnou programátořinu", nepotřebující žádné korporátní podpory, etablované, prověřené, známé svými výhodami i neduhy, se silným ekosystémem i množstvím vývojářů. Není důvod od nich odcházet.
Fortran je specifický nástroj, prověřený, stáhl se na doménu, kterou umí nejlépe a v níž nemá konkurenta. Po faceliftech F90/95 a F20xx není důvod, proč od něho v zavedených oblastech odcházet - nabízí všechno, co člověk k práci, k níž byl určen, potřebuje, plus neuvěřitelné množství desítkami let odladěných knihoven. Přežije.
COBOL dtto.
Pokud by někdo chtěl konkurovat výše zmíněným, musel by přijít s nějakými naprosto killer features nebo mít silnou korporátní podporu. Jinak IMHO není šance. Všechno ostatní jsou spíše okrajové záležitosti a také jimi navždy zůstanou, pokud tedy dříve či později definitivně nezmizej. Včetně Ady, Lispu, Erlangu, Haskellu, Perlu, Clojure, Luy, Forthu, Smalltalku, Ruby, D, J, Go, Pascalu, Basicu, Rebolu a já nevím, čeho všeho ještě. Podstatné ale je, že tu jsou a pokud někdo má tak specifický problém, že se na něj některý z těch specifických nástrojů hodí, má ho už dávno k dispozici.
No a odpovedel sis sam. Jestlize existuji nejake pravni dusledky, kdyz si Adu trochu "priohnu" nebo "zapomenu", jenom uplny blazen by v dnesni "startupove" dobe "pokukoval" po takovem jazyku, kdyz si komunita muze udelat novy jazyk, nezatizeny rozhodnutimi nejake komise z 80. let zabetonovane mentalne v Algolu a Pascalu. Jestli Rust prezije nebo ne, neni uplne podstatne. Podstatne je, ze je vysledkem procesu vyvoje programovacich jazyku. Pokukovat po Ade proste uz nikdo nebude, jdeme dal. Cecko v jeho (retardovane) jednoduchosti fakt asi naplno nikdy nic nenahradi, ale to neznamena, ze neni duvod od nej odchazet. C++ resit snad ani nebudu.
Pokukoval bych po něm jakožto vývojář, který v něm chce dělat projekt. Ne jako vývojář, který chce psát překladač Ady pro nějakou novou platformu. Ona ta robustnost znamená i to, že taky samotný překladač funguje deterministicky a obsahuje minimum "implementation specific features", jimiž se standard C jen hemží. Takže chápu ty striktní požadavky. U kritického SW je to ale nezbytné. Pokud nejsou, řeší se to dodatečně různými MISRAmi, Sonarquby apod., ale ani s těmi to není žádná hitparáda robustnosti a bezpečnosti.
Pokukovat po Adě bude v nejbližší budoucnosti pořád někdo, přinejmenším kvůli tomu, že kritický SW několika významných amerických institucí a několika soukromých společností, zabývajících se vývojem řídícího SW pro jaderná zařízení, se v ní píše stále. A kód pro ně připravují i subdodavatelé. Ostatně Ada se u nás, pokud vím, vyučovala např. na jaderné fakultě ČVUT.
Otázkou je, proč bych měl pokukovat po Rustu, když mi nenabízí nic, co bych už v nějaké podobě někde neměl k dispozici nyní. Buď chci retardovaně jednoduché C, a tedy nechci Rust, nebo chci něco lepšího - a tedy se táži, proč bych to měl hledat zrovna v Rustu, když už to bylo realizováno a praxí ověřeno jinde a nejspíš lépe.
Na to, proč v Rustu nebudu a ani nemohu hledat nástroj k vývoji robustních, kritických aplikací, sis také odpověděl sám - standardu Ady nikdy nedosáhne a ani takové ambice nemá.
Prostě pro ten jazyk nevidím žádné uplatnění. Samozřejmě je mi to fuk, že má někdo touho ho vymýšlet. Považuji to za takovou mánii. Spoustu lidí možná taková věc už někdy v životě napadla - vytvořit svůj vlastní programovací jazyk, aby ji nakonec nikdy nerealizovali a věnovali se něčemu užitečnějšímu. Čím více jste za život různých jazyků potkali, tím více vám připadá jako volovina vymýšlení dalších, které dohromady nepřicházejí vůbec s ničím novým. Nemohu si pomoci. To je jako by někdo v současnosti pojal nápad postupně nahradit angličtinu nějakým newspeakem, "jinou" angličtinou, jen s fonetickým pravopisem, bez nepravidelných sloves a s několika náhodně vybranými gramatickými jevy navíc, vypůjčených tu z románských, tu ze slovanských jazyků a řádně očesaných.
Esperanto se neda s vyvojem programovacich jazyku vubec srovnavat, protoze esperanto je coby umely jazyk dost ojedinely. Programovaci jazyky sou vsechny umely. Ale to co melo Esperanto nahradit byly vsechno evolucni jazyky plny vyjimek porusujicich pravidla, ktery samy o sobe sou casto nesmyslne slozity. Esperanto nema zadny vyjimky a je mnohem jednodussi nez jakejkoli jinej jazyk.
Kdyby se Esperanto rozsirilo znamenalo by to jednodussi uceni pro vsechny. Jenze narozdil od programovacich jazyku o rozsireni jazyku, kterymi se mluvi nerozhodujou osobni preference, ale politika (lide se uci jazyk vzdy aktualne nejsilnejsi velmoci).
Jednoduchost jazyka je dosti relativní pojem – a to jak přirozeného, tak umělého, neboť každý z nás nějaký jazyk už zná a učení se novému jazyku je tedy více či méně proces porovnávání s tím, co známe a co se z toho dá zužitkovat. Takže esperanto může být velmi snadné pro rodilého mluvčího z románskojazyčného prostředí, ale pro Čecha či Chorvata bude nejspíš podstatně snadnější zvládnutí např. novoslovanštiny, což je také umělý jazyk, ovšem pro Angličana či Fina srovnatelně náročný ke studiu jako latina.
U přirozeného jazyka je navíc jedním z důležitým faktorů také schopnost jazyka vyjadřovat různé nuance, tedy velikosti slovní zásoby a bohatství synonym, což dělá z esperanta pro praktické využití dost nepoužitelný výtvor (narozdíl např. od zmíněné novoslovanštiny).
Pokud jde o rozšíření programovacího jazyka, tak ta "politika", či spíše ekonomika, v tom také hraje roli: spíše se naučím jazyk, jenž má široké uplatnění a rozšíření, nežli nějakou obskurnost.
Jinými slovy – proč se učit esperanto, když angličtina poslouží lépe, proč Rust, když tu máme C, C++, Javu...
Ona ta latina je hodne soucasti temer vsech evropskych jazyku, proto ji mozna esperanto trochu pripomina, presto ze ho vytvoril Polak :). Samozrejme blizsi jazyk se clovek nauzi snaz, ale tady se bavime o jazyku kterej mel spojit svet. Ta jednoduchost je dana hlavne jednoduchosti gramatickych pravidel.
Kdyby se svet programovacich jazyku vyvijel stejne jako prirozeny jazyky, tak furt pisem v x86 assebleru...
Osobne nevidim duvod proc pouzivat Rust, ale kdyby se kazdej ridil takovymhle pravidlem, tak by nikdy Python, Java a ani C nevzniklo...
Jak už jsem jinde v této diskusi zmínil – Python nabídl kombinaci vlastností, která tu nebyla a praxe ukázala, že je žádoucí, Java za sebou měla silné korporátní prostředí a C se rozšířilo podobným mechanismem, jako se rozšířila latina z Itálie po Římské říši – spolu s územním rozmachem impéria, v tomto případě spolu s Unixem.
To přirovnání s assemblerem není zrovna moc trefné. Přirozené jazyky mají tendence se spíše zjednodušovat, protože se vyvinuly dříve než písmo, tudíž se přizpůsobily k snadnému pamatování a ústnímu podání, musely být tedy hutnější a k tomu je třeba komplexnější gramatika.
V každém případě k rozšíření nějakého jazyka je nezbytná potřeba se tím jazykem dorozumívat. Tím jsou všelijaká esperanta předem odsouzena. Navíc přílišná jednoduchost gramatiky není žádoucí. Příkladem může být angličtina. Chybějící manévrovací prostor v gramatice se pak spontánně nahrazuje idiomy, což je mnohem horší řešení.
Mimochodem, i taková polština, maďarština, ale do jisté míry i moderní čeština a slovenština jsou svým způsobem umělé jazyky, jejichž podoba byla dána národními obrozenci (maďarskými, polskými, českými, slovenskými) v 19. století.
Jednoduchost gramatiky je nutnost pro co nejvetsi rozsireni. I proto je anglictina nejpouzivanejsi jazyk na svete.
Narodni obrozenci se pouze poukouseli odstranit vliv ostatnich jazyku, ale jejich vliv byl minimalni a casove omezeny. To je typickej priklad evoluce, kde ruzne mutace bojuji o nadvladu, neni v tom nic umelyho. Je az zpodivem jak se cestina rychle vyviji i dnes. Co se clovek ucil pred 20 lety uz ve spouste pripadu neplati. Podobnou funkci korektora jako meli obrozenci dnes zastava Ustav pro jazyk cesky, ale i ten podleha evolucnim vlivum (dnes hlavne internet). A i pres jeho snahu se porad mluvi v kazdy casti nasi maly zeme dost jinak.
Je to uplne jednoduche. Na rozdil od anglictiny Adu skoro nikdo nepouziva. Tudiz vyvstane-li potreba mit nejaky "podobny" jazyk a vytvori se novy, kolem ktereho bude dostatecne hlasita, produktivni komunita, uspeje spis ten novy jazyk, nez stavajici, lec prakticky mrtvy, i kdyby byl snad ten mrtvy v necem lepsi - o tom si klidne lze zalozit samostatne diskusni tema, mohlo by to byt zajimave. Mozilla ma s C++ zkusenosti a tudiz vi, proc ho opousti, Java je v tomto kontextu dost spatny priklad; kdyby v ni bylo mozne napsat nejaky rozumny browser, uz by ho zrejme nekdo napsal.
Tudiz Rust ma proste sanci uspet a je uplne jedno, jestli si nekdo mysli, ze "to tady vsechno uz bylo".
Mozillu naprosto chápu s C++. Ten jazyk se totiž nehodí vůbec na nic, jen poskytuje možnost obrovskému množství lidí si naivně myslet, že programují objektově. Ale je, bohužel, značně rozšířen. I mě živí. Ale sám bych from scratch nikdy žádný nový projekt v C++ nerozjížděl. Z mnoha důvodů si myslím, že C++ každý projekt spíš prodraží a zkomplikuje oproti jiným variantám.
V Javě by prohlížeč jistě napsat šel. Že ho nikdo doposud nenapsal neznamená, že to nejde. Ale stále dokolečka: asi zatím nikdo neměl potřebu psát v Javě prohlížeč. Ani Javu nepovažuji za kdo ví jaký zázrak. Co si budeme nalhávat, byla zastaralá už v době uvedení. Ale stál za ní Sun. C# totéž v bledě modrém.
Rust je něco podobného jako C# nebo Java ve své době, jen s tím rozdílem, že za ním žádná významná korporace nestojí. A popravdě nechápu to nutkání lidí vyvíjejících prohlížeče a vyhledávače místo prohlížečů a vyhledávačů vyvíjet jazyky či OS, jež se navíc vyznačují tím, že jsou dokonale nezajímavé, nic nového nepřinášející a ani řemeslným provedením nijak nevyčnívají.
To, že každý, kdo má do zadku díru, cítí potřebu si vymyslet vlastní jazyk, považuji spíš za důkaz toho, že na něco takového nemá.
Ja osobne potrebu pro vznik jazyka dostatecne ceckoidniho, ale zaroven s dobrym typovym systemem, ktery umozni vyrazne lepsi kontrolu, ale i "domysleni" programu behem kompilace chapu. Osobne se mi libi typovy system Haskellu, ale Haskell jako takovy je pro bezne programovani dost neprakticky (vyzaduje prilis velkou zmenu mysleni, to muze i odvadet pozornost od reseneho programu). Jestli ale tato ocekavani Rust splnuje jeste nevim - jeste jsem si Rust nevyzkousel, ted se seznamuji s Go. (A Go se mi nelibi - pripada mi to jako programovaci jazyk "pro masy" za cenu nutnosti cut&paste programovani. (Tomu se da vyhnout pomoci interface{} a reflection, ale tim se zbavuji vetsiny vyhod kompilovaneho jazyka).)
Jelikož jsem nikdy nestál před problémem napsat prohlížeč, a tedy jsem ten problém neanalyzoval, tak nedokážu jen tak plácnout, který prostředek bych k tomu použil. Ale např. Objective C si k tomuto účelu dovedu představit velmi dobře, ale třeba i nějaký Lisp nebo i tu zmíněnou Javu.
No a někdo před tím už stál a zjistil, že bude dobré udělat nový jazyk, např. Rust nebo třeba Swift (když už, tak si umím představit ten Swift namísto Obj-C). Stejně tak si to někdo mohl lajsnout v OCamlu, kapacitu na to má. (BTW: První kompiler pro Rust byl v OCamlu). Dříve před podobnými problémy zase stáli jiní lidé a vznikla Ada. Rust nemá nahradit Adu ani Go, ale možná C a mnohem více C++, kterému se komplexností blíží, ale je mnohem lépe poskládaný.
No ale tady nejde prece "jenom" o jazyk. Jde i o to, ze mam nejake pozadavky na kompilator, ze vubec potrebuju nejaky kompilator. Chci delat multiplatformni browser, cim ho zkompiluju, kdyz chci pouzit Adu? Je to FOSS, tudiz se da predpokladat, ze komercni kompilator nepripada v uvahu. Mam pouzit GNAT? Co kdyz v necem nevyhovuje? Mam browser, ktery chci prepsat a ted mam jeste GNAT, ktery musim modifikovat. Umim to, smim to udelat? Pokud me core vyvojari do GNAT nepusti, co mam udelat, fork? Kdyz zjistim, ze s kompilatorem nepohnu, mam ho znovy prepsat (s celym standardem, aby me nekdo nezaloval - viz vyse v diskusi?) Kazdopadne je legracni, ze tu u zeleneho stolu resime teoreticke duvody lidi, kteri (snad) vedeli, co delaji.
Mimochodem, vzpominam si na jediny vetsi program napsany v Ocaml, ktery znam - MLDonkey. Byla to lina lemra, coz neznamena, ze kazdy program v Ocaml je lina lemra, ale pravdepodobne to ukazuje na to, ze ten jazyk svadi k neoptimalnim konstrukcim.
> Byla to lina lemra, coz neznamena, ze kazdy program v Ocaml je lina lemra, ale pravdepodobne to ukazuje na to, ze ten jazyk svadi k neoptimalnim konstrukcim.
Aplikace, jenž provádějí symbolické výpočty, tam celkem lehce napíšete efektivnější než třeba nad JVM nebo CLR.
Máte nějaké konkrétní důvody k tvrzení, že C++ se nehodí vůbec na nic a každý projekt prodraží a zkomplikuje? Co tedy považujete za plnohodnotnou náhradu C++? Také příliš nechápu, proč někdo místo řešení nedostatků existujícího jazyka (v tomto případě asi C++) radši vynaloží mnohem víc práce na vymýšlení nového jazyka (Java, C#, Rust, Go, D).
Problém C++ka není, že by tam něco chybělo, ale že je tam toho hodně - že je to relativně komplikovaný jazyk, s komplikovaným prostředím (STL, Boost). Proto, aby se v něm psalo slušně, potřebujete hodně zkušeností.
Udělat jakékoliv trochu větší než malé změny v existujícím jazyku je hodně obtížné. Odebrání některých fíčur je téměř vyloučené - což je důvod pro pokus o vytvoření vlastního jazyka. Java, C# přidávaly funkce, které pro C++ nebyly dosažitelné (tak, aby byly jednoduše použitelné), a navíc v době, kdy vznikaly se jednalo o relativně jednoduché a bezpečné jazyky s rozumně velkými konzistentními knihovnami.
To máš trošku podobné, jako když pracuješ ve velké firmě, která už nefunguje efektivně, má složité procesy, vysokou pyramidu vedení apod. - taky jsou tady dvě možnosti, buď se to snažit změnit/vylepšit, nebo začít na zelené louce.
C++ je v tomto stavu - udržuje ho konsorcium, kde cílem lidí je pořád něco přidávat, protože "to je vidět", mít konference, prezentace, psát obrovské bichle o tom jazyku (mnohdy JEN o tom jazyku, to je děsivé).
A vite vubec proc se Java jmenuje, tak jak se jmenuje? Javanstina, je vice mene mrtvy jazyk, kterym uz se nemluvi. Na Jave a uvec v cele Indonesii meli problem, ze kazda vesnice mela vlastni jazyk a nebyli se schopni mezi sebou domluvit. Proto vznikla Indonezstina, jednoduchy umely jazyk, ktery absorboval vlastnosti ostatnich jazyku a ktery se rozsiril po celem state. Tento projekt byl narozdil od Esperanta uspesny.
Mne na Rustu (a taky Scale a Clojure) vadi jedina vec - zda se mi, ze nemaji jasno v tom, jestli chteji byt:
a) Experimentalni platformou pro vyvoj a testovani novych vlastnosti programovacich jazyku.
b) Prakticky pouzitelnym a tedy stabilnim jazykem, s rozumne navrzenou knihovnou.
Oboji totiz tak docela nejde. To prvni vyzaduje smirit se s tim, ze ten jazyk asi nebude uplne popularni. To druhe vyzaduje znacnou davku konzervativnosti, a v lidske povaze je vymyslet si inovace.
IMHO Python a Java spada jednoznacne do te kategorie B. Staci se podivat na jejich prvni implementaci, ta byla znacne konzervativni. I dalsi vlastnosti, ktere postupne prijimaly, byly vetsinou uz dostupne v jinych jazycich, a neslo o primocary proces.
Ja nemam nic proti pridavani novych vlastnosti, ale melo by se tak dit s rozvahou, a pokud jsou pochybnosti, tak to nedelat.
U Rustu a Scaly proste te rozvahy moc nevidim, oba jazyky zacaly s explicitnim cilem, ktery je uz z podstaty veci experimentem.
Na druhou stranu, treba D a Go IMHO take spadaji do te konzervativni kategorie.
Podle mne Rustu jde jednoznačně o 2, ale ten jazyk prostě vyžaduje hodně 1. Spoustu experimentů už mají za sebou, spoustu dalších ještě před sebou (memory model, non-lexical lifetimes, HKT atd.). Jak moc se ty nadcházející experimenty podepíší na kompatibilitě je otázka...
To uz myslim trochu prehanis. Python i Javu jsi zaradil mezi "stabilni" a to i presto, ze oba jazyky udelaly nekompatibilni zmeny (Python jich delal vic a prechod z Py2 na Py3 je jenom nejkriklavejsi pripad).
U Rustu si prave dovedu predstavit a myslim, ze to je i plan, ze se bude usazovat postupne a casem se bude menit minimalne. On je experimentalni v tom, ze se snazi jit cestami, ktere mainstream zatim nezkousel, to ale neznamena, ze "zustane experimentalni". No a knihovny se samozrejme vyvijeji za pochodu. Rust, jak to vypada, nepujde cestou "batteries included", ale bude se vyvijet cestou "de facto" standardnich knihoven. Jinymi slovy, Rust je zatim spis pro early adopters a Mozillu, ale casem se muze prosadit sireji a logicky se i diky tomu pripadne bude stabilizovat.
Mimochodem, asi jsi zaznamenal, ze u Scaly i Haskellu existuji snahy oslovit tu "stabilni" klientelu (Stackage + Stack, Typesafe-Lightbend), u Clojure nevim...
Clojure za posledních několik let snad žádné nekompatibilní změny v jazyce nepřineslo, ale ono je to dáno tím, že lispovské jazyky mají naprosto minimální syntaxi. Došlo k rozšíření knihoven, ale to není celkem problém. Zdá se, že do základů jazyka i do std. knihoven se už nikomu moc hrabat nechce, možná je už na některé změny i pozdě (ale to platí i pro Python a Javu, Java tím asi trpí víc, přece jen s námi už je nějaký ten pátek :-)
U Rustu to vypadá tak, že verzi 1.0 pojali skutečně jako verzi 1.0, tj. stabilizace jazyka i knihoven, což je fajn.
Nejde ani to o stabilitu samotneho jazyka, kazdy jazyk obcas takove zmeny dela, to je realita (treba v Pythonu 3 bylo nejvic problemu kvuli Unicode). Muzes se na to podivat i obracene, ty zmeny jsou potreba i u jazyku, ktere se snazi byt konzervativni.
Jde spis o to, aby se tam nepridala nejaka vlastnost, a pak se nezjistilo, ze jde opravdu o tezke slapnuti vedle (ktere bude pak slozite napravit bez zpetne kompatibility). Nemusi to nutne byt tak, ze ta samotna nova vlastnost bude spatna, ale treba bude spatna jeji interakce s ostatnimi vlastnostmi. Proto je lepsi soustredit se na vlastnosti, ktere uz jsou nejakou dobu vyzkousene.
Navic, zda se mi, ze lide spis prijimaji jazyk, ktery je uz castecne znamy, treba mnohem vic Scalu nez Haskell (i kdyz by si to zaslouzil IMHO vic). Ale Haskell byl explicitne experimentalni, a i pres jeho moznou stabilizaci do budoucna (ktera zatim nenastala) je stale dost velka kontroverze ohledne lineho vyhodnocovani.
Navic, zda se mi, ze lide spis prijimaji jazyk, ktery je uz castecne znamy, treba mnohem vic Scalu nez Haskell
Myslím, že Haskell je známý celkem dost - jako obskurní jazyk, v němž nejde programovat praktické aplikace (což je v podstatě zasloužené, neboť techniky, které se v Haskellu rozšířily, mají podstatné vady).
Rust ale experimentální není, prostě už funguje. Experimentální byl do verze 1.0. Zkus si přepsat něco z Pythonu do Rustu, zkompilovat a spustit to na 3 běžných typech OS. Zdroják je pěkný jako u toho Pythonu, ale neskutečně lépe se nasazuje, což platí třeba nejvíc pro Widle. Dal bych šanci i Swiftu, ale pro ně je bude každý další OS vždycky na vedlejší koleji. Dropbox už nějakou dobu nasazuje Rust a je to právě původě Python startup.
Jj souhlas, pokud je nějaká vlastnost (syntaktická konstrukce, Tebou zmíněné řetězcové literály atd.) v jazyku už dlouho a nehodí se, je asi skoro nemožné to změnit. Python si to kupodivu dovolil, ale například v Javě (kde mám par adeptů na změnu od základu :-) si to nikdo dovolit nemůže (a podle "rychlosti" vývoje ani nechce).
Ano jsou to dve nova klicova slova, strictfp asi nikomu nevadilo, ale enum uz par aplikaci rozbilo (jsme to resili pri prepnuti default Javy na 5 v par Apachich! projektech). Jasne, opravit to jde asi za pet minut vcetne spusteni IDE :-)
Trosku problematictejsi byly zmeny v Jave 7 v API. Vzpominam na upravy docela velkeho mnozstvi OS aplikaci kvuli zmenam v JDBC API (pridane hlavicky metod do interface).
Jako jo, nějaké source-level nekompatibilní zde byly, ale co si vzpomínám, nová klíčová slova se vnímají spíše jako chyba, než něco, co by se mělo opakovat.
JDBC je druhá věc, ale tady si myslím, že ve většině případů to nemusí být velký pain. Staré knihovny lze na nové Javě používat (ne však zkompilovat), dokud nepotřebuju používat přidané metody.
Pointa – Java je v tomto směru docela konzervativní. Další přidávání keywords bych teď nečekal, změny rozhraní spíše s omezeným dopadem. (Navíc od Javy 8 existují default methods, které by toto mohly vyřešit elegantněji.)
Oproti Pythonu má Java ještě jednu vyhodu: Když dojde k source-level incompatibility, dá se stejně stará binárka použít. To je podstatné třeba u knihoven.
V případě Scaly je to celkem jasné. Experimentální platforma to byla snad kdysi, ale posledních pár let je konzervativních, a stojí za tím firma Lightbend (dříve Typesafe), která asi nemá zájem na vyloženě experimentální platformě. Scala navíc má svoje pískoviště pro experimenty – Dotty. Experimenty dnes probíhají v Dotty a do Scaly se dostávají hotové věci.