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 ... 267 268 [269] 270 271 ... 618
4021
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 06. 07. 2015, 12:57:05 »
Jenže já se nebavím o C, ale o makrojazyku cpp (preprocesoru).
Aha, sorry, to mi nějak nedocvaklo.

A zrovna tak i cpp, který je v zásadě čistě funkcionální
Není, v cpp žádným program nenapíšeš. Funguje to jenom díky tomu, že tam jsou velké kusy přímo C. Btw, cpp není ani turingovsky kompletní: http://stackoverflow.com/questions/3136686/is-the-c99-preprocessor-turing-complete

Je to prostě zavádějící příklad.

4022
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 06. 07. 2015, 12:37:18 »
Tohle je dost chytrý trollpost. A do značné míry i pravdivý.
Já bych naopak řekl, že je silně matoucí. Mám-li zdroják v Haskellu a přeložím ho, dostanu zjevně ne-funkcionální strojový kód. "Funkcionálnost" je vlastnost zdrojáku, ne přeloženého programu.

C rozhodně není funkcionální jazyk v žádném smyslu, i kdyby se nakrásně stalo, že zdroják v C a zdroják v Haskellu se přeloží na stejný strojový kód.

4023
Vývoj / Re:SHA 512 dostačující?
« kdy: 06. 07. 2015, 12:31:19 »
které tedy tazateli rozhodně neusnadní pochopení, v čem je problém.
Snad mu pomůžou pochopit, že jeho snaha je komická a měl by k tomu přistupovat s větší seriozností.

4024
Vývoj / Re:SHA 512 dostačující?
« kdy: 05. 07. 2015, 23:07:32 »
Ǔspešne som si vyskúšal investíciu do Bitcoinu, a teraz ešte potrebujem doriešiť peňaženku. Nechcem nič veľkého, také potrály len priťahujú pozornosť kadejakých drogových hekrov. Nemá niekto nejakú domácu peňaženku, najlepšie chránenú 500 znakovým heslom ku silnému kľúču?
Mám problém, prosím o radu. Uložil jsem si pár Bitcoinů do lokální peněženky, zadal sem pětisetznakové heslo, aby to bylo v bezpečí. Teď jsem si chtěl koupit za bitcoiny zmrzku, ale zanic na světě si nemůžu vzpomenout, jaký byl v hesle ten pětistý znak. Všechny ostatní si pamatuju, co mám dělat? Jde to nějak hacknout?

4025
Vývoj / Re:SHA 512 dostačující?
« kdy: 05. 07. 2015, 20:59:20 »
Koukám, zase jeden zneuznanej znovuobjevitel kola...  ;D
Už jenom čekám, kdy zazní slovo "Bitcoin" :)

4026
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 14:38:21 »
To nepochybuji že dělám plno věcí špatně, jsem konec konců začátečník. Ale když děláte IDE, musíte mít GUI, a takové i primitivní GUI pomocí gtk2hs je  opravdu na hodně řádků kódu. A taky potřebujeme měnitelné reference pro komunikaci mezi handlery eventů. Výsledek je ten, že program je povětšinou jen tvořen IO monádou, a vlastně nevidíme rozdíl mezi psaním v C a Haskellu. U interpretru imperativního jazyka je tento problém stejný. Možná ale menší. Parser a serializer lze naštěstí udělat bez IO monády, částečně, měnitelné reference v ast jsou problém, ale samotný evaluátor už nejde udělat bez IO monády.
To je celkem známý problém, že IO je "virální". Záleží na typu řešeného problému, jak moc se to projeví. "v" srovnává nesrovnatelné - překladač je prakticky "batch processing", tam není problém. U interaktivnějších záležitostí, jako je právě to IDE, to problém je. Možná by mohl pomoct ten reaktivní přístup - oddělit věci, které provádí IO a pomocí něčeho na způsob channelů pak posílat do kódu, který už může být čistý. Ale chápu, že se to snadněji řekne, než udělá, jsem si toho vědom, nechci dávat knížečí rady, je to jenom poznámka na okraj, když už tady to reaktivní programování zaznělo...

Musím nesouhlasit. Není to jako IO monáda. Neumím to blíže vysvětlit. Musí se to zkusit.
Vždycky je to de facto variace na nějakou lambdu. Vytvoří se nějaké lambdy a ty se v runtimu spustí, čímž se provede to vlastní IO. Jak přesně je to uděláno je detail, ale vždycky je to něco na tenhle způsob, protože to ani jinak nejde :)

