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í
×
    dnes 12:22 | Zajímavý software

    OpenClaw je open-source AI asistent pro vykonávaní různých úkolů, ovládaný uživatelem prostřednictvím běžných chatovacích aplikací jako jsou například WhatsApp, Telegram nebo Discord. Asistent podporuje jak různé cloudové modely, tak i lokální, nicméně doporučován je pouze proprietární model Claude Opus 4.5 od firmy Anthropic v placené variantě. GitHubová stránka projektu OpenClaw.

    NUKE GAZA! 🎆 | Komentářů: 1
    dnes 03:00 | Komunita

    Projekt VideoLAN a multimediální přehrávač VLC (Wikipedie) dnes slaví 25 let. Vlastní, tenkrát ještě studentský projekt, začal již v roce 1996 na vysoké škole École Centrale Paris. V první únorový den roku 2001 ale škola oficiálně povolila přelicencování zdrojových kódů na GPL a tím pádem umožnila používání VLC mimo akademickou půdu.

    Ladislav Hagara | Komentářů: 1
    včera 18:11 | Humor

    Moltbook je sociální síť podobná Redditu, ovšem pouze pro agenty umělé inteligence - lidé se mohou účastnit pouze jako pozorovatelé. Agenti tam například rozebírají podivné chování lidí, hledají chyby své vlastní sociální sítě, případně spolu filozofují o existenciálních otázkách 🤖.

    NUKE GAZA! 🎆 | Komentářů: 2
    včera 18:00 | Humor

    scx_horoscope je „vědecky pochybný, kosmicky vtipný“ plně funkční plánovač CPU založený na sched_ext. Počítá s polohami Slunce a planet, fázemi měsíce a znameními zvěrokruhu. Upozornil na něj PC Gamer.

    |🇵🇸 | Komentářů: 4
    30.1. 18:22 | Komunita

    O víkendu probíhá v Bruselu konference FOSDEM 2026 (Free and Open source Software Developers’ European Meeting). Program konference je velice nabitý: 37 místností, 71 tracků, 1184 přednášejících, 1069 přednášek, prezentací a workshopů. Sledovat je lze i online. K dispozici budou jejich videozáznamy. Aktuální dění lze sledovat na sociálních sítích.

    Ladislav Hagara | Komentářů: 4
    30.1. 18:00 | IT novinky

    Společnost Nex Computer stojící za "notebooky bez procesorů a pamětí" NexDock představila telefon NexPhone, který může funguje jako desktop PC, stačí k němu připojit monitor, klávesnici a myš nebo NexDock. Telefon by měl být k dispozici ve třetím čtvrtletí letošního roku. Jeho cena by měla být 549 dolarů. Předobjednat jej lze s vratní zálohou 199 dolarů. V dual-bootu by měl být předinstalovaný Android s Linuxem (Debian) jako aplikací a Windows 11.

    Ladislav Hagara | Komentářů: 3
    30.1. 16:00 | Nová verze

    Byla vydána nová major verze 9.0 softwaru pro správu elektronických knih Calibre (Wikipedie). Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora AI.

    Ladislav Hagara | Komentářů: 2
    30.1. 14:22 | Nová verze

    Wasmer byl vydán ve verzi 7.0. Jedná se o běhové prostředí pro programy ve WebAssembly. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    30.1. 12:22 | Zajímavý software

    V reakci na nepopulární plán Microsoftu ještě více ve Windows prohloubit integraci umělé inteligence Copilot, Opera na sociální síti 𝕏 oznámila, že připravuje nativní linuxovou verzi prohlížeče Opera GX. Jedná se o internetový prohlížeč zaměřený pro hráče, přičemž obsahuje všechny základní funkce běžného prohlížeče Opera. Kromě integrace sociálních sítí prohlížeč například disponuje 'omezovačem', který umožňuje uživatelům omezit využití sítě, procesoru a paměti prohlížečem, aby se tak šetřily systémové zdroje pro jinou aktivitu.

    NUKE GAZA! 🎆 | Komentářů: 8
    30.1. 06:22 | Zajímavý software

    NVIDIA vydala nativního klienta své cloudové herní služby GeForce NOW pro Linux. Zatím v beta verzi.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (10%)
     (24%)
     (3%)
     (5%)
     (2%)
     (12%)
     (31%)
    Celkem 712 hlasů
     Komentářů: 22, poslední 29.1. 23:06
    Rozcestník

    Můj první erlang modul

    13.4.2007 17:56 | Přečteno: 2063× | 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.