Je Rust jazyk budoucnosti?

Re:Je Rust jazyk budoucnosti?
« Odpověď #240 kdy: 04. 12. 2022, 23:14:19 »
"Tvrzení, že na začátku bylo mlaskání a krkání je tvrzení založené na tom, že to tak přece muselo být." Tak letmý pohled na naše příbuzné by tomu napovídal. Mluvidla se zřejmě vyvíjel společně s řečí. Krkáním bych to tedy nenazval, ale zvukový repertoár se jistě obohacoval. Co myslíte tím "nestarší jazyk Egyptštinu..."?


Re:Je Rust jazyk budoucnosti?
« Odpověď #241 kdy: 04. 12. 2022, 23:17:05 »
Před 10 tisíci lety, to je zemědělství a sídlištní kultury, takže určitě žádné mlaskání a hekání  ;)

 V milionech to skoro trefil. Evoluční biologie na škole byla? U nás i paleontologie (VŠ) :D

Re:Je Rust jazyk budoucnosti?
« Odpověď #242 kdy: 05. 12. 2022, 01:01:36 »
Muj pocit neni nejake ohrozeni, popravde mi je jedno ze lide pouzivaji Rust, C#, Go, Javu, PHP, Python, atd. Jen mne opravdu nebavi resit problemy, ktere mi jini lide takto prinaseji do zivota.
A co s tim máme dělat? Ano, Rust ti přinese pravděpodobně dříve či později nějakým způsobem problémy. To ale dělá každý jazyk a nedá se s tim nic moc dělat. Nezlob se, ale je tvůj problém se nějak vyrovnat s faktem, že ostatní lidi nechtějí a nebudou používat pouze C99 na věčné časy a nikdy jinak.

Abych odpověděl na tvou předchozí otázku, Rust se aktuálně používá např. ve Firefoxu (CSS 'Quantum' engine) a používá ho několik významných firem pro backendové účely - Amazon, Dropbox, IIRC taky Facebook do nějaké míry. Používá ho taky Microsoft ale TBH nevim na co.

Re:Je Rust jazyk budoucnosti?
« Odpověď #243 kdy: 05. 12. 2022, 01:18:23 »
U GADT je to zajímavější, umožní mi mít například toto:
Kód: [Vybrat]
data Vect : (len : Nat) -> (elem : Type) -> Type where
  Nil  : Vect Z elem
  (::) : (x : elem) -> (xs : Vect len elem) -> Vect (S len) elem
Podobně se dají udělat matice s dimenzí na úrovni typů. Navíc ty dimenze nemusí být známy v době překladu, klidně se můžou načíst ze vstupu/souboru. Tohle bez GADT nejde. Porovnání s C++, Javou nebo Rustem prostě je, že v těchto jazycích dimenze staticky ověřovat nejde (například při skalárním součinu nebo násobení matic).
Počkat, staticky ověřovat dimenzi snad v C++ (a Rustu) jde, pomocí skalárních typových argumentů (v Rustu "const generics", stále dosti experimentální fíčura, ale to je principielně jedno). Čiliže pro demonstraci GADTs to asi bude chtít nějaký složitější příklad.

Přiznám se, že tyhle komentáře mě poněkud iritují - když chci porovnávat typové systémy nějakých jazyků nebo o nich prohlašovat, že jsou 'primitivní' nebo podobně, tak by to asi chtělo ty dané jazyky také trochu znát...

Re:Je Rust jazyk budoucnosti?
« Odpověď #244 kdy: 05. 12. 2022, 01:29:50 »
Muzete mi dat priklad toho rozsireni C o memory safe reseni ?
Třeba jazyk Cyclone. Velmi obskurní dialekt Céčka. Rust se tímto jazykem/dialektem docela hodně inspiroval.

