• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ja to vztahl k tem defaultnim promennym, ne k tomu prirazovani jmenem.

    XCHAOS: A ja vim co je fortran, neni to jazyk nasich otcu a nebudiz mu zeme lehka, naprosta vetsiny moderni fyziky se v tom pocita a jeste mnoho let pocitat bude.
    A jo, o tyhle tendenci vim, ty to chces opacne, zajimalo by mne planovany vyuziti takovy moznosti.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: tak já sakra vím, co to dělá, když jsem to zmínil !!!
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: ano, a dnes je tendence udělat architekturu aplikace třeba v Pythonu, který je dynamicky vždy zcela nad věcí - a optimalizované moduly psát v C.

    O tom, že Fortran je jazyk specializovaný na násobení matic, se vyprávěly vtipy už v prvních učebicích programování, když jsem byl ještě na základce. (V mém případě bych měl tendenci ten jazyk nazývat "fotran", protože můj fotr v něm velkou část života programoval :-) je to takový jazyk našich otců, budiž mu země lehká :-)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Bacha, tohle je neco jinyho. Tohle je ze operator prirazeni, krom samotnyho prirazeni, taky vraci to co priradil. Je to ekvivalent:
    if((a=strcmp) != 0){...}
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Pockej, mas pro mne nejaky pouziti?
    Protoze typicky se chce aby se ty vic high level koncepty (cely systemy/programy) delaly v necem s vysokou abstrakci a cim niz se jde, tim vic se pak muzou podle potreby veci specializovat.

    Priklad z fyzikalnich simulaci, velky veci se delaj ve fortranu. Ale kdyz dojde na ty konkretni veci uplne dole, tak ty cally jsou na knihovny psany v Ccku nebo primo v ASM.

    Tj. treba nasobeni velkejch matic atd je hrozne multithreadovany a pres sit a kdesicosi (Fortran, Java apod), pak uz nejakej node dostane matici, kterou teda ma vynasobit a jde (ve Fortranu) rekurzivne na neco jako 16x16, kde nastoupi hyperoptimalizovanej ASM kod kterej to vypocita. (A to Fotran compilery nejsou zadny smejdy)

    To po cem volas mi prijde jako presnej opak tohohle pristupu.
    XCHAOS
    XCHAOS --- ---
    ISTEVE: tak zrovna o tomhle se rád dozvím víc, jak to funguje.

    já assemblerista nejsem, ale zase na pre-compilaci do C zdrojáku bych si samozřejmě troufl. jestli mě přesvědčíte, že nemám vyvíjet žádná makra, ale rovnou používat Cython, bude to zajímavé :-)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: jako v C toto je platné pokud ta proměnná existuje se stejným názvem i uvnitř volajícího scope:

    {
    int a;
    funkce((a=1));
    }

    teď mě samotného zmátlo, jestli jsem tím příkladem v pythonu deklaroval proměnnou i v aktuálním scope - podívám se:

    > a
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined

    ... takže ne. výrazy předávané jako parametr funkce jsou u C součástí aktuálního scope, v Pythonu je to naproti tomu nějaká elegantní antigravitační magie.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    ANT_39: Videl, nice, dik.

    XCHAOS: Ono tohle Ccko vlastne neumi, co? Ja to nemam moc rad, protoze kdyz se pak snazim lustit kod a nemam naseptavac, tak poznat ze to je call na stejnou fci a ne na jinou verzi je dost neprijemny. (Musi se hodne do dokumentace)
    XCHAOS
    XCHAOS --- ---
    ANT_39:
    http://en.wikipedia.org/wiki/Pyrex_%28programming_language%29
    http://en.wikipedia.org/wiki/Cython

    .... bohužel, tohle je přesně obrácený směr. mě by se líbilo naopak do programu v C vložit fragment s Pythoní syntaxí, který by se výsledně překompiloval jako součást té aplikace. a protože python je celkově čitelnější než C, tak vlastně to co chci, je něco jako precompiler z Pythonu do C (jenom nevidím důvod, proč by měl být do C++ ...)

    samozřejmě, že vývoj který dělám teď se vůbec nevylučuje s tímhle cílem: v podstatě čím víc toho člověk umí naprogramovat v C, tak z tím většího množství "vyšších jazyků" je pak schopný udělat nějaký jednoduchý precompiler do C ...
    ISTEVE
    ISTEVE --- ---
    XCHAOS: FYI: Pyrex, ani jeho naslednik Cython, nedelaj primej preklad Pythoniho zdrojaku do binarky.
    ANT_39
    ANT_39 --- ---
    XCHAOS: Tak muzes to psat nejakym tim subsetem pythonu a prelozit to do C++.
    XCHAOS
    XCHAOS --- ---
    ANT_39: ...si říkám, že nějaká možnost použít tímhle způsobem v C zdrojáku fragmenty Pythonu by právě nebyla od věci :-) a nějaký precompiler by to pak unrollnul do čistého C, a bylo by s tím méně hádek, než u těch mých maker...
    ANT_39
    ANT_39 --- ---
    ANT_39: Eh, a aby byly videt ty pojmenovany parametry :)
    [frac2 setNumerator: 1 andDenominator: 5];
    XCHAOS
    XCHAOS --- ---
    XCHAOS: ... a pokud je chceš uvést, musíš je tuším pojmenovat, zapoměl jsem dodat. ale můžeš pojmenovat i ty povinný.
    ANT_39
    ANT_39 --- ---
    DAVIDOWITCH: ObjC je v podstate smalltalk naroubovany na C. Jestlis nekdy videl volani funkci ve smalltalku, tak v ObjC je to hodne podobne. Nejaky nahodny priklad z google:
       Fraction *frac = [[Fraction alloc] init];
       [frac setNumerator: 1];
    
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: tak v Pythonu je to tak jako šalamounsky, že některý parametry funkcní mohou mít defaultní hodnotu, a ty jsou pak při volání nepovinný.

    ovšem můžeš to tam udělat i tak, že předáš povinný parametry pojmenovaný:

    >>> def funkce(a): return a
    ...
    >>> funkce(a=1)
    1

    jako neříkám, že je mi Python úplně cizí, a možná bych měl rozvíjet nějaký ten Pyrex, Cython, nebo tak něco - prostě nástroje pro přímý překlad Pythoního zdrojáku do binárky, ať už via C nebo jinak. (možná precompiler z Pythonu do C by mi pro začátek získal daleko více příznivců, než moje snahy...)

    Ad to "podívej se někdy na něco jinýho, než C99" - tedy, kromě "nutného zla" v podobě potýkání se s udržování prehistorických PHP skriptů (což fakt není programování) jsem se v posledních letech setkal zejména s Pythonem, SQL a JQuery (což je tedy výrazně více, než JavaScript - JQuery je vlastně svět sám pro sebe, velmi inspirativní...) - takže děkuji za optání, ale nějaké základní povědomí "jak se něco dělá jinde" snad přeci jen mám... problém je, že jsou to vyšší jazyky a nad některýma věcma se tam prostě nepřemýšlí.
    XCHAOS
    XCHAOS --- ---
    REDGUY: chci jen říct, že to bude záviset na tom, jak kdo implementuje a zdokumentuje tu danou funkci: ta funkce bude dělat to, co programátor uzná za vhodné, a co je u ní bezprostředně požadováno.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Nevim, field se v jave rika member variable, jestli s tim miris na web, nechces kolize jmen.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    JACHYMKO: Ja uhnu hodne stranou (a zkazim si svoji peclive vybudovanou povest uzce specializovaneho doktoranda programujiciho pocitacove hry) a zeptam se prikladem z VHDL, at to pochopim. Tam je instancovani entity (plus minus autobus ekvivalent volani fci) cca takhle:
    ...nejakej bordel...
    port map(
    jmeno_promenny_uvnitr_entity0 => promenna_ve_volajicim0,
    jmeno_promenny_uvnitr_entity1 => promenna_ve_volajicim1,
    jmeno_promenny_uvnitr_entity2 => promenna_ve_volajicim2);

    tj. je vzdycky jasne videt i ve volani co skonci v jak pojmenovany promenny (ultradulezity kdyz predavas konstantu).

    Je to nejak cca tak?
    XCHAOS
    XCHAOS --- ---
    REDGUY: hmm, jako že nějaký parametr třeba u funkce se musí povinně jmenovat nějak ? když s tím přijde ObjC, tak je to dobré, když mám něco povinně pojmenovaného já, tak je to špatně ? :-)

    REDGUY: polovina byla spíš vlastnost zvolené koncepce, než chyba. pokud vyjdeš z premisy "složitější je vždy lepší, než jednoduché", tak ano - pak si měl v podstatě pravdu, a upozornil si "chybně jednoduchou koncepci", na několika bodech.

    REDGUY: jo, u toho try { } pomocí setjmp()/longjmp() bude asi jasné, že fail() bude muset být uzavřením všech načatých paměťových kontextů, ano.. pěkně se nám to zamotává, ale holt tam bude asi nějaký globální seznam kontextů týkající se vždy aktuálního try { } - a stejně bude globální seznam těch vyjímek, aby šlo ta odchycení vnořovat. jako jednoduché to nebude.
    Kliknutím sem můžete změnit nastavení reklam