abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:00 | IT novinky

    Na Humble Bundle běží akce Linux: All the Things by O'Reilly a Picos, HATs, and More by Raspberry Pi Press. Elektronické knihy lze koupit se slevou a současně podpořit organizace Code for America a Raspberry Pi Foundation.

    Ladislav Hagara | Komentářů: 1
    včera 14:00 | Komunita

    FreeCAD (Wikipedie), tj. svobodný multiplatformní parametrický 3D CAD, má nový vtipný a současně užitečný doplněk Banana For Scale (GitHub). Aktuálně umožňuje do výkresu vložit banán nebo plechovku pro porovnání a určení měřítka.

    Ladislav Hagara | Komentářů: 4
    včera 12:00 | Komunita

    Blender Studio nedávno oznámilo plán vytvořit svůj první otevřený (open source) celovečerní film. Film by se měl jmenovat Overgrown (YouTube). Film vznikne, pokud se zajistí financování. Prvním krokem je získat 7 000 předplatitelů Blender Studia. Cena je od 11,50 eur měsíčně. Aktuálně počet předplatitelů je 5 289. Předplatné pokryje 20 % nákladů. Zbytek, 80 % nákladů, má být financován externími producenty nebo distributory.

    Ladislav Hagara | Komentářů: 0
    12.7. 01:11 | Nová verze

    Byl vydán Debian 13.6, tj. šestá opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.15, tj. poslední patnáctá opravná verze Debianu 12 s kódovým názvem Bookworm, k dispozici je LTS. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 0
    10.7. 16:11 | Bezpečnostní upozornění

    V jádře Linux byla nalezena a v upstreamu již byla opravena kritická zranitelnost GhostLock aneb CVE-2026-43499. Lokálnímu uživateli umožňuje získat práva roota a také obejít kontejnerovou izolaci. Zranitelnost existovala v Linuxu 15 let, tj. od roku 2011, od Linuxu verze 2.6.39.

    Ladislav Hagara | Komentářů: 2
    10.7. 13:55 | IT novinky

    Evropská komise předběžně shledala, že návykový design aplikací Instagram a Facebook od americké společnosti Meta porušuje unijní nařízení o digitálních službách (DSA). Návykový design zahrnuje například takzvané nekonečné posouvání, automatické přehrávání videí, tzv. push notifikace, kdy aplikace uživatele vybízí k návratu do jejího prostředí, či vysoce personalizovaný algoritmus, který rychle pozná, co uživatele baví a snaží

    … více »
    Ladislav Hagara | Komentářů: 18
    10.7. 12:11 | Nová verze

    Byla vydána verze 1.97.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    10.7. 05:00 | IT novinky

    Švýcarská společnost Punkt. má nově v nabídce telefon Punkt. MC03. Telefon byl navržen ve Švýcarsku s důrazem na soukromí a digitální suverenitu a vyroben v Německu. V telefonu běží operační systém AphyOS (Apostrophy OS) založený na AOSP (Android Open Source Project) 15. Cena telefonu je 745 eur.

    Ladislav Hagara | Komentářů: 26
    10.7. 04:44 | Nová verze

    TypeScript (Wikipedie), tj. JavaScript rozšířený o statické typování a další atributy, byl vydán v nové verzi 7.0. Kompilátor byl kvůli výkonu přepsán z TypeScriptu do Go.

    Ladislav Hagara | Komentářů: 0
    9.7. 17:00 | IT novinky

    Europarlament podpořil pozměněnou verzi výjimky známé jako „chat control 1.0“ umožňující firmám skenovat soukromou komunikaci na internetu kvůli ochraně dětí před zneužitím. Pozměňovací návrhy přijaté europoslanci však počítají s tím, že z výjimky bude vyřazena šifrovaná komunikace. Výjimka přestala platit začátkem dubna poté, co se Evropský parlament a Rada EU nedokázaly shodnout na jejím prodloužení. Rada následně přijala

    … více »
    Ladislav Hagara | Komentářů: 12
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (2%)
     (15%)
     (25%)
    Celkem 2117 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Můj první erlang modul

    13.4.2007 17:56 | Přečteno: 2113× | erlang | Výběrový blog | poslední úprava: 16.4.2007 11:15

    Nedávno jsem narazil na úžasný nový (pro mě), průmyslově ověřený funkcionální jazyk. Jmenuje se Erlang. Jeho vlastnosti mě přiměly říct wow! Posuďte sami. Za pozornost stojí například distributed (no on je to taky tak trochu komplet OS co se dokáže tvářit, že jede jako by jeden homogenní OS na heterogenním HW) a Hot code upgrade (viz example 14), nebo "Mnesia is a nice example of the power of Erlang: in how many languages could you write a fully-featured industrial-strength distributed DBMS in less than 20,000 lines of code?"

    Napsal jsem, že je pro mě nový, ale on tak zas nový není, vznikl už kolem roku 1987 a stále se vyvíjí (4 release v roce 2006 a od začátku 2007 už stihl dva další - teda jedná se spíš o upgrade nadstaveb a nástrojů jako OTB). Má velmi lehké thready, například na AMD Athlon XP 2200+ má režii na vytvoření vlákna, přijetí zprávy a odeslání zprávy 2,1 us (včetně ukončení vlákna a garbage collectingu, testováno na 100 mil. vláknech, na samotnou zprávu padne asi 0,4 us)

    Tak jsem si řekl, že si ho trošku ošahám. Jedna z prvních věcí, co mě zajímala (mimo jiné), byla existence nějakého dokumentačního systému. A měl ho tam, edoc. Takže jsem si napsal takový jednoduchý modulek a zkusil si ho v edocu zdokumentovat. Zároveň jsem si to chtěl troško o benchmarkovat a proto jsem si udělal takový malý generátor permutací. Tady je:

    %% @copyright 2007 Hynek Vychodil
    %% @author Hynek Vychodil <pichi@nekde.top>
    %%   [http://www.abclinuxu.cz/blog/Pichi]
    %% @version 0.0.1
    %% @end
    %% =====================================================================
    %% @doc perms - Permutation generator
    %%
    %% This module provides "simply" permutation generator with state support.
    %%
    %% == Usage ==
    %%```
    %%> perms:perms([a,b,c]).
    %%[[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]]
    %%> perms:foreach(fun(P)->io:format("~p~n",[P]) end, [a,b,c]).
    %%[a,b,c]
    %%[a,c,b]
    %%[b,a,c]
    %%[b,c,a]
    %%[c,a,b]
    %%[c,b,a]
    %%ok
    %%> perms:foldl(fun(_,N)->N+1 end, 0, lists:seq(1,10)).
    %%3628800
    %%> perms:map(fun(P)->lists:flatten(io_lib:write(P)) end, [a,b,c]).
    %%["[a,b,c]","[a,c,b]","[b,a,c]","[b,c,a]","[c,a,b]","[c,b,a]"]
    %%> {_,FS} = perms:first([a,b,c]).
    %%{[a,b,c],[{[b],[]},{[c],[b]},{[a,b,c],[]}]}
    %%> perms:next(FS).
    %%{[a,c,b],[{[c],[]},{[a,c],[]},{[b,c],[a]}]}
    %%> perms:next([{[c],[]},{[a,c],[]},{[b,c],[a]}]).
    %%{[b,a,c],[{[a],[]},{[c],[a]},{[b,c],[a]}]}
    %%> perms:nextState([{[a],[]},{[b],[a]},{[c],[b,a]}]). % e.g. last state -> [c,b,a]   
    %%'$end_of_table'
    %%> perms:perm([{[a],[]},{[b],[a]},{[c],[b,a]}]). % see above
    %%[c,b,a]
    %%'''
    
    -module(perms).
    -export([first/1, next/1, perms/1, foreach/2, map/2, foldl/3, foldr/3]).
    -export([firstState/1, perm/1, nextState/1]).
    -import(lists, [reverse/1, reverse/2]).
    
    %% @spec (list()) -> {L::list(), State::state()}
    %% @type state() = [stack_entry()] | '$end_of_table'
    %% 		stack_entry() = { Todo::list(), Done::list() }.
    %%	State is stack emulation of standard permutation generators
    %%
    %% @doc Makes first permutation (same as original `L') and `State' for next permutation.
    %% @see next/1
    first(L) -> next(firstState(L)).
    %% @spec (state()) -> {P::list(), S2::state()}
    %% @doc Makes permutation `P' from current `S' {@type state()} and next `S2' {@type state()}.
    next(S) -> {perm(S), nextState(S)}.
    
    %% @spec (list()) -> State::state()
    %% @doc Makes first `State' ({@type state()}) for permutation of `L'.
    %%
    %% {@link perm/1} from this state makes original `L'.
    firstState(L) -> firstState(L, []).
    
    firstState([], Result) -> Result;
    firstState([_|Rest] = L, Result) ->
    	firstState(Rest, [{L, []}|Result]).
    
    %% @spec (state()) -> P::list()
    %% @doc Makes permutation `P' from current `State'.
    %% @see firstState/1
    %% @see nextState/1
    %% @end
    %perm('$end_of_table') -> throw(beyond_end);
    perm(State) -> perm(State, []).
    
    perm([], Perm) -> Perm;
    perm([{[H|_], _}|RestOfState], Perm) ->
    	perm(RestOfState, [H|Perm]).
    
    %% @spec (State::state()) -> Next::state()
    %% @doc Makes `Next' {@type state()} from current `State'.
    %% @end
    %nextState('$end_of_table') -> throw(beyond_end);
    nextState([]) -> '$end_of_table';
    nextState([{[_], _}|State]) ->
    	nextState(State);
    nextState([{[H|[_|TT]=T], Rest}|State]) ->
    	firstState(reverse(Rest, [H|TT]), [{T, [H|Rest]}|State]).
    
    %% @spec (list()) -> Permutations::list()
    %% @doc Returns {@type list()} containing all `L''s permutations.
    perms(L) -> perms(firstState(L), []).
    
    perms('$end_of_table', Res) -> reverse(Res);
    perms(State, Res) ->
    	{P, NS} = next(State),
    	perms(NS, [P|Res]).
    
    %% @spec (F, list()) -> ok
    %% 	F = (P::list()) -> any()
    %% @doc Call `F' for each permutation `P' of `L'.
    foreach(F,L) -> foreachState(F, firstState(L)).
    
    foreachState(_, '$end_of_table') -> ok;
    foreachState(F, State) ->
    	{P, NS} = next(State),
    	F(P),
    	foreachState(F, NS).
    
    %% @spec (F, list()) -> Result::list()
    %%	F = (P::list()) -> Res
    %%	Result = [Res]
    %% @doc Makes `Result' {@type list()} of `Res' results from calling `F' on each permutations `P' of `L'.
    map(F, L) -> map(F, firstState(L), []).
    
    map(_, '$end_of_table', Res) -> reverse(Res);
    map(F, State, Res) ->
    	{P, NS} = next(State),
    	map(F, NS, [F(P)|Res]).
    %% @spec (F, Acc0, list()) -> Acc
    %%	F = (P::list(), AccIn) -> AccOut
    %% @doc Folds permutations of `L'. Calls `F' on each permutation of `L'. `Acc0' is passed as `AccIn' to firts `F' call
    %% and each `AccOut' is passed to next `F' call.
    %% Last `F' call result is returned as `Acc'.
    foldl(F, Acc0, L) -> foldlState(F, Acc0, firstState(L)).
    
    foldlState(_, Acc, '$end_of_table') -> Acc;
    foldlState(F, Acc, S) ->
    	{P, NS} = next(S),
    	foldlState(F, F(P, Acc), NS).
    
    %% @spec (F, Acc0, list()) -> Acc
    %%	F = (P::list(), AccIn) -> AccOut
    %% @doc Same as {@link foldl/3} but in reverse order.
    foldr(F, Acc0, L) -> foldl(F, Acc0, reverse(L)).
    

    Nic moc složitého, že? A přitom vygenerování 3 628 800 permutací desetiprvkové množiny a zavolání nějaké drobné funkce pro každou už tomu dá trošku zapotit, a taky že jo: cca 4,3 us na výše uvedeném Athlonu. Nic moc proti Alghoritm-Permute a 0,6 us (nejrychlejší = "call back" použití) na stejném stroji, ale to je psané přímo v C a vlastně nevím jestli jsem zvolil zrovna vhodný algoritmus. Snad mi vyjde čas zkusit totéž nativně v perlu, případně pythonu.

    A tady je ta slíbená dokumentace:

    Module perms

    perms - Permutation generator.

    Copyright © 2007 Hynek Vychodil

    Version: 0.0.1

    Authors: Hynek Vychodil (pichi@nekde.top) [web site: http://www.abclinuxu.cz/blog/Pichi].

    Description

    perms - Permutation generator

    This module provides "simply" permutation generator with state support.

    Usage

     > perms:perms([a,b,c]).
     [[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]]
     > perms:foreach(fun(P)->io:format("~p~n",[P]) end, [a,b,c]).
     [a,b,c]
     [a,c,b]
     [b,a,c]
     [b,c,a]
     [c,a,b]
     [c,b,a]
     ok
     > perms:foldl(fun(_,N)->N+1 end, 0, lists:seq(1,10)).
     3628800
     > perms:map(fun(P)->lists:flatten(io_lib:write(P)) end, [a,b,c]).
     ["[a,b,c]","[a,c,b]","[b,a,c]","[b,c,a]","[c,a,b]","[c,b,a]"]
     > {_,FS} = perms:first([a,b,c]).
     {[a,b,c],[{[b],[]},{[c],[b]},{[a,b,c],[]}]}
     > perms:next(FS).
     {[a,c,b],[{[c],[]},{[a,c],[]},{[b,c],[a]}]}
     > perms:next([{[c],[]},{[a,c],[]},{[b,c],[a]}]).
     {[b,a,c],[{[a],[]},{[c],[a]},{[b,c],[a]}]}
     > perms:nextState([{[a],[]},{[b],[a]},{[c],[b,a]}]). % e.g. last state -> [c,b,a]
     '$end_of_table'
     > perms:perm([{[a],[]},{[b],[a]},{[c],[b,a]}]). % see above
     [c,b,a]

    Data Types

    state()

    state() = [stack_entry()] | '$end_of_table'

    State is stack emulation of standard permutation generators

    Function Index

    first/1Makes first permutation (same as original L) and State for next permutation.
    firstState/1Makes first State (state()) for permutation of L.
    foldl/3Folds permutations of L.
    foldr/3Same as foldl/3 but in reverse order.
    foreach/2Call F for each permutation P of L.
    map/2Makes Result list() of Res results from calling F on each permutations P of L.
    next/1Makes permutation P from current S state() and next S2 state().
    nextState/1Makes Next state() from current State.
    perm/1Makes permutation P from current State.
    perms/1Returns list() containing all L's permutations.

    Function Details

    first/1

    first(L::list()) -> {L::list(), State::state()}

    Makes first permutation (same as original L) and State for next permutation.

    See also: next/1.

    firstState/1

    firstState(L::list()) -> State::state()

    Makes first State (state()) for permutation of L.

    perm/1 from this state makes original L.

    foldl/3

    foldl(F, Acc0, L::list()) -> Acc

    Folds permutations of L. Calls F on each permutation of L. Acc0 is passed as AccIn to firts F call and each AccOut is passed to next F call. Last F call result is returned as Acc.

    foldr/3

    foldr(F, Acc0, L::list()) -> Acc

    Same as foldl/3 but in reverse order.

    foreach/2

    foreach(F, L::list()) -> ok

    Call F for each permutation P of L.

    map/2

    map(F, L::list()) -> Result::list()

    Makes Result list() of Res results from calling F on each permutations P of L.

    next/1

    next(S::state()) -> {P::list(), S2::state()}

    Makes permutation P from current S state() and next S2 state().

    nextState/1

    nextState(State::state()) -> Next::state()

    Makes Next state() from current State.

    perm/1

    perm(State::state()) -> P::list()

    Makes permutation P from current State.

    See also: firstState/1, nextState/1.

    perms/1

    perms(L::list()) -> Permutations::list()

    Returns list() containing all L's permutations.

    Celkem to ujde a ještě se to nechá formátovat CSS a kvůli Abíčku jsem musel vyhodit nějaké ty atributy kolem tabulky. Kdyby jste si chtěli někdo obenchmarkovat thready a zprávy u sebe, tak ještě zdrojáky testů co jsem dělal

    Erlang vlákna

    -module(ring).
    -export([start/1, start/2, server/1, child/1]).
    
    child(Parent) ->
    	receive
    		0 ->
    			Parent ! done;
    		N ->
    			Child = spawn(?MODULE, child, [Parent]),
    			Child ! N-1
    	end.
    
    start(N) -> start(N, 10000).
    
    start(N, Timeout) ->
    	process_flag(trap_exit, true),
    	Parent = spawn_link(?MODULE, server, [Timeout]),
    	statistics(wall_clock),
    	Child = spawn(?MODULE, child, [Parent]),
    	Child ! N,
    	receive
    		{'EXIT', Parent, ok} ->
    			{_, T} = statistics(wall_clock),
    			T/N/1000;
    		{'EXIT', Parent, Reason} -> Reason
    	end.
    
    server(Timeout) ->
    	receive
    		done ->
    			exit(ok)
    		after
    			Timeout ->
    				exit(timeout)
    	end.
    

    Usage:

    > c(ring).
    {ok,ring}
    > ring:start(pocet_opakovani)
    trvání jednoho v sec. nebo atom timeout pokud na to nestačilo 10s
    > ring:start(pocet_opakovani, timeout_v_ms)
    trvání jednoho v sec. nebo atom timeout pokud na to nestačil zadaný timeout
    

    Erlang zprávy - pingpong

    -module(pingperf).
    -export([start/1, pong/1]).
    
    pong(P) ->
    	receive
    		ping ->
    			P ! pong,
    			pong(P)
    	end.
    
    ping(P, 0) -> exit(P, kill);
    ping(P, N) ->
    	P ! ping,
    	receive
    		pong ->
    			ping(P, N-1)
    	end.
    
    start(N) ->
    	statistics(wall_clock),
    	PONG = spawn(?MODULE, pong, [self()]),
    	ping(PONG, N),
    	{_, T} = statistics(wall_clock),
    	T/N/2000.
    

    Usage:

    > c(pingperf).
    {ok,ring}
    > ring:start(pocet_opakovani)
    trvání zaslání jedné zprávy v sec.
    

    Update:

    Když už máme ten funkcionální jazyk, tak jde perms pěkně přepsat pomocí map (a taky nikam nespěchá, když chce vrátit všechny permutace :-) )

    --- perms.erl.old	2007-04-16 11:05:12.000000000 +0200
    +++ perms.erl	2007-04-16 11:04:42.000000000 +0200
    @@ -87,12 +87,8 @@
     
     %% @spec (list()) -> Permutations::list()
     %% @doc Returns {@type list()} containing all `L''s permutations.
    -perms(L) -> perms(firstState(L), []).
    -
    -perms('$end_of_table', Res) -> reverse(Res);
    -perms(State, Res) ->
    -	{P, NS} = next(State),
    -	perms(NS, [P|Res]).
    +perms(L) -> map(fun identity/1, L).
    +identity(P) -> P.
     
     %% @spec (F, list()) -> ok
     %% 	F = (P::list()) -> any()
    
           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    14.4.2007 13:07 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    krucis, krucis.... erlang vypada fakt cool... skoda, ze musim delat hafo jinych veci a nemuzu se misto toho naucit novy jazyk ;-]...

    je to jenom muj pocit nebo se ten jazyk tezce inspiroval prologem? ...nicmene s podporou sekvencniho zpracovani to muze byt docela divocina...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    14.4.2007 15:56 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Pro seznámení doporučuju skvělý, jedinečný, neopakovatelný „Erlang:The Movie:-D :-D :-D (Trošku ve stylu Montyho Pythona - autoři na něj dodnes neradi vzpomínají ;-))
    14.4.2007 21:51 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Ten film je dobrej, s chutí jsem ho zhlédl a celkem mě potěšilo, že jsem všemu rozuměl. Holt ta moje angličtina už není tak hrozná :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    14.4.2007 23:09 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Von je hlavně úplně děsnej :-D, právě takovýhle lidi by měli držet v laboratořích a v řetězech (s volnýma rukama na klávesnici), páč tam budou užitečnější než při dělání PR. :-D (-Ahoj, Michale! -Ahoj, Roberte! -Ahoj, Hynku! -Ahoj, Michale a Hynku! Ahoj, Jakube! -Ahoj všichni! ;-))
    15.4.2007 11:25 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Jo, tak zrovna u téhle části jsem si fakt nebyl jistý, jestli je to míněno vážně nebo je to zoufalý pokus o humor :-D Jdu si to pustit ještě jednou :-D
    16.4.2007 10:48 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    To nebyl až tak pokus o humor jako demonstrace síly erlnagu. Já jsem si celou tu dobu té šaškárny s opravou schopnosti dělat konferenční hovor říkal proč sakra zavolal a nechal odložené sluchátko. No a na závěr bum ho, on ten hovor stále běžel se starým kódem, prostě tam v jednu chvíli běžely dvě verze stejného modulu, ten starý s chybou na hovoru, který nevyužívá tu konferenční feature, no a pak druhý co to měl už opravené. Až se ukončí všechny procesy, co ten modul používají, tak se teprve starý kód zahodí. No ono je to krapet složitější, protože on ten sám proces dokonce může přejít na nový kód (stačí zavolat uvnitř toho modulu funkci přes modul:foo místo jen foo a bum a běží v nové verzi, typicky se tak píšou loop smyčky serveru viz níže).

    Samoupgradující server:
    loop(State) -> receive
         Msg -> NewState = do_some(State, Msg), ?MODULE:loop(NewState)
    end.
    
    Server s upgrade on demand:
    loop(State) -> receive
         upgrade -> ?MODULE:loop(State);
         Msg -> NewState = do_some(State, Msg), loop(NewState)
    end.
    
    Pokud ten server má zpracovávat řádově stovky tisíc requestů za sekundu tak ten druhej kód bude o chlup rychlejší, ale zas musíš při upgrade zaslat ten signál.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    16.4.2007 18:43 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Mě pobavila ta konverzace ve stylu Monty Pythona, proti erlangu samotnému (ani proti tomu, na co chtěli autoři poukázat) samozřejmě nenamítám nic :-)
    14.4.2007 18:47 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Moc hezké. Když jsem si onehdá řekl, že se pro rozptýlení pustím do nějakého funkcionálního jazyka, tak jsem si vybral Scheme a Haskell. Na Erlang se rád podrobněji mrknu, až se zkamarádím s výše uvedenými :-) Jen teď řeším problém, do kterého se pustit dřív :-)
    14.4.2007 20:30 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    scheme ja dobra volba... a nejlip se ho naucite, kdyz si napisete vlastni intepretr.... (se kterym pak muzete oslnovat slecny ;-])
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    14.4.2007 20:47 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Netřeba vykat :-)

    Jj, taky mám pocit, že bude první na řadě Scheme. Sice mě ze začátku mátly ty řeči o praktické nepoužitelnosti (v porovnání s Lispem), ale Scheme na mě na první pohled působil jaksi, hmm... kompaktněji :-) Zlé funkcionální jazyky by se sice osypaly při pomyšlení na možnost přiřazení, ale na to teď nehledím :-) Zatím jsem nepoznal jazyk, který by byl víc sexy než libovolný dialekt Lispu :-D A ty závorky, mmmmm... :-D

    Interpret možná přijde na řadu malinko později, jestli tím oslním svou slečnu, to sice nevím, ale zkusit to můžu (od mě jako od Matfyzáka už zažila mnohé :-D).
    14.4.2007 20:57 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Interpret možná přijde na řadu malinko později, jestli tím oslním svou slečnu, to sice nevím, ale zkusit to můžu (od mě jako od Matfyzáka už zažila mnohé ).
    Největší frajeřina by byla dát jí ho k narozeninám...tím samozřejmě myslím napsat ho tak kompaktní, aby se – napsaný polevou – vešel na horní stranu dortu. ;-) :-D
    Marek Bernát avatar 14.4.2007 22:23 Marek Bernát | skóre: 17 | blog: Arcadia
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    horní stranu dortu

    Len tak odhadom, v hornej časti torty je zhruba 10^20 molekúl, takže mám pocit, že by sa tam vo vhodnom tvare vošiel aj interpreter Common Lispu :-P Hoci s CL jeden nikdy nevie :-D
    physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
    15.4.2007 11:22 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    :-D To je nápad! ;-) To bych do konce příštího ledna mohl stihnout ;-)
    14.4.2007 21:57 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Scheme a Haskel se mi líbí, protože jsou přece jen modernější. Jenomže já potřebuji právě některé vlastnosti erlangu, hlavně ty tenké vlákna, zasílání zpráv, škálovatelnost, vždyť on to není jen jazyk, ale OS. Taky je možné, že toho prostě o Scheme a Haskelu málo vím a pak bych byl rád, kdyby mě někdo vyvedl z nevědomosti.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    14.4.2007 22:53 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Mimochodem, Scheme dostává své pověsti jazyka pro experimenty a existuje pokus o implementaci Erlangových vymožeností - Termite. O tom, že Erlang je vyzrálejší a prověřenější se samozřejmě nemá cenu hádat.
    15.4.2007 14:24 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    Migrace je dost podstatná feature, nicméně vyzrálost taky. No nic, budeme termite sledovat :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    14.4.2007 23:14 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    nenechte se zmast... scheme je z roku 1975...

    koncept programovaci jazyk == operacni system == neco uzasneho je tu uz delsi dobu a ma sve kouzlo -- at uz ve smalltalk, jvm nebo kombinace unixove jadro+shell

    jedna vec me, ale stale vrta v hlave... jak maji udelane ty hotupdaty... malinko tusim jednu fintu z pH (kazde vlakno ma svoji verzi pameti), ale jak to maji v praxi implementovane...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    16.4.2007 11:41 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    No spíš bych řekl, že využívají toho, že něco jako stav vůbec neexistuje. Pak je něco jako verze paměti moc netrápí, prostě jen funkce a její parametry. I přiřazení je přiřazení v matematickém smyslu i když záleží na pořadí (to jen kvůli jednoduššímu kompilátoru). Tím se spousta věcí zjednodušuje, takže je spíš něco jako centrální slovník modulů (přeložených binárek) s různými verzemi (konkrétně tři) a prostě se ta funkce jen zavolá přímo do té binárky, dokud se volá foo, tak to všechno běhá uvnitř té binárky snad i včetně imported funkcí (přímé adresy do verze jiného modulu, která byla v okamžiku natažení volajícího modulu, ale tím si nejsem jistý, možná, že to rovnou sahá po aktuální verzi) a v okamžiku požadavku na module:foo se koukne do aktuálního slovníku (je to o chlup pomalejší) a skočí na nejnovější verzi (trošku to připomíná Debian a jeho větve :-) ). Problém může nastat pokud by ta hloubka 3 verze zpět nestačila. Jenže ty funkce jsou celkem malé a pokud uděláš velké moduly, tak ti to celé pěkně samo migruje na novější kód. No apk je tam funkce, co ti zjistí jestli běžíš ve staré verzi kódu. Samozřejmě třeba migrace na novou verzi jádra a init modulu a dalších systémových věcí je trochu těžší, ale jak často měníš jádro, že :-) Asi jako jádro Linuxu, ale to pak nečekáš, že to samo přemigruje.

    To by se ale chtělo kouknout přímo do implementace BEAMu, případně jádra, kompilátoru a loaderu. Zdrojáky jsou k dispozici :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    16.4.2007 11:44 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    s/pokud uděláš velké moduly/pokud neděláš velké moduly/
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    16.4.2007 12:28 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Můj první erlang modul
    diky za osvetleni, kdyz tady nekdo hodil link na termite, tak me to uz trochu zacalo zapalovat.... vyporadat se stavem, tak ze vlastne neexistuje... a redukovat to na to, ze jediny stav jsou "mailboxy", kam chodi zpravy mezi vlaknama a u tech je zarucene, ze jsou na pocatku vlakna vzdycky prazdne... hm... panove co to vymysleli budou asi hodne chytri...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.