Jak můžu opustit funkci

LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #300 kdy: 20. 07. 2018, 15:05:26 »
Pokud by si chtěl někdo přečíst (místo sebestředného honění si ega několika zdejších jedinců) velice zajímavý a do detailu jdoucí článek o vývoji GC toho jazyka, co jinak patří do odpadu, tak ho najde zde: https://blog.golang.org/ismmkeynote.
Hezky tam vysvětlují, proč je generační kopírující GC na dvě věci. Jen jazyk nesmí navrhovat trotl, pak jsou různé epicykly nad GC nutné.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Jak můžu opustit funkci
« Odpověď #301 kdy: 20. 07. 2018, 19:02:38 »
Pokud by si chtěl někdo přečíst (místo sebestředného honění si ega několika zdejších jedinců) velice zajímavý a do detailu jdoucí článek o vývoji GC toho jazyka, co jinak patří do odpadu, tak ho najde zde: https://blog.golang.org/ismmkeynote.
Hezky tam vysvětlují, proč je generační kopírující GC na dvě věci. Jen jazyk nesmí navrhovat trotl, pak jsou různé epicykly nad GC nutné.
Nechtěl by si něco vypíchnout? Jaká vlastnost jazyka způsobuje problémy?

LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #302 kdy: 20. 07. 2018, 19:28:56 »
Pokud by si chtěl někdo přečíst (místo sebestředného honění si ega několika zdejších jedinců) velice zajímavý a do detailu jdoucí článek o vývoji GC toho jazyka, co jinak patří do odpadu, tak ho najde zde: https://blog.golang.org/ismmkeynote.
Hezky tam vysvětlují, proč je generační kopírující GC na dvě věci. Jen jazyk nesmí navrhovat trotl, pak jsou různé epicykly nad GC nutné.
Jaká vlastnost jazyka způsobuje problémy?
Vlastnost ne, spíš implementace. Namátkou: 1) GC podle generací je kontraproduktivní, protože krátce žijící objekty můžou žít (a chcípnout) na zásobníku. 2) Kopírování objektů kvůli kompaktifikaci je zbytečná námaha (a ztráta času), když se použije nějaký kvalitní alokovací algoritmus, který nezpůsobuje fragmentaci. Go alokuje na haldě rozumně (nedochází k fragmentaci) a má dostatečně kvalitní escape analýzu, takže objekty se v naprosté většině alokují buď na zásobníku (takže se nemusí pracně tracovat a uklízet), nebo žijí na haldě dlouho. Jak říkám, to není primárně o jazyku, ale jen a pouze o vhodné implementaci runtimu. Podobně sofistikovaně funguje i překladač Rustu a Swiftu, jen používají jiné metody.

P.S. Když nějaký pseudovývojář tvrdí, že Go je odpad, má vždy na mysli syntax (kde jde v lepším případě o subjektivní pocit, většinou ovšem o nekompetenci), aniž by znal detaily implementace. Stupidní kiksy v syntaxi má např. i Haskell, ačkoliv jinak je navržený s matematickou přesností a jeho "vnitřnostem" rozumí ještě méně lopatoidů.

Re:Jak můžu opustit funkci
« Odpověď #303 kdy: 20. 07. 2018, 20:24:56 »
Stupidní kiksy v syntaxi má např. i Haskell, ačkoliv jinak je navržený s matematickou přesností a jeho "vnitřnostem" rozumí ještě méně lopatoidů.

Nějaký příklad? Opravdu mě to zajímá :)

LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #304 kdy: 20. 07. 2018, 20:51:24 »
Stupidní kiksy v syntaxi má např. i Haskell, ačkoliv jinak je navržený s matematickou přesností a jeho "vnitřnostem" rozumí ještě méně lopatoidů.
Nějaký příklad? Opravdu mě to zajímá :)
Uvedu jeden příklad, ten nejzávažnější, v praxi to bývá pro někoho show stopper: Identita funkcí se řídí porovnáním "function letter", přitom by je nezabilo napsat překladač tak, aby si konkrétní typ odvodil sám, pokud to jde (a když to nejde, umožnit vývojáři určit explicitně, o co mu jde). Jinak by také bylo hezké umožnit definici typů přes charakteristické morfismy, ale to už není jen o syntaxi, to by bylo spíš obohacení typového systému. Typové kvantifikátory vynechám, to se snad už zapracovává.


Puff

Re:Jak můžu opustit funkci
« Odpověď #305 kdy: 30. 09. 2018, 18:03:59 »
booleovské proměnné bývají nadužívány a jejich odstranění zpravidla zkrátí a zpřehlední kód.
  :o