[ Branimir Maksimovic @ 14.05.2018. 05:19 ] @
http://www.open-std.org/jtc1/s...1/docs/papers/2018/p0709r0.pdf

Ako procitate prethodno shvaticete da je sve ovo jednostavno resiti onako kako je to uradjeno u Rustu: uvodjenjem tagged unija.
Uz std::variant, std::optional te sad i ovoga, citava ova gimnastika postaje nepotrebna samo ako bi iskopriali malo od Rust-a ;)




[ peromalosutra @ 16.05.2018. 12:45 ] @
Procitao sam tek prvih par stranica i vec tu se spominje da su u nekim slucajevima izuzeci neophodni (npr. kao mehanizam prijave greske u konstruktoru).

Tu ne pomaze ni std::optional. Alternativa je naravno da svaki objekat drzi interno stanje koje govori da li je validan ili ne, ali to mi nekako narusava invarijantnost. Moje razumijevanje je da konstruktor treba ili da uspije i pritom uspostavi invarijantu (objekat), ili da baci izuzetak ako invarijanta ne moze da se uspostavi. Na taj nacin je koristenje objekta sigurno, npr. korisnik ne moze slucajno da zaboravi da provjeri da li je objekat validan.

Ne znam kako funkcionisu tagged unije u Rustu, ali pretpostavljam da imaju isti problem?

U svakom slucaju, fokus na rjesavanje ovog problema je i vise nego dobrodosao.
[ Branimir Maksimovic @ 16.05.2018. 13:20 ] @
Pazi u slucaju da se ovo implementira kako je opisano konstruktor bi vracao ili gresku ili objekat. Rust nema konstruktore pa nema ni problema ali svaka
konstruktor f-ja moze da vraca recimo Result<T,E>. Sa time sto bi po Herb-ovom predlogu to bilo sakriveno u throw i catch. E sad kazem u C++ je to malo clumsy
sa obzirom da imamo i std::variant i std::optional, pa sad i ovo ispod haube. Ako si procitao videces da je glavna zamerka exception-ima nedeterminizam i to
sto objekti moraju da idu na heap te code/space bloat sto nosi sam mehanizam implementacije. E sad malo je kasno ovo da se popravlja nakon svih ovih
godina i da se prizna: error handling nije bas najbolje uradjen ;)
Jezici kao sto su C# i Java nemaju sa time problema posto njima performanse i 'low cost' nisu na prvom mestu, ali jeziku kao sto je C++ itekako smeta ;)