abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 14:22 | IT novinky

    VASA-1, výzkumný projekt Microsoftu. Na vstupu stačí jediná fotka a zvukový záznam. Na výstupu je dokonalá mluvící nebo zpívající hlava. Prý si technologii nechá jenom pro sebe. Žádné demo, API nebo placená služba. Zatím.

    Ladislav Hagara | Komentářů: 0
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 13
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 2
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 10
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (20%)
    Celkem 562 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Jede, jede (virtuální) mašinka

    21.6.2009 20:49 | Přečteno: 1840× | poslední úprava: 21.6.2009 23:25

    Když jsem se tak minulý týden připravoval na přijímačky na Molekulární biologii, tak jsem si řekl, že si během učení zkusím po kouscích pro odreagování napsat nějakou malou zásobníkovou mašinku v Pythonu 3. Python jsem se stejně chtěl naučit už delší dobu a o assemblerech, zásobníkových počítačích a podobných obskurnostech vím úplné kulové, tak proč nespojit příjemné s užitečným? Mimochodem, pro lidi, kteří ví, co jsem zač: nebojte se, na matfyzu ani zdaleka nehodlám skončit. Jen mi tam začalo být trochu těsno, tak jsem si podal přihlášku ještě i na tu molekulárku.

    Malé upozornění pro odborníky v oboru: následující text a program psal naprostý amatér co se těchto nízkoúrovňových věcí týče. Jeho znalosti problematiky virtuálních strojů jsou téměr nulové a svůj úplně první program v assembleru (viz níže) vytvořil v tom, který si sám napsal, na mašince, kterou si sám napsal. :) Nemůže být tedy divu, že to podle toho i vypadá. :D Ale teď už k věci.

    Mašinka používá pro výpočty jediný zásobník a dva "registry". V prvním registru je uložen ukazatel na právě prováděnou instrukci programu (instruction pointer), v druhém registru je pak uložen ukazatel na pozici právě zpracovávaného rámce v zásobníku (frame pointer). Rámec je něco jako "pracovní prostor" právě prováděné subrutiny. Více vysvětlí malý příklad, jak může situace během provádění programu vypadat.

       ^         | ...             |
       |         | ...             |
       |         | previous frame  |
       |         |-----------------|
       |     ^   | arg 1           |
     s |     |   | arg 2           |
     t |     |   | ...             |
     a |   f |   | arg n           |
     c |   r |   | return addr     |
     k |   a |   | old frame ptr   | <----- frame_ptr
       |   m |   | local 1         |
       |   e |   | local 2         |
       |     |   | ...             |
       v     v   | local m         |
    

    Frame pointer je možné chápat jako takový "pevný bod" v daném pracovním prostoru subrutiny. Počítač jej používá jak pro získávání kopií argumentů funkce (ty jsou volajícím kódem vloženy na zásobník ještě před předáním řízení programu dané funkci – na pozici (frame_ptr - 1) - 1 v zásobníku leží poslední argument, na pozici (frame_ptr - 1) - 2 předposlední atd.), tak pro vyskakování z ní (na pozici frame_ptr - 1 je uložen ukazatel na instrukci, která se začne provádět po vyskočení z funkce a na pozici frame_ptr je uložena hodnota původního ukazatele na rámec předchozí volající funkce). Všechno tohle čarování je velmi důležité hlavně pro možnost rekurze (nebo obecně pro volání funkcí z funkcí). Není totiž možné ukládat data o návratových adresách, o ukazatelích na aktuální rámec funkce a jejích prametrech do pevně daných registrů, protože by se při dalším případném volání původní hodnoty přepsaly. Jediné, co máme k dispozici a s čím si musíme vystačit, je zásobník.

    Ale dost řečí! Podrobnější komentáře o práci interpretu jsou v samotném zdrojáku a já nerad něco říkám dvakrát. :) Následuje velmi jednoduchá ukázka programu, který simuluje for cyklus:

    ; i = 0
    push 0
    
    jmp cycle
    
    cycle:
        ; if i is not less than 10 then end the cycle
        dup
        push 10
        cmpl
        jmpf end
    
        ; print the value of i
        dup
        write
    
        ; increment i
        push 1
        add        
    
        ; jump to the beginning of the cycle
        jmp cycle
    
    end:
    
    

    Dále tady máme ukázku trošku složitějšího programu pro výpočet faktoriálu rekurzí:

    read
    call fact
    write
    
    fact:
        ; get the argument n of the subroutine
        argv 1
    
        ; return 1 if n is less than 2
        dup
        push 2
        cmpl
        jmpt end_fact
    
        ; else compute (n - 1)! by recursion
        dup
        push 1
        sub
        call fact
    
        ; return n * (n - 1)!
        mul
        retv 1
    
    end_fact:
        push 1
        retv 1
    

    Pokud byste si chtěli interpret vyzkoušet v akci na výše uvedených programech, nebo si pro něj chtěli dokonce i něco napsat (co takhle třeba přepsat faktoriál do iterativní podoby? zkuste si to!), směle do toho! Stačí si stáhnout program z odkazu výše, napsat chmod +x masinka.py a jakýkoli program v assembleru Mašinky jí pak předložíte pomocí ./masinka.py <název souboru s assemblerem>. Zdůrazňuji, že je potřeba mít nainstalován Python verze 3.

    Instrukční sada je zatím omezená (stejně jsem neměl čas interpret zkoušet na nějakých složitějších příkladech), ale pro jednodušší prográmky stačí. Mašinka taky zatím pracuje jenom s celými čísly. Rozšířit ji na další typy snad ale nebude problém.

    push Xvloží X na zásobník
    popvyjme hodnotu ze zásobníku
    dupzduplikuje hodnotu na vrcholu zásobníku
    swpprohodí dvě hodnoty na vrcholu zásobníku
    add, sub, mul, divklasické základní aritmetické operace
    absvyjme hodnotu ze zásobníku a vloží zpět na zásobník její absolutní hodnotu
    cmp, cmpl, cmplevyjme dvě hodnoty X, Y ze zásobníku, otestuje, zda X = Y, resp. X < Y, resp. Y <= Y a podle výsledku porovnání vloží na zásobník buď 0 nebo 1 (pravda nebo nepravda)
    readnačte hodnotu od uživatele a vloží ji na zásobník
    writevyjme hodnotu ze zásobníku a vypíše ji na obrazovku
    call Fzavolá subrutinu F
    ret Xvyskočí z právě prováděné subrutiny a odejme ze zásobníku X parametrů, se kterými byla volána
    retv Xvyskočí z právě prováděné subrutiny, odejme ze zásobníku X parametrů, se kterými byla volána a vloží zpět na zásobník její návratovou hodnotu (poslední hodnotu, který byla vložena na vrchol zásobníku před zavoláním retv)
    jmp L, jmpt L, jmpf Lpřesune běh programu k labelu L vždy, resp. pokud je na vrcholu zásobníku 1 (jump-if-true), resp. pokud je na vrcholu zásobníku 0 (jump-if-false)
    argv Xnačte parametr funkce ze zásobníku a vloží jej na vrchol zásobníku, aby s ním funkce mohla lokálně pracovat (jak jsem napsal výše v odstavci o rámcích, X = 1 znamená poslední argument funkce, X = 2 předposlední argument a podobně)

    No, to by bylo asi tak všechno. Na závěr bych vás rád poprosil, abyste se do mě nemilosrdně pustili. Nebo teda raději do mého výtvoru, protože rozhodně netvrdím, že jsem zplodil nějaký zázrak. :) Musím přiznat, že i když jsem o těchto věcech věděl (a stále vím) kulové, tak mě to začalo docela bavit. Určitě mám tedy v plánu program vylepšit jak na základě vašich připomínek, tak i mých vlastních nápadů. Pusťte se klidně do návrhu programu (naprasil jsem to opravdu rychle bez nějakého velkého přemýšlení), do mé implementace v Pythonu (použil jsem jenom naprosté základy, takže se jistě dá spousta věcí napsat elegantněji) nebo (a to asi hlavně) do samotných záležitostí kolem zásobníkových počítačů, assemblerů a podobně. Budu jenom rád. Díky!

    Mimochodem, přijímačky byly hodně drsné. Hlavně teda pro člověka, který měl biologii naposled před čtyřmi lety na gymplu, a který měl čas se učit jen pár dní během zkouškového z čerstvě zakoupené učebnice "Odmaturuj z biologie". :D Přípravu to nepochybně chtělo o dost větší, bohužel na matfyzu se mi pár věcí zkomplikovalo, tak jsem neměl času tolik, kolik jsem plánoval. Ale myslím si, že jsem se s tím v rámci možností popral statečně jako správný chlap. :) Pokud se na tu školu nedostanu, tak příští rok už se mi to rozhodně podaří. Ale držte mi palce! Rozhodně jsem snad nedopadl nějak tragicky a kdo ví? Třeba budu mít i trochu štěstí.

    S tím souvisí takový dotaz pro zdejší studenty Univerzity Karlovy: je možné si normálně zapisovat předměty mezi fakultami? Říkal jsem si, že i když se nedostanu, tak bych si jen tak pro zajímavost i jako matfyzák zapsal nějaké úvodní předměty. Věci kolem molekulárky, genetiky, imunologie a podobně mě hodně zajímají a nerad bych čekal celý rok do dalších přijímaček, abych se o nich mohl konečně dozvědět trochu víc, než co si sám sem tam načtu z anglické Wikipedie.

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    21.6.2009 21:03 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Zajímavé - ale k čemu je to vlastně dobré? :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    21.6.2009 21:07 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Na podobnou otázku odpověděl na prvním cvičení z Neprocedurálního programování Ondřej Zajíček slovy: "To jsou teda otázky, na Matfyzu". :-D

    Já odpovídám: k ničemu! :-D
    21.6.2009 21:17 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Ale ne, vážně. Musím přiznat, že mně jako člověku, který je poměrně vysokoúrovňově a ještě navíc teoreticky zaměřen, přišlo hodně zajímavé si zkusit, jak můžou zhruba takovéhle nízkoúrovnové věci fungovat. Dlouhou dobu jsem je totiž bral jako takovou samozřejmost. Tak jsem si to prostě chtěl vyzkoušet na vlastní kůži. Samozřejmě by v reálu nikdo takovouhle věc v Pythonu nepsal, ale já se ten Python chtěl naučit a vždycky upřednostňuju učení se tím, že si rovnou zašpiním ruce, než čtením učebnic a tutoriálů. A to platí nejenom o tom Pythonu, ale i o těch zásobníkových počítačích. Než abych četl nějaké elaboráty, tak jsem si nějakou tu zásobníkovou mašinku radši zkusil napsat. Je to větší zábava. :-)

    Doufám, že to tady nikdo nebude brát moc vážně, možná jsem to do toho zápisku měl napsat. :-) Vyrobil jsem Mašinku jen tak pro zábavu a pro odreagování a podělil jsem se s ní proto, protože jsem měl dojem, že by někoho mohla možná taky zajímat.
    21.6.2009 21:22 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Aaaaaa, matfyz! A já zrovna dneska hodil do schránky papír, na kterém byl text něco jako "Závazně se přihlašuji ke studiu od ak. roku 2009/10 na MFF"... To bude sranda :) Ale musím uznat, že i když jsem python v životě neviděl tomu kódu docela rozumím :) Mohl ych zkusit něco takového zbastlit v PHP :D A nebo se konečně naučit perl :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    21.6.2009 23:23 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Tak to přeju hodně štěstí. Matfyz je skvělá škola. Za poslední dva roky sice trochu vyměkl, už to není taková tvrďárna, ale zase se začínají objevovat i ženský (ve větším než velmi malém množství :-)), tak už se to tady i celkem dá. :-P

    Hlavně se teď proboha nic neuč, nic nedělej, flákej se, chlastej a užívej si života, dokud ti nezačne semestr, dobře ti radím (a tuhle ufolog amigapower se mnou určitě bude souhlasit :-D). V semestru tohle všechno sice můžeš taky, ale už to prostě není vončo. :-)
    22.6.2009 00:00 Tomáš Srnka | skóre: 7 | Bratislava/Praha
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    21.6.2009 21:31 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: Jede, jede (virtuální) mašinka
    já se ten Python chtěl naučit a vždycky upřednostňuju učení se tím, že si rovnou zašpiním ruce
    taky jsem se vzdycky chtel naucit python... do te doby nez jsem v nem musel naprogramovat par veci... a teda abych pravdu rekl, radsi se bez nej obejdu.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    21.6.2009 21:42 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Já žádné iluze nemám, z toho jazyka do kolen rozhodně nejdu, ale beru to pragmaticky. Píše se v něm snadno a má spoustu knihoven. Kromě C, C++, Javy, Prologu a Haskellu, které se mě ve škole týkají se mi hodí i jazyk pro takové to domácí rychlé programování. A Python tohle splnil poměrně snadno. Většinu věcí jsem napsal jen tak z hlavy za pomoci několika málo základních syntaktických konstrukcí jazyka a pokaždé, když jsem potřeboval něco složitějšího (typicky práce s řetězci nebo seznamy), jsem si to rychle vyhledal v dokumentaci. Nic víc od prototypovacího jazyka nečekám.

    Tebe ale chovám ve velké úctě ( :-) ) díky Schemikovi, tak se ptám: co pro tyhle účely používáš ty? Píšeš všechny tyhle věci ve Scheme?

    Nerad bych se tu pouštěl do dalšího nekonečného flamu o Pythonu, jako odpověď mi bude stačit jméno jazyka. :-)
    21.6.2009 22:19 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: Jede, jede (virtuální) mašinka
    co pro tyhle účely používáš ty?
    velice casto na takove to domaci programovani pouzivam Bash... protoze to casto zacne jako jeden nevinny prikaz treba v sedu, ktery casem nabobtna o par rour a nejaky ten for cyklus az je z toho program. ;-] jako to se musi shellu nechat moznosti kompozice funkci jsou fakt slusne... horsi je to s vykonem... to pak nekdy sahnu i po tom pythonu... ale v posledni dobe hlavne po schemiku ;-]

    no a pokud potrebuju vykon, tak pouzivam spis SBCL nebo stare dobre Cecko... a priznam se bez muceni, ze obcas neco narychlo sbastlim i v PHP nebo Jave...

    imho, kazdy z jmenovanych jazyku se hodi na neco jineho a u kazdeho jsem narazil na nejaky problem, ktery me dokaze vytocit do bela... tak taky doufam, ze se to nezvrhne do flamu... ale porad lepsi flame o programovacich jazycich, nez politice...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    22.6.2009 09:30 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    > velice casto na takove to domaci programovani pouzivam Bash

    Mimochodem, znas SCSH?

    21.6.2009 21:23 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: Jede, jede (virtuální) mašinka
    no, ono to je spis o te uvaze, pro jaky vyssi jazyk nebo naopak nizsi jazyk (procesor) by ten VM mel byt urceny... to pak dokaze hodne ovlivnit navrh...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    21.6.2009 21:36 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Tak o tom vůbec nepochybuju. Škoda, že do téhle problematiky moc nevidím. Ale musím přiznat, že i když mám podánu přihlášku na magisterské studium na Umělou inteligenci a neprocedurální programování, tak si určitě zapíšu i nějaké zajímavé předměty ohledně konstrukce překladačů a dalších souvisejících věcí. Já sice nikdy na tyhle věci moc nebyl, ale začalo mě to docela zajímat.
    21.6.2009 22:32 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: Jede, jede (virtuální) mašinka
    Škoda, že do téhle problematiky moc nevidím.
    ...to obcas nemusi byt na skodu. ono neni nad to, kdyz clovek zjisti sam, jak se veci ve skutecnosti maji. treba ty vecne spory o tom jestli ma byt procesor zasobnikovy nebo registrovy...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    21.6.2009 22:43 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Pravda, na tyhle spory jsem už narazil. Nevím o tom ale nic, takže u mě momentální zůstává pouze údiv nad tím, jak něco tak minimalistického jako je zásobníkový stroj s pár instrukcemi, může zvládat opravdu netriviálně složité úkoly. Já jsem obecně zastánce minimalismu, tak budu odteď asi vždycky trochu zatížen na stranu zásobníkových strojů. :-)

    Mimochodem, vybičovat mou zlenivělou vysokoúrovňovou mysl k napsání a odladění toho trapného faktoriálu v assembleru o kus výše mě stálo skoro stejně mnoho intelektuálního úsilí, jako napsat celou Mašinku dohromady v Pythonu. :-D Člověku, který je zvyklý psát v "normálních" jazycích, se to skoro ani nezdá. :-) Ty kompilátory a všelijaké další černé skříňky oddřou fakt hodně práce. A co teprv lidi, kteří je tvoří. Klobouk dolů.
    21.6.2009 22:53 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Citát: "To je vcelku sprostá otázka, dobrý to je, protože je to hezký."
    Quando omni flunkus moritati
    22.6.2009 08:46 TM
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    No k čemu je to dobré. Snad k tomu, že to funguje ne?
    Mně se třeba líbí když vidím, že si lidé ještě pořád hrají s něčím pořádným. Proti bastlení a lepení tříd v Javě je to jak pohlazení na duši...
    22.6.2009 18:12 asm
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Neznate nejakou stranku, kde by byly porovnany assemblery i386, pythonu, JVM apod.? Nenasel jsem nic uceleneho...
    22.6.2009 20:53 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    Asi proto, že je to nesmysl.

    Python nemá assembler žádný, je to čirý interpretr – tedy pokud hovoříme o defaultním C Pythonu

    JVM, stejně tak .NET VM (IL) mají zásobníkový automat – jejich asm je tak jednoduchý, že snadno pochopíte z pohledu, o co se jedná.

    virtuální assemblery Javy a .NETu mají navíc metadata, bez kterých to nejde – tedy řadu dalších přídavných dat, názvů, proměnných, objektů atd., které musí vurtuální mašina dostat, jinak to nefachá. a metadata jsou dost vysokoúrovňává data. navíc samotný asm má některé vysokoúrovňové instrukce zejména z řad práce s třídami. plus garbage collector – asm ví, co má kde za data, jakého typu, jakých názvů, zná třídy, metody, parametry, atd..

    i386 je naproti tomu čistý asm – prostě sekvenčně vykonává instrukce. nepotřebuje žádná metadata, ani znát datové high level typy toho co vykonává.

    jak vidíte, porovnávat se to rozumně nedá

    23.6.2009 08:44 xm | skóre: 36 | blog: Osvobozený blog | Praha
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Python (standardní CPython) samozřejmě má obdobu asembleru, kód se nejdříve zkompiluje do bytecodu (přípona .pyc) a ten se pak teprve interpretuje. Viz třeba standardní modul dis (Disassembler for Python bytecode).
    Svoboda je tím nejdůležitějším, co máme. Nenechte se o ní připravit, podporujte Pirátskou stranu!
    23.6.2009 16:21 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    Python má bytekód, tedy zparsovaný kód Pythonu. Nazývat to assemblerem je poněkud hodně moc silné kafe. Ale opravdu silné kafe.

    23.6.2009 08:57 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka
    Python nemá assembler žádný, je to čirý interpretr – tedy pokud hovoříme o defaultním C Pythonu.
    No, pokud si mám vybrat mezi panem Ponkrácem a dokumentací modulu disassembleru (C)Pythonu, hádejte, komu budu věřit ;-)

    Takže pro původního tazatele - Python má svůj bytecode i virtuální stroj, který je uložený v těch .pyc a .pyo souborech (ty druhé by měly být optimalizované, ale prakticky jsou jenom stripnuté). Jedná se o zásobníkově orientovaný assebler/bytecode*, který má hromadu vysokoúrovňových operací - prakticky jakákoli vlastnost Pythonu má svoji instrukci.

    * pro virtuální stroje je lepší používat termín bytecode, ale vzhledem k tomu, že ten javový umí některé ARM mašinky provádět nativně, asi je tohle rozdělení spíše akademické.
    When your hammer is C++, everything begins to look like a thumb.
    23.6.2009 16:27 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    Jen v té dokumentaci Pythonu je psáno: „Since there is no Python assembler, this module defines the Python assembly language.“ (Ačkoli neexistuje žádný Python assembler, … atd.) ale pan Vyskočil je chytřejší.

    Python má bytekód, tedy zparsovaný zdroják Pythonu. Dokonce opravdu jenom zparsovaný, nemá fakticky ani žádnou optimalizaci. Marketinkoví, P.R. a jiní mlžící a lži vydávající odborníci by to nazvali „vysokoúrovňovým assembler“, nebo „assemblerem s vysokoúrovňovými operacemi“, ale fakticky je to jenom mírně přechroustaný zdroják. To také mohu říci, že „Linux je jen jinak koncipované Windows“, nebo „linuxová komunita je komunita příznivců Microsoftu s menší loajalitou k Microsoftu“ a budou to stejně pravdivé věty se stejně překroucenými political corectness výrazu jako mluvit o Pythonovském (velmi neforemném a hrubém, neoptimalizaovaném parsingu zdrojáku) jako o „assembleru“.

    23.6.2009 16:43 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: Jede, jede (virtuální) mašinka
    Jen v té dokumentaci Pythonu je psáno: „Since there is no Python assembler, this module defines the Python assembly language.“ (Ačkoli neexistuje žádný Python assembler, … atd.) ale pan Vyskočil je chytřejší.
    pan ponkrac by v diskuzi mohl laskave zacit rozlisovat terminy -- assembly language a assembler, do cestiny se to preklada tusim jako, jazyk symbolicky adres a assembler (se nepreklada).
    Python má bytekód, tedy zparsovaný zdroják Pythonu.

    doporucuji dostudovat pojem bytecode, abyste zjistil, ze bytecode != zparsovany zdrojak.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    23.6.2009 17:34 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    pan ponkrac by v diskuzi mohl laskave zacit rozlisovat terminy -- assembly language a assembler, do cestiny se to preklada tusim jako, jazyk symbolicky adres a assembler (se nepreklada).

    Mohl byste si laskavě ještě jednou přečíst co píšu?

    doporucuji dostudovat pojem bytecode, abyste zjistil, ze bytecode != zparsovany zdrojak

    V případě Pythonu fakticky jde o rovnost. Píšeme tu v kontextu Pythonu.

    Já jsem nikde netvrdil, že bytekódu je zparsovaný zdroják, ale tvrdil jsem, že v případě Pythonu jde o fakticky zparsovaný zdroják.

    23.6.2009 18:31 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: Jede, jede (virtuální) mašinka
    ,,Since there is no Python assembler, this module defines the Python assembly language..'' (Ačkoli neexistuje žádný Python assembler, … atd.)
    to ze neexistuje ,,assembler'' neznamena, ze neexistuje ,,assembly language'', ktery tento modul definuje.... i.e., tento ,,assembly langauge'' je izomorfni vzhledem k bytecodu, stejne tak jak je izomorfni jazyk symbolickych adres vuci jazyku stroje.

    Já jsem nikde netvrdil, že bytekódu je zparsovaný zdroják, ale tvrdil jsem, že v případě Pythonu jde o fakticky zparsovaný zdroják.
    ale tvrdil: Python má bytekód, tedy zparsovaný kód Pythonu.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    23.6.2009 21:07 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    Jestli chcete, já Vám nadefinuje deset různých assemblerů pro Python. Teoreticky. Akorát nebudou v základním interpreteru.

    Jakákoli snaha o to udělat z byte kódu něco jiného, než přechroustaný zdroják narazí z druhé strany na to, že Python nehodlá nic stabilizovat. Ba dokonce nějaká snaha neměnit syntaxi, byte kód, či cokoli jiného velmi rychle narazí na odpor samotného autora Pythonu a jeho stejnou myšlenkou nakažených příznivců.

    Když do toho budeme šťourat najdeme leccos, akorát je to v praxi k (autocenzura). Python mimo jiné běží i na JVM, stejně tak jako na .NET mašině, kde běží mnohem rychleji právě z toho důvodu, že běží na solidním byte kódu / assembleru, a ne na přechroustaném zdrojáku tak jak to standardní Python předvádí.

    ale tvrdil: Python má bytekód, tedy zparsovaný kód Pythonu.

    Kontext! Já se fakt moc omlouvám, ale nepíšu právnické texty s paragrafy, citacemi a odkazy na předchozí věty. Pokud se mluví a několik příspěvků jde o Pythonu, mluvím v kontextu Pythonu. Standardní Python (tedy ne žádné zbožné přání nějakého Python modulu) nemá jiný byte kód, než fakticky plus mínus přeparsovanou syntaxi.

    Ani nemůže mít nic jiného, protože když autor Pythonu neustále přeorává co se dá, a neustále se píší nové a nové parsery syntaxe a další – pak na optimalizaci, nebo tvorbu nějakého slušného byte kódu nezbývá čas a Python to pak musí dělat jen velmi povrchně.

    Dále už odmítám odpovídat na hnidopišské rýpání do slov od lidí, kteří neumí dát do kontextu několik vět a nejsou s to pochopit význam textu, pokud je nutné si dát dohromady sdělení ve dvou následujících větách po sobě.

    23.6.2009 16:33 Miloslav Ponkrác | blog: miloslavponkrac
    Rozbalit Rozbalit vše Re: Jede, jede (virtuální) mašinka

    pro virtuální stroje je lepší používat termín bytecode, ale vzhledem k tomu, že ten javový umí některé ARM mašinky provádět nativně, asi je tohle rozdělení spíše akademické.

    Spíše pro JVM se dá použít i výraz assembler, stejně tak jako pro řadu dalších jazyků. Java má stabilní byte kód / aassembler, který je standardizzovaný a relativně neměnný.

    Python nic takového nemá, v každé verzi Pythonu je to jinak. Byte kód z verze x.y nepoužijete dost dobře ve verzi x.z (za předpokladu y <> z pro matematické šťouraly).

    Python se totálně brání ustálit a standardizovat i syntaxi jazyka, natož teprve svůj byte kód. Python má filozofii „strašně nás baví všechno měnit a často to děláme jen proto, že je to príma, a bavíme se tím“, takže nic stabilního tam fakticky nenajdete. Pokud byste dnes rozlouskli byte kód (tedy pro Ty co to nadneseně nazývají assemblerem), bude to stejně každou chvíli překopáváno.

    Založit nové vláknoNahoru

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