Má Python budoucnost?

v

Re:Má Python budoucnost?
« Odpověď #315 kdy: 13. 05. 2016, 15:19:36 »
Kód: [Vybrat]
[quote author=andy link=topic=13173.msg165937#msg165937 date=1463144144]
result = input & map (+1)
               & filter (<100)
               & sum
[/quote]
vypadá to hrozně


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #316 kdy: 13. 05. 2016, 15:46:58 »
Proc nezrusit i cely switch? Krome nekolika malo pripadu (ale fakt malo) je to jen chapa nahrada za spatne navrzenou hierarchii trid (vetsinou se da nahradit polymorfismem a v lepsich!!! jazycich pattern matchingem).

pattern matching je len vylepseny switch.

Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch).
Co to v praxi znamená?

beny

Re:Má Python budoucnost?
« Odpověď #317 kdy: 13. 05. 2016, 16:02:24 »
Proc nezrusit i cely switch? Krome nekolika malo pripadu (ale fakt malo) je to jen chapa nahrada za spatne navrzenou hierarchii trid (vetsinou se da nahradit polymorfismem a v lepsich!!! jazycich pattern matchingem).

pattern matching je len vylepseny switch.

Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch).

Ako to myslite? mozte uviest nejaky priklad?

Lebo mne pride zapis:

Kód: [Vybrat]
switch (var)
{
    case 'a': return 1;
    case 'b': return 2;
    case 'c': return 3;
    default: return -1;
}

je ekvivalentny zapisu:

Kód: [Vybrat]
match var with
| 'a' -> 1
| 'b' -> 2
| 'c' -> 3
| _ -> -1

Akurat pri matchu mam este dalsie moznosti - napriklad mozem matchovat polozky listu:

Kód: [Vybrat]
match list with
| [] -> []
| ((head1 :: head2) as lst) :: tail -> lst
| head :: tail -> [head]

alebo pouzivat active patterns.

Kit

Re:Má Python budoucnost?
« Odpověď #318 kdy: 13. 05. 2016, 16:04:08 »
Proc nezrusit i cely switch? Krome nekolika malo pripadu (ale fakt malo) je to jen chapa nahrada za spatne navrzenou hierarchii trid (vetsinou se da nahradit polymorfismem a v lepsich!!! jazycich pattern matchingem).

pattern matching je len vylepseny switch.

Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch).
Co to v praxi znamená?

Chová se to tak, jako kdyby ten pattern byl názvem funkce. Něco jako stráže v Haskellu, ale o level výš - přímo v kořeni aplikace. Každý pattern může (nemusí) být v samostatném souboru, přidání dalšího patternu tedy nemusí znamenat žádný zásah do již hotové části aplikace.

Kit

Re:Má Python budoucnost?
« Odpověď #319 kdy: 13. 05. 2016, 16:15:44 »
Kód: [Vybrat]
match var with
| 'a' -> 1
| 'b' -> 2
| 'c' -> 3
| _ -> -1

V jednoduchosti (popsáno metajazykem) by to mohlo vypadat asi takto:
Kód: [Vybrat]
match 'a' -> 1
match 'b' -> 2
match 'c' -> 3
match '*' -> -1

Slovo 'match' tam samozřejmě být nemusí a tím se to pomalu začne podobat našemu oblíbenému AWK. Záleží pak už jen na tom, jaké má dotyčný engine ambice - jednoduchost či komplexnost.


Re:Má Python budoucnost?
« Odpověď #320 kdy: 13. 05. 2016, 16:19:08 »
Jaká historická forma? Je to živá forma a to nejen pro interprety, ale i pro mladé skladatele. https://www.megaknihy.cz/hudba/215979-preludium-a-fuga-pro-klavir.html To bys takhle mohl odsoudit kde co, treba cihly :-).
A co jako? Je to prostě barokní forma, což nevylučuje, aby někdo podle jejích pravidel skládal později. Třeba jako cvičení, z lásky k baroku nebo ze srandy. Pseudogotické stavby se taky staví dodnes a nikdo nebude argumentovat, že moderní stavby jsou špatné, protože neobsahují lomený oblouk :)

Nejde o fugu, jako takovou, ale priklad hudebni slozitosti, vedle ktere je moderni popularni hudba detsky jednoducha. A nezodpovezena otazka zni, je proto nekvalitni? Poukazuji tim na zcestnost odsuzovani neceho jen proto, ze je to jednoduche.

Jak se rika, podle sebe soudim tebe, takze mi zkus neprisuzovat sve zpusoby chovani a zkus se vyjadrit k veci.
Vyjadřuju se k věci celou dobu. Souhlasím, že složitost není měřítkem ničeho, protože v umění není nic měřítkem ničeho. Umění je čistě konsensuální koncept. Co jím prohlásíme, to jím bude. A co prohlásíme za kvalitní, to budou lidi jako kvalitní vnímat. Mj. proto, že se tím potvrzuje společenský status.

