Byla vydána nová stabilní verze 7.6 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 140. Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána verze 1.90.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.25.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byla vydána nová major verze 7.0 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Nově je postavena je na Debianu 13 (Trixie) a GNOME 48 (Bengaluru). Další novinky v příslušném seznamu.
Společnost Meta na dvoudenní konferenci Meta Connect 2025 představuje své novinky. První den byly představeny nové AI brýle: Ray-Ban Meta (Gen 2), sportovní Oakley Meta Vanguard a především Meta Ray-Ban Display s integrovaným displejem a EMG náramkem pro ovládání.
Po půl roce vývoje od vydání verze 48 bylo vydáno GNOME 49 s kódovým názvem Brescia (Mastodon). S přehrávačem videí Showtime místo Totemu a prohlížečem dokumentů Papers místo Evince. Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.
Open source softwarový stack ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán ve verzi 7.0.0. Přidána byla podpora AMD Instinct MI355X a MI350X.
Byla vydána nová verze 258 správce systému a služeb systemd (GitHub).
Byla vydána Java 25 / JDK 25. Nových vlastností (JEP - JDK Enhancement Proposal) je 18. Jedná se o LTS verzi.
Věra Pohlová před 26 lety: „Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala“. Jde o odpověď na anketní otázku deníku Metro vydaného 17. září 1999 na téma zneužití údajů o sporožirových účtech klientů České spořitelny.
class Thread{ private: pthread_t m_tHandle; unsigned int m_nStatus; Mutex m_tMutex; public: enum Status{ NotRunning = 0, Running = 1, Suspended = 2, Zombie = 3 }; Thread(); virtual ~Thread(); void run(); void kill(); void wait(); pthread_t handle() const { return m_tHandle; }; void handle( pthread_t handle ) { m_tHandle = handle; } void lock() { m_tMutex.lock(); } void unlock(){ m_tMutex.unlock(); } bool tryLock(){ return m_tMutex.tryLock(); } void status( unsigned int status ); unsigned int status() const { return m_nStatus; } virtual void start(); virtual void stop(); static void waitForAll(); }; static void *entry_point(void *thread_) { Thread* thread = reinterpret_cast<Thread*>(thread_); signal(SIGQUIT, signal_handler_SIGQUIT); thread_list_mutex.lock(); thread_list.insert( std::make_pair(pthread_self(), thread) ); thread_list_mutex.unlock(); thread->handle(pthread_self()); thread->start(); thread->stop(); thread->status(Thread::Zombie); pthread_exit(NULL); return NULL; } void Thread::run() { if( status() == NotRunning ) { label_create: status(Running); pthread_create(&m_tHandle, NULL, &entry_point, this); } else if( status() == Zombie ){ wait(); goto label_create; } }Ve funkci
static void *entry_point(void *thread_)
volám thread->start()
. Problém je, že se vždy zavolá metoda start() třídy Thread a né metoda odvozené třídy MujThread
:
class MujThread: public Thread{ public: MujThread(){} virtual ~MujThread(){} virtual void start() { printf("MujThread start()\n"); while(true); } virtual void stop() { printf("MujThread stop()\n"); } };
(Thread*)thread_
, bezúspěšně. Vím ale, že ten kód ještě nedávno fungoval. Pomalu bych řekl, že přestal fungovat po aktualizaci gcc.
pure virtual method called terminate called without an active exception ./testutk: line 4: 6543 Neúspěšně ukončen (SIGABRT)
make clean
.
MujThread::start()
nedávat jako inline. Kompilátor by sice měl být dost chytrý, aby buď ignoroval evidentní chybu programátora, nebo protestoval, jenže právě to ignorování chyby lze provést dvěma způsoby: buď bude ignorovat virtual
nebo inline
(zde implicitní). Musel bych se podívat, co v takové situaci předepisuje specifikace jazyka, ale v každém případě bude jistější nepožadovat po překladači něco, co je principiálně nemožné.
MujThred::start()
jako inline, nefunguje to. Mám jinou třídu (Application):
class Application{ .... public: .... virtual bool onInit() { return true; } virtual void onQuit() {} .... };Od té odvozuji
TestApplication
:
class TestApplication: public Application{ protected: MujThread t; public: virtual bool onInit() { ... t.run(); return true; } virtual void onQuit() { t.kill(); } };Zde však volání virtuálních metod funguje správně, což popírá vaši domněnku. (Už jste viděl zdrojový kód Qt knihovny? Je tam toho plno.) Problém bude nejspíš jinde. A jak říkám výše, ten kód fungoval naprosto bezchybně, když jsem ho před časem použil (ale na jiné distribuci, s jiným kernelem - 2.6.17, teď 2.6.18 - a s trochu nižší verzí GCC).
Thread::run()
(viz. kód výše), konkrétně se zavolá po vytvoření nového vlákna: pthread_create(&m_tHandle, NULL, &entry_point, this)
.
Tiskni
Sdílej: