A kérdésben teljesen mindegy, hogy managed, vagy nem managed, nem a memórikezelés módja dönti el azt, hogy egy függvény pure-e vagy nem :)
"Ha a függvény csak a bemeneti paramétereivel dolgozik, és azok immutable típusok, akkor az egy pure function"
Na, ez nem igaz.
public static void foo(final Foo param) {
param.doStuff();
}
ahol Foo:
public class Foo() {
private final MySingleton singleton;
public Foo(MySingleton singleton) {
this.singleton = singleton;
}
public void doStuff() {
singleton.doSideEffect();
}
}
Foo egy tökéletes immutable osztály. MySingleton attól singleton, hogy egy DI container egyet hoz belőle létre (és nem azért, mert GoF szerinti Singleton).
A foo metódus csak a bemenetként kapott osztállyal dolgozik. Mégis van side effect.
Amit akartál mondani, hogy a bemenetek value classok (minden value class immutable, de nem minden immutable value class).
Szóval még mindig nem triviális probléma ez :)