Edison Design Group po více než 30 letech zveřejnil zdrojový kód svého EDG C/C++ front-endu. Ten proslul širokou podporou standardů C++ a kompatibilitou s dialekty kompilátorů od Microsoftu, GNU, Clangu, Sunu a dokonce i s prehistorickým cfrontem. EDG byl použit například v kompilátoru Intel C++ Classic, kompilátoru NVCC od firmy NVIDIA pro platformu CUDA nebo v našeptávači kódu IntelliSense v produktech společnosti Microsoft. Projekt nyní spravuje organizace The C++ Alliance a kód je dostupný pod licencí Apache 2.0, doplněnou o výjimky projektu LLVM.
Pocket Tank je malé kapesní virtuální akvárium postavené na vývojové desce ESP32-S3-Touch-AMOLED-1.8. Na dvoujádrovém mikrokontroléru ESP32-S3 s 8 MB PSRAM a 16 MB flash paměti běží jak simulace akvária, tak i malý jazykový model určující chování rybiček. Lokální model o velikosti 7,56 MB se 14 miliony parametrů vznikl destilací modelu Gemma 4 26B, tedy učitele s 26 miliardami parametrů. Kromě firmwaru pro skutečný modul s AMOLED
… více »Open-source nástroj Jevstiller vytváří (destiluje) malý lokální model, který se průběžně učí z odpovědí komerční služby Jev. Běžné dotazy vyřizuje přímo na vlastním hardware, čímž může řádově zkrátit čas odezvy a snížit provozní náklady díky menšímu využívání zpoplatněného API. Nejisté požadavky Jevstiller posílá do Jevu, rovněž průběžně kontroluje náhodná dvě procenta dotazů Jevem. Pokud se lokální model začne s Jevem rozcházet,
… více »Konference LinuxDays 2026 proběhne již tento víkend 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Konference LinuxDays 2026 znamená desítky přednášek a workshopů, zástup zajímavých osobností, místo pro setkání, spoustu nových nápadů a informací a stánky řady různých projektů: Fedora, openSUSE, vpsFree.cz, Mozilla, MacGyver - bastlíři SH, OpenAlt a mnoho dalších. Vstup je volný.
Microsoft oznámil, že WSL kontejnery (WSLC) aneb linuxové kontejnery ve Windows Subsystem for Linux (WSL) jsou již obecně dostupné. Současně popsal jejich architekturu.
openSUSE Leap 16.1 vstoupil do RC fáze. Nově lze instalovat jako standardní systém (Standard) nebo jako neměnný systém s atomickými aktualizacemi (Immutable). Samostatná neměnná distribuce openSUSE Leap Micro končí.
Byl vydán Mozilla Firefox 157.0. S nejvýraznější vizuální proměnou za poslední roky. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 157 bude brzy k dispozici také na Flathubu a Snapcraftu.
Rodina produktů Raspberry Pi se rozšířila o Raspberry Pi Smart Display Module. Deska pro Raspberry Pi Compute Module 5 se zasouvá přímo do displejů dle specifikace Intel SDM. Cena desky je 30 dolarů.
Byla vydána nová verze 2.56.0 distribuovaného systému správy verzí Git. Přispělo 104 vývojářů, z toho 39 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
Hackerská skupina ShinyHunters oznámila průnik do informačních systémů FBI, prostřednictvím zero-day zranitelnosti v platformě Oracle PeopleSoft, kterou úřad využívá mimo jiné pro náborový portál FBIJobs.gov. Útočníci tvrdí, že získali až 3 TB dat o současných i bývalých zaměstnancích a uchazečích o práci. Jako důkaz zveřejnili vzorek přibližně 5 000 záznamů obsahující jména, adresy, telefonní čísla, data narození, čísla
… více »Když se tady tak rojí zápisky o Pythonu a C++, musím přispěchat se svou troškou do mlýna - totiž s postem, který je o obojím.
Občas zde prudím se svojí Žirafou, což je indexátor souborového systému, prostě parodie na locate. Používám ji převážně jako "media library" k XMMS.
Taková grafická aplikace, to je soft-realtime záležitost. Na čase odpovědi totiž záleží, pokud se to zasekne, uživatel (tedy já) sice počká, ale je naštvaný. Žirafa navíc zobrazuje výsledky vyhledávání hned během psaní dotazu - takže na výkonu záleží, protože mezi dvěma stisky kláves je tak desetina sekundy.
Žirafa je celá v Pythonu (+GTK). Ze snahy napsat rychlou aplikaci v "pomalém" Pythonu jsem získal některá ponaučení, o která se teď hodlám podělit.
Что такое Python? Python je především, moji milí čtenáři, skriptovací jazyk. Co to vlastně znamená? Přiznám se, že osobně tento termín nemám rád, raději bych řekl, že je to dynamicky typovaný objektově orientovaný jazyk velmi vysoké úrovně.
Skriptovací jazyk je typicky prostředek pro rozšíření funkčnosti nějaké aplikace. Počítá se s tím, že s ním pracuje přímo koncový uživatel oné aplikace, nikoli pouze původní vývojář. Uživatel si naprogramuje novou funkci tak, že manipuluje s objekty té aplikace. Samotná aplikace je obvykle napsána v nějakém jiném jazyce (třeba C++) a některé objekty prostě zpřístupní ke skriptování (tím definuje API).
Jenže Python není nějaký Visual Basic zašitý do Excelu, je to univerzální samostatný jazyk. Chyba lávky. Když programujete v Pythonu tak v podstatě neděláte nic jiného, než že přistupujete k objektům, které jsou implementované v C. Vy prostě skriptujete prostředí, které se sestává ze seznamů, slovníků, stringů, integerů - a žádný z těchto objektů není napsaný v Pythonu.
Srovnejte nyní, moji milí hackeři, s Javou, od které si odmyslíte just-in-time kompilaci (java -Xint). Program v takovéto Javě se skládá z bajtkódu, jehož instrukce se interpretují. Python má taky svůj bajtkód, který interpretuje. Zásadní rozdíl je v tom, že celá standardní knihovna Javy je napsaná v Javě samotné.
Co z toho plyne pro chudáka programátora, který se snaží napsat rychlou aplikaci? Když si napíše nějaký svůj kontejner (třeba variaci na ArrayList), tak má šanci být rychlejší než knihovní implementace (protože si to napsal optimalizovaně pro své konkrétní potřeby). Když se ale o stejnou věc pokusí Pythonista, s velkou pravděpodobností pohoří, protože interpretovanou implementací nemůže konkurovat nativnímu kódu vylezlému z GCC.
Ústřední zásada pro tvorbu rychlých aplikací v Pythonu zní: drž se standardní knihovny. Standardní knihovna bývají dobře optimalizované (platí pro všechny jazyky), v Pythonu je to zvýrazněné tím, že její výkonově kritická část je v C.
V Žirafě jsem potřeboval následující věc: mám dva seznamy integerů (idčka dokumentů) a potřebuji vytvořit jejich množinové sjednocení. Nejrychlejší způsob, jak tohle udělat v Pythonu je takovýto:
def union(a,b):
return list(set(a).union(set(b)))
a to přesto, že oba vstupní seznamy jsou seřazené a stačil by tedy jednoprůchodový algoritmus. Když si takovýto (myslím že optimální) algoritmus napíšete v Pythonu, bude to mnohem pomalejší, než řešení, které oba listy nejprve zkonvertuje na množiny a pak z toho zase vytvoří seznam. (Zmíněný jednoprůchodový algoritmus taky dojede na to, že seznam, do kterého akumulujeme výsledek, se během výpočtu bude muset mnohokrát realokovat.)
V situaci, kdy optimální algoritmus je pomalý, je potřeba vyrobit kýženou implementaci v C nebo něčem podobném. Jak se to dělá v Céčku se můžete dočíst například zde. Není to moc hezké, je potřeba spousta balastoidního kódu starajícího se o vnitřnosti Pythonu. Posléze jsem objevil boost_python, což hromada C++ šablonové magie, která udělá většinu práce za vás.
Kus zdrojáku vydá za tisíc slov; zde je implementace třídy World:
#include <boost/python.hpp>
using namespace boost::python;
struct World
{
std::string msg;
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
int my_sum(list lst) //sums all integers in the list
{
int result = 0;
for(int i = 0; i < len(lst); i++)
{
int val = extract<int>(lst[i]);
result += val;
}
return result;
};
};
BOOST_PYTHON_MODULE(world)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
.def("my_sum", &World::my_sum)
;
};
Přeloží se to nějak takhle:
g++ world.cpp -I/usr/include/python2.5 -shared -o world.so -lboost_python
a používá následovně:
>>> import world
>>> w = world.World()
>>> w.set("hi!")
>>> w.greet()
'hi!'
>>> w.my_sum([1,2,100])
103
>>>
Python je skvělý jazyk a líbí se mi čím dál víc. Je ale dobré vědět, jaké jsou jeho vlastnsti a možnosti. Když už jste donuceni udělat rozšíření v kompilovaném jezyce, použijte šikovnou knihovnu.
Tiskni
Sdílej:
Posléze jsem objevil boost_python, což hromada C++ šablonové magie, která udělá většinu práce za vás.Pamatuju si, že jsem si před 5 lety hrál s boost_python pod MSVC a můj relativně jednoduchý program o dvou .cpp souborech to kompilovalo 10 minut
paskma@paskma:boost$ time g++ world.cpp -I/usr/include/python2.5 -shared -o world.so -lboost_python real 0m3.387s user 0m2.656s sys 0m0.140sGenuine Intel(R) CPU T2300 @ 1.66GHz
>>> import util >>> util.union(range(1, 10, 2), range(2, 10, 2)) [1, 2, 3, 4, 5, 6, 7, 8, 9]