Článek super, nicméně mi není úplně jasné jaký je rozdíl mezi copy a clone trait.
- Proč copy by default nepritáhne i clone trait? Jsou tedy případy, kdy použiji copy bez clone?
Btw rys je IMHO dobrý překlad, nicméně některé věci je lepší nepřekládat - je pak snazší připojit si termíny s oficiální dokumentaci.
No pisou to tady, ale popravde...zmatek v tom muze byt:
https://doc.rust-lang.org/std/clone/trait.Clone.html
eh ne, chtel jsem jeste poslat toto:
https://doc.rust-lang.org/std/marker/trait.Copy.html#whats-the-difference-between-copy-and-clone
Ja to chapu tak, ze napriklad vektory nebo stringy jsou vlastne dve oblasti pameti - objekt + data. A copy kopiruje jen ten prvni objekt, ktery by ukazoval porad na puvodni data. Clone toto musi resit explicitne.
Já to chápu tak, že Clone je uživatelem definovaná kopírovací funkce, zatímco Copy je bitová kopie ( memcpy).
Vsak prave, pri memcpy si zkopirujes i odkazy na heap, tj. budou se sdilet stejna data (shallow copy)
Pokud vím, tak Copy implementují jen "čistě" hodnotové typy. Typy, u kterých by bitová kopie vedla na kopírování ukazatelů, právě proto Copy neimplementují. Třeba ty řetězce a vektory.
kdyz jsem se naposled dival na Rust (a uz je to nejaka doba), tak tam nesel bez "unsafe" vytvorit ani oboustranny spojovy seznam. Plati tohle stale? Ona ta prace s pameti a s vlastnictvim objektu tam na prvni pohled vypada hrozne pekne, ale jestli je to takhle omezujici...
Takze v Rustu neni mozne udelat typickou stredoskolskou ulohu pro zacinajici programatory v Pascalu? To je na prvni pohled smutne, ale neznam moc lidi, kteri by neco takoveho skutecne potrebovali rutinne delat.
V podstate jsou tri moznosti, jak to resit:
1) povolit pointery a do znacne miry se vzdat dalsich vychod (Rust a unsafe, klasicke C, Pascal)
2) umoznit tvorbu referenci cehokoli na cokoli a resit potom Gc se vsemi dusledky (Java)
3) off by one error :)
Je také dobré napsat, že za to něco dostanu. Protože na jedno místo v paměti nemůžou současně ukazovat dva pointery (což je ten důvod, proč nejde v Rustu snadno udělat double linked list), jsou všechny přístupy přes pointer concurrency safe, nemůže se stát, že s jedním objektem pracují současně dva thready. To mi přijde jako hodně dobrý benefit.
To ses koukal před verzí 1.0? (trochu přes rok nazpět) Lze to vklidu řešit přes Rc (nebo Arc pro sdílení mezi vlákny).
Jenže rychlostně tohle řešení může být o dost horší než GC.
Arc jo ve chvili, kdy mas namisto nej moznost pouzit thread-local oblast, treba TLB
Nepride mi najstastnejsie, nevediet vycitat zo zapisu:
let mut c2 = c1;
ci je to semanticky move/copy/clone.
To je skutecne pravda, ale to nezjistis napriklad ani v C, C++ nebo Jave. Mozna by pomohlo si tam ten typ explicitne dopsat, potom je jasne, kam se ma clovek divat (a kdyby to navic zvyraznilo IDE..... ale tak daleko Rust jeste neni):
let mut c2:Complex = c1;
Akurat som si prezeral tie IDE, a zatial nie je.. Idem skusit Visual Studio Code (debugger support),
Microsoft IDEcka vie, som zvedavy ako sa podarilo toto.
Kazdopadne tebe som vdacny za tvoje serialy a tento obzvlast.
Musim sa posunut na Swift (zacina to byt stabilne) a tak pozeram kde sa pani z Apple inspirovali :)
Zatím nevidím ani jeden duvod ztracet s rustem čas.
Na embedded věci bude vzdy ccko. Na ten zbytek javy a podobný srandy.
Rust je něco jako clojure. Taky k hovnu.
Skvělý argument. A dokonce ho můžu použít univerzálně proti jakémukoliv jazyku chci. Místo cčka můžu dosadit assembler, místo javy třeba cobol nebo fortran. A už nemusím vidět důvod ztrácet čas třeba s cčkem nebo s javou. ;) Rozdíl je jenom ten, že u cčka a javy už víme, že se ujaly. U Rustu to zatím není jasné.
Rust se neujme :D
Jinak tvůj argument je mimo. Hodně.
Java ma proti asm dost jasnych vyhod v jeji oblasti.
Rust nemá ve sve oblasti vyhodu zadnou.
Krom zoufale snahy vypadat strašně chytre.
I go ma vic sanci. To aspoň ma nějaké plus oproti ostatnim.
sice Tiobe zase tak moc neverim, ale je zajimavy, jak jim C v poslednim mereni droplo
http://www.tiobe.com/tiobe-index/
(netusim proc, prece stavajici projekty asi nikdo neprepisuje, ale podobny drop je videt i na OpenHubu (pritom roste assembler, takze embedded a C asi neni jediny reseni)
Vždycky se chodím odreagovat do diskusí na rootu. Je fascinující občas nahlédnout do místnosti plné autistů, kteří sedí každý ve svém koutě, kývou se do rytmu sebestimulace a proplouvají svým vnitřním vesmírem ve kterém jsou všichni úplně blbí, společnost zdegenerovaná, praví programátoři už neexistují, rust a clojure jsou k ho*nu a iphone se nikdy neuchytí.