• ú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
    XCHAOS
    XCHAOS --- ---
    :-)
    XCHAOS
    XCHAOS --- ---
    XCHAOS: no, podle https://godbolt.org/ to funguje, ale "doma" jsem nekoušel. Ty složený závorky nejsou scope/blok, ale inicializace pole hodnotami. Ty hranatý závorky ve výčtu hodnot inicializujících pole jsem neznal, ale zřejmě dovedou říct kolikátej prvek v poli deklaruješ. No a protože tu deklaraci proměnný máš v ifu, tak se to snaží ten kompiler okamžitě evaluovat, což je zřejmě spíš bug... Popravdě, zkoušel jsem v C zneužívat různý šílenosti, spíš teda k (iluzornímu) zvýšení čitelnosti kódu, než k obfuskaci. Ale tohle je fakt extrém :-)

    Je to z Mastodonu. Lidi tam na to reagujou ještě většíma zvěrstvama, typu přejmenovávání funkcí :-)
    lcamtuf :verified: :verified: :verified:: "The BASIC feature of the C language standard perm…" - Infosec Exchange
    https://infosec.exchange/@lcamtuf/113677429918972456

    Vůbec, kdo tady ještě nemáte Mastodon... je tam fakt hodně programátorů :-)
    [Mastodon 🐘 / Fediverse - decentralizovaná sociální síť]
    DANIELSOFT
    DANIELSOFT --- ---
    XCHAOS: čučím na to už minutu a nechápu jak to funguje :(
    XCHAOS
    XCHAOS --- ---
    když už si myslíte, už víte o céčku všechno... is this even legal? :-)
    XCHAOS
    XCHAOS --- ---
    wait.... what? :-)
    Compiler Explorer
    https://godbolt.org/z/dfsKGqYGz
    XCHAOS
    XCHAOS --- ---
    DANIELSOFT: já v 90tých letech setjmp() a longjmp() vůbec neznal, narazil jsem na to až náhodou po letech při studiu toho, co všechno jde dělat v unixovém userspace C... je to víceméně dělané na try ~ catch (resp. v Pythonu try ~ except), ale jiné využití si moc představit nejde...
    DANIELSOFT
    DANIELSOFT --- ---
    XCHAOS: teď mě napadá, co se mi ale tehdy povedlo: implementovat Cčkové setjmp() a longjmp() v Borland Pascalu - pomocí disassembleru, vloženého assembleru na straně Pascalu a zkrátka record místo struct tak, aby měl přesně stejnou strukturu. docela jsem byl na to pyšný, i když už si nepamatuju, jak často jsem to reálně využil. zdroják se možná ještě někde válí, ale je to docela passé
    XCHAOS
    XCHAOS --- ---
    DANIELSOFT: jo, věšení funkčnosti na DOSovské interrupty byla legrace. Já takhle nakonec pro jednoho klienta implementoval odchycení Alt+Tab, aby to simulovalo přepínání oken ve Windows a taky bylo nutné se pověsit přímo na přerušení klávesnice. Posixová vlákna jsou tak trochu tohleto "on steroids", no :-)

    Nicméně, pokud máme vymyslet, jak vyskočit z běžící funkce a dělat chvíli něco jiného, tak nic jiného než thready a semafory doopravdy k dispozici nemáme. Ten týpek nakonec šel jinou cestou, ale do mojí motivace využití threadů celkem zapadá (můj projekt je natolik šílený, že o něm ani nebudu mluvit).
    DANIELSOFT
    DANIELSOFT --- ---
    XCHAOS: snad nevadí když budu lehce OT, ale navazuju a nevím kam líp s tím: kdysi jsem se pokusil implementovat unixové symlinky v DOSu pomocí navázání rezidentního programu na int 21h (jako že když čte soubor s linkem, tak aby vrátil ten linkovaný...) ovšem hnedka při úvodních pokusech jsem narazil na to, že při přetížení tohoto přerušení musí být člověk extra opatrnej :) no nebudu lhát, cokoliv jsem zkusil, zaseklo mašinu, tak jsem z tohoto plánu ustoupil s tím, že jsem si chtěl vzít příliš velké sousto :)
    XCHAOS
    XCHAOS --- ---
    Na tom předchozím PDFku je zajímavý, že já jsem přemýšlel, jestli by pythonovské yield nemohlo jít v C implementovat pomocí setjmp/longjmp, ale nevycházelo mi to (popravdě, ani pro jediné vnoření do funkce) - a přešel jsem k posix threadům. A pak jsem to zkusil vygooglit a zjistil jsem, že někdo měl naprosto přesně podobný nápad :-)
    XCHAOS
    XCHAOS --- ---
    XCHAOS
    XCHAOS --- ---
    VITEX: jako cool, ale těsně vedle. Na C++ je tady jinej klub...
    VITEX
    VITEX --- ---
    GitHub - yhirose/cpp-peglib: A single file C++ header-only PEG (Parsing Expression Grammars) library
    https://github.com/yhirose/cpp-peglib
    XCHAOS
    XCHAOS --- ---
    Elissa: "EDIT: no part of this post is a question. I am no…" - eigenmagic.net
    https://eigenmagic.net/@vampiress/113450161380981899
    docela zajímavé diskuzní vlákno.... MSVC vyhodnocuje parametry funkce zprava doleva, místo zleva doprava. Maličkost, ale u imperativního programovacího jazyka docela zásadní, protože ve specifických případech nemusí být výsledky deterministické (gcc samozřejmě vyhodnucuje parametry funkce zleva doprava, stejně jako expressiony, ostatně čárka je v C stejně jen operátor, vyzkoušejte si to :-)
    XCHAOS
    XCHAOS --- ---
    A Nice Intermediate Language(ANIL)
    GitHub - AnilBK/ANIL: ANIL(A Nice Intermediate Language) Python & C++ inspired programming language that transpiles to C and can be embedded within C source files.
    https://github.com/AnilBK/ANIL

    No, o transpilery do C jsem se v poslední době začal zajímat, ale tenhle mi moc nebere...
    XCHAOS
    XCHAOS --- ---
    eh, C++ pořád stejně:
    vitaut 🤍❤️🤍 🇺🇦: "Mod ern C++" - Mastodon
    https://mastodon.social/@vitaut/112928944039188074
    XCHAOS
    XCHAOS --- ---
    začal jsem si pročítat zdrojáky tohohle:
    grunfink/snac2: A simple, minimalistic ActivityPub instance written in portable C - Codeberg.org
    https://codeberg.org/grunfink/snac2

    a je třeba říct, že jde o hodně zvláštní styl codeřiny v céčku :-) včetně například funkcí na generování HTML. je to poměrně hodně čisté C, na druhou stranu, i když místy docela specifické (skládání HTML tagů voláním funkcí vracejících stringy, apod.)
    XCHAOS
    XCHAOS --- ---
    také byste někdy chtěli, aby v C, které umíte i pozpátku, šlo napsat některé věci stručně, jako ve skriptovacích jazycích?

    no, "pod kapotou" by muselo být něco jako tohle:¨

    Iterator in C language - Stack Overflow
    https://stackoverflow.com/questions/4961860/iterator-in-c-language
    GIOMIKY
    GIOMIKY --- ---
    Kliknutím sem můžete změnit nastavení reklam