Libre Graphics Meeting 2026, tj. čtyřdenní konference a setkání vývojářů a uživatelů svobodných a otevřených grafických softwarů, proběhne od 22. do 25. dubna v Norimberku. Dění lze sledovat na Mastodonu.
Vývojář Alexandre Gomes Gaigalas na GitHubu zveřejnil c89cc.sh, parser a kompilátor jazyka C89 napsaný v pouhém jediném skriptu o přibližně 8000 řádcích čistého bashe (bez dalších externích závislostí), který generuje ELF64 binárky pro x86-64. Jedná se o velmi jednoduchý kompilátor, který nepodporuje direktivy #include a dokonce ani funkci printf (lze použít puts), všechny dostupné deklarace lze nalézt v proměnné _BUILTIN_LIBC na konci skriptu. Skript je volně dostupný pod ISC licencí.
Francouzská vláda oznámila, že v rámci strategie 'digitální suverenity' zahájí 'přechod od systému Windows k počítačům s operačním systémem Linux' (sa sortie de Windows au profit de postes sous système d'exploitation Linux). DINUM (meziresortní ředitelství pro digitální technologie) požádalo ministerstva, aby do podzimu 2026 vypracovaly konkrétní plány nasazení Linuxu. Francie již dříve migrovala části státní správy na otevřená řešení.
Nezisková organizace Electronic Frontier Foundation (EFF) hájící občanské svobody v digitálním světě po téměř 20 letech opouští platformu X (dříve Twitter). Na platformách Bluesky, Mastodon, LinkedIn, Instagram, TikTok, Facebook, Threads a YouTube zůstává.
Terminálový textový editor GNU nano byl vydán ve verzi 9.0. Vylepšuje chování horizontálního posouvání pohledu na dlouhé řádky a chování některých klávesových zkratek. Více v seznamu změn.
Ministerstvo financí ve spolupráci s finanční správou dnes představilo beta verzi aplikace využívající umělou inteligenci pro předvyplnění daňového přiznání. Není třeba přepisovat údaje z různých potvrzení, ani hledat správné řádky, kam údaje napsat. Stačí nahrát dokumenty a využít AI.
Výrobce počítačových periferií Keychron zveřejnil repozitář se schématy šasi klávesnic a myší. Licence je restriktivní, zakazuje většinu komerčních užití a v podstatě jsou tak data vhodná pouze pro výukové účely, hlášení a opravy chyb, případně výrobu vlastního příslušenství.
Správce balíčků APT, používaný v Debianu a odvozených distribucích, byl vydán ve verzi 3.2 (seznam změn). Mezi novinkami figurují nové příkazy pro práci s historií, včetně vracení transakcí.
Společnost Anthropic oznámila Projekt Glasswing a s ní související AI model Claude Mythos Preview. Jedná se o iniciativu zaměřenou na kybernetickou bezpečnost, do které se zapojily velké technologické společnosti Amazon Web Services, Anthropic, Apple, Broadcom, Cisco, CrowdStrike, Google, JPMorganChase, Linux Foundation, Microsoft, NVIDIA a Palo Alto Networks. Anthropic věří, že nový AI model Claude Mythos Preview dokáže
… více »Firma Ojective Development vydala svůj nástroj pro monitorování a řízení odchozích síťových připojení Little Snitch i pro operační systém Linux. Linuxová verze se skládá ze tří komponent: eBPF program pro zachytávání provozu a webové rozhraní jsou uvolněny pod GNU GPLv2 a dostupné na GitHubu (převážně Rust a JavaScript), jádro backendu je proprietární pod vlastní licencí, nicméně zdarma k použití a redistribuci (cena přitom normálně … více »
C++ -- Vala -- Javapozici, ale v této
Vala
/ \
/ \
C++ Java
pozici. ;) Teď vážně, myslím, že je to dobrý vysokoúrovňový jazyk, který ke svému rychlému běhu nepotřebuje žádný velký balast navíc.
public abstract Task? get (int index);Jenom int to může být, tralalala tralalala lala.
Nevím, jestli jsem správně pochopil tento komentář, ale pokud jde o to, že by ve Vale mělo být možné indexovat (public abstract Task? get (int index);Jenom int to může být, tralalala tralalala lala.
[]) pouze hodnotou typu int, tak to bych rád uvedl na pravou míru. Vala totiž umožňuje použití libovolného typu, stačí správně zadefinovat metodu get. Ostatně i TaskManager má tuto metodu definovánu jako
public new TaskCollection? get (string title)Pokud šlo o cokoliv jiného, omlouvám se za "nemístnou" odpověď. :)
sizeof(cokoliv) * něco_typu_int_který_může_být_záporný_a_dostanu_tak_kravinu je naprosto vpořádku a nemůže se stát nic špatného
sizeof(int) <= sizeof(size_t)
chci spojit pole, je ok udělat malloc(něco_typu_int+něco_typu_int) i když to třeba přeteče a smaže pak pevný disk. Nebo mi to třeba dá malloc(-1) a po převodu na size_t mi to hodí třeba nějaký 0xFFFFFFFFFFFFFFFF.
using GLib;
namespace bla
{
class Bla
{
static char[] join_array(char[] array1, char[] array2)
{
// TODO: copy elements
int len = array1.length + array2.length;
return new char[len];
}
public static void main(string[] args)
{
char[] array1 = new char[int.MAX];
char[] array2 = new char[int.MAX];
char[] array3 = join_array(array1, array2);
stdout.printf("array1.length = %d, array2.length = %d, array3.length = %d\n",
array1.length, array2.length, array3.length);
}
}
}
Mi vyprskne:
(process:1800): GLib-ERROR **: gmem.c:195: failed to allocate 18446744073709551614 bytesUrčitě né proto, že na mé platformě 2G+2G je 4G, ale proto, že to jaksi přeteklo, náhodou to nesmazalo pevný disk, pak se to převedlo na size_t (resp. gsize, protože to alokuje přes g_new0 z glib) a vyprsklo to kravinu. Kdyby vala používala size_t, tak by se toto na mé platformě nestalo a program by běžel správně. Vala tak na mé platformě uměle omezuje velikost pole na INT_MAX, ǎckoli pak vygeneruje C kód a to mě omezuje SIZE_MAX. Výsledkem je omezení na MIN(INT_MAX, SIZE_MAX), na mé platformě je INT_MAX menší. A když náhodou dám Vale hint, že array_length_type je size_t, tak si nepomůžu, stejně to přetypuje na int:
[CCode(array_length_type = "size_t")]
static char[] join_array([CCode(array_length_type = "size_t")] char[] array1, [CCode(array_length_type = "size_t")] char[] array2)
{
return new char[array1.length + array2.length];
}
// -->
static gchar* bla_bla_join_array (gchar* array1, size_t array1_length1, gchar* array2, size_t array2_length1, size_t* result_length1) {
gchar* result = NULL;
gchar* _tmp0_;
gint _tmp0__length1;
gchar* _tmp1_;
gint _tmp1__length1;
gchar* _tmp2_ = NULL;
gchar* _tmp3_;
gint _tmp3__length1;
_tmp0_ = array1;
_tmp0__length1 = (gint) array1_length1;
_tmp1_ = array2;
_tmp1__length1 = (gint) array2_length1;
_tmp2_ = g_new0 (gchar, _tmp0__length1 + _tmp1__length1);
_tmp3_ = _tmp2_;
_tmp3__length1 = _tmp0__length1 + _tmp1__length1;
if (result_length1) {
*result_length1 = _tmp3__length1;
}
result = _tmp3_;
return result;
}
public class Boo : GLib.Object {
string val;
public Boo (string val) {
this.val = val;
}
}
public class Foo {
private Boo _boo;
public Foo (string val){
_boo = new Boo(val);
}
public Boo boo {
get { return _boo; }
set { _boo = value; }
}
public void debug () {
stdout.printf ("_boo addr: %p\n", _boo);
}
}
void main () {
var foo = new Foo("I'm foo");
var tmp = foo.boo;
foo.debug();
stdout.printf ("temporary boo addr: %p\n", tmp);
stdout.printf ("refcount: %u\n", tmp.ref_count);
foo = null;
stdout.printf ("temporary boo addr: %p\n", tmp);
stdout.printf ("refcount: %u\n", tmp.ref_count);
}
Výstup si může každý otestovat sám:
_boo addr: 0xd96e30 temporary boo addr: 0xd96e30 refcount: 2 temporary boo addr: 0xd96e30 refcount: 1Tedy, implicitně se vždy vrací owned, a pokud to má být jinak, musí se to vynutit. Obecně ale platí, že právě v případě různých Gee kontejnerů si na to prostě musí člověk dávat pozor, a vše hezky kontrolovat proti dokumentaci :) Pokud sem něco pochopil špatně, tak se omlouvám, ale z článku to takhle vyplývá.
Tedy, implicitně se vždy vrací owned, a pokud to má být jinak, musí se to vynutit.On to s tím "implicitně" asi nebude tak jednoduché. V případě TaskCollection.dump se vrací nově konstruovaný
string, který bez použití owned prostě zanikne s tím, jak skončí get blok. Pokud se v tomto případě owned vynechá, kompilátor hlásí warning a program segfaultuje. Stejně tak i tutoriál Valy říká:
In contrast to normal methods, properties always have unowned return value.a také
The keyword owned can be used to specifically ask a property to return a owned reference of the value, therefore causing the property value be reproduced in the object side.Ne že by to souhlasilo s výsledky toho příkladu...
Tiskni
Sdílej: