Znamená to tedy, že ve výsledném kódu musí být tagy, typy, qqch? Že neprobíhá type erasure, tak nějak z principu? Že ve výsledném kódu musí být nějaké runtime, protože něco?
Asi nejlépe nechme type erasure apod. spát, IMO to vede spíše ke zmatení diskuse. Také s tebou souhasím, že type checking umožňuje optimalizovat a de-facto přebytečné informace z programu odstraňovat, ale IMO tady neplatí nějaký jednoduchý vztah typu
čím víc proužků, tím víc adidas, tj. čím víc type-systému, tím víc optimalizace. Ironicky, uživatel Idris tohle tak trochu potvrdil tím, že odsoudil Rust type systém jako "primitivní" - pokud budeme souhlasit, pozorujeme skutečnost, kde jazyk s primitivním TS prodkuje rychlejší programy než jazyk se 'sofistikovanými' TS.
Abych ti konečně odpověděl - IMO ta otázka, jestli / jak moc sofistikované abstrakce (a které a s jakými omezeními atd.) vyžadují tlustější runtime, je otevřená. Nicméně máme určité datapointy - Haskell už existuje desítky let a má, pokud vím, celkem vymakaný kompilátor a produkovaný kód je
relativně rychlý, ale - a to nemyslím jako kritiku - žádný dramatický trhač rekordů v rychlosti to není. Další datapoint je právě vývoj Rustu, kde pozoruju, jak velmi je náročné přidávat abstrakce (move semantics, korutiny, GATs, ...) při dodržení těch runtime constraints, korektnosti, ergonomie.
V sumě, můj názor je, že ten přístup, kdy se nespoutaně vyvíjí a opěvují vysoké, velmi 'sofistikované' abstrakce, s tím, že generování kódu se zoptimalizuje někdy později, není přínosný - tj. to, co dělá např. Idris/Idris2, ale nemám v úmyslu kritizovat specificky Idris, tohle se týká i spousty jiných jazyků. Vzpomínám si, že podobných diskusí o tom, jak $FPjazyk bude zanedlouho mít super optimalizující kompilátor a konkurovat C++, jsem se zúčastnil třeba 15 let zpátky... a mezitím se nic moc nezměnilo resp. zlepšení je pouze dílčí/malé. Takže ve výsledku jsem fanoušek přístupu, kdy se abstrakce vyvíjí trochu pomaleji, návrh jazyka zůstává nohama trochu více na zemi*
a zároveň s tím se vyvíjí rovnou i schopnost produkovat pokudmožno optimální kód pro reálná CPU, protože to umožňuje ty zkušenosti s generováním strojového kódu reflektovat do návrhu těch abstrakcí, do návrhu IR reprezentací atd.
*) ať už si na to zvolíš víceméně jakýkoli metr, třeba lispisti nebo smalltalkisti/selfisti také rádi měří jazykům abstrakční penisy a sebe dávají na vrchol, ale metr mají jiný