Je Rust jazyk budoucnosti?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #450 kdy: 22. 12. 2022, 22:54:14 »
Když už, tak se spíš teď mudruje nad efekty, resp. specificky control-flow efekty, kvůli error handlingu, generátorům, async streamům apod. Opět ale nečekej nějaký těžce obecný systém, pravděpodobně by to přinejlepším byl opět nějaký subset, se zaměřením na zero-costness, ergnomii a nepříliš strmou učící křivku spíš než krásy typových systémů.
V této souvislosti mě ještě napadá, k čemu je ve většině případů Rust, když stejně rychlý kód generuje i třeba (plně dynamický) Chez Scheme? Jasně, ten má TGC, ale to je jediný podstatný rozdíl. Ještě lepší příklad je Julia, taky používá LLVM, obchází GC (neměnitelné struktury) a efektivitou šlape na paty Rustu. Je skutečně celý ten cirkus okolo borrow checkeru potřeba? (Je to víceméně rétorická otázka, ale stejně, ve kterých případech je Rust jediná správná volba?)


Re:Je Rust jazyk budoucnosti?
« Odpověď #451 kdy: 23. 12. 2022, 00:01:26 »
P.S. BTW zajímalo by mne, zda by šlo v Rustu nějak zprovoznit toto: https://ericniebler.com/2013/07/16/f-algebras-and-c/  :)
Čistě typovým systémem by to drhlo, v Rustu neuděláš ekvivalent template<template<typename> class F>
struct Fix

Jasně, to je právě HKT. Tak ale možná přes GAT?
GATs by asi implementaci usnadnily, ale stále nevidim způsob, jak naimplementovat traitu (nebo 'něco') pro jakejkoli unární typovej konstruktor...

Jo a taky lepší podpora self-referential types - to by Rustu pomohlo víc než jakékoli další FP featury...
Nejsou tohle náhodou induktivní typy?
Ne ne, to je o pointerech/referencích. Self-referential struktura v tomhle smyslu je třeba struktura A, která obsahuje referenci sama na sebe (což může být způsobeno i obsaženými typy, třeba A obsahuje B a C, B obsahuje referenci do C). Tohle interferuje s move semantics - ve chvíli, kdy ty data přemístíš, pointer přestane být platný. Aktuálně se to řeší Pinem (wrapper typ ve standardní knihovně, který zamezuje move), ale je to celkem ošklivý hack.

Jo, vim co jsou dependent types. U Rustu postup směrem k něčemu takovému nebo k HKTs moc nečekej, přeci jen, je to jazyk určený pro reálný, praktický engineering
Jasně, to je fajn, Rust je poměrně low level, má svou upřednostňovanou oblast nasazení, ale když už má třeba GAT, což je docela šílenost, tak k lepšímu typovému systému je už jen malý krůček. Například Lean se překládá do C++, proč by se nemohl překládat do Rustu?
GATs byly přidány hlavně z toho důvodu, že to je potřeba pro podporu async funkcí v traitách. (Sekundárně to pomůže např. s implementací některých iterátorů,...). Pro další/pokročilejší typové featury by musel být podobně silný důvod.

Lean neznám, ale pokud se může překládat do C++, tak by to asi do Rustu mělo jít taky...

V této souvislosti mě ještě napadá, k čemu je ve většině případů Rust, když stejně rychlý kód generuje i třeba (plně dynamický) Chez Scheme? Jasně, ten má TGC, ale to je jediný podstatný rozdíl. Ještě lepší příklad je Julia, taky používá LLVM, obchází GC (neměnitelné struktury) a efektivitou šlape na paty Rustu. Je skutečně celý ten cirkus okolo borrow checkeru potřeba? (Je to víceméně rétorická otázka, ale stejně, ve kterých případech je Rust jediná správná volba?)
No, tak zaprvé jsem k těm tvrzením skeptický. Podobná tvrzení, že high-level jazyk XY už "šlape na paty C++" (nebo v poslední době Rustu) se objevují pravidelně už desítky let. Často to je na základně specifických případů nebo benchmarků, které dobře sedí na optimalizační schopnosti daného jazyka.

Další věc je, že borrowck/lifetimes jde celkem dobře dohromady s C FFI. Céčkové API často obsahuje např. funkce, které vrací nějaký pointer na data pro nějaký handle (=nějaký opaque pointer na nějaký resource) a v dokumentaci se píše něco jako "pointer vrácený z této funkce je platný stejně dlouho jako handle" ... tyhle situace mapují v podstatě 1:1 na lifetimes v Rustu, takže pak nad tim je možné napsat abstrakci velmi tenkou, ale zároveň paměťově korkektní.

Ale samozřejmě nevtrdim, že Rust má poslední slovo a už nikdy nic lepšího nebude. Naopak, je pravděpodobný, že dřív nebo později se objeví i pro specificky použití, na které cílí Rust, něco lepšího. Možná Julia nebo Chez ... nebo něco úplně jiného... Asi uvidíme...

