Traits ve Fortranu

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #15 kdy: 10. 09. 2022, 13:18:38 »
nechapu proc to cpou do fortranu, ten jsem pouzival jen na vypocty a stacily realna cisla, na co dalsi typy.
Tak uživatelské typy se hodí pro lepší reprezentaci kdejakých objektů (například kvaternionů), tím spíš že Fortran má pěkně udělané přetěžování operátorů (a definici vlastních). Méně užitečné je až to OOP à la Java (dynamický dispatch je fajn, ale jde udělat i bez dědičnosti). Navíc se zavedením pointerů Fortran “dostal” typovou nebezpečnost, člověk si musí paměť spravovat manuálně (nebo pointery nepoužívat). K jakým hrůzám to vede ukazuje výše odkazovaný prasokód.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #16 kdy: 10. 09. 2022, 13:27:10 »
Tak preco neurobis syntaktickou omáčkou male demo traitu vo fortrane ?
Nech je to funkcne, da sa skompilovat v gfortrane a ma zmysluplne pouzitie ..
Protože to nepotřebuju a navíc to je triviální a úplně stejné jako třeba v Javě bez rozhraní (její úplně prvotní verze, asi ještě pre-v1.0, je ostatně neměla). Napsat něco jako rustí std::io::Read nebo io.Reader (Go) bez použití traitů/rozhraní a bez vícenásobné dědičnosti bývá oblíbená otázka u zkoušek z úvodu do “OOP”.

mikrom

  • ****
  • 321
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #17 kdy: 10. 09. 2022, 14:14:08 »
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:
Kód: [Vybrat]
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:
Kód: [Vybrat]
main calls:
t11
t12 calls:
t11
t2
s calls:
t11
t12 calls:
t11
t2

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #18 kdy: 10. 09. 2022, 14:26:45 »
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:
Kód: [Vybrat]
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:
Kód: [Vybrat]
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)?
« Poslední změna: 10. 09. 2022, 14:29:11 od Idris »

mikrom

  • ****
  • 321
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #19 kdy: 10. 09. 2022, 14:27:34 »
Tak preco neurobis syntaktickou omáčkou male demo traitu vo fortrane ?
Nech je to funkcne, da sa skompilovat v gfortrane a ma zmysluplne pouzitie ..
Protože to nepotřebuju a navíc to je triviální a úplně stejné jako třeba v Javě bez rozhraní (její úplně prvotní verze, asi ještě pre-v1.0, je ostatně neměla). Napsat něco jako rustí std::io::Read nebo io.Reader (Go) bez použití traitů/rozhraní a bez vícenásobné dědičnosti bývá oblíbená otázka u zkoušek z úvodu do “OOP”.
No to som trochu sklamany, myslel som ze ked je to pre Teba trivialne, tak sem das aspon nejaky kusok fungujuceho kodu, aby sa aj ostatni od teba nieco priucili. Ja som sem dal 2 analogicke priklady:
1) s pouzitim modulov vo fortrane
2) s pouzitim traitov v jave (s trochou syntaktickeho cukru)


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #20 kdy: 10. 09. 2022, 14:32:22 »
No to som trochu sklamany
To mě mrzí. Slibuji, že až bude chvilka času, nainstaluju si GNU Fortran a napíšu příklad. Ovšem vzhledem k charakteru OOP ve Fortranu ten kód bude hnusný a jako příklad spíše negativní :)

mikrom

  • ****
  • 321
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #21 kdy: 10. 09. 2022, 14:38:21 »
No to som trochu sklamany
To mě mrzí. Slibuji, že až bude chvilka času, nainstaluju si GNU Fortran a napíšu příklad. Ovšem vzhledem k charakteru OOP ve Fortranu ten kód bude hnusný a jako příklad spíše negativní :)
;D tak to radsej ani nedavaj.
Uzavrime tuto diskusiu s tym, ze na podobny ucel, na ktory sa pouzivaju v inych jazykoch traity sa vo fortrane daju pouzit moduly.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #22 kdy: 10. 09. 2022, 15:31:21 »
Uzavrime tuto diskusiu s tym, ze na podobny ucel, na ktory sa pouzivaju v inych jazykoch traity sa vo fortrane daju pouzit moduly.
Jenže to není pravda ani trochu, viz co psal Ink. Moduly jsou jen jmenné prostory a nijak nesouvisí s OOP/dynamicitou. Ale uzavřít to můžeme :)

a6b

  • ***
  • 119
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #23 kdy: 10. 09. 2022, 16:45:43 »
veortranu bych ocekaval praci s vektory, maticemi, na co specialni typ pro kvaterniony.

mikrom

  • ****
  • 321
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #24 kdy: 10. 09. 2022, 17:25:57 »
veortranu bych ocekaval praci s vektory, maticemi, na co specialni typ pro kvaterniony.
fortran to umoznuje

a6b

  • ***
  • 119
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #25 kdy: 10. 09. 2022, 17:28:15 »
veortranu bych ocekaval praci s vektory, maticemi, na co specialni typ pro kvaterniony.
fortran to umoznuje

proto to pisu, ze fortran je na numeriku a traits a oop jsou v nem zbytecne.

mikrom

  • ****
  • 321
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #26 kdy: 10. 09. 2022, 17:33:38 »
veortranu bych ocekaval praci s vektory, maticemi, na co specialni typ pro kvaterniony.
fortran to umoznuje

proto to pisu, ze fortran je na numeriku a traits a oop jsou v nem zbytecne.
suhlasim s tebou na 100%, ze OOP je vo fortrane zbytocne

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #27 kdy: 10. 09. 2022, 17:48:40 »
veortranu bych ocekaval praci s vektory, maticemi, na co specialni typ pro kvaterniony.
To tam je, ale někdy se hodí vektor nebo matice kvaternionů (nebo nějakého jiného složitějšího typu).

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #28 kdy: 10. 09. 2022, 17:52:58 »
fortran je na numeriku a traits a oop jsou v nem zbytecne.
Co jsem to tak jedním okem sledoval, fortranisti si prostě stěžovali: “Všechny jazyky mají OOP, proč my ne?!” Tak se ustanovil výbor a vznikla verze Fortranu s OOP. To se pak začalo používat. Konzervativní fyzici pořád píšou stylem F77 a nějaké OOP mají někde :)

Úplně stejně to bylo s Prologem, taky vznikla jeho OO verze jen proto, že tehdy to byl buzzword. Už si přesně nevybavuju, který manažer IBM to bez obalu takto přiznal.

a6b

  • ***
  • 119
    • Zobrazit profil
    • E-mail
Re:Traits ve Fortranu
« Odpověď #29 kdy: 10. 09. 2022, 18:00:26 »
ja bych si furt myslel, ze na numericke pocitani ol'good fortran a jeste mpi na cluster.