Názor ke článku Sdílení objektů mezi vlákny v C++20 (II) od JSH - V úplně prvním návrhu jo, ale ve všech...

  • 26. 4. 2024 22:19

    JSH

    V úplně prvním návrhu jo, ale ve všech dalších verzích už je jenom to apply. I ten guard vypadl, asi proto, že celou jeho funkci zvládne pokrýt to obecnější apply. Ten operator-> určitě nevyhodili proto, že by to bylo těžké implementovat. A pan Hoare by určitě potvrdil, že bychom neměli přidávat věci jen proto, že to jde jednoduše udělat :)

    Jo, můžete použít guard/lock/apply. Jenže ten operátor-> docela pravděpodobně navede nezkušeného programátora k tomu, že to nepoužije. Nebude bádat, jak psát divný kód, když mu funguje ten normální. A že je tam zádrhel mu nemusí v nějaké slabší chvilce dojít. IMO je to ukázkový příklad "design induced error".

    A objektů kde metoda!=transakce jsou mraky. Kromě kontejnerů jsou to věci kde jedna metoda vrací počet a jiná bere indexy. Nebo třeba metody, které je možné volat jen na validním objektu (třeba dvojice operator bool + operator() u std::function).