Pěkné. Dokonce bych řekl, že by se to hodilo do dnešní doby tabletů - prostě čím místa to zabere na displeji tím líp. A než na klávesnici mačkat dlouhé příkazy, to už raději výběr z těch 40 nebo kolik hieroglyfů.
Btw fakt se APL používá, akorát ta "komunita" je taková uzavřená a moc se neprojevuje na SO apod., takže o ní není vědět.
Pozor! Když budete hodně programovat v APL tak budete v APL programovat i v ostatních jazycích. Viz. zdroják J. Náhodně vybráno třeba toto:
https://github.com/jsoftware/jsource/blob/master/jsrc/vf.c
A ty názvy souborů! :-D
Asi jako tento programátor co obsedantně komentuje stručný APL kód: https://youtu.be/ROew12QoHs8?t=470
:-)
Tady mluví skoro deset minut o jediném řádku kódu https://www.youtube.com/watch?v=0RQFW6P1Tt0 :-)
(prostě je to tak úsporný zápis, že je to nutné no)
S APL jste mi udělal radost. Zrovna jsem se o něj otřel v jiné diskuzi a pak takový článek. Kdybyste chtěl něco někdy napsat o Wolfram (Mathematika) tak jedna poznámka https://www.stephenwolfram.com/questions/2012/05/14/have-you-ever-worked-with-apl-or-j-or-the-kq-programming-languages-and-what-is-your-opinion-of-j-especially-its-usefulness-in-research-mathematics-and-industry-and-perhaps-how-it-compares-w/ Mathematika má docela zajímavé paradigma ne nepodobné Lispu.
Spíš by mě zajímalo, zda má APL (a všechny ty odvozeniny) dnes ještě skutečně nějakou výhodu (kromě toho, že odfiltrují lidi, kteří do nich nedokážou proniknout - což neznamená, že geniální matfyzák je nutně zaměstnanec snů). Za 55 let se přece jenom svět programovacích jazyků posunul a problémy, které APL chtěl řešit, se jistě znovu a znovu různými prostředky řešily jinde.
Mrkněte na nějaké video na https://www.youtube.com/channel/UC89lIdGnKlEozb1WcYQprNw
nebo https://www.youtube.com/user/DyalogLtd třeba konkrétně https://www.youtube.com/watch?v=qDl3obmOd58&t=330s&ab_channel=DyalogUsermeeting
Je to rozhodně minoritní jazyk, ale evidentně se v tom dá řešit spousta reálných problémů. Podle mě to není žádný jazyk pro génie, jen musíš začít přemýšlet v polích, podobně jako v Lispu/Wolframu musíš přemýšlet v seznamech.
4. 11. 2021, 10:16 editováno autorem komentáře
Tak svět programovacích jazyků se skutečně posunul, mezitím i HW (se všemi důsledky, které mainstreamové jazyky zatím moc nedávají, až na pár výjimek). Mezitím se prošlo slepými uličkami, ale popravdě si nemyslím, že APL je tato slepá ulička.
Z APL například spoustu věcí převzal NumPy (tam je to vidět asi nejvíc), Julia, R a asi i další jazyky. Jo to vůbec koncept "reshape", booleovské matice ve formě filtru, pokročilé indexování, výběr os pro operace atd. To předtím nebylo, protože namísto matic se používala klasická pole, která mají odlišné vlastnosti.
APL je dnes nutné chápat jako striktně doménově specifický jazyk, který se používá v bankovnictví, v pojišťovnictví, hodně investičními společnostmi atd. - tedy tam, kde je nutné rychle změnit a ověřit nějaký model. Ale je to skutečně DSL, tedy tak, že například data se připraví někde v Kafce, výsledek jde do Supersetu atd. atd.
Ještě dodám, že komunita okolo APL je dosti uzavřená, skutečně to nebývají týpci, co každý nový "objev" v JS blogují nebo tweetují. Takže ten jazyk vypadá mrtvě, i když asi není - pro mnohé firmy je to skrytá zbraň.
Podobně to vypadalo s Dyalog APL, tedy komerční implementací APL. Teprve v poslední době se snaží budovat komunitu ve stylu, který známe - tedy otevřená GH repa atd. Ale to chvilu trvá a dnes APL nebude mít takový appeal jako kdysi.
Ono podobné je to právě s Mathematika/Wolfram. Dnes mají začlenění do JupyterLabu (i když s tím konceptem vlastně přišli) + volání Pythonu do/z Mathematiky. Pracuje se na kompilátoru využívající LLVM a pracuje se na typovém systému (původní Wolfram je vlastně netypový) ala Haskell/Scala https://www.youtube.com/watch?v=O_Cu2T-6Eoo&ab_channel=ACMSIGPLAN
.
S Rustem mám v tomto ohledu zajímavé zkušenosti. V jednom týmu ho chtěli začít používat (rozhodnutí shora), tak se na něj v jednom dílčím projektu přešlo. Od začátku byly náznaky, že to trochu drhne, a po měsíci se zjistilo, že nikdo nic neudělal a lidi se začali přiznávat, že Rust prostě nedávají. Nejdéle mlčeli a mlžili seniorní vývojáři, kteří se dříve chvástali, jak programují od pěti let a VŠ udělal levou zadní. Prostě projekt absolutně zkolaboval, ale na povrch vypluly prozatím skryté lidské vlastnosti.
Jinak co se týká headhuntingu, moje osobní zkušenost je, že vývojáři se zkušenostmi z Rustu mají doménové znalosti hlavně s kryptotechnologiemi. Kontejnery ani moc ne, to jsou spíše ti s Go. SQL jsem vždy předpokládal, že zná každý. Opravdu dobrých asi moc nebude (a těch pár je dávno rozebraných).
K tomu SQL - nechci zevšeobecňovat, ale pokud už nabíráš a někdo má v CV napsáno SQL, tak je dobré se v každém případě (i když to nepotřebuješ) zeptat na pár věcí, třeba jestli ví o možnosti constrainů (stačí základní), rozezná typy joinů, nebo úplné základy okolo transakcí. Jsem se totiž setkal s tím, že si tam lidi píšou znalost SQL na základě toho, že si třeba ve škole vyzkoušeli nějakou ORM knihovnu a tím to končilo.
"příjemným DSL"
zkuste treba tohle vyresit DRY dotazem bez opakovani se
https://www.hackerrank.com/challenges/interviews/problem
v MySQL bez CTE.
ORM umoznuje dekomponovat dotaz na jednotlive casti, konstrukce takovych dotazu, kde se joinuji podobne poddotazy, je mnohem jednodussi.
me nevadi cist SQL, ale psat ho je otrava, lepit dotazy z retezcu je jeste horsi, kazda aplikace (nebo REST API) potrebuje razeni strankovani a pod. GraphQL jeste horsi, s ORM to mate v podstate zadarmo. Dalsi priklad manytomany vazebne tabulky, vytvaret je, rucne je joinovat v dotazech proc? ORM to udela za vas (transparentne).
5. 11. 2021, 13:50 editováno autorem komentáře
Celkem jo. Byvaly kolega zacinal s rustem kdyz to bylo jeste v plenkach. SQL umi, kontejnery jsem ho naucil ja.
Je to dost rizek typu prijdu naprogramuju odejdu a ono to funguje az do konce sveta. Prirozeny talent.
Naposledy co vim tak si rekl 200kkc a dostal bez diskusi.
8. 11. 2021, 08:40 editováno autorem komentáře
> Byla by to větší zábava bez hejtů, kdyby si lidi například sdělovali zajímavé postřehy z různých okrajových jazyků.
No to mě baví taky. Julia, Haskell, klidně nějaké J, nová Scala, klidně zmiňovaný OCaml. Ale nemyslím si, že dobře míněná kritika je nutně špatná věc. Sám to děláš, koneckonců. Já, coby starý pythonista, sice rostu, když někdo dokola rozpatlává sémanticky významné odsazení (ne že by nemělo nevýhody), ale pokud někdo řekne, že zrovna tohle řešení v Pythonu je nešťastné v tom a v tom a mě to zatím nenapadlo, je to pro mě zajímavé. Přesvědčte mě, že na něco FAKT nemám používat na něco Rust, Python nebo C++ a mám použít Go, budu vděčný. Ukažte mi, proč Java/Scala/Kotlin je fajn řešení (odkaz, který jsem dával k gRPC benchmarku, naznačoval, že Akka gRPC v některých situacích nemá konkurenci) a já budu spokojený.
Jinými slovy, nejsem "sběratel kuriozit", ale zajímají mě praktické výhody a uznám je, kde jsou.
Nemyslím, že by chtěl někdo někoho přesvědčovat, každý svého (ne)štěstí strůjcem. U Rustu mě napadá jen jeden důvod proti, žádný technický, ale prostě jeho náročnost na naučení (viz má zkušenost s týmem popsaná výše). Je skvělé vychválit před šéfem borrow checker a lifetimy atd., ale když se v tom pak lidi plácají a projekt kvůli tomu prakticky stojí, tak je to problém. Nebýt tohoto (a absence podpory Rustu na App Engine a podobných platformách), mohl bych být i zastáncem Rustu (navzdory syntaxi a jiným quirkům).
Ne, problém byl ve vývojářích. A nevidím v tom nižší inteligenci (jak tu bylo podsouváno), ale spíše lenost či pohodlnost a přístup k práci stylem “nic nového se nechci učit, dejte mi pokoj”. A zrovna u Rustu je vstupní bariéra vyšší a s tímto přístupem neslučitelná.
On to je běh na dlouhou trať, až se bude Rust (i třeba volitelně) více učit na univerzitách, lidi z něj nebudou tak vykulení a v konečném efektu se třeba zvýší obecné povědomí o správě paměti bez GC, životních cyklech instancí apod. I když to je asi jen zbožné přání.
OCaml jsem zavrhl, kvůli mizerné podpoře na Windows, jinak je to skvělý jazyk. Mě právě přišlo, že to tady tvrdíte vy, že Rust je nějaký filtr. S Rustem totiž nemám osobně problém, kvůli tomu, že by snad byl nějak intelektuálně náročný, ale že jeho "featury" nepotřebuju. Když chci něco bezpečného ale ne low-level použiju Scalu. Pokud něco rychle nebo zpracovávám data, tak Python/R. Julia/Wolfram pro mě splňuje spoustu nej, ale nedělá v tom moc kolegů. Pro rychlost, použiji C++/Fortran a C++ bych si vybral pro projekty, co potřebují rychlost ale navíc nějak komunikovat nebo nabízet interface skrze Python (docela častý use-case). Prostě není to o inteligenci ale o ergonomii. Třeba Swift se teď tlačí místo Pythonu skrze TensorFlow -- právě kvůli tomu, že je vlastně více ergonomický -- no uvidíme.
Na fyzice (MFF) se Rust začíná normálně objevovat (aktuální zadání):
"""
To solve the task you can use almost any programming language but I recommend to use Fortran or C/C++ or Rust for the best performance together with Gnuplot for plotting.
"""
To byla narážka na komentář výše ohledně použití APL jako filtru (viz též má zkušenost s Rustem v týmu výše). Jinak zrovna pro tu fyziku dává Rust IMHO smysl a určitě bych ho viděl ve výuce raději než Python. Ale to je čistě osobní názor.
OCaml je fajn jako jazyk, ale taky ho nikde nepoužívám kvůli nižší podpoře. Jinak R a Julia jsou fajn, o tom žádná. Bohužel mám zkušenosti jen s R, ale na Julii se už dlouho chystám, trochu jsem si četl o překladači a runtimu a rozhodně je to zajímavé.
Díky za dobré zprávy o Rustu na MFF :)
"zrovna pro tu fyziku dává Rust IMHO smysl a určitě bych ho viděl ve výuce raději než Python" - nic proti názoru (mě taky slepé prosazování jednoho řešení jen proto, že to dělají i jinde, vadí), jen by mě zajímal důvod. Je to kvůli typovému systému?
Zrovna ta Julia by fyziky mohla oslovit, jak výkonem, tak i sémantikou (a vůbec - funkcionálním přístupem, typovým systémem, nakonec to není špatný jazyk).
Já jsem si kdysi dělal benchmark - řešil jsem nějakou utilitu, kterou máme implementovanou v Pythonu, dost se v ní počítá a není nejrychlejší. Porovnával jsem Python, Cython, Julii, Nim, C++ a Rust. Poslední dva jazyky mi dávaly skoro bez práce výrazně nejlepší výsledky (přesný rozdíl si nepamatuju, ale proti Pythonu šlo minimálně o řád). Jasně, nejsem expert v Cythonu nebo Julii a určitě se to dalo ještě vylepšit a věřím, že konkrétně Julia se v tomto vyvíjí a věřím tomu, že pro vědce bude v lecčems bližší. Jenže ji nevnímám jako GPL a investovat do ní se mi moc nevyplatí. Z tohoto hlediska by mě zajímalo, nakolik fyzici potřebují umět "velký" jazyk, který je převážně zaměřen na systémové programování. Pokud ano, Rust bych doporučil. Jinak snad ani ne...
5. 11. 2021, 11:13 editováno autorem komentáře
Fyzici potřebují především něco rychlého na numerické úlohy, a to je doména Fortranu (částečně ze setrvačnosti, jinak to je hlavně o knihovnách). Nicméně pokud se chtějí naučit jazyk, který kromě výpočtů mohou použít i v jiných oblastech, hodí se IMHO C++ nebo právě Rust (kvůli výkonu a hlavně hladké možnosti volání stejných knihoven).
Kdyby to někoho zajímalo, tak od verzi Fortran 2008 jsou dostupné koperativní pole (coarrays), což Vám dává možnost paralelizovat úlohy bez nutnosti škaredých direktiv: https://github.com/tkoenig1/coarray-tutorial/blob/main/tutorial.md To může spoustu úloh zrychlit i bez nějakých velkých změn v kódu. Fortran žije!
Nevím, kde přesně to vyrostlo. Jeden čas, jsem sledoval od Cray jazyk Chapel: https://en.wikipedia.org/wiki/Chapel_(programming_language).
, ale popravdě jsem se nijak nepídil po historických detailech.
Jinak Fortran např. umožňuje OOP (trochu nečekaně namísto přístupu skrze tečku pomocí `%` k atributům.), pak zná `pure` funkce (metody) a spoustu věcí, které běžný programátor vůbec netuší, že v něm existují a že tak starý jazyk prošel takovým vývojem a jde v tom spát naprosto čitelný a moderně vypadající software.
V poslední době se pracuje i na interaktivitě: https://ondrejcertik.com/blog/2021/03/resurrecting-fortran/
(BTW Původní autor SymPy.)
Už to tu nebudu plevelit, ale třeba se časem objeví nějaký článek od Vás až bude mít Fortran nějaké výročí :) Pěkný večer všem.
5. 11. 2021, 19:52 editováno autorem komentáře
Na tohle je dobrá kniha od Akina “OOP via Fortran 90/95”. Zajímalo by mě ale, nakolik se OOP mezi kovanými fortranisty používá. Jestli to není jako v Prologu, když se šéfa jedné nejmenované firmy zeptali, na co je dobrý jejich OO Prolog, řekl, že neví, “naši zákazníci chtěli OO Prolog, tak jsme pro ně vyvinuli OO Prolog.” To bylo v době, kdy OOP bylo buzzwordem.
Jo tu knihu mám. Normálně se OOP moc nepoužívá, ať už z důvodu neznalosti nebo že opravdu není potřeba. Fortran má moduly a submoduly, takže zapouzdření probíhá na jiné úrovni. Ale je pěkný vidět, že se to dá do jazyka přidat za běhu, když je dobře navržený ;) Viděl bych to využití právě při architektuře nějaké specifické části softwaru nebo pro dobré napojení na stávající GUI frameworky. Jinak bych to s tím OOP nepřeháněl.
6. 11. 2021, 07:04 editováno autorem komentáře
Ano OCaml to tak má. Můžete parametrizovat modul, v jeho žargonu funktor: https://www.cs.cornell.edu/courses/cs3110/2012sp/lectures/lec09-functors/lec09.html
Když už jsme u Rustu, tak tady pro informaci: https://gist.github.com/Steelbirdy/65f495807d5d312d5627794190353b05 :)
Z Rustu koukám časem bude Agda :)
Hm. Zdá sa mi, že to ide úplne opačným smerom, ako Ada, ktorú produkčne používame.
Keď programujem v Ada, tak sa viacej napíšem.
Napr.
y := Shift_Right (x, 4);
je určite menej úsporné, ako C-čkové
y = x >> 4
Na druhej strane, čítanie cudzieho kódu je ľahšie a plynulejšie práve preto, že je menej komprimovaný.
A tu sa pridávajú ešte špeciálne znaky.
Keď som raz (s pomocou zdatnejšieho kolegu) robil integráciu Rust-ovej knižnice, tak väčšiu svojej mentálnej kapacity som míňal na "rustovanie" :)
Tak mi to ešte trochu pripomenulo situáciu v starovekej Číne, kde každý, kto dokázal písať a čítať, sa považoval za vzdelanca. U nás to za použitia latinky zvláda dieťa (a mentálnu kapacitu môže venovať tomu, ČO chce napísať).
V minulom storočí sme na elektrofakulte používali Matlab aj na maticové počty .. už si nepamätám presnú syntax, ale nemám dojem, že nás obmedzovala (a pritom si vystačila s ASCII symbolmi a operátormi).
"Tak mi to ešte trochu pripomenulo situáciu v starovekej Číne, kde každý, kto dokázal písať a čítať, sa považoval za vzdelanca. U nás to za použitia latinky zvláda dieťa"
To neni slozitosti pisma, ale povinou skolni dochazkou. Temer stejne znaky dnes musi zvladnout kazde dite (v Cine). U nas ve staroveku neumel psat nikdo (mozna nejaci kupci prichazejici ze stredomori).
8. 11. 2021, 16:35 editováno autorem komentáře