Dědičnost dnes

SB

Re:Dědičnost dnes
« Odpověď #825 kdy: 02. 02. 2017, 12:17:19 »
http://bredy.novacisko.cz/?/46
co reknete na tenhle clanek?

"...Buď se jedná o jazyk příliš složitý (smalltalk)..."
"... "Bernardýr" se bude v určitých situacích chovat jinak než třeba "Dalmantýn". "
"... tři základní vlastnost OOP
    zapouzdření
    dědičnost
    polymorfizmus"
...

 :-\


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Dědičnost dnes
« Odpověď #826 kdy: 02. 02. 2017, 12:18:18 »
Co má společného Turingův stroj s tím co jsem psal? Já psal o stroji s náhodným přístupem do paměti. Pomocí turingova stroje i lambda kalkulu můžete vyřešit stejné problémy, ale ne ve stejném čase a se stejnou paměťovou náročností. Běžné algoritmy jsou postupy výpočtu pro stroj RAM.

Myslim, ze to je problem v teorii, nikoli v praxi. Pominme ted to, ze FP je jen abstrakce, ktera se pak beztak preklada do von Neumannovy architektury.

Potiz je v tom, ze RAM, ktera ma pristup O(1), nelze fyzikalne zkonstruovat. I dnes se to projevuje tim, ze existuje neco jako hierarchie pameti (a ze treba nelze zvetsovat L1 cache, protoze se typicky ocekava, ze do ni pujde pristupovat v jednom cyklu). Proto se proste fakt, ze realna RAM neni O(1) zanedbava a pocita se s tim, jako by to bylo O(1), protoze to je dostatecne dobra aproximace pro velikosti RAM, ktere se typicky pouzivaji.

Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).
Přístup do RAM je O(1). Definice Big-O se dnes už na školách neučí nebo co? Takhle se pak nedá vůbec diskutovat...

gll

Re:Dědičnost dnes
« Odpověď #827 kdy: 02. 02. 2017, 12:20:47 »
Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).

Tak to určitě neplatí. Čas přístupu do paměti neroste logaritmicky s velikostí vstupu programu. O(1) je jen horní odhad rychlosti operace. Stačí uvažovat nejpomalejší možný přístup. Pořád to bude reálnému hardwaru mnohem blíž než Turingův stroj.

Re:Dědičnost dnes
« Odpověď #828 kdy: 02. 02. 2017, 12:29:28 »
Turinguv stroj s tim ma spolecneho to, ze je to z tradicnich duvodu "zaklad", se kterym je jak lambda kalkulus tak RAM ekvivalentni.

Z hlediska složitosti algoritmů určitě ekvivalentní není.

Ano, jak rikam, detaily behu se mohou lisit. Ale neplati to v te podobe, co jsi psal na zacatku (ze nejde neco implementovat prostrednictvim neceho jineho).

Re:Dědičnost dnes
« Odpověď #829 kdy: 02. 02. 2017, 12:32:48 »
Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).

Tak to určitě neplatí. Čas přístupu do paměti neroste logaritmicky s velikostí vstupu programu. O(1) je jen horní odhad rychlosti operace. Stačí uvažovat nejpomalejší možný přístup. Pořád to bude reálnému hardwaru mnohem blíž než Turingův stroj.

No prave ze ten logaritmus (ne velikosti programu ale dat) muze byt casto v realu az moc optimisticky odhad :-/

http://www.ilikebigbits.com/blog/2014/4/21/the-myth-of-ram-part-i



Inkvizitor

Re:Dědičnost dnes
« Odpověď #830 kdy: 02. 02. 2017, 12:33:34 »
To není žádný pravěk, je to jiný přístup. Já dávám přednost klasickému vývoji editací zdrojového kód po důkladném rozvážení a distribuci změn pomocí VCS. Smalltalk mi přijde jako vaření guláše. Je to málo slaný? Přisol. Zároveň mi do hrnce někdo strká lžíci, neb má hlad, kráva se na přední straně ještě pase, zadní noha se jí už vaří. Spadlo z ní zezadu něco do hrnce? Nevadí, vem naběračku, vylov to ven, zamíchej, přidej majoránku a vaříme dál.

Může to fungovat, ale možná je i nějaký dobrý důvod, proč se to ve větším měřítku neujalo.

Neujalo se to ze zcela jednoduchého dobrého důvodu - způsob překladu a spouštění aplikací většiny jazyků to neumožňuje. Mimoto váš příměr je docela hloupý, osobně neshledávám žádný přínos v potřebě překladu celé aplikace při drobné změně v jedné metodě, ale HLAVNĚ v časově náročné opětovné simulaci situace kdesi hluboko v aplikaci, to je tím hlavním problémem.

1. Způsob překladu a spouštění aplikací většiny jazyků to neumožňuje, protože o to jejich autoři nestáli.
2. Nikde jsem nepsal, že se má překládat celá aplikace kvůli jedné metodě a prakticky nikdy se to neděje.
3. Pokud je potřeba aplikaci opravovat tak, že do ní potřebujeme nahlížet za běhu v době, kdy k chybě došlo, máme podstatně závažnější problém - taková aplikace je časovaná bomba a do diskuse o paradigmatech je to velice závažný argument. A už vůbec si takový přístup nechci představovat v situaci, kdy dochází k poškozování cenných dat.

gll

Re:Dědičnost dnes
« Odpověď #831 kdy: 02. 02. 2017, 12:34:42 »
Ano, jak rikam, detaily behu se mohou lisit. Ale neplati to v te podobe, co jsi psal na zacatku (ze nejde neco implementovat prostrednictvim neceho jineho).

Pokud se v popisu algoritmu explicitně používají operace náhodného přístupu do paměti, tak ho na Turingově stroji implementovat nejde. Můžete ho změnit, aby to šlo, ale potom se bude jednat o jiný algoritmus.

Kiwi

Re:Dědičnost dnes
« Odpověď #832 kdy: 02. 02. 2017, 12:39:49 »
Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).

Tak to určitě neplatí. Čas přístupu do paměti neroste logaritmicky s velikostí vstupu programu. O(1) je jen horní odhad rychlosti operace. Stačí uvažovat nejpomalejší možný přístup. Pořád to bude reálnému hardwaru mnohem blíž než Turingův stroj.

No prave ze ten logaritmus (ne velikosti programu ale dat) muze byt casto v realu az moc optimisticky odhad :-/

http://www.ilikebigbits.com/blog/2014/4/21/the-myth-of-ram-part-i

To je teda dobrá volovina! Vzít teoretický koncept a aplikovat ho na jedno konkrétní technické řešení... Např. v mém embedded světě nic takového neplatí. Navíc cache slouží k urychlení práce s pamětí! Autor to obrátil, vzal tu urychlenou práci za O(1) a zkoumal, o kolik pomalejší to ve skutečnosti je. Ve skutečnosti O(1) je právě ten přístup bez cache a měl případně zkoumat, o kolik je to s cache lepší než teoretická O(1).

n

Re:Dědičnost dnes
« Odpověď #833 kdy: 02. 02. 2017, 12:42:06 »
nasi C++ vyvojari delaji makra o sto sest. kdybych mel prevzit jejich kod, asi bych si nejspis hodil masli.

Protoze jako skoro vsechno jsou makra dobry sluha, ale spatny pan.
Je treba si uvedomit, ze ruzne nastroje maji ruzne vhodne pouziti. Makra muze byt velka pomoc, nebo velke zlo. Zalezi na uzivateli, jak je pouziva.
Je ale nesmysl je zavrhovat apriori proto, ze je nekdo neumi pouzivat.

gll

Re:Dědičnost dnes
« Odpověď #834 kdy: 02. 02. 2017, 12:43:52 »
No prave ze ten logaritmus (ne velikosti programu ale dat) muze byt casto v realu az moc optimisticky odhad :-/

http://www.ilikebigbits.com/blog/2014/4/21/the-myth-of-ram-part-i

Což je další argument proti používání funkcionálního programování všude.

SB

Re:Dědičnost dnes
« Odpověď #835 kdy: 02. 02. 2017, 12:45:03 »
3. Pokud je potřeba aplikaci opravovat tak, že do ní potřebujeme nahlížet za běhu v době, kdy k chybě došlo, máme podstatně závažnější problém - taková aplikace je časovaná bomba a do diskuse o paradigmatech je to velice závažný argument. A už vůbec si takový přístup nechci představovat v situaci, kdy dochází k poškozování cenných dat.

Máte určitě na mysli ta nejcennější data, tj. testovací.

spasitel

Re:Dědičnost dnes
« Odpověď #836 kdy: 02. 02. 2017, 12:45:11 »
Co má společného Turingův stroj s tím co jsem psal? Já psal o stroji s náhodným přístupem do paměti. Pomocí turingova stroje i lambda kalkulu můžete vyřešit stejné problémy, ale ne ve stejném čase a se stejnou paměťovou náročností. Běžné algoritmy jsou postupy výpočtu pro stroj RAM.

Myslim, ze to je problem v teorii, nikoli v praxi. Pominme ted to, ze FP je jen abstrakce, ktera se pak beztak preklada do von Neumannovy architektury.