(Je to víceméně rétorická otázka, ale stejně, ve kterých případech je Rust jediná správná volba?)
Třeba tady k tomu došli...

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #452 kdy: 23. 12. 2022, 00:07:10 »
Lean neznám, ale pokud se může překládat do C++, tak by to asi do Rustu mělo jít taky...
To si myslím taky.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #453 kdy: 23. 12. 2022, 00:12:07 »
No, tak zaprvé jsem k těm tvrzením skeptický. Podobná tvrzení, že high-level jazyk XY už "šlape na paty C++" (nebo v poslední době Rustu) se objevují pravidelně
To mi je tak nějak jasné, ale benchmarky mluví jasně (reálné, ne mikrokraviny). Hodnoceno střízlivě, zmíněné FBIP nebo obecně LLVM a jeho optimalizace nijak nezávisí na jazyce, z kterého se překládá. Takže, kde přesně má Rust navrch?

Re:Je Rust jazyk budoucnosti?
« Odpověď #454 kdy: 23. 12. 2022, 00:32:31 »
Benchmarky málokdy mluví jasně. LLVM optimalizace závisí na vstupním IR kódu - není problém vyprodukvoat velmi těžko optimalizovatelný IR, koneckonců, pomalý kód je bez problému možné psát i v C. Rust je rychlý z podobného důvodu jako C nebo C++.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #455 kdy: 23. 12. 2022, 00:35:44 »
Benchmarky málokdy mluví jasně. LLVM optimalizace závisí na vstupním IR kódu - není problém vyprodukvoat velmi těžko optimalizovatelný IR, koneckonců, pomalý kód je bez problému možné psát i v C. Rust je rychlý z podobného důvodu jako C nebo C++.
Fajn, takže Julia nebo Lean vedou k nadmíru optimalizovatelnému IR kódu.

Re:Je Rust jazyk budoucnosti?
« Odpověď #456 kdy: 23. 12. 2022, 01:00:55 »
Jo to já nevim, já ho neviděl...

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #457 kdy: 23. 12. 2022, 01:07:46 »
Jo to já nevim, já ho neviděl...
Je stejně efektivní jako z Rustu ;) Nicméně upřímně, fakt bych rád viděl, kde Rust vede, srovnatelná efektivita dynamických jazyků je tak trochu puzzling.

Re:Je Rust jazyk budoucnosti?
« Odpověď #458 kdy: 23. 12. 2022, 01:30:35 »
No mně to zatím puzzling nepřijde, až uvidim evidence, tak to třeba puzzling bude :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #459 kdy: 23. 12. 2022, 02:15:27 »
No mně to zatím puzzling nepřijde, až uvidim evidence, tak to třeba puzzling bude :)
No jo, ignorance is bliss.

Re:Je Rust jazyk budoucnosti?
« Odpověď #460 kdy: 23. 12. 2022, 09:14:47 »
Ingorance čeho?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #461 kdy: 23. 12. 2022, 10:12:53 »
Ingorance čeho?
Faktu, že stejný kód (přesněji stejný algoritmus) je stejně efektivní jak v Rustu/C++/Go, tak dynamicky typovaných jazycích (tedy jen některých — Chez, Julia, Lean, ale dokazuje to, že v principu nejsou o nic pomalejší a rozhoduje jen kvalita implementace).

Re:Je Rust jazyk budoucnosti?
« Odpověď #462 kdy: 23. 12. 2022, 11:22:48 »
Žádný takový fakt nebyl prokázán.

Ale jinak je samozřejmě možné, že takové algoritmy existují, a také není novinka, že z dynamického jazyka lze ždímat výkon - viz třeba asm.js na V8.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #463 kdy: 23. 12. 2022, 11:48:22 »
Žádný takový fakt nebyl prokázán.
Viz (vědecké) články o vnitřnostech Leanu od jeho autorů, které popisují srovnání a benchmarky + diskuse o nich na odborných fórech (přece jen je to od Microsoft Research, ti mají obrovské peníze na vývoj i konference). To je to “ignorance is bliss” BTW :D

Re:Je Rust jazyk budoucnosti?
« Odpověď #464 kdy: 23. 12. 2022, 12:58:59 »
Žádný takový fakt nebyl prokázán.
Viz (vědecké) články o vnitřnostech Leanu od jeho autorů, které popisují srovnání a benchmarky + diskuse o nich na odborných fórech (přece jen je to od Microsoft Research, ti mají obrovské peníze na vývoj i konference). To je to “ignorance is bliss” BTW :D

:)

GOTO #451. Před 15-20 lety se diskutovalo, jak se HotSpot zlepšuje a jak bude BrzoTM Java rychlejší než C++, Sun měl taky obrovské peníze na vývoj a konference, byly předkládány benchmarky ukazující, jak je rychlejší než C++ ... Tím neříkám, že ten výzkum a ty dané jazyky nejsou zajímavé, je asi dobře, že se tim někdo zabývá ... ale jaksi nemůžu nepozorovat, že tady existuje určitý opakující se pattern :)

Ale třeba to teď půjde lépe, když Rust přiměl FPčkaře se trochu více zabývat lineráními typy :P :D