4027
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 14:26:51 »
A Task není imperativní, on nedělá žádné vedlejší efekty. Obsahuje pouze informace o tom, co se má udělat [...] A tyto Tasky jsou poté pomocí signálů poslané do výstupních portů běhového prostředí, které už rozkazy vykoná, a případnou reakci zase pošle skrz vstupní porty z kterých je signály zase rozešlou do zbytku programu. Všechno je krásně čisté.
...což je prakticky to samé jako IO monáda ;)

4028
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 13:42:43 »
Odporuješ si. Pokud typem zajistíš, že nedojde k souběhu, a runtime to pak nedodrží tak jsi zase na začátku.
Říkal jsem, že nevím, jestli je to vůbec možné, pomocí typového systému něco takového garantovat, popř. do jaké míry, zas tak moc do té teorie nevidím, o tom by se musel rozepsat asi spíš Radek...

Runtime musí dodržet sémantiku jazyka. Nemůže si dělat co chce. Může dělat cokoli, ale jenom tak, aby zachoval význam programu.

Ono stačí prohlásit, že předpis je funkcionální, a už nesmí dojít k souběhu.
Já vlastně nevím, co tohle tvrzení říká. Asi bys to musel rozepsat víc formálně, abysme vůbec věděli, o čem je řeč.

4029
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 13:32:43 »
ještě jednou mimo hlavní tok diskuze - napsali jste už nějakou netriviální aplikaci ve funkcionálním jazyce? co a v jakém?
Já píšu hodně v Elixiru, teď hlavně nástroj na event management (něco na způsob Logstash) + k němu webový rozhraní. Tohle je docela velkej projekt. Plus mám v Elixiru ještě hromadu všelijakých menších věcí. Když jsme u toho, pokud by někdo měl zájem, dost bych bral někoho, kdo by měl chuť se podílet na https://github.com/mprymek/symconfig (je to ve fázi proof of concept, pre-alpha. Tady na tom githubu je starší verze, teď už je to o kousek dál, jenom jsem to ještě nezveřejnil). Příklad použití: https://github.com/mprymek/symconfig-example1

Akorát teda nevím, jestli Elixir počítáš do funkcionálních jazyků :)

Konkrétně třeba "No runtime exceptions". Ten jazyk se vážně chlubí tím, že buď všechno perfektně funguje nebo to naprosto neopravitelně padne na hubu? Na webové appky asi dobrý, no ... ::)
Není to spíš tak, že se s chybami počítá předem, musíš je ošetřit a nepřekvapí tě až při běhu?

4030
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 11:50:04 »
Svým způsobem může, ale není to až tak užitečné. I když zakážeme souběh uvnitř programu, stále je tu souběh se vším co běží mimo něj. IMO je to moc omezení a ve výsledku toho moc nepřinese.
Já bych celkem trval na tom, že ani tak nemůže :) Neumožnit to můžeš jedině na úrovni runtimu prostě tak, že tam nebude žádná funkce, která by spouštěla nové vlákno, nebudou tam C pluginy a nebudeš moct pouštět OS volání. Pro účely téhle debaty je podle mě nutný jazyk (syntaxe + typový systém) a runtime (sémantika, "výkonný stroj") odlišovat jako dvě různé věci.

Pořád nám zůstává otázka, jestli by nešel typový systém udělat tak, aby umožňoval běh ve víc vláknech a zároveň by nějakou typovou magií uměl poskytovat nějaké záruky ohledně těch vláken. Radek zmiňoval Rust a Mezzo. Já je neznám, takže neumím posoudit, jestli to takhle nějak dělají.

4031
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 02:59:18 »
Když ti typový systém umožní zajistit, aby návratová hodnota byla číslo, proč by nemohla hlídat čistotu bazénu? V čem je principielní rozdíl?
Myslím jako opravdu fyzicky vyčistit, asi nepodařenej vtip :)

Důvod takového dogmatu?
To není dogma. Ale neumím si představit, jak bys chtěl purity definovat tak, aby se vztahovala na runtime. Ty totiž mj. jako programátor vůbec netušíš, co runtime dělá. Možná sdružuje nějaké struktury, možná si něco cachuje, možná něco mění in-situ, protože si spočítal, že to v tenhle okamžik udělat může. Nevíš. Runtime by měl jenom dodržet sémantiku jazyka, nic víc nevíš.

Čili "pure runtime" mi přijde podobné jako "modrá myšlenka". Podle mě bys musel nadefinovat nějak zvláštně slovo "modrá", aby to dávalo nějaký smysl.

...a už ale fakt dobrou! :))

4032
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 02:48:16 »
a tudíž je IMHO pure
Ještě jednou: purity je podle mýho vlastnost jazyka a nedává žádný smysl ji vztahovat na runtime.

4033
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 02:44:12 »
Ty se domníváš, že jazyk nemůže zakázat souběh tak nějak z principu? Nebo jak to myslíš?
Řekl bych to úplně jednoduše takhle: role jazyka jako takového končí tím, jestli program jde nebo nejde přeložit. Čili jestli je syntakticky a typově správný. Nic víc po jazyku jako takovém nemůžeš chtít. Nemůže nic tušit o nějakém souběhu, nemůže ti zaručit správnost výpočtu, nemůže ti uvařit kafe ani vyčistit bazén. Čili na otázku "Ty se domníváš, že jazyk nemůže vyčistit bazén tak nějak z principu?" bych asi odpověděl "ano, tak nějak z principu" ;)

Ale zároveň si myslím, že to je jenom terminologické nedorozumění, že totiž pod pojem "jazyk" zahrnuješ třeba i interpret, standardní knihovnu atd. Já pod tím pojmem teď myslím fakt jenom "pravidla správné syntaxe" + typový systém.

...a už toho vážně nechám :) dobrou noc a díky za debatu!

4034
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 02:27:42 »
Hele, nemůžeme si tykat?

Představím si, že jsem kompilátor (naivní), tak bych z toho udělal switch, kde na základě toho první bajtu v souboru se rozhodnu jak budu pokračovat v dalších 256 cestách. Takhle si to představuji já, a takhle o tom uvažuji. Ale asi to stále není to, co máte na mysli.
Jediný, co jsem měl namysli, je ten rozdíl mezi programem, který žije v ideálním světě, kde nic není potřeba načítat a všechno je jenom statická relace, a skutečným světem, kde je potřeba dělat nějakou činnost. V tom ideálním světě tě nijak netrápí souběhy a ani o nich vůbec nemá smysl hovořit*, protože vše je statické, nic se nemusí vypočítat, nic se nespouští.

* pokud by pro ně jazyk neměl nějakou úplně explicitní syntax, která by vůbec nebyla funkcí, ale něčím úplně odlišným, nějakou speciální konstrukcí.


P.S. už to raději nebudu dál rozvíjet a půjdu spát, nechme to uležet :) Raději nechám taky prostor kolegům, pořád mám trochu svrbění, jestli jsem někde v té úvaze neudělal chybu, která by si zasloužila uvést na pravou míru :)

4035
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 02:10:14 »
Pokud ti jazyk zakazuje souběh, tak ho runtime nemůže udělat. Pokud jazyk nespecifikuje takovou situaci, pak ano.
Jazyk právě souběh nijak zakázat nemůže, to jde úplně mimo něj.

Nerozumím tomu, jak by mohl mět jeden jazyk více sémantik (významů výrazů)? Můžeš to rozvést?
Polopaticky řečeno, jazyk přece neřeší, co ty funkce opravdu dělají. Pro něj jsou to totální blackboxy. Zná jenom typ vstupů a typ výstupu, ale co se uvnitř opravdu děje, neřeší.

Příklad pro ten souběh: "ví" jazyk C, že fork spouští nějaký nový proces? Vůbec. Jak by ti jazyk jako takový mohl zakázat spustit nový proces, když on vůbec netuší a neřeší, co fork dělá. Pro něj je to prostě jenom "pid_t fork(void)" a pokud mu nedáváš žádný parametr a nechceš z něj dostat string, je happy :)

Pokud bys chtěl fork neumožnit, tak to uděláš třeba tak, že tvůj runtime vůbec nebude fci fork mít a nebude umožňovat volat systémová volání. A pak neforkneš ani kdyby ses na hlavu postavil. Ale jazyk za to nemůže, může za to runtime :)

Stran: 1 ... 267 268 [269] 270 271 ... 618