Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mirek Prýmek

Stran: 1 ... 105 106 [107] 108 109 ... 618
1591
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:50:15 »
Ano na vzdalenem produkcnim serveru mi bezi existujici aplikace. Pripojim se pomoci nREPL a hot reloadnu si co chci...
V navrhu erlangu to zrejme bylo klicove, zatimco v clojure to funguje spis nahodou, nez ze by to byl cil... ale funguje.
Samozrejme se na nejtere veci musi davat pozor.... Pokud sejdes z cesty a zacnes intenzivne pouzivat java interop, nebo atomy tak si muzes tu bezici aplikaci nakopnout. Ale pokud budes psat pure funkce tak je to bez problemu.
No vždyť já netvrdím, že to v Clojure nejde. Jenom říkám, že to neplyne z toho, že má REPL.

1592
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:49:10 »
Určitě? Composite type je prachobyčejný record/struct/class: https://en.wikipedia.org/wiki/Composite_data_type
No dyť jo :) Struct můžeš taky zneužít jako nadtyp: pokud chceš funkci, která vrací string nebo int, tak vrátíš struct se dvěma položkami, jedna string a druhá int.

1593
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:45:52 »
Protože staticky typovaný jazyk mi říká "hele, tu informaci, co konkrétně se chystáš nakupovat, bezpodmínečně potřebuju znát dopředu",
A to právě není pravda. I ve statickém jazyce můžeš mít kolekci "neznámého" typu. Ten typ musí minimálně splňovat vlastnosti, které jsou pro tu danou kolekci potřeba (např. musí být hashovatelný) a maximálně to může být i konkrétní typ. K praktické implementaci pak potřebuješ parametrizovatelné typy - něco jako Array<String>.

Statické typování mě nutí, abych dopředu znal nějaké omezení
Ne. Dobře udělané statické typování tě jenom nutí, aby ty vkládané objekty měly vlastnosti, které pro vložení do té které kolekce jsou nutně potřeba (např. ta hashovatelnost). A to je správně.

, nebo abych si ho uměle vytvořil
Nic takového se neděje.

1594
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:37:01 »
Upřesnění upřesnění: to je pak spíše protokol/rozhraní, případně trait.
No je to oboje. Chceš dosáhnout stejného cíle (vytvoření "obecnějšího typu") a jdeš na to buď přes algebraické typy nebo přes dědičnost nebo přes interfejsy.

1595
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:24:15 »
Tedy "sum type"? Tak tam má Go asi fakt handicap.
Jo. Nebo se používá i termín "composite type".

No ale interface naopak podporuje...
Ne že bych chtěl zrovna já obhajovat Go, jenom mě zajímalo, proč jsi po něm tak tvrdě vyjel.
Interfejsy sice podporuje, ale celkově je ten type systém dost omezený. Prakticky se to projevuje tak, že ve spoustě kódu uvidíš "prázdný interfejs" - tj. ekvivalent Object. Go je na tom prostě teď stejně jako Java před deseti lety. A i ty argumenty jsou stejné... (nejen) v tomhletom je Go trochu smutný příběh.

1596
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:12:04 »
To E v REPL znamena "evaluate".  Nevim jak jinde, ale v mem oblibenem clojure proste predhodim REPLu kod a on se evaluuje. To znamena, ze pokud v tom kodu prepisu funkci, nebo cely namespace tak stara verze kodu efektivne zmizi a je nahrazena tou predhozenou.
A uz sem to videl v akci i na produkci... (byl to trochu opruz kvuli sitarum a bezpecakum, ale nakonec to probehlo)
No jistě, ale to je něco jinýho.

Hot reloading v Erlangu je o tom, že ti běží na serveru nějaká aplikace a ty v ní za běhu změníš část kódu. Klíčový je to, že měníš existující aplikaci, zatímco v REPLu vlastně vytváříš novou.

1597
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 12:10:22 »
Tomu rozumím, ale asi tušíš, že na to jsem se neptal.
Netušil jsem, jinak bych ti tak neodpovídal :)

