Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.3 (𝕏, Mastodon). Přehled novinek a vylepšení v poznámkách k vydání.
Byla vydána nová verze 14.4 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
Databáze DuckDB (Wikipedie) byla vydána ve verzi 1.5.0. S kódovým názvem Variegata (husice rajská). Přináší řadu vylepšení, včetně nového ergonomičtějšího CLI klienta nebo podporu pro typ VARIANT a vestavěný typ GEOMETRY.
V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace
… více »QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.
Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována
… více »Andy Nguyen si na svou herní konzoli PlayStation 5 (PS5) pomocí exploitu Byepervisor nainstaloval Linux (Ubuntu). V Linuxu si spustil Steam a PS5 tak proměnil v Steam Machine. Na PS5 může hrát hry, které jsou vydané pouze pro PC a jsou na Steamu [Tom's Hardware].
Správce sbírky fotografií digiKam byl vydán ve verzi 9.0.0. Jedná se o větší vydání provázené aktualizacemi knihoven. Mnoho dílčích změn se vedle oprav chyb týká uživatelského rozhraní, mj. editace metadat.
Byla vydána verze 2026 distribuce programu pro počítačovou sazbu TeX s názvem TeX Live (Wikipedie). Přehled novinek v oficiální dokumentaci.
Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].
Dnes se podíváme na zoubek navigaci v kódu. Abychom si rozuměli, pod „Navigací v kódu“ myslím všechny život zjednodušující technologie jako autocomletion, content assist, code assist, všechno to co zahrnuje Microsoft pod pojem Intellisence a ještě něco navíc, automatická nápověna napojená na autocompletion, vyhledání referencí (míst kde je funkce volána, použita proměnná), vyhledání definic prvku. Trochu tady panuje chaos v termínech. Pokud víte nějaký lepší souhrnný název, dejte vědět v diskusi.
CDT parser se snaží kódu skutečně porozumět. Kód je přeložen do AST (Abstract Syntax Tree) struktury. Proces je to velmi podobný kompilaci. Na takto zkompilovaném AST stromu jsou založeny všechny vyhledávače referencí a deklarací, navigace v kódu, code assist, všechny formy napovídání, inteligentní přejmenovávání. Všechno to pohání jeden engine, to mě dodalo kuráž všechno hodit pod jeden souhrnný termín.
Takto inteligetní prohledávání oceníte hlavně, když hledáte volání metody nebo člena datové struktury. Pokud je to metoda s na potvoru obecným jménem, jako accept(), submit(), atd. ctags nebo jednoduché vyhledávání vás zavalí nerelevantními nálezů. Bavíme se samozřejmě hlavně o rozsáhlejších projektech, tam kvality IDE oceníte.
Parsování C/C++ je nepoměrně složitější než Java kódu. Ach ty nejednoznačnosti. Jednoduchý příklad: x * y znamená x krát y, nebo že proměnná y je typu ukazatel na x? Aby tomu přišel parser na kloub, musí vidět kód v širších souvislostech. To je náročné jak na čas – mnohem komplexnější rekurze, nutná víceprůchodovost - tak na paměť a to tak, že u současné implementace parseru taky klidně může dojít :) K tomu připočtěte direktivy preprocesoru, inline rozvoje, šablony, dopředné deklarace, vícenásobnou dědičnost a bůhví co ještě. Pokud se zajímáte o problematiku parsování, na rozdíl ode mě, mrkněte na dva linky dole.
V CDT pro spuštění navigace není nic extra nastavovat (na rozdíl třeba od KDevelopu). Stačí spustit ./configure u Autools based brojektů, to je velká většina Linuxových open source programů, protože ten generuje jak Makefile tak hodně hlavičkových souborů, bez kterých je parser kódu ztracený. Parser si už sám osahá a naindexuje všechny lokální i externí definiční soubory, pokud je na disku úspěšně najde. Než si začnete stěžovat na případnou nefunkčnost navigace doporučuji celý projekt rovnou i zbuildovat, jeden nikdy neví co se všechno během buildu generuje.
Celý systém navigace pro C/C++ je věrná a vcelku úplná kopie navigace pro Javu. Kdo s Eclipse JDT pracoval, potvrdí že je to podobnost pozitivní. Mezi moje oblíbené vlastnosti:
Přehledný seznam referencí a deklarací zvoleného prvku stejně jako u Java protějšku. CDT tady nerozlišuje mezi definicí (*.cpp) a deklarací (*.h) najde označí je jako deklaraci oba a je už na vás na co kliknete. Seznam je editovatelný, nalezené výsledky uložitelné. Funkčnost je bleskově dostupná přes kontextové menu (pravé myšítko).
Rychlý skok na definici. Držíte CTRL a jen klikáte, relevantní prvky se sami podtrhávají, nebo lze pře F3.
Rychlá nápověda, stačí chvíli podržet myš nad relevantním prvkem. Funguje jak pro lokální prvky tak pro externí z knihoven, tedy pokud nějaké komentáře v *.h souboru jsou. Bohužel CDT nepodporuje Doxygen, takže komentář vidíte v „syrovém“ stavu.
Špatná zpráva – na rozdíl od verze 3 moc to nefunguje. Mě napoprvé indexace proběhla, ale navigace se chovala, jakoby neexistovala. Když jsem změnil nastavení indexace na úplnou, nedoběhla dokonce. Progress bar se zastavil, asi únavou, na 70% a rozhodl se dál nepokračovat. Začal jsem tušit
Následně jsme se dočetl, že plná indexace je vcelku nesmysl a přednastavená „rychlá“ indexace je přesně to co vám bude v 99% případů stačit, jsem opět změnil nastavení a tentokrát se indexer nechal přemluvit a bez zbytečného zdržování doběhl do konce a code assist začal asistovat, nápověda se objevovala.
Ale radost byla předčasná. Nový parser si neporadí s dopřednými deklaracemi (forward declaration). Těmi je kód Kdenlive na kterém to celé testuji přímo prošpikován. Seznam definicí mi vrací všechna místa, kde je objekt dopředně deklarován, jen ne to co jsme opravdu chtěl – skutečnou definici třídy, relevantní hlavičkový soubor. Například Gui::KdenliveApp hned v main.cpp, KdenliveApp je základní nosná struktura celé aplikace. Najde všechno jen ne kdenlive.h kde je ona kýžená formulka „class KdenliveApp:public KDockMainWindow {...“. K tomu jsem se dopracoval až klasickým textovým vyhledáváním, to naštěstí funguje spolehlivě a poskytuje nadstandardní komfort.
Naopak, nápověda a auto completion ke knihovnám Qt, KDE, MLT a FFmpeg chodí spolehlivě a je to rychlé jako blesk.
Dobrá zpráva – na rozdíl od předešlé verze 3 je navigace blesková. Není to jen moje zjištění. Řada testerů na internetu recenzuje podobné pocity. Jeden to i změřil.
http://rf2-dev.spaces.live.com/blog/cns!33114F671097246!136.entry - July 31, Eclipse Europa Review. Ze 40 sekund a více na maximálně 3s.To je slušný pokrok. Mimochodem, přešel z Visual Studia na Eclipse.
Narazil jsem na zajímavý článek, který zdá se osvětluje jak prudký nárůst výkonu, tak i příčin současných problémů.
http://cdtdoug.blogspot.com/2007/08/eclipse-cdt-more-than-just-for-writing.html – zápisek z Doughova blogu.
In Callisto it did a full parse including all the header files included by the file in the editor, which for C++ with lots of templates and stuff, it took quite a while. In Europa, one of the features my intern worked on over the winter was to migrate this to use the index for the contents of the header files. It's way faster, and the author was very happy to see it.
To potvrzuje co už jsem dočetl kusé informace jinde.
Parser C nepoužíval plně indexeru tak jako Java, jen
částečně, řada věcí se parsovala on-the-fly přímo
ze zdrojových kódů, při každém zavolání,
proto to bylo výrazně pomalejší. Vzpomínám
si, že u starších verzí jsem dokonce musel
prodlužovat maximální interval, aby code assist vůbec
doběhl a něco ukázal. A jak jsem byl na sebe hrdý, že
jsem přišel na to proč se mi nic neukazuje
Bohužel, během
popisované migrace na indexer došlo k narušení
původní funčnosti. To je tak vždy když se hrabete v něčem
co už chodilo, i ta nejlepší snaha přinese maximálně
smíšený výsledek, něco se zlepšilo, něco se
zákonitě muselo překopnout.
Tento CVS commit potvrzuje, že CDT by skutečně mělo zvládnout forward deklarace a to už před drahně lety:
http://download.eclipse.org/tools/cdt/docs/cvslog/20030812.html - CDT Commit Report for - August 12, 2003. Added Complte Parse support for elaborated types / forward declaration of classes.
Soudě podle diskusní skupiny, nejsem jediný kdo zaregistroval podobné problémy. Nezbývá než čekat na záplatu nebo rovnou na opravnou verzi 4.1. Vzhledem k tou nárůstu rychlosti, je na co se těšit.
V poslední, třetí části se dostane na
refactoring, rychlé srovnání s KDevelopem,
slibované odkazy a zbytek nesourodých poznámek,
které mi bylo líto sušit bez užitku na disku.
Odkazy:
http://wiki.eclipse.org/CDT/designs/Overview_of_Parsing – very nice technical article about technical difficulties to parse C++ sources. How parsing is done in CDT, indexing, AST (Abstract Syntax Tree)
http://www.ibm.com/developerworks/library/os-ecl-cdt1/index.html?S_TACT=105AGX44&S_CMP=EDU – implementation details about CDT. Goes very deep into CDT internals.
Poznámky:
The difference between the fast and full indexers is that the fast indexer will skip header files that have already been added to the index, while the full indexer will always write a copy of a header file to the index every time it is included.
Tiskni
Sdílej: