Moduly vo fortrane (90+) maju podobny ucel ako traity v inych jazykoch. Sluzia na organizaciu a znovupouzitie kodu.
Možná jsem něco nepochopil, ale co jsi demonstroval ve svém příkladu, jsou funkce uspořádané do nějakých namespaces. Traity slouží k implementaci nějakého rozhraní napříč různými typy (třídami). Možná tam někde nějaký průnik vidíš, ale nepřijde mi, že by tam byla nějaká zásadní podobnost nebo zastupitelnost.
Žádný průnik tam není.
Ale je tam analogia - pozri:
class Main implements my_mod {
static void main(String[] args) {
Main m = new Main();
println("main calls:")
m.t11()
m.t12()
m.t2()
m.s()
}
}
trait tmp_mod1 {
void t11() {
println("t11");
}
void t12() {
println("t12 calls:")
t11()
}
}
trait tmp_mod2 {
void t2() {
println("t2")
}
}
trait my_mod implements tmp_mod1, tmp_mod2 {
void s() {
println("s calls:")
t11()
t12()
t2()
}
}
output:
main calls:
t11
t12 calls:
t11
t2
s calls:
t11
t12 calls:
t11
t2
Úžasné!
Teď vážně, jak se tedy ve Fortranu pomocí modulů docílí toho, abych mohl mít funkci, třeba
ReadAll, která bude typově bezpečná a bude umět číst data ze souboru, socketu a čehokoliv, co implementuje předem daný protokol (s chybami typové kontroly hlášenými během překladu, ne běhu)?