Proč Rust není pouze rozšížení Céčka? Protože by to nepřinášelo žádnou moc reálnou výhodu, byla by to pouze zybtečná komplexita a zátěž navíc. Stejně bys potřeboval kompilátor na ta rozšíření. Nijak významně by to nepomohlo ani s FFI, protože největší problém při FFI je návrh bezpečné a zároveň ergonomické abstrakce v Rustu, což by v případě rozšíření jazyka platilo úplně stejně.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #245 kdy: 05. 12. 2022, 02:41:09 »
Počkat, staticky ověřovat dimenzi snad v C++ (a Rustu) jde, pomocí skalárních typových argumentů (v Rustu "const generics", stále dosti experimentální fíčura, ale to je principielně jedno).
Const generics vyžadují hodnotu známou v době překladu (pro méně nechápavé to mají přímo v názvu). Jazyky se silnějšími typovými systémy toto omezení nemají (silnější = méně primitivní, ovšem jde to vyjádřit i matematicky, zná-li člověk formální aparát).

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #246 kdy: 05. 12. 2022, 02:48:51 »
Přiznám se, že tyhle komentáře mě poněkud iritují
To je tvůj problém. Hierarchie sofistikovaných typových systémů (pořadí podle formální síly) je “no sophistication < HKT < GADT < DP”. Rust nemá ani HKT, je v té hierarchii úplně vlevo (ta hierarchie by se dala zjemnit, třeba Julia má sice silnější typový systém než Rust, ale plnohodnotné HKT taky nemá).

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #247 kdy: 05. 12. 2022, 03:07:30 »
určitě žádné mlaskání
Mlaskat klidně mohli, v Africe se mlaská dodnes (viz lingvistický pojem “mlaskavka”) :) Koho současné poznání vývoje lidských jazyků zajímá, může si přečíst něco od Dietera Wunderlicha nebo Jerryho Hobbse, ti to popisují srozumitelně i pro laiky. Podle Chomského k vývoji dnešního typu jazyka došlo před 70000-100000 lety a od té doby se jazykový systém nezměnil (mění se slovní zásoba a tvarosloví, ne strukturní principy), to je ale jen jedna z hypotéz.

oss

  • ***
  • 229
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #248 kdy: 05. 12. 2022, 08:53:58 »
Přiznám se, že tyhle komentáře mě poněkud iritují - když chci porovnávat typové systémy nějakých jazyků nebo o nich prohlašovat, že jsou 'primitivní' nebo podobně, tak by to asi chtělo ty dané jazyky také trochu znát...

Casto je to len o egu, nie o praktickych dosledkoch. Keby mali tie super jazyky take super vyhody ako sa hovori, tak ich uz pouzivame vsade?

Re:Je Rust jazyk budoucnosti?
« Odpověď #249 kdy: 05. 12. 2022, 11:07:41 »
Počkat, staticky ověřovat dimenzi snad v C++ (a Rustu) jde, pomocí skalárních typových argumentů (v Rustu "const generics", stále dosti experimentální fíčura, ale to je principielně jedno).
Const generics vyžadují hodnotu známou v době překladu (pro méně nechápavé to mají přímo v názvu). Jazyky se silnějšími typovými systémy toto omezení nemají (silnější = méně primitivní, ovšem jde to vyjádřit i matematicky, zná-li člověk formální aparát).
Ano, proto jsem psal staticky ověřovat. Co se týče te dynamické stránky, jazyky jako Rust nebo C++ tohle mít nemůžou nejen kvůli omezeném typového systému, ale především proto, že to vyžaduje poměrně silný runtime. Rust tohle řeší pomocí DSTs, což je způsob, jak to udělat s tenkým runtime.

To je tvůj problém. Hierarchie sofistikovaných typových systémů (pořadí podle formální síly) je “no sophistication < HKT < GADT < DP”. Rust nemá ani HKT, je v té hierarchii úplně vlevo (ta hierarchie by se dala zjemnit, třeba Julia má sice silnější typový systém než Rust, ale plnohodnotné HKT taky nemá).
To je ale pouze jeden poměrně specifický způsob jak posuzovat "sofistikovanost" a nikde není psáno, že právě tohle je ten jediný správný. Z mého pohledu typový systém Haskellu (apod.) je méně sofistikovaný, protože má horší poměr abstrakce / (výkon + korektnost) - používá komplexnější abstrakce, ale nedokáže s nimi doručit lepší vlastnosti než Rust. Navrhnout abstrakce a typový systém tak, aby poskytoval korektnost a zároveň byl výkonově transparentní, je o dost těžší než udělat to s GC a runtimem (ie. výsledek je nutně nějakým způsobem sofistikovanější).

