Problémy s JavaScript v praxi

andy

Re:Problémy s JavaScript v praxi
« Odpověď #570 kdy: 12. 10. 2018, 08:46:22 »
Díky v za sepsání ukázky...
Kód: [Vybrat]
{-# LANGUAGE OverloadedStrings, OverloadedLabels, FlexibleInstances, MultiParamTypeClasses #-}
... 27 řádek Haskellu s 5 importy

Není to příliš komplikované ve srovnání s uvedeným řešením v Pythonu? Než takovou divočinu, tak raději použiji ten Python nebo PHP, ve kterých je to kratší, přehlednější a hlavně udržovatelnější.
To je dobrý, eee tady chce, jak by se daný problém řešil "stejně" v kompletně jiném jazyce, o kterém tvrdí, že to v něm nejde. Tak je mu předveden minikód, který podobnou funkcionalitu "typů" jako v Pythonu vyrobí na 15 řádkách (ze kterých jde klidně udělat knihovna) a ty si stěžuješ, že to je "složité"....


v

Re:Problémy s JavaScript v praxi
« Odpověď #571 kdy: 12. 10. 2018, 08:58:17 »
funguje s repl.it, "obskurní knihovnu" nahrazuje splitOnChar, speciálně pro Kita odstraněn "syntactic sugar"
Kód: [Vybrat]
import Data.Map

data V = N Double | S String | O String (Map V V) | C String (Map V V)
    deriving (Ord, Eq, Show)

type_ name fields = C name (fromList fields)
new (C name fields) = O name fields
O _ fields ... k = fields ! k

--stolen from prelude
splitOnChar c s
    = case dropWhile (c==) s of
        "" -> []
        s' -> w : splitOnChar c s''
            where
            (w, s'') = break (c==) s'

main = do
    let cls:fields = splitOnChar ' ' "A a=1 b=2 c=3"
    let fields' = fmap ((\[k,v] -> (S k, S v)) . splitOnChar '=') fields
    let ty = type_ cls fields'
    print ty
    let o = new ty
    print (o ... S "a")

andy

Re:Problémy s JavaScript v praxi
« Odpověď #572 kdy: 12. 10. 2018, 09:01:10 »
Je z toho zřejmé, že se nejedná o vlastnost statického jazyka, ale nějakého minoritní knihovny, která skutečnou složitost řešení ve statickém jazyku skrývá. Z toho se mi jeví, že je to veli specifické řešení, nepřenosné na jiné jazyky s type inference a součtovým typem, tyto samotné na to nestačí
???? z tvé neschopnosti něco zkompilovat je zřejmé...co? Knihovna "split" je na rozsekávání stringů....

Citace
Když od toho odhlédnu, tak i ukázaný kód je složitější a řešení není tak jednoduché je zřejmé. Pythonu na to stačily 3 proměnné, 2 builtin funkce a 3 řádky kódu.

Jestli andy nepřijde sbjednodušším řešením,  mohl by to reflektovat a korigovat své tvrzení o statických jazycích.
Vy už tady normálně trolíte. Otázka zněla, zda lze python řešení udělat ve statickém jazyce. "V" tady ukázal kompletní zkompilovatelné řešení, které to dělá. V Haskellu bys samozřejmě řešil celou otázku přímo přes HashMap (dict) a nevyráběl si kvůli tomu nějaké typy. Ale chtěl jsi typy, tak máš 15řádkovou knihovnu (nazvi si je třeba PyTypes), dej si na začátek "import PyTypes" a celý to má v podstatě stejnou délku.

Citace
Nicméně přesto mě to jako technické řešení velmi zajímá. Odporuje to mým chabým vědomostem o haskellu, které říkají, že haskell nemá first-class datové typy, což je podstatou mé ukázky. Má haskell first class datové typy a nebo ta ukázka dělá něco jiného? Díky za vysvětlení.
V rámci tvého paradigmatu je C "first-class datový typ".

Citace
Uvidíme, jak budeš korigovat své sebevědomí, až zjistíš, že to nedokážeš. Pokud to dokážeš, tak já budu rád, že jsem se něco naučil, a rád přiznám, že moderním aspektům statickch jazyků nerozumím a zamrznul jsem na C a Javě.
Tak už jsi přiznal? Mimochodem,už jsi si přečetl prvních pár kapitol Pierce?

Kit

Re:Problémy s JavaScript v praxi
« Odpověď #573 kdy: 12. 10. 2018, 11:21:50 »
Ano, javascript může vracet dynamický počet hodnot a dokonce různých typů. Te se ve statických jazycích nedělá, ale ne proto, že by to nešlo, ale protože to není dobrý nápad.

Nevím, jestli i Javu považuješ za statický jazyk, ale dělá se to v ní často a docela snadno.

andy

Re:Problémy s JavaScript v praxi
« Odpověď #574 kdy: 12. 10. 2018, 11:34:20 »
Ano, javascript může vracet dynamický počet hodnot a dokonce různých typů. Te se ve statických jazycích nedělá, ale ne proto, že by to nešlo, ale protože to není dobrý nápad.
Nevím, jestli i Javu považuješ za statický jazyk, ale dělá se to v ní často a docela snadno.
Ono je to trošku napůl (má to run-time tagování), ale...teď si teda nejsem nějak schopen vybavit, že bych to někde viděl - jaké je to časté využití? Serializační knihovny?


Bacsa

Re:Problémy s JavaScript v praxi
« Odpověď #575 kdy: 12. 10. 2018, 11:57:47 »
Ano, javascript může vracet dynamický počet hodnot a dokonce různých typů. Te se ve statických jazycích nedělá, ale ne proto, že by to nešlo, ale protože to není dobrý nápad.
Nevím, jestli i Javu považuješ za statický jazyk, ale dělá se to v ní často a docela snadno.
Ono je to trošku napůl (má to run-time tagování), ale...teď si teda nejsem nějak schopen vybavit, že bych to někde viděl - jaké je to časté využití? Serializační knihovny?
DO proxy? Nebo db4objects to taky měla.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Problémy s JavaScript v praxi
« Odpověď #576 kdy: 12. 10. 2018, 12:34:11 »
Dobré je to třeba k pochopení, že dynamické jazyky mají datové typy a ...

Tohle je vůbec formulace. Má se to chápat tak, že staticky typované jazyky typy nemají, nebo co?

Ale abych byl alespoň trochu konstruktivní: vykašli se na cizí termíny, zdá se, že ti tu mnozí nerozumí ve způsobu jak používáš termín typ, implementace a abstrakce. Zkus to prosím, opravdu tě prosím, jednoduše popsat, v čem je podle tebe výhoda dynamických jazyků. Jednoduše, polopatě. Žádné cizí výrazy. Třeba na nějakém příkladu. Hlavně žádnou esoteriku prosím.

A prosím tě ještě o jednu věc, ať je ten příklad alespoň trochu věrohodnej.

A aby si mě nechápal špatně, není to z mé strany ironie. Jen se mi nechce věřit, že by spousta chytrejch lidí dělala věc, bez racionálního užitku.

Bacsa

Re:Problémy s JavaScript v praxi
« Odpověď #577 kdy: 12. 10. 2018, 13:12:09 »
Dobré je to třeba k pochopení, že dynamické jazyky mají datové typy a ...
Tohle je vůbec formulace. Má se to chápat tak, že staticky typované jazyky typy nemají, nebo co?
Vždyť výše psal, že Haskell typy nemá.

12345

Re:Problémy s JavaScript v praxi
« Odpověď #578 kdy: 12. 10. 2018, 13:20:43 »
Citace
v čem je podle tebe výhoda dynamických jazyků

Sice nejsem pan eee, ale za mě je to podstatně jednodušší a kratší kód. Má to samozřejmě i svoje nevýhody, ale na to se neptáte.

Bacsa

Re:Problémy s JavaScript v praxi
« Odpověď #579 kdy: 12. 10. 2018, 13:22:27 »
Citace
v čem je podle tebe výhoda dynamických jazyků
podstatně jednodušší a kratší kód
To tu přece už haskellisti vyvrátili.

12345

Re:Problémy s JavaScript v praxi
« Odpověď #580 kdy: 12. 10. 2018, 13:34:01 »
Haskell je mě moc mainstream. Ještě by to mohli vyvrátit v něčem obskurnějším, třeba v Javě.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Problémy s JavaScript v praxi
« Odpověď #581 kdy: 12. 10. 2018, 14:25:55 »
Citace
v čem je podle tebe výhoda dynamických jazyků

Sice nejsem pan eee, ale za mě je to podstatně jednodušší a kratší kód. Má to samozřejmě i svoje nevýhody, ale na to se neptáte.

Děkuji. V porovnání k jakému jazyku?

Re:Problémy s JavaScript v praxi
« Odpověď #582 kdy: 12. 10. 2018, 14:37:31 »
Haskell je mě moc mainstream. Ještě by to mohli vyvrátit v něčem obskurnějším, třeba v Javě.

Tak haskell se tu stavel proti pythonu. Co dame proti Jave? Navrhuju malbolge.

Kit

Re:Problémy s JavaScript v praxi
« Odpověď #583 kdy: 12. 10. 2018, 22:20:36 »
Ano, javascript může vracet dynamický počet hodnot a dokonce různých typů. Te se ve statických jazycích nedělá, ale ne proto, že by to nešlo, ale protože to není dobrý nápad.
Nevím, jestli i Javu považuješ za statický jazyk, ale dělá se to v ní často a docela snadno.
Ono je to trošku napůl (má to run-time tagování), ale...teď si teda nejsem nějak schopen vybavit, že bych to někde viděl - jaké je to časté využití? Serializační knihovny?

Kolekce a generika to v Javě zvládají s přehledem. Bez serializace. Jakékoli zpracování stromu se bez toho neobejde - uzly i listy mohou být tvořeny instancemi různých tříd dle potřeby. Stačí mít společné rozhraní.

andy

Re:Problémy s JavaScript v praxi
« Odpověď #584 kdy: 13. 10. 2018, 12:35:28 »
Jakékoli zpracování stromu se bez toho neobejde - uzly i listy mohou být tvořeny instancemi různých tříd dle potřeby. Stačí mít společné rozhraní.
Ano, to je přesně místo, kde se perfektně využijí součtové typy - garantují, že uzly/listy mohou nabývat pouze předem definovaných hodnot (instance konkrétních tříd). Kotlin už tohle umožňuje jako tzv. sealed classes. Naopak přístup Javy  je spíš přístupem dynamického jazyka - ta třída je interně otagovaná a při přetypování (nebo instanceOf) se ty tagy runtime porovnávají.