Jazyk pro matematické výpočty

Kit

Re:Jazyk pro matematické výpočty
« Odpověď #15 kdy: 20. 09. 2015, 10:57:20 »
Fortran je ovsem jazyk znacne staricky, nekdy z doby, kdy mel Zizka jeste obe oci. Jestlipak se od dob sveho vzniku aspon trochu zmodernizoval? Jestli se nahodou dodnes nepouziva hlavne proto, ze jsou pro nej knihovny snad uplne na vsechno, co by cloveka mohlo napadnout.

Samozřejmě byl zmodernizován, dokonce několikrát. Stále je však zpětně kompatibilní - je to nezbytně nutná podmínka pro všechny jeho modernizace.

Fortranské knihovny jsou dodnes používány v ostatních jazycích - včetně céčka.

To je hlavně o knihovnách, a ty existují ve většině jazyků. Než se učit Fortran, je lepší vzít C++ nebo Javu a naučit se používat nějakou dobrou knihovnu.

Ne. To, co mají ostatní jazyky v knihovnách, to má Fotran již v syntaxi jazyka. Například prohození dvou řádek či sloupců v tabulce se dělá přiřazovacím příkazem. Funkce abs(komplexní_číslo) dodá přesně to, co se od ní očekává - délku vektoru. V tom mu může konkurovat snad jen Python. C++ ani Java se v této oblasti prostě nechytají.



zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #17 kdy: 20. 09. 2015, 11:10:48 »
Fortran je ovsem jazyk znacne staricky, nekdy z doby, kdy mel Zizka jeste obe oci. Jestlipak se od dob sveho vzniku aspon trochu zmodernizoval? Jestli se nahodou dodnes nepouziva hlavne proto, ze jsou pro nej knihovny snad uplne na vsechno, co by cloveka mohlo napadnout.

Samozřejmě byl zmodernizován, dokonce několikrát. Stále je však zpětně kompatibilní - je to nezbytně nutná podmínka pro všechny jeho modernizace.

Fortranské knihovny jsou dodnes používány v ostatních jazycích - včetně céčka.

To je hlavně o knihovnách, a ty existují ve většině jazyků. Než se učit Fortran, je lepší vzít C++ nebo Javu a naučit se používat nějakou dobrou knihovnu.

Ne. To, co mají ostatní jazyky v knihovnách, to má Fotran již v syntaxi jazyka. Například prohození dvou řádek či sloupců v tabulce se dělá přiřazovacím příkazem. Funkce abs(komplexní_číslo) dodá přesně to, co se od ní očekává - délku vektoru. V tom mu může konkurovat snad jen Python. C++ ani Java se v této oblasti prostě nechytají.

Že to je v syntaxi jazyka není zrovna výhoda.

Re:Jazyk pro matematické výpočty
« Odpověď #18 kdy: 20. 09. 2015, 11:29:43 »
Že to je v syntaxi jazyka není zrovna výhoda.
Jak kdy. Rko má třeba oproti Pythonu výhodu, že některý často používaný obraty jsou přímo zabudovaný nebo je jazyk umožňuje svou dynamičností. Oproti tomu v Pythonu se to musí nějak obcházet, protože s tím jazyk nepočítal.

Např. Python neumožňuje nevyhodnotit parametr funkce/metody. Když to chci udělat, musím to složitě obcházet přes lambdy nebo nějaký jiný nepřirozený wifikundace. Např. v Rku můžu napsat ("day" je název sloupce v dt, který má typ data.table):
Kód: [Vybrat]
dt[day==1,]
V pythonu věci tohodle typu nejdou, protože by se snažil "day" vyhodnotit.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #19 kdy: 20. 09. 2015, 11:32:49 »
Že to je v syntaxi jazyka není zrovna výhoda.
Jak kdy. Rko má třeba oproti Pythonu výhodu, že některý často používaný obraty jsou přímo zabudovaný nebo je jazyk umožňuje svou dynamičností. Oproti tomu v Pythonu se to musí nějak obcházet, protože s tím jazyk nepočítal.

Např. Python neumožňuje nevyhodnotit parametr funkce/metody. Když to chci udělat, musím to složitě obcházet přes lambdy nebo nějaký jiný nepřirozený wifikundace. Např. v Rku můžu napsat ("day" je název sloupce v dt, který má typ data.table):
Kód: [Vybrat]
dt[day==1,]
V pythonu věci tohodle typu nejdou, protože by se snažil "day" vyhodnotit.

Jo, ale R je spíše DSL. Myslím, že zrovna pro HMM (a už vůbec ne pro SAT) není matematická syntax potřeba.


Kit

