Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi 2023.05. Programovací jazyk Raku byl dříve znám pod názvem Perl 6.
Linux Foundation Europe představila projekt RISE (RISC-V Software Ecosystem), jehož cílem je urychlit vývoj open source softwaru pro architekturu RISC-V.
Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu pro jednodeskové počítače na platformě ARM, byl vydán ve verzi 23.05. Přehled novinek v Changelogu.
Minulý týden proběhla openSUSE Conference 2023. Mimo jiné bylo oznámeno přejmenování systému MicroOS Desktop. MicroOS Desktop GNOME byl přejmenován na openSUSE Aeon a MicroOS Desktop Plasma na openSUSE Kalpa.
Thom Holwerda z OSnews si všímá, že vývoj operačního systému MINIX je prakticky mrtvý. Jeho hlavní autor, Andrew Tanenbaum, formálně odešel do důchodu v roce 2014 a příspěvky do kódu v následujících letech vůbec ustaly. Stav projektu shrnuje diskuze z roku 2020. Sice vyšlo najevo, že Intel používal MINIX v Management Engine, ale změny nezveřejňoval.
Google Chrome 114 byl prohlášen za stabilní. Nejnovější stabilní verze 114.0.5735.90 přináší řadu oprav a vylepšení (YouTube). Vypíchnut je CHIPS (Cookies Having Independent Partitioned State). Opraveno bylo 16 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Byly zveřejněny prezentace a videozáznamy přednášek a fotografie z česko-slovenského setkání poskytovatelů přístupu k internetu, provozovatelů telekomunikačních sítí, registrátorů domén a provozovatelů počítačových sítí a technických nadšenců CSNOG 2023 (Czech and Slovak Network Operators Group) konaného 16. a 17. května ve Zlínu.
Soutěž amatérských robotů Robotický den 2023 proběhne v neděli 4. června v Kongresovém centru Praha.
V Tchaj-peji probíhá počítačový veletrh COMPUTEX 2023. Firmy představují své novinky. Nvidia například superpočítač DGX GH200 AI.
Vyšla nová verze XMPP (Jabber) klienta Gajim. Nejvýznamnější novinkou je integrace OMEMO pluginu přímo do jádra aplikace, takže již není třeba plugin samostatně instalovat. Přehled dalších novinek je dostupný na oficiálních stránkách. Gajim je vytvořen v jazyce Python s využitím knihovny GTK a vedle Linuxu jej lze vyzkoušet i na platformách MacOS a Windows.
lib.c
:
#include <stdio.h> void neco() { printf("Něco\n"); }Toto je první program
prog1.c
:
void neco(); int main() { neco(); return 0; }Toto je druhý program
prog2.c
:
#include <dlfcn.h> void (*neco)(); int main() { void *lib = dlopen("./lib.so", RTLD_NOW); neco = dlsym(lib, "neco"); neco(); dlclose(lib); return 0; }A teď k překladu:
gcc -fPIC -shared -o lib.so lib.c gcc -o prog1 prog1.c ./lib.so -ldl gcc -o prog2 prog2.c -ldlA teď k testování:
time { for i in `seq 1 1000`; do ./prog1 >& /dev/null; done; } time { for i in `seq 1 1000`; do ./prog2 >& /dev/null; done; }První program je uměle spojen s knihovnou
dl
, aby se zaváděla také a spušení brzdila. Můžete zkusit -ldl
vyhodit.
dlopen
a dlsym
.
$ more tst_so.c void dummy() {} $ more tst_main.c #include < dlfcn.h> #include < stdio.h> #include < stdlib.h> #include < asm/msr.h> #define TIME(x) { \ int b, e; rdtscl(b); x; rdtscl(e); \ printf (#x ": %d\n", e - b);} void dump (char *txt, unsigned char *p) { int i; printf("%s at %p:", txt, p); i = 10; do printf(" %02x", *p++); while (--i); printf("\n"); } extern int dummy (void); int main () { int i; dump("dummy", (unsigned char*)dummy); i = 10; do TIME(dummy()) while (--i); void *module = dlopen("./tst_so.so", RTLD_NOW); if (!module) { perror("dlopen"); exit(1); } int (*dummy_ptr)() = dlsym(module, "dummy"); if (!dummy_ptr) { perror("dlsym"); exit(1); } dump("dummy_ptr", (unsigned char*)dummy_ptr); i = 10; do TIME(dummy_ptr()) while (--i); } $ gcc -O -fomit-frame-pointer -fpic -shared tst_so.c -o tst_so.so $ gcc -O -fomit-frame-pointer tst_main.c tst_so.so -ldl $ LD_LIBRARY_PATH=. ./a.out dummy at 0x804851c: ff 25 d8 99 04 08 68 30 00 00 dummy(): 1358 dummy(): 49 dummy(): 70 dummy(): 38 dummy(): 38 dummy(): 38 dummy(): 38 dummy(): 38 dummy(): 38 dummy(): 38 dummy_ptr at 0xb7f804bc: c3 90 90 90 55 89 e5 56 53 e8 dummy_ptr(): 375 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35 dummy_ptr(): 35
Tiskni
Sdílej: