Odpověď na názor

Odpovídáte na názor ke článku C++20: kde bydlí korutiny.

  • 19. 2. 2023 15:55

    Ondřej Novák

    Tak jistě mohlo se to udělat pomocí stackful korutin. Znamená alokace zásobníku po korutinu (nebo gorutinu?) Je to určité strategické rozhodnutí. Problém je, že nikdy dopředu nevíš, jak velký zásobník chceš alokovat. Takže nastřelíš nějakou hodnotu a doufáš, že to bude stačit.

    Netuším, jak to go ma realizované. A netroufnu si říct, že to je lepší. C++ šlo cestou stackless, kdy nejsi povinný alokovat zásobník pro korutinu. Pokud tvá korutina dále volá normální funkce, pak se normálně používá zásobník vlákna, ve kterém zrovna běží. Samotná korutina zabírá jen to minimum co potřebuje k uložení stavu.

    Některé embedded systémy navíc mají pouze jeden zásobník, alternativní zásobníky nelze používat, nelze jen tak změnit registr SP. Stackless korutiny v tomhle systému budou bez problému fungovat, stackful tam nezrealizuješ. To asi bylo hlavní kriterum pro rozhodování, co se do normy dostane. Co se týče stackful korutin z hlediska podpory OS, tak nikdo programátorovi nebrání použít makecontext/Con­vertThreadToFi­ber dostupný už na úrovni C.

    Javascript například má stackless korutiny.