Jde mi o tu implementaci; chápu, že třeba v Javě máš Object, narážíš konkrétně na Go, ale pokud tomu dobře rozumím, tak nízkoúrovňové jazyky obecně nic takového nemají.
Nevím, co jsou "nízkoúrovňové jazyky". Bavíme se obecně o různých jazycích, takže těžko mluvit o konkrétní implementaci. Prakticky těch mechanismů může být víc, ale všechny mají stejný "filosofický" princip:

1. typ je "sjednocením" dvou typů -> algebraické typy (tj. prakticky: chci mít možnost napsat funkci, která vrací string nebo int)

2. nadtyp je definovaný tím, že má jenom některé vlastnosti podtypu -> dědičnost, interfejsy

V jazyce OOP klíčová slova "předek" a "Liskovové substituce".

1598
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 11:56:49 »
Co máš na mysli těmi nadtypy, prosímtě?
Typ je množina hodnot. Nadtyp je nadmnožina.

1599
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 11:35:23 »
Mel bys na to nejaky odkaz? Nefunguje to u kazdeho jazyka s REPL?
S REPL to nemá nic společnýho. V Erlangu můžeš za běhu vyměnit jeden modul za jiný. Můžeš si to představit tak, jako bys v Javě vyměnil implementaci třídy String za jinou a všechen kód, včetně knihoven atd. začal pracovat s novou třídou (ta stará prostě vůbec neexistuje, vyhodíš ji). Nejsem si vůbec jistej, jestli tohle umí všechny jazyky, spíš bych řekl, že ne.

1600
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 11:16:21 »
A co se zeptat opačně - proč by nutně musely mít nějaký dopředu známý patřičný typ? Když jdu nakupovat rohlíky, tak k tomu také nepotřebuji speciální tašku na rohlíky.
Tady podsouváš něco, co není pravda (strawman). Že máš staticky typovaný jazyk ještě neimplikuje, že musíš nutně pracovat jenom s nějakými základními typy a všechny je zvlášť ošetřovat. Stačí ti mít nějaký mechanismus nadtypů (viz výš).

Že některé statické jazyky nadtypy nemají, to považuju za zločin (jo, mluvím o tobě, Go!).

Čili v tom tvém příkladu: máš nadtyp "cokoli do čeho se dá vložit cokoli, co je menší než Boeing" ;)

1601
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 11:01:07 »
P.S. Taky není od věci si uvědomit, že "znát typ" není nic jiného, než "vědět něco o datech, která se v tomhle místě programu můžou vyskytnout". Přičemž u drtivé většiny jazyků (všech?) to "něco" pořád ještě nestačí k tomu, abys mohl mít jistotu, že program bude ve všech případech běžet korektně.

Např. pokud víš, že ve výrazu x / y je y s jistotou "integer", je ti to víceméně na nic, protože situace, kdy je y nula má stejné důsledky jako kdyby to byl string. Dělení nulou je stejně nedefinované jako dělení stringem. Takže kdykoli se ti v programu objeví dělení (nebo jakákoli jiná parciální funkce), stane se ti ze statického jazyka efektivně dynamický - protože prostě v době překladu nejsi schopný ověřit korektnost.

1602
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 10:41:30 »
Upřesnění:

máš k dispozici algebraické typy
Tohle jsem moc zúžil. Nemusí to být jenom vyloženě algebraické typy, ale jakýkoliv mechanismus "nadtypů". Třeba i to klasické OOP "načtu přes síť objekt, neznám jeho kompletní typ, ale vím, že umí zpracovat zprávu saveToPdf" - to je taky "nadtyp".

1603
Vývoj / Re:Co si myslíte o OOP?
« kdy: 31. 12. 2018, 10:35:33 »
1. Erlang dokáže za chodu opravovat/upravovat kód. A autoři prohlásili, že tam typy nedali, protože se jim nepovedlo vymyslet jak na to.
Měl bys k tomuhle nějakej odkaz? Přijde mi divný, že by to zaznělo přesně takhle (že by tím důvodem byl právě hot code loading).

---