Proto jsem zmiňoval ten borrowing, což je jedna z fíčur, díky které je tohle možné. Jsem zvyklý, že typoví teoretici si Rust ještě úplně nedokázali zaškatulkovat, ale že někdo úplně popře, že by borrowing byl fíčura typového systému, to je jinej level :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #250 kdy: 05. 12. 2022, 11:14:56 »
Ano, proto jsem psal staticky ověřovat. Co se týče te dynamické stránky, jazyky jako Rust nebo C++ tohle mít nemůžou
Pleteš si pojmy. Staticky znamená v době překladu. Ten příklad s Vect se taky ověřuje v době překladu, ale ten typový parametr pro délku vektoru nemusí být v době překladu znám. Rust a C++ pro to nemají formální prostředky, ale jiné jazyky to prostě umí (a nemusí mít GC ani runtime, to s tím vůbec nesouvisí).

A ještě jednou pro ty pomalejší, borrowing ani GC nijak nesouvisí s typovým systémem.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #251 kdy: 05. 12. 2022, 11:32:48 »
Já třeba hodně zhruba rozumím té syntaxi, kterou jsi použil, protože třeba Haskel, nebo OCaml cca znám. […] Já tě jinak chci vyprovokovat, třeba něco napsat :-)
Myslím, že kdysi jsme se bavili o pokročilých typech na příkladu definice sudosti na úrovni typů. Ten příslušný typ “IsEven” je vlastně taky GADT, klidně to můžeme rozebrat znova z tohoto úhlu, jestli si myslíš, že to bude pro tebe přínosné. Akorát to nebudu psát z mobilu, to je vopruz :-\ takže spíš až večer.

Re:Je Rust jazyk budoucnosti?
« Odpověď #252 kdy: 05. 12. 2022, 11:54:25 »
Pleteš si pojmy. Staticky znamená v době překladu. Ten příklad s Vect se taky ověřuje v době překladu, ale ten typový parametr pro délku vektoru nemusí být v době překladu znám. Rust a C++ pro to nemají formální prostředky, ale jiné jazyky to prostě umí (a nemusí mít GC ani runtime, to s tím vůbec nesouvisí).
Ne, nepletu, ano, přesně takhle jsem to myslel.

S runtimem i GC to souvisí, protože aby tvůj příklad fungoval, musí runtime jazyka být schopen za běhu instanciovat generický typ, vytvořit hodnotu takovéhu typu, dispatchovat na ní operace a nakonec být schopen tu hodnotu zase uvolnit. Něco takového vytvořit pro C++ a Rust je úplně jiná káva než v managed jazyku, to už by bylo mnohem jednodušší to udělat v Javě (koneckonců, odtud Scala).

A ještě jednou pro ty pomalejší, borrowing ani GC nijak nesouvisí s typovým systémem.
WTF? Borrowing v Rustu je implementován typovým systémem. Nebo jak si myslíš, že to funguje? Co přesně ti není jasné na tom, že fn foo(bar: &Bar) je syntax sugar pro generickou funkci foo<'a>(bar: &'a Bar) , kde 'a je typový parametr?

EDIT: Ještě jinak. V následujícím kódu
Kód: [Vybrat]
struct Foo<'a>(&'a str);

fn main() {
    let text = String::from("hello");

    let foo1 = Foo("hello");
    let foo2 = Foo(text.as_str());
}
jsou foo1 a foo2 hodnoty různých typů. Typ foo1 je subtype typu foo2.
« Poslední změna: 05. 12. 2022, 11:59:30 od Králík »

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #253 kdy: 05. 12. 2022, 12:21:20 »
S runtimem i GC to souvisí, protože aby tvůj příklad fungoval, musí runtime jazyka být schopen za běhu instanciovat generický typ, vytvořit hodnotu takovéhu typu, dispatchovat na ní operace a nakonec být schopen tu hodnotu zase uvolnit.
To není pravda, kontrola toho typového parametru pro délku se provádí při překladu a pak se provede type erasure, v době běhu programu tam ten typový parametr vůbec není. Například Idris nebo Lean umí transpilaci do C, kde není runtime pro typy ani GC, veškerou kontrolu oddře překladač a když usoudí, že je kód typově správně, vyplivne výstup bez typových parametrů, ty právě slouží pouze ke statické kontrole.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #254 kdy: 05. 12. 2022, 12:23:38 »
Borrowing v Rustu je implementován typovým systémem.
Není. Borrow checker provádí trochu chytřejší escape analýzu, kterážto je naprosto ortogonální k typům (ostatně mají ji i dynamické jazyky, které typy při překladu vůbec neřeší).