Potiz je v tom, ze RAM, ktera ma pristup O(1), nelze fyzikalne zkonstruovat. I dnes se to projevuje tim, ze existuje neco jako hierarchie pameti (a ze treba nelze zvetsovat L1 cache, protoze se typicky ocekava, ze do ni pujde pristupovat v jednom cyklu). Proto se proste fakt, ze realna RAM neni O(1) zanedbava a pocita se s tim, jako by to bylo O(1), protoze to je dostatecne dobra aproximace pro velikosti RAM, ktere se typicky pouzivaji.

Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).
Přístup do RAM je O(1). Definice Big-O se dnes už na školách neučí nebo co? Takhle se pak nedá vůbec diskutovat...
pristup do RAM je N*log(n). nevim co to tady spletate. minulej rok jsem statnicoval na CVUT, tak neco o tom vim ;)

Re:Dědičnost dnes
« Odpověď #837 kdy: 02. 02. 2017, 12:47:30 »
No prave ze ten logaritmus (ne velikosti programu ale dat) muze byt casto v realu az moc optimisticky odhad :-/

http://www.ilikebigbits.com/blog/2014/4/21/the-myth-of-ram-part-i

Což je další argument proti používání funkcionálního programování všude.

Zkus to, prosim, ozavorkovat ;)
Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).

Tak to určitě neplatí. Čas přístupu do paměti neroste logaritmicky s velikostí vstupu programu. O(1) je jen horní odhad rychlosti operace. Stačí uvažovat nejpomalejší možný přístup. Pořád to bude reálnému hardwaru mnohem blíž než Turingův stroj.

No prave ze ten logaritmus (ne velikosti programu ale dat) muze byt casto v realu az moc optimisticky odhad :-/

http://www.ilikebigbits.com/blog/2014/4/21/the-myth-of-ram-part-i

To je teda dobrá volovina! Vzít teoretický koncept a aplikovat ho na jedno konkrétní technické řešení... Např. v mém embedded světě nic takového neplatí. Navíc cache slouží k urychlení práce s pamětí! Autor to obrátil, vzal tu urychlenou práci za O(1) a zkoumal, o kolik pomalejší to ve skutečnosti je. Ve skutečnosti O(1) je právě ten přístup bez cache a měl případně zkoumat, o kolik je to s cache lepší než teoretická O(1).

A jak muze byt cache lepsi nez teoreticka O(1)? (hint: zamysli se nad tim, co to O znamena)

Jinak samozrejme vsechny tyhle aplikace vyzaduji nejakou davku nasili. Protoze realny pocitac s omezenou RAM a SSD ma ostatne konecny pocet stavu a tak je to, vzato do dusledku, konecne automat ;)

gll

Re:Dědičnost dnes
« Odpověď #838 kdy: 02. 02. 2017, 12:49:00 »
pristup do RAM je N*log(n). nevim co to tady spletate. minulej rok jsem statnicoval na CVUT, tak neco o tom vim ;)

Zaprvé, zkratkou RAM jsem myslel https://en.wikipedia.org/wiki/Random-access_machine .

Zadruhé, asi píšete o závislosti na celkové velikosti paměti počítače a ne na velikosti vstupu programu. Co je N a co n?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Dědičnost dnes
« Odpověď #839 kdy: 02. 02. 2017, 12:51:48 »
Co má společného Turingův stroj s tím co jsem psal? Já psal o stroji s náhodným přístupem do paměti. Pomocí turingova stroje i lambda kalkulu můžete vyřešit stejné problémy, ale ne ve stejném čase a se stejnou paměťovou náročností. Běžné algoritmy jsou postupy výpočtu pro stroj RAM.

Myslim, ze to je problem v teorii, nikoli v praxi. Pominme ted to, ze FP je jen abstrakce, ktera se pak beztak preklada do von Neumannovy architektury.

Potiz je v tom, ze RAM, ktera ma pristup O(1), nelze fyzikalne zkonstruovat. I dnes se to projevuje tim, ze existuje neco jako hierarchie pameti (a ze treba nelze zvetsovat L1 cache, protoze se typicky ocekava, ze do ni pujde pristupovat v jednom cyklu). Proto se proste fakt, ze realna RAM neni O(1) zanedbava a pocita se s tim, jako by to bylo O(1), protoze to je dostatecne dobra aproximace pro velikosti RAM, ktere se typicky pouzivaji.

Tedy realna RAM neni O(1), ale spis O(log n), a takovou RAM lze realizovat i funkcionalne (pomoci stromu).
Přístup do RAM je O(1). Definice Big-O se dnes už na školách neučí nebo co? Takhle se pak nedá vůbec diskutovat...
pristup do RAM je N*log(n). nevim co to tady spletate. minulej rok jsem statnicoval na CVUT, tak neco o tom vim ;)
Z log(n) už máme "N*log(n)", tedy funkci dvou proměnných...super. Tohle už ani není vtipný, tohle bude někdy tvořit SW?  ???