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 19:22 | IT novinky

    Společnost OpenAI uzavřela dohodu s americkým ministerstvem obrany o poskytování technologií umělé inteligence (AI) pro utajované sítě americké armády. Firma to oznámila několik hodin poté, co prezident Donald Trump nařídil vládě, aby přestala využívat služby společnosti Anthropic.

    Ladislav Hagara | Komentářů: 2
    dnes 13:33 | IT novinky

    Technologická společnost Anthropic v noci na dnešek oznámila, že se obrátí na soud kvůli rozhodnutí ministerstva obrany označit ji za bezpečnostní riziko dodavatelského řetězce poté, co nevyhověla jeho požadavkům týkajícím se používání umělé inteligence (AI). Prezident Donald Trump krátce před tím uvedl, že nařídil federálním úřadům postupně ukončit využívání jejích AI technologií. Spor mezi firmou vyvíjející chatbot Claude a

    … více »
    Ladislav Hagara | Komentářů: 5
    včera 15:44 | Upozornění

    Zemřel Rob Grant, spolutvůrce kultovního sci-fi seriálu Červený trpaslík.

    Ladislav Hagara | Komentářů: 5
    27.2. 17:33 | IT novinky

    Apple oznámil, že iPhone a iPad jako první a jediná zařízení pro koncové uživatele splňují požadavky členských států NATO na zabezpečení informací. Díky tomu je možné je používat pro práci s utajovanými informacemi až do stupně „NATO Restricted“, a to bez nutnosti instalovat speciální software nebo měnit nastavení. Žádné jiné běžně dostupné mobilní zařízení tak vysokou úroveň státní certifikace dosud nezískalo.

    Ladislav Hagara | Komentářů: 13
    27.2. 13:00 | IT novinky

    Americký provozovatel streamovací platformy Netflix odmítl zvýšit nabídku na převzetí filmových studií a streamovací divize konglomerátu Warner Bros. Discovery (WBD). Netflix to ve čtvrtek oznámil v tiskové zprávě. Jeho krok po několikaměsíčním boji o převzetí otevírá dveře k akvizici WBD mediální skupině Paramount Skydance, a to zhruba za 111 miliard dolarů (2,28 bilionu Kč).

    Ladislav Hagara | Komentářů: 16
    27.2. 12:44 | IT novinky

    Americká společnosti Apple přesune část výroby svého malého stolního počítače Mac mini z Asie do Spojených států. Výroba v závodě v Houstonu by měla začít ještě v letošním roce, uvedla firma na svém webu. Apple také plánuje rozšířit svůj závod v Houstonu o nové školicí centrum pro pokročilou výrobu. V Houstonu by měly vzniknout tisíce nových pracovních míst.

    Ladislav Hagara | Komentářů: 20
    27.2. 12:11 | Zajímavý článek

    Vědci Biotechnologické společnosti Cortical Labs vytvořili biopočítač nazvaný CL1, který využívá živé lidské mozkové buňky vypěstované z kmenových buněk na čipu. Po úspěchu se hrou PONG se ho nyní snaží naučit hrát DOOM. Neurony přijímají signály podle toho, co se ve hře děje, a jejich reakce jsou převáděny na akce jako pohyb nebo střelba. V tuto chvíli systém hraje velmi špatně, ale dokáže reagovat, trochu se učit a v reálném čase se hrou

    … více »
    karkar | Komentářů: 10
    27.2. 01:55 | Nová verze Ladislav Hagara | Komentářů: 0
    26.2. 21:33 | Nová verze

    Ben Sturmfels oznámil vydání MediaGoblinu 0.15.0. Přehled novinek v poznámkách k vydání. MediaGoblin (Wikipedie) je svobodná multimediální publikační platforma a decentralizovaná alternativa ke službám jako Flickr, YouTube, SoundCloud atd. Ukázka například na LibrePlanet.

    Ladislav Hagara | Komentářů: 0
    26.2. 15:44 | Zajímavý software

    TerminalPhone (png) je skript v Bashi pro push-to-talk hlasovou a textovou komunikaci přes Tor využívající .onion adresy.

    Ladislav Hagara | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (6%)
     (0%)
     (11%)
     (27%)
     (2%)
     (5%)
     (2%)
     (12%)
     (26%)
    Celkem 978 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Tail rekurze v erlangu

    14.4.2007 10:06 | Přečteno: 1272× | erlang | Výběrový blog

    Ve funkcionálních jazycích se spousta (většina?) algorimů zapisuje jako rekurze. Nejinak je tomu i u erlangu. Jenže rekurze je pro normální dnešní CPU fuj a tak se to řeší (a nejen ve funkcionálních jazycích) tzv. tail rekurzí. Prakticky jde o nahrazení rekurze cyklem a nealokuje se kvůli tomu další paměť na zásobníku, ale různé jazyky se s tím umí vyrovnat různě.

    Například výpočet faktoriálu:

    -module(fact).
    -export([fact/1, fact2/1]).
    
    fact(N) when N>0 -> N*fact(N-1);
    fact(0) -> 1.
    
    fact2(0) -> 1;
    fact2(N) when N>0 -> fact2(N-1, N).
    
    fact2(0, Res) -> Res;
    fact2(N, Res) -> fact2(N-1, N*Res).
    Varianta fact bohužel v erlangu skončí skutečnou rekurzí, kdežto fact2 udělá cyklus kolem fact2/2 kódu. Například Haskel se tuším vypořádá dokonce i s ekvivalentem zápisu fact. Pokud si to chcete vyzkoušet, tak si zkuste vypočítat fact2(50000) a pak fact(50000). To druhé začne velmi záhy swapovat a následně to shodí BEAN pod nímž to spustíte (pokud máte opravdu hodně swapu a paměti, tak si zvolte ještě větší číslo :-))

           

    Hodnocení: 86 %

            š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 18:03 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Tohle umí gcc -O2 taky. (Možná pro někoho samozřejmost, ale mě to překvapilo.)
    14.4.2007 20:49 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Na úrovni haskelu nebo erlangu? Předpokládám, že spíš to druhé, ne?
    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 21:03 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Konkrétně u tohoto příkladu na úrovni Haskelu.
    int fact (int n) {
    	if (n == 0) return 1;
    	return n * fact (n-1); }
    a v assembleru je vidět krásná smyčka, žádný call.

    Snad nikoho neurážím, že vám sem do funkcionálního programování tahám C :-)
    14.4.2007 21:48 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Snad nikoho neurážím, že vám sem do funkcionálního programování tahám C :-)
    Nene, dík za informaci. To se hodí vědět.
    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:26 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Otázka je, jak toho dosahuje. Zkusil jsem rekurzi mezi dvěma funkcemi, a zdá se, že nedělá tail call vždy:
    int foo (int a, int b);
    int bar (int c, int a, int b)
    {
            return (0==b) ? a : foo(a, --b);
    }
    
    int foo (int a, int b)
    {
            return bar(1, a, b);
    }
    
    gcc -S -O2 --omit-frame-pointer test.c
    
    foo:
            subl    $12, %esp
            movl    20(%esp), %eax
            movl    $1, 8(%esp)
            movl    %eax, 4(%esp)
            movl    16(%esp), %eax
            movl    %eax, (%esp)
            call    bar
            addl    $12, %esp
            ret
    
    bar:
            movl    8(%esp), %eax
            movl    4(%esp), %edx
            testl   %eax, %eax
            jne     .L8
            movl    %edx, %eax
            ret
    .L8:
            subl    $1, %eax
            movl    %eax, 8(%esp)
            jmp     foo
    
    Jinými slovy, je to hezká optimalizace, ale plně bych se na ní při rekurzivním psaní programu nespoléhal (ostatně, norma C nic takového nepožaduje).
    14.4.2007 23:44 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: Tail rekurze v erlangu
    v jake verzi to je? v gcc 3.4.6 to nejde ani s -O2 ani s -O3... porad pouziva call...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    15.4.2007 00:02 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Mně to funguje v 4.1.1, ale podle changelogu to bylo už v 3.0.1.
    15.4.2007 01:17 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Tail rekurze v erlangu
    Chm, chmm, ten patch poslal už v květnu 2000 Jan Hubička a objevilo se to už v tom úchylném „GCC 2.96“. ;-)

    Založit nové vláknoNahoru

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