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 :-)