Mj. taky hudba působí na mnoha vrstvách a různými způsoby. Já třeba docela respektuju freetekno a hladám v něm úplně jiné věci než třeba v tom Smetanovi - a nikdy by mě nenapadlo je srovnávat. Při Smetanovi nezažiju to, co na freeteknu a naopak.

...z čehož plyne, že Python má budoucnost i když je úplně jiný než Haskell! ;)

Re:Má Python budoucnost?
« Odpověď #321 kdy: 13. 05. 2016, 16:25:03 »
Ale je to takové nehaskelloidní :)
No právě - proto jsem to říkal - že v Haskellu je prostě zvykem psát tím způsobem, který vyžaduje očima těkat. Jakoby sám o sobě ten jazyk nebyl dost komplikovanej, ještě se do toho přidá tohle :) Zlatej Elm! ;)

Luďa

Re:Má Python budoucnost?
« Odpověď #322 kdy: 13. 05. 2016, 16:44:29 »
S ničím se to nemá přehánět. Ani s jednoduchostí. Ono to pak totiž může působit ne jednoduše, ale vyloženě primitivně, až si skoro můžete připadat, jestli si z vás dotyčný "umělec" nedělá srandu.

Hudební producenti se snaží dělat hudbu schválně co nejpřístupnější širokým masám, chrlí tu nejpřímočařejší, nejstravitelnější hudbu, jaká se dá vůbec vyprodukovat, aby na ní vydělali co nejvíc. S takovou hudbou nebude mít problém ani vaše prababička, zato jsou to hitovky typu jedním uchem dovnitř, druhým ven. Prostě žádný hudební orgasmus se nekoná.

Naštěstí jsou tady pořád opravdoví umělci, kterým jde v první řadě o hudbu samotnou. Ty nikdy v rádiu neuslyšíte a miliardy fanoušků taky mít nebudou, ale jim je to celkem jedno, není to totiž jejich primárním cílem.

Koho ta sterilní rádiová produkce baví, ten ať si to užije. Přeju příjemný poslech.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #323 kdy: 13. 05. 2016, 16:56:25 »
Kód: [Vybrat]
match var with
| 'a' -> 1
| 'b' -> 2
| 'c' -> 3
| _ -> -1

V jednoduchosti (popsáno metajazykem) by to mohlo vypadat asi takto:
Kód: [Vybrat]
match 'a' -> 1
match 'b' -> 2
match 'c' -> 3
match '*' -> -1

Slovo 'match' tam samozřejmě být nemusí a tím se to pomalu začne podobat našemu oblíbenému AWK. Záleží pak už jen na tom, jaké má dotyčný engine ambice - jednoduchost či komplexnost.

Ach jo, s tebou je někdy práce.

V kódu:
Kód: [Vybrat]
switch(True) {
  case a > 1 && a < 10: do_foo(); break;
  case is_valid(b): do_boo(); break;
  case a <= 1: do_goo(); break;
  default: do_otherwise();
}
Sice funguje, jenže je to taková problematická věc. Protože za kontext switche/pattern matchingu považuje celej scope. Což je sice hrozně pohodlný, a rád to používám, ale taky dost nebezpečný.

Samozřejmě tam nadřazený element je. Vždycky tam musí být. V Haskellu, kde se takto přetěžují funkce, je nadřazeným elementem modul (scope modulu).

No, a říct o tom, že: "Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch)." je prostě jenom neužitečná provokace.

gl

Re:Má Python budoucnost?
« Odpověď #324 kdy: 13. 05. 2016, 17:07:42 »
Haskell je prakticky asi jak pro koho - osobne si myslim, ze je to pouze o zpusobu vzdelavani, kde se na zacatek silne preferuji imperativni jazyky (Java, Python, Pascal). Napr. na FITu jsme si funkcionalni pristup osahali az v magisterskem, ktere bylo povazovano nekterymi prednasejicimi za nadstandard a do praxe muze student v pohode i jen s bakalarem.

Osobne si nemyslim, ze kvalita jakkoliv souvisi s popularitou. Kvalitni jazyk se totiz podle me nesnazi pretrhnout kvuli zacatecnikum a znehodnotit tak sve dalsi casti nebo cely svuj pristup. A kdyz jsme u toho, tak pokud chcete objektivne merit kvalitu/pouzitelnost a vztahnete ji i k popularite, jak presne objektivne merite popularitu? :D Podle radek kodu v produkci? Celkoveho vydelku vyvojaru pouzivaci ten jazyk? Nejake nahodne zvolene kriterium jako pocet commitu GitHubu a pocet dotazu na StackOverflow?

