Ne, do APL jsem se ještě neodhodlal zakousnout. Mimochodem, znáš https://github.com/narenratan/jonesforth_arm64_apl ? To je úplná bizarnost :-)
Rekl bych, ze specializovanej jazyk kterej je od pocatku delan pro praci s poli bude pro "array-programming" vzdycky lepsi, nez nejaka nadstavba nad vseobecnym jazykem (jako treba python+numpy). A rozdil je tim vetsi, cim hloubeji do problematiky pujdes.
Ted mam za ukol prepsat par algoritmu z matlabu do pythonu. Tak 90 az 95% kodu prepisu bez nakeho vahani, a rozdil v indexovani je ten nejmensi problem. Jenze udelat ten zbytek mi potrva dyl, nez kolegovi kdysi trvalo napsani celeho programu v matlabu...
No vida, kdyby článek vyšel za týden, tak bych tam přidal info o novince v jazyku Julia: Multidimensional Array Literals
https://julialang.org/blog/2021/11/julia-1.7-highlights/#multidimensional_array_literals
Zmíním to příště. Je to v podstatě maličkost, ale potěší.
"Jsou pole plnohodnotným datovým typem nebo speciální strukturou" - tak jsou jazyky, které omezují, jaké hodnoty se dají předávat funkcím nebo vracet z funkcí. Příkladem je C a Pascal, kde se to řeší přes ukazatele na první prvek pole (nebo obalením pole strukturou). Z tohoto pohledu se s poli pracuje jinak, než například s primitivními typy.
Ďakujem za článok! Pre mňa veľmi relevantný - pochádzam z akadémie (fyzika), naše problémy typicky predstavujú diagonalizáciu veľkých matíc, riešenie zobecnených vlastných problémov, Fourierove transformácie polí, atď.
Python + numpy je dnes, hlavne medzi mladými (doktorantmi), jednoznačne najpopulárnejšou voľbou. Keďže sú ale naše výpočty často veľmi časovo náročné, typicky sa tieto implementujú v inom jazyku, napr. C, Fortran. Dovolím si osobný pocit, že na tento typ problémov je stále najlepším nástrojom (moderný) Fortran.
Tvorcovia Julie tvrdia, že dokáže nahradiť oba jazyky, teda že je jednoduchá ako Python, ale rýchla ako C/Fortran. Má niekto osobnú skúsenosť? Skúšal som posledne v roku 2017, ešte pred verziou 1.0 a môj pocit bol, že je niekde medzi - píše sa v nej ľahko, ale nie až tak ľahko ako v Pythone, a vie byť pomerne rýchla (aj keď nie až tak ako Fortran), ale na dosiahnutie rýchlosti je potrebné ju používať pomerne zvláštnym spôsobom (napr. nepoužívať vektorizáciu). Poslanie Julie mi je sympatické a chcem veriť, že bude úspešná, ale zatiaľ sa mi to zdá byť too good to be true.
P.S.: <rant> Číslovanie má byť od jedničky, to vie každý inžinier :). Najviac mi ale vyhovuje číslovanie Fortranu, kde si môžem zvoliť počiatočný a konečný index ľubovoľne, napr. symetrický interval [-5:5], čo sa často hodí. Julia to dokáže tiež, nemôžem si však pomôcť, ale aj takáto základná vec tam má plno "gotchas" https://docs.julialang.org/en/v1/devdocs/offset-arrays/ Človek si zvykne aj na pythonovské indexovanie od 0 a záporné indexy bežiace "odzadu", ale mne tá neintuitívnosť vždy postupne odsáva mentálnu energiu. </rant>
Hehe, další, co si myslí, že v této oblasti je nejlepší Fortran. To už jsme tady tři (nebo čtyři) :) Já Julii moc neznám, u mě vládne v tomto typu výpočtů Fortran a občas nějaké to C++. Jinak tady v UK ve výuce fyziky taky převládá Python s numpy. Co jsem tak odpozoroval, většina studentů má problém psát i jednoduché programy, bez ohledu na jazyk.
No teda já jsem pracoval jak ve Fortranu, tak v Pythonu, a Python + Cython mi přijde jako podstatně lepší řešení.
Fortran je hezkej na matematiku, ale z hlediska programátorského je to hrůza: spousta věcí v jinejch jazycích normální je do Fortranu nalepená a používá se hrozně.
- Začal bych nemožností defaultních argumentů, workaround přes optional je hromada zbytečnýho, špatně čitelnýho kódu.
- Způsob definice typů argumentů je děs - hlavička funkce s více argumenty je dosti nečitelná
- Věci kolem OOP maj taktéž poměrně obskurní syntax
(např. koukněte zde:
https://riptutorial.com/fortran/example/9001/type-constructor
)
atd....
Fortran je výbornej v tom, že rychle kompiluje rychlej kód. Ale na vývoj je to IMHO jazyk dosti hroznej.
Nu, proti gustu žiaden dišputát! Skúšal som už Python + numba, ale moc mi to nesedelo, keďže to nespolupracovalo napr. so scipy (je možné, že sa to odvtedy nejak vyvinulo). No a keď nemôžem využívať knižnice a musím si všetko písať sám, tak sa výhody Pythonu poriadne stenčujú.
A keď ste spomenul nečitateľnost Fortranu, tak nemôžem nespomenúť jednu nedávnu perličku z rozhovoru s Václavom Petříčkom :)
"Vědci – a zvláště ti v naší oblasti – vám řeknou, že se nejlépe programuje ve Fortranu. A je to pravda. Žádný jiný jazyk neprodukuje tak čistý kód. To ani C++ není tak dobrý. Já jsem používal i jiné jazyky, psal jsem programy na řízení experimentů v Pascalu, psal jsem v Assembleru, ale když chci svůj kód vidět nejlépe, píšu ve Fortranu. Já jsem vždycky chtěl mít na obrazovce co nejvíce kódu a co nejméně všeho ostatního. Náš program má zhruba 250 tisíc řádek, ale prakticky žádné komentáře."
5. 12. 2021, 20:43 editováno autorem komentáře
Jo, někdy se do toho JANA programu podívám. To bude stejná krása jako třeba https://github.com/davehirsch/Perplex
BTW Už existuje i package manager pro Fortran... nebo prostě CMake: https://fortran-lang.org/packages/ Ono se to bude lepšit, protože Fortran zažívá renesanci. Já nejsem ve věku kdy bych chtěl udržovat mrtvolu, mě se prostě Fortran líbí přišel jsem k němu od Pythonu a C++ a pár funkcionálních hračiček.
6. 12. 2021, 00:57 editováno autorem komentáře
"Ono se to bude lepšit, protože Fortran zažívá renesanci"
Je to tak, Fortran, i když ho někdo už pohřbíval, se objevuje i ve statistickách: https://www.tiobe.com/tiobe-index/
(ono je vůbec zajímavé, jak se - asi i kvůli Covidu - v tom žebříčku objevil Fortran, R i Matlab, tedy jazyky s dosti podobnou doménou (a bez urážky - Fortran je dnes DSL a to velmi dobrý!)
Já od Pythonu vesele kráčím a opět se vracím k Fortranu (a Julii). Když se neučíte z 30 let špatně psaného kódu nemoderního Fortranu, tak to je pak jiná. BTW: On ani ten Python není žádná krása v rukou vědců... stačí se podívat na github. Napsat setup.py nebo vytvořit si virtuál je vyšší dívčí, přitom do nich hustěj Python teď už od prváku. Zlatý Pascal, ten je aspoň naučil slovo kompilátor. Já sem estét a tolik hnusného kódu jako v Pythonu jsem tedy viděl... jen v MATLABu :)
Na Matfyzu v 80. letech používali “krásný” kód ve Fortranu, který jim dal sám Alain Colmerauer. Šlo o předverzi Prologu, kterou používala meteorologická služba Kanady. Zdrojáky se pak ztratily, ale v 90. letech ještě pořád používali binárku (jen .exe) při výuce. Podle Wikipedie ztratili původní fortraní zdrojáky i Quebečané, takže ten kód nejspíš už neexistuje. Ale byla to lahůdka.
Kuriozitou je, že s těmito zdrojáky pracoval v době, kdy na MFF působil, nechvalně známý Petr Piťha.
Hlubší rozhodně ne, abych mohl nějak mudrovat. Spíše se odhodlávám skočit po hlavě. Už jsem narazil na pár lidí co jí také zkouší, tak snad se mi podaří se odpoutat časem v Pythonu. Já v ní vidím výhody Pythonu a Rka, kde Rko, ačkoliv jsem zpočátku hudroval, mi vlastně sedí víc než Pythoní přístup objekt metoda. Je to totiž hrozně zadrátované do konkrétní knihovny. Navíc Julia má rozumnou syntax, teoreticky je zajímavá a komunita je velmi vzdělaná. (Já jsem fanoušek Mathematiky/Wolframu, takže se nelze divit, že koukám po Julii :)
6. 12. 2021, 10:45 editováno autorem komentáře
Jazyk Julia tazko porovnavat s Fortranom, skor sa da porovnavat s podobnymi vysokourovnovymi jazykmi a prostrediami na vedecko-technicke vypocty ako Octave, Scilab, R, python+numpy, Matlab, Mathematica, ...
Oproti Fortranu ma Julia iste podobne vyhody ako hore uvedene systemy, t.j.:
- lahsie sa pracuje s I/O - napr. cely datovy subor sa da nacitat jednoduchymi prikazmi do pola
- na riesenie specifickych problemov existuju moduly, ktore sa jednoducho pouzivaju
- ma prikazy na tlacenie grafov funkcii a dat
- da sa pouzivat s Jupyter notebookom
- vysledny kod na riesenie urciteho problemu bude kratsi ako vo Fortrane
Avsak Julia urcite Fortran nenahradi. Je to jazyk pre tych, ktori len pouzivaju urcite algoritmy ako black-box, ale nepotrebuju sa v nich hlbsie vrtat a vylepsovat ich. Pre tych ktori sa chcu hlbsie zaoberat numerickymi algoritmami je urceny Fortran.
Julia je dost novy jazyk a je urcite menej popularny ako Python. Podla mna sa Python oplati ucit viac, lebo je univerzalnejsi.
Mozno Julia presvedci niekoho kto si plati kvoli rieseniu urcitych uloh licenciu za Matlab alebo Mathematicu a zisti ze Julia mu na to posluzi tak isto dobre alebo aj lepsie a je zadarmo.