Jinak k té debatě statický vs. dynamický: ani trochu se nechci účastnit flamewaru, přijde mi to dětinský. Oba přístupy mají svoje pro a proti a každej si může vybrat, co mu víc vyhovuje. IMHO jsi ale udělal v úvahách několik faktických/argumentačních chyb.

1. Několikrát opakuješ obrat "nemá typy". To je minimálně zavádějící. Dynamické jazyky mají typy. Od staticky typovaných se liší jenom tím, jestli informaci o typu znáš (pozitivně, s jistotou) při překladu, nebo až v době běhu. V principu provádíš tu stejnou kontrolu, jenom jindy. Výhoda statických jazyků je v tom, že kontrolu provedeš (ve většině případů - viz 2) jenom jednou, zatímco u dynamického ji musíš provádět pořád dokola, za běhu.

2. Z bodu 1 přímo vyplývá, že statický jazyk má problém v situacích, kdy typ v době překladu z principu nemůžeš znát - to je ten příklad s načítáním JSONu, ale můžeš jich vymyslet bambilion jiných. Můžeš to řešit dvěma způsoby (možná i jinak, ale teď mě jiná možnost nenapadá):

A) buď máš k dispozici algebraické typy a (v době překladu neznámý) typ prohlásíš za nějakou nadmnožinu různých typů, v extrémním případě všech myslitelných a dál pracuješ s tímhle nadtypem

B) nebo typ zjistíš za běhu (dynamické typování!) a program podle typu větvíš, takže i v době překladu víš, že do určité větve ti jde už jenom určitý typ

3. Někde jsi řekl, že do dynamických jazyků nejdou typy (při překladu) dodat. To není pravda. Stejně jako se u statického jazyka občas musíš uchýlit k dynamickému typování, můžeš u dynamického jazyka otypovat ty části programu, kde v době překladu víš, co tam bude za typ. A můžeš to i kontrolovat, úplně stejně jako u statického (viz např. u Erlangu Dializer). Dokonce by asi i šlo (ale nevím o žádném dynamickém jazyce, který by to uměl) třeba některé části programu otypovat staticky a u nich vyhodit kontroly typů za běhu.

Prostě, ty dva přístupy se vzájemně nevylučují. Je třeba si jenom uvědomit, že u některých částí programu víš předem, s jakými daty může pracovat, u jiných částí to nevíš (ani u jednoho typu jazyka). Ty části můžou být různě velké.

Na druhou stranu s tebou docela souhlasím v tom, že udržovat tu část, kde typy znáš, co největší (a tím se vyvarovat runtime chybám) je docela dobrý přístup. Ale i kdyby ses na hlavu postavil, nemůžeš mít takových 100% programu. Někde prostě z principu věci dostaneš data, jejichž typ v době překladu neznáš.

1604
Vývoj / Re:Co si myslíte o OOP?
« kdy: 30. 12. 2018, 19:29:13 »
Me by zajimal ten Hadoop (bez ironie). Rozvedl bys to?
Mě taky. Dneska alternativy jsou (minimálně znám Spark a Flink), ale ty jsou IIRC pozdějšího data.

1605
Vývoj / Re:Co si myslíte o OOP?
« kdy: 29. 12. 2018, 23:04:33 »
Ale Mirku... BeOS byla jednouživatelská hračka pro omezené spektrum využití, MacOS nestabilní OS se složitou správou RAM a kooperativním multitaskingem
Tak jistě, ale musíš srovnávat produkty vydané ve stejné době. "Masová" (tj. ne-NT) verze Windows měla preemptivní multitasking až od Windows 95 a že by ty nějak oplývaly stabilitou, to ani nemám uplně pocit :)

a byl poměrně drahý
Nojo, jenže o tom právě jsou ty business decisions. Kdyby si tenkrát IBM nehrálo na exkluzivní OS, ale dalo by ho za babku a ke svému železu zdarma, kdoví, jakou cestou by vývoj šel.

---
Nicméně to je dost OT, radši už to rozvíjet nebudu :)

Stran: 1 ... 105 106 [107] 108 109 ... 618