Prakticka pouzitelnost jazyka zase nema s popularitou IMO nic spolecneho. I uplny odpad, jako PHP, ktery je obtizne pouzitelny (poskytl jsem dost prikladu, nekolik jich dodal i Kit a ten v tom dokonce i vyviji trochu vice) a stejne se stal popularnim. Stejne tak to nerika nic o pouzitelnosti a kvalite jeho knihoven a celkove ekosystemu. (Ktery ho v pripade PHP drzi nad vodou.) To stejne mohu vztahnout na NodeJS - to ze je JavaScript nejpopularnejsi jazyk na planete z neho nedela nejlepsi jazyk a ani nejpouzitelnejsi, rozhodne ne nejak univerzalne. S chladnou jistotou bych vzdy doporucil Javu, Scalu nebo klidne i ten Haskell na back-end pro jakykoliv projekt, ktery neni "fire-and-forget" - tj. ze se ocekava dlouha doba udrzby. Proste dynamicke jazyky, stejne jako treba ty "pokrocile magie", tam podle me nepatri. Dynamicke jazyky typu Ruby se skvele hodi pro stratup, to nepopiram, projektiky jsou obecne mensi, potrebuji to mit rychle udelane a pokud to uspejeje a budou problemy (u tech uspesnych casto ctu, ze jsou), tak to proste prepisou do neceho vice se hodiciho na dany ukol (vetsinou ta Java ci C#, videl jsem uz ale i treba NodeJS, k cemuz jsem byl trosku skepticky).

S tou pajpou jsem myslel Python. V JavaScriptu je vyhoda, ze je prave ten kratky zapis closure, takze staci pribrat treba ten Lodash a muzete vesele retezit. Bohuzel v Pythonu je lambda silene dlouha na zapis, jako kdyby autor nechtel, aby se to moc pouzivalo. Coz ostatne sedi k jeho postoji o FP. To jsme ale trochu odbocili, protoze ani o JS jsem nepsal, ze je nejake skvele na FP, rozhodne ne out-of-the-box (chybi mi spousta funkci pro manipulaci s poli). Puvodne jsem to srovnaval se Scalou a tam jsou i veci, ktere umoznuji opravdu jednoduchy kod (ktery me prijde hezky, ale to je opravdu silne subjektivni), treba placeholder _.
Kód: [Vybrat]
(1 to 10).filter(_ % 2 == 0).map(_ * 10)

Slovo lambda se používá například i ve scheme. V délce zápisu není největší problém. Neexistenci vícepříkazových anonymních funkcí je třeba brát jako vlastnost pythonu a naučit se s tím žít. Ten váš příklad bych v pythonu přepsal jako
Kód: [Vybrat]
[i*10 for i in range(1,10) if i %  2 == 0]. Python není FP jazyk a nesnaží se jím být. Kdo chce programovat za každou cenu funkcionálně, ať používá něco jiného. Ano, python je jednoduchý a snaží se přetrhnout kvůli začátečníkům. Díky tomu má velkou komunitu a velké množství knihoven. Proč řešit jednoduché problémy složitým nástrojem?

gl

Re:Má Python budoucnost?
« Odpověď #325 kdy: 13. 05. 2016, 17:22:30 »
Pattern matching treba ve Scale je hodne silny, defaultne umi i regexpy, ale lze si dodefinovat libovolny extractor. Celkem skoda, ze se podobne veci v popularnich jazycich prilis nevidi.
Ono je obecně škoda, že se v populárních jazycích moc nevidí koncepty z FP. Možná si tvůrci jazyků myslí, že na běžného vývojáře je FP moc složité/abstraktní/matoucí... Přitom takové OOP většina také dost patlá...

Je stejne zajimave, jak dlouho trvalo OOP, nez se prosadilo. Pokud si to pamatuju spravne, tak byl potreba prechod na graficka uzivatelska rozhrani, kde OOP zazarilo, a az pak se opravdu masove zacalo pouzivat. Mozna stojime na podobnem prahu - jak roste pocet jader, ale ne vykon jadra, tak FP pristup zacina byt dost zajimavy.

PS: Je opravdu dost mozne, ze je to pouze zpusobeno pristupem skol, kdy se imperativni pristup uci prvni. A teda prijde me, ze i podstatne lepe, nez treba ten funkcionalni. V imperativnim jsme rovnou zacali patlat v C, u funkcionalniho jsme nejdriv museli prezit a nepochopit (nasprtat se) teorii a az pak, pri reseni projektu, zacit chapat, o cem ze ta teorie asi ze byla.

Já jsem se s haskellem setkal ve škole asi před 10-ti lety a nevzpomínám si, že by ho někdo ze spolužáků začal ihned používat v praxi. Víc než na škole záleží na vyspělosti ekosystému okolo. Ten je dneska úplně jinde. Naopak, dynamické jazyky jako ruby, php a js se nikdy nikde neučily a rozšířily se docela rychle.

Kit

Re:Má Python budoucnost?
« Odpověď #326 kdy: 13. 05. 2016, 17:29:40 »
V jednoduchosti (popsáno metajazykem) by to mohlo vypadat asi takto:
Kód: [Vybrat]
match 'a' -> 1
match 'b' -> 2
match 'c' -> 3
match '*' -> -1

Slovo 'match' tam samozřejmě být nemusí a tím se to pomalu začne podobat našemu oblíbenému AWK. Záleží pak už jen na tom, jaké má dotyčný engine ambice - jednoduchost či komplexnost.

V kódu:
Kód: [Vybrat]
switch(True) {
  case a > 1 && a < 10: do_foo(); break;
  case is_valid(b): do_boo(); break;
  case a <= 1: do_goo(); break;
  default: do_otherwise();
}
Sice funguje, jenže je to taková problematická věc. Protože za kontext switche/pattern matchingu považuje celej scope. Což je sice hrozně pohodlný, a rád to používám, ale taky dost nebezpečný.

Samozřejmě tam nadřazený element je. Vždycky tam musí být. V Haskellu, kde se takto přetěžují funkce, je nadřazeným elementem modul (scope modulu).

No, a říct o tom, že: "Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch)." je prostě jenom neužitečná provokace.

Evidentně jsi vůbec nepochopil, o čem jsem psal. Nevadí.

To sis vůbec nevšiml, že tam žádný "switch" nemám? Ani ve zdrojáku není. Nebavil jsem se o Haskellu, ale o metajazyku ve stylu AWK a jemu podobných. Nadřazeným elementem je samotný engine toho jazyka.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #327 kdy: 13. 05. 2016, 17:36:18 »
V jednoduchosti (popsáno metajazykem) by to mohlo vypadat asi takto:
Kód: [Vybrat]
match 'a' -> 1
match 'b' -> 2
match 'c' -> 3
match '*' -> -1

Slovo 'match' tam samozřejmě být nemusí a tím se to pomalu začne podobat našemu oblíbenému AWK. Záleží pak už jen na tom, jaké má dotyčný engine ambice - jednoduchost či komplexnost.

V kódu:
Kód: [Vybrat]
switch(True) {
  case a > 1 && a < 10: do_foo(); break;
  case is_valid(b): do_boo(); break;
  case a <= 1: do_goo(); break;
  default: do_otherwise();
}
Sice funguje, jenže je to taková problematická věc. Protože za kontext switche/pattern matchingu považuje celej scope. Což je sice hrozně pohodlný, a rád to používám, ale taky dost nebezpečný.

Samozřejmě tam nadřazený element je. Vždycky tam musí být. V Haskellu, kde se takto přetěžují funkce, je nadřazeným elementem modul (scope modulu).

No, a říct o tom, že: "Ne tak docela. Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch)." je prostě jenom neužitečná provokace.

Evidentně jsi vůbec nepochopil, o čem jsem psal. Nevadí.

To sis vůbec nevšiml, že tam žádný "switch" nemám? Ani ve zdrojáku není. Nebavil jsem se o Haskellu, ale o metajazyku ve stylu AWK a jemu podobných. Nadřazeným elementem je samotný engine toho jazyka.
Ale všiml. A ty si prosím povšimni, že v mém případě jde jen o syntaktickou nutnost danou jazykem. Ale technicky tam být nemusí. Proto platí, že pattern matching je jen lepší switch. Principielně to totiž je fakt úplně stejný.

Pomohlo by, aby jsi uvedl kompletní příklad. Tento druhý ti nebude fungovat, páč tam neuvádíš var.

Kit

Re:Má Python budoucnost?
« Odpověď #328 kdy: 13. 05. 2016, 17:43:01 »
Pomohlo by, aby jsi uvedl kompletní příklad. Tento druhý ti nebude fungovat, páč tam neuvádíš var.

Podívej se na libovolný skript pro AWK a uvidíš kompletní příklad. Nikde žádný cyklus, nikde žádný switch. Prostě jen vzorek, akce, vzorek, akce, ...

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #329 kdy: 13. 05. 2016, 17:46:04 »
Pomohlo by, aby jsi uvedl kompletní příklad. Tento druhý ti nebude fungovat, páč tam neuvádíš var.

Podívej se na libovolný skript pro AWK a uvidíš kompletní příklad. Nikde žádný cyklus, nikde žádný switch. Prostě jen vzorek, akce, vzorek, akce, ...
Chápu. Problém je v tom, že v tvém příkladu tam schází "co" matchuješ. Takže díky tomuto opomenutí si nabil dojmu, jakoby "Ten pattern totiž nemusí být součástí nějakého nadřazeného elementu (konstrukce if nebo switch)".

To je všechno, co jsem chtěl řešit. Přeji pěkný den.