Pokud ti jazyk zakazuje souběh, tak ho runtime nemůže udělat. Pokud jazyk nespecifikuje takovou situaci, pak ano.
Jazyk právě souběh nijak zakázat nemůže, to jde úplně mimo něj.
Já se právě domnívám, že čumil přišel s tezí, že IOMonády se o toto snaží, a neúspěšně, a že jsou jiné a lepší a hlavně funkční způsoby, kterými by to jít mělo.
Zda má pravdu či ne, to už je jiná.
Ty se domníváš, že jazyk nemůže zakázat souběh tak nějak z principu? Nebo jak to myslíš?
Nerozumím tomu, jak by mohl mět jeden jazyk více sémantik (významů výrazů)? Můžeš to rozvést?
Polopaticky řečeno, jazyk přece neřeší, co ty funkce opravdu dělají. Pro něj jsou to totální blackboxy. Zná jenom typ vstupů a typ výstupu, ale co se uvnitř opravdu děje, neřeší.
Příklad pro ten souběh: "ví" jazyk C, že fork spouští nějaký nový proces? Vůbec. Jak by ti jazyk jako takový mohl zakázat spustit nový proces, když on vůbec netuší a neřeší, co fork dělá. Pro něj je to prostě jenom "pid_t fork(void)" a pokud mu nedáváš žádný parametr a nechceš z něj dostat string, je happy
Pokud bys chtěl fork neumožnit, tak to uděláš třeba tak, že tvůj runtime vůbec nebude fci fork mít a nebude umožňovat volat systémová volání. A pak neforkneš ani kdyby ses na hlavu postavil. Ale jazyk za to nemůže, může za to runtime
Ano, funkce jako blackbox vnímám stejně. Zná jen typ vstupů a výstupů.
A teď k tomu souběhu:
Java-like jazyky souběh řeší výjimkou. Tu si odchytíš, a něco provedeš.
Pure funkcionální jazyky souběh neumožňují, protože to odporuje jejich filozofii.
Takže, když jsem to popsal takto, tak ano, funkce jsou totální černé skříňky, ale to neznamená, že si ta černá skříňka může dělat úplně co chce. Nemůže. V typovaných jazycích se musí zodpovídat deklarovanému typu, a v pure funkcionálních jazycích si nesmí dovolit (mimojiné) souběh. (V jazycích s GC překvapí, když dojde k memory-leaku, zatímco u takového C se to považuje za povinnost programátora.)
Ještě jeden příklad:
Budeme mět tu funkci
sum :: Int -> Int -> Int. Tato funkce je implementována přímo v nějaké Cčkovské rutině, takže naprosto mimo kontrolu engine atd. Ale přestože je tato funkce blackbox, tak si nemůže dovolit (a věřím, že je to i nějak ošéfovaný) vracet string. To prostě nemůže. Nebo může?