Re:Jazyk pro matematické výpočty
« Odpověď #20 kdy: 20. 09. 2015, 11:33:53 »
To je hlavně o knihovnách, a ty existují ve většině jazyků. Než se učit Fortran, je lepší vzít C++ nebo Javu a naučit se používat nějakou dobrou knihovnu.

Ne. To, co mají ostatní jazyky v knihovnách, to má Fotran již v syntaxi jazyka. Například prohození dvou řádek či sloupců v tabulce se dělá přiřazovacím příkazem. Funkce abs(komplexní_číslo) dodá přesně to, co se od ní očekává - délku vektoru. V tom mu může konkurovat snad jen Python. C++ ani Java se v této oblasti prostě nechytají.

Že to je v syntaxi jazyka není zrovna výhoda.
[/quote]

To je pouhé tvrzení, které nemá žádný důkaz ani hodnotu. Až příliš často se setkávám se zaslepeným propagováním C++, C# či Javy bez ohledu na use case.

Re:Jazyk pro matematické výpočty
« Odpověď #21 kdy: 20. 09. 2015, 11:36:58 »
Jo, ale R je spíše DSL. Myslím, že zrovna pro HMM (a už vůbec ne pro SAT) není matematická syntax potřeba.
Ne, ne, R je svébytný jazyk s pár zajímavými vlastnostmi (např. scope implementovaný přes environmenty), vlastním objektovým systémem (resp. dvěma ;) ) atd.

Kit

Re:Jazyk pro matematické výpočty
« Odpověď #22 kdy: 20. 09. 2015, 11:38:18 »
... Myslím, že zrovna pro HMM (...) není matematická syntax potřeba.

Pro matematiku není matematická syntax potřeba? Povídej, to zní zajímavě.

Pan Jan

Re:Jazyk pro matematické výpočty
« Odpověď #23 kdy: 20. 09. 2015, 12:21:40 »
Na matematiku Fortran. I přes počáteční nechuť nám ho na fakultě před 15 lety nacpali do hlavy (F77 obligátně a F90 v rámci projektů, jichž jsme se účastnili) a s odstupem času musím uznat, že věděli proč.
Že je v něm spousta věcí součástí jazyka a ne jen v knihovnách je značná výhoda. Například v tom, že překladač přesně ví, co po něm programátor chce, a přeloží to jak nejlépe umí.
Že má bezkonkurenční matematické a technické knihovny je obrovské plus. V těch knihovnách totiž po těch desítkách let používání už prakticky nejsou žádné chyby a jsou vymazlené k dokonalosti. A zrovna chyby ve výpočtech se brutálně těžko objevují, protože narozdíl od jiných chyb, kdy vám třeba jednou za 100 spuštění spadne program, tady nic nepadá, jen z něj občas vypadne trochu špatný výsledek, který se dá ověřit jedině tak, že ho přepočítáte jinak a jinde. Což může být s ohledem na problémy, které se ve Fortranu řeší, dost značný problém (např. není k dispozici jiný superpočítač a jiný člověk, který by to napsal jinak).
Fortran samozřejmě byl mnohokrát modernizován. Problém je, že ho odsuzují lidé, kteří v něm v životě nenapsali ani řádku. Technické výpočty se v něm dělají velmi přímočaře a pohodlně. V tom mu můžou konkurovat snad jedině jazyky jako je Python, ovšem s tím, že jim chybějí ta kvanta kvalitních knihoven a jsou několikanásobně pomalejší. Což může být u výpočtu trvajícího týden dost zásadní problém.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #24 kdy: 20. 09. 2015, 12:50:41 »
Nic, ja Fortran neodsuzuji, jen vyzvidam, jak to vypada dnes. Ja ho videl naposledy na VS na jakemsi starickem ICL s terminaly z IQ 151, kde se klavesy musely zatloukat kladivem. A pamatuji fortranackou historku, jak Amikum pry spadla jakasi druzice, protoze pri derovani pasky s programem vypadla v cyklu carka a protoze Fortran tehdy (nevim, jak dnes) nemel deklaraci promennych, tak to kompilatoru nevadilo a na drahy pruser bylo zadelano. Jo, takova carka nekdy dela divy.

JSH

Re:Jazyk pro matematické výpočty
« Odpověď #25 kdy: 20. 09. 2015, 13:21:08 »
Nechápu, jak někdo může doporučit C++, které se na matematické výpočty nehodí, protože je příliš univerzální. Vždyť ani neumí vynásobit pole konstantou
std::valarray?
Citace
, neumí pracovat s komplexními čísly
std::complex?
Citace
, neumí přeskupit řádky/sloupce v maticích...
Pravda, matice nejsou ve standardní knihovně. Je třeba stáhnout jednu z hromady dobrých knihoven.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #26 kdy: 20. 09. 2015, 13:55:28 »
Jo, ale R je spíše DSL. Myslím, že zrovna pro HMM (a už vůbec ne pro SAT) není matematická syntax potřeba.
Ne, ne, R je svébytný jazyk s pár zajímavými vlastnostmi (např. scope implementovaný přes environmenty), vlastním objektovým systémem (resp. dvěma ;) ) atd.

Jo, ale používá se více mimo "data science"?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #27 kdy: 20. 09. 2015, 13:58:56 »
Že to je v syntaxi jazyka není zrovna výhoda.
Jak kdy. Rko má třeba oproti Pythonu výhodu, že některý často používaný obraty jsou přímo zabudovaný nebo je jazyk umožňuje svou dynamičností. Oproti tomu v Pythonu se to musí nějak obcházet, protože s tím jazyk nepočítal.

Něco se jistě hodí, když se to nepřežene, ale prakticky vše lze nějak zabudovat do knihovny. Například v jazycích s přetížením operátorů si můžu udělat fortranovské ** a spoustu jiných operátorů pro vektory, matice, tenzory a kdejaké jiné objekty.

Kit

Re:Jazyk pro matematické výpočty
« Odpověď #28 kdy: 20. 09. 2015, 14:48:27 »
Nic, ja Fortran neodsuzuji, jen vyzvidam, jak to vypada dnes. Ja ho videl naposledy na VS na jakemsi starickem ICL s terminaly z IQ 151, kde se klavesy musely zatloukat kladivem. A pamatuji fortranackou historku, jak Amikum pry spadla jakasi druzice, protoze pri derovani pasky s programem vypadla v cyklu carka a protoze Fortran tehdy (nevim, jak dnes) nemel deklaraci promennych, tak to kompilatoru nevadilo a na drahy pruser bylo zadelano. Jo, takova carka nekdy dela divy.

Všichni fortranští programátoři dnes píší v deklaraci IMPLICIT NONE. Tím se zapne povinná deklarace proměnných. A nebylo to vypadením čárky, ale její záměnou za tečku. Tím se z cyklu stalo obyčejné přiřazení. Ve výpisu programu to vypadalo skoro stejně.

Dnes se ve Fortranu nepoužívá ani nechvalně známé GOTO - jsou tam běžné řídicí struktury jako v ostatních jazycích - tuším už od roku 1977. Dokonce se v moderním Fortranu dá programovat objektově.

Zajímavostí Fortranu je, že nemá žádná vyhrazená slova. Proměnná se klidně může jmenovat "if" nebo "goto". Je to však spíš recept pro sebevrahy. Na druhou stranu se programátor nemusí učit klíčová slova, která nepoužívá.

Co ostatním jazykům chybí, tak číslování indexů polí od jedné, resp. si mohu stanovit libovolný počáteční a koncový index. Spousta programátorů si ani neuvědomuje, kolik zla už napáchalo povinné číslování indexů polí od "0".

Fortran je dnes součástí běžných linuxových distribucí. Příkaz "apt-search fortran" mi vyhodil 366 položek, což není málo. Jsou v tom různé verze kompilátoru i knihoven - stačí si jen vybrat.

Re:Jazyk pro matematické výpočty
« Odpověď #29 kdy: 20. 09. 2015, 14:52:31 »
Technické výpočty se v něm dělají velmi přímočaře a pohodlně. V tom mu můžou konkurovat snad jedině jazyky jako je Python, ovšem s tím, že jim chybějí ta kvanta kvalitních knihoven a jsou několikanásobně pomalejší.
Co má Python oproti jiným jazykům aby se v něm "velmi přímočaře a pohodlně dělaly technické výpočty"?!

Jo, ale používá se více mimo "data science"?
Ne, ale chtěl jsem tím říct, že to je skutečně programovací jazyk, ne jenom nějaké DSL pro vyjádření něčeho doménově specifického a omezeného. Rko je univerzální a dá se v něm napsat cokoli včetně http serveru, akorát to moc lidí nenapadne dělat :)

Například v jazycích s přetížením operátorů si můžu udělat fortranovské ** a spoustu jiných operátorů pro vektory, matice, tenzory a kdejaké jiné objekty.
To sice jo, ale to, co jsem psal, neudáláš skoro nikde. Např. ggplot2 to masivně využívá:

Kód: [Vybrat]
> head(counts)
   dow  hour value count
1:   2 22.50     0   659
2:   2 22.75     0   695
3:   2 23.00     0   707
4:   2 23.25     0   719
5:   2 23.50     0   773
6:   2 23.75     0   764

> ggplot(counts)+geom_line(aes(x=value,y=count*2,color=dow))
- všimni si toho "count*2" - to je parádička, pracuju se sloupcem (count není proměnná) a v klidu s ním můžu dělat matematické operace! Tohle prostě v Pythonu jednoduše neuděláš.