Ale jo, goto ma sve pouziti, zejmena v jazycich, ktere nemaji vyjimky a jen omezene moznosti vyskoku ze smycek (jasne, myslim ted cecko). Ono vlastne to goto v cecku tak hrozne neni, je dost omezene, kam se da skakat (narozdil od basicu, kde se da klidne skocit doprostred subrutiny nebo radku s DATA), to takovy longjmp() je zajimavejsi :-)
Jiste, puriste namitnou, ze se goto da nahradit strukturovanym programovanim. Da, ale brano do dusledku by nam dostacoval jen nejaky rekurzivne vycislovany jazyk (bez smycek) nebo simulator Turingova stroje (v podstate se jedna Brainf*ck), tam taky goto neni :-)))
Proc bych ho psal zrovna pres tail cally? Jednak ho nemusim psat vubec, protoze na matchovani retezcu regularnim vyrazem jsou knihovny a i kdyby mi to z duvodu optimalizace nevyhovovalo, tak tipuju, ze v RDBMS jsou podstatne obtiznejsi ulohy, nez prevod regularniho vyrazu na konecny automat ;-)
Tak zrovna konecny stavovy automat pres tail-cally neni takova hruza. Mate co stav, to funkci a prechod do stavu=volani funkce. Horsi je nahrazeni jinych pouziti goto.
Jednoduše. Každý stav je jedna funkce a každý přechod mezi stavy je jeden tail call. Stavy jsou pěkně pojmenované (jako funkce) a při přechodu z jednoho stavu do druhého se snadno předávají případné parametry (pokud je potřebuju).
Vy byste radši měl smyčku se switchem a měnil stavovou proměnnou, nebo dokonce používal goto? Neříkám, že to nejde, ale otázka je, zda je to čitelnější.
Takhle udělaný stavový automat přes tail cally ti bude konzumovat množství zásobníku lineárně závislé na množství projitých stavů. Gcc sice ty tail cally umí optimalizovat na skoky, ale nedělá to vždy (tato optimalizace nejde dělat, pokud se ve funkci vyskytuje pointer na proměnnou zásobníku a není možné dokázat, že ten pointer "neutekl" mimo tu funkci) a navíc to uživatel nemusí kompilovat pomocí gcc nebo nemusí zapnout optimalizace.
Tady není otázka, zda to je nebo není lépe čitelné, tady je problém, že takhle napsaný stavový automat nebude při dostatečně dlouhém vstupu fungovat.
Nemyslim, ze by se to dalo takhle kategorizovat, jestli je Links hodny nebo nehodny nasledovani. Links ma urcite dobre a spatne vlastnosti. Pro nekoho jsou dulezitejsi ty dobre vlastnosti pro nekoho zas ty spatne. Nasledovanihodnost tak zavisi na pozorovateli.
no, ono to dogma o nepouzivani goto pochazi z jednoho clanku, kteri nekteri ctenari pochopili opacne nez byl myslen a pak zacli ten nazor sirit.
je to vlastne takove legracni, protoze ve zkompilovanem programu ty skoky stejne jsou, i kdyz ve zdrojaku nejsou. to same plati pro javu a pointery. java jako jazyk nenabizi pointery, ale javovy bytekod je pouziva.