Jakub Vrána vydal Adminer ve verzi 6.0.0 s více než 130 změnami: "Většina změn vznikla s asistencí Claude Opus 5. Někteří lidi se bojí, že AI asistence může kód zamořit technickým dluhem. To je jistě pravda, pokud vývojář všechny změny bezduše odbouchne Enterem. Ale pokud si pořádně projde plán, vyjedná v něm změny a pak totéž udělá i s vygenerovaným kódem, kvalita kódu stoupne a technický dluh naopak klesne. Je to jako párové programování s
… více »Sam Aaron vydal novou major verzi 5.0.0 aplikace Sonic Pi (Wikipedie) určené také pro výuku programování pomocí skládání hudby. Přehled novinek na GitHubu. Instalovat lze také z Flathubu.
U příležitosti 30. výročí vydání počítačové hry Quake byla vydána nová epizoda s názvem Dawn of the Machine (Steam).
Vládní CERT upozorňuje (𝕏) na sérii bezpečnostních záplat (CVSS 9.9) v produktech Cisco řešících kritické zranitelnosti umožňující obejití autentizace, eskalaci oprávnění, vzdálené spuštění kódu a odepření služby. Úspěšné zneužití může útočníkům umožnit získat neoprávněný přístup k dotčeným systémům, kompromitovat zařízení Cisco Catalyst SD-WAN a Cisco IOS XE, spustit libovolný kód, zpřístupnit citlivé informace nebo narušit dostupnost postižených systémů.
Soud v americkém státě Nové Mexiko ve čtvrtek nařídil internetové společnosti Meta Platforms zaplatit 567 milionů dolarů (téměř 12 miliard Kč) za újmy, které její platformy působí mladým lidem. S přihlédnutím k dřívějšímu verdiktu tak má společnost celkem zaplatit 942 milionů dolarů, což je malý zlomek jejího ročního výnosu, který loni činil 60 miliard dolarů. Čtvrteční verdikt firmě také nařizuje, aby změnila způsob, jakým její
… více »Mark Russinovich (CTO v Microsoft Azure) se na LinkedIn pochlubil svým projektem MS Paint Doom napsaným pomocí Claude. Hru Doom umožňuje hrát v programu Malování (Microsoft Paint). Malování funguje jako monitor. Herní engine (ViZDoom) běží na pozadí a každý vykreslený snímek hry vkládá automaticky přes schránku (clipboard) do Malování.
Platformy ChatGPT i Roblox by mohly být zařazeny na seznam mimořádně velkých on-line platforem nebo internetových vyhledávačů, na něž se vztahují zvláštní podmínky podle nařízení o digitálních službách (DSA). Vzhledem k tomu, že ChatGPT i Roblox oznámily počet uživatelů nad prahovou hodnotou DSA, je toto označení „rozhodně možné“ a mohlo by „přijít dříve či později“. On-line platformy a vyhledávače zařazené na seznamy DSA musejí
… více »Společnost Cloudflare představila Cloudflare OS (GitHub), tj. open source platformu navrženou pro integraci umělé inteligence (agentů) přímo do pracovních procesů organizací.
Byla vydána nová verze 5.13 svobodného multiplatformního softwaru pro konverzi a zpracování digitálních fotografií primárně ve formátů RAW RawTherapee (Wikipedie). Vedle zdrojových kódů je k dispozici také balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.
Jean-Baptiste Kempf na svém blogu představil novou verzi 9.0 "Lei" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie).
Před časem jsem se ptal staršího kolegy, jestli někdy na vlastní oči viděl zdrojový kód nějakého starého kompilátoru vzniklý v dobách, kdy související matematická teorie překladačů teprve vznikala, protože udělat kompilátor pro jazyky, jako je C, jistě byla výzva. Bohužel neviděl, takže nažhavme stroje času, musíme se podívat sami.
Než se nám stroje času nažhaví, můžeme se zatím na to, co nás zajímá, podívat pomocí konvenčnější techniky. Jako první se nám do hledáčku dostane jedinečná historická perla. Nic menšího, než první dochovaný překladač jazyka C z roku 1972 napsaný v jazyce C, tedy plně bootstrapovatelný.
První překladač jazyka C samozřejmě nebyl napsán v Céčku. Na začátku byl překladač jazyka B napsaný v jazyce BCPL. Když se podařilo provést bootstrapping jazyka B, tedy napsat jeho funkční překladač v něm samotném, Ritchie a Thomson tento jazyk zkoušeli dále vylepšit. Výsledkem jejich úsilí byl jazyk C, jehož překladač byl z B přepsán do C. Ten se naštěstí dochoval, takže si jeho bootstrapping můžeme zopakovat sami. Stačí nám k tomu počítač PDP-11 s nainstalovaným dobovým Unixem a samozřejmě už přeložený překladač jazyka C.
Pokud jste teď šli zkontrolovat, jestli je váš stroj času už dostatečně teplý, mohli jste si těch pár kroků a dávek radiace ušetřit, protože díky řadě nadšenců vám k tomu bude stačit i váš zoufale moderní počítač. Potřebujete jen simulátor Apout a kopii filesystému Unixu (v1bins.tar.gz). Vše si můžete snadno opatřit zde.
Apout je simulátor počítače PDP-11, který překládá systémová volání na nativní volání Unixu, na němž běží, díky čemuž nepotřebuje složitě emulovat veškerý hardware a disky. Je proto také velice rychlý a pohodlný na používání. Stačí ho přeložit příkazem make. Zmíněná kopie filesystému Unixu také naštěstí obsahuje překladač Céčka, který je schopen náš dochovaný zdrojový kód přeložit. Jednoduše rozbalíte soubor last1120c.tar.gz, v souboru mak upravíte cestu k rozbalenému rootu Unixu, spustíte a odměnou vám bude binární soubor cc o velikosti 4,5 kB, jímž můžete nahradit původní překladač a provést vše znovu, pokud chcete bootstrapping opravdu dotáhnout až do konce.
Doporučuji si obsah skriptu mak řídící překlad prohlédnout, i když odkrývá jen část pravdy. Kompilátor totiž sám překlad do strojového kódu neprovádí, ale dělá překlad do assembleru, který poté přeloží voláním programu as. Vše se slinkuje využitím programu ld, který také nevolá obslužný skript, ale program překladače. Jak vidno, i v bezmála padesát let starém systému si můžete připadat jako doma.
Jak tedy dokázali s omezenými hardwarovými prostředky a doslova v pár lidech na začátku sedmdesátých let napsat překladač Céčka? V první řadě je třeba si uvědomit, že Céčko z roku 1972 není ani zdaleka podobné jazyku C, jak ho známe dnes. Je dokonce výrazně jednodušší než “standard” K&R. I starými překladači Céčka jeho zdrojáky nepřeložíte. Zapomeňte na preprocesor, zapomeňte dokonce i na struktury, zapomeňte na většinu typů, zapomeňte na typedef. Při pohledu na zdrojáky v něm napsané přímo bije do očí, že se skutečně jedná jen o jakousi nadstavbu nad assemblerem.
Každému, kdo se o Céčko zajímá alespoň okrajově, doporučuji se na zdrojový kód toho překladače podívat. Malá ochutnávka, kód funkce printf:
printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9)
char fmt[]; {
extern printn, putchar, namsiz, ncpw;
char s[];
auto adx[], x, c, i[];
adx = &x1; /* argument pointer */
loop:
while((c = *fmt++) != '%') {
if(c == '\0')
return;
putchar(c);
}
x = *adx++;
switch (c = *fmt++) {
case 'd': /* decimal */
case 'o': /* octal */
if(x < 0) {
x = -x;
if(x<0) { /* - infinity */
if(c=='o')
printf("100000");
else
printf("-32767");
goto loop;
}
putchar('-');
}
printn(x, c=='o'?8:10);
goto loop;
case 's': /* string */
s = x;
while(c = *s++)
putchar(c);
goto loop;
case 'p':
s = x;
putchar('_');
c = namsiz;
while(c--)
if(*s)
putchar(*s++);
goto loop;
}
putchar('%');
fmt--;
adx--;
goto loop;
}
Jak vidíte, není třeba uvádět návratový typ funkce, protože prostě každá vrací int (už víte, proč getchar vrací int?). Typy argumentů se uvádí ve stylu K&R, ale jen pro ty, které nejsou int. Všechny symboly použité ve funkci včetně jmen volaných funkcí se explicitně uvádí a to dokonce i pokud je použitá funkce definována ve stejném souboru (ale ne vždy je to nutné). Ukazatele se deklarují jinak a zpracování variabilního počtu argumentů funkce je řešeno stylem chytré horákyně. Časté používání goto je ale jen specifikem této funkce, jinde je spíše výjimečné.
Nutno uznat, že tato primitivní verze Céčka má svoje nesporné kouzlo. Takový roztomilý zašlý plyšový medvídek, co ležel několik desetiletí zapomenutý v bedně na půdě. Škoda, že při tak relativně jednoduchém jazyce tenkrát neudělali alespoň bezkonfliktní gramatiku.
Tiskni
Sdílej:
break tato verze C už umí. Jak v cyklech, tak ve switchi
Absolutně se nepočítalo s tím, že by C mohlo kdy chodit na něčem menším, než jsou 32bitové procesory. I proto se univerzální int považovalo za absolutně dostatečné pro všechno.Kdyby tak Ritchie umel cist z hvezd, ... a vedel, kde se C bude pouzivat za 40 nebo 50 let. Jeden z duvodu, proc se dostalo C takove uspechu a pouziva se dodnes, je, ze bylo navrzeno jako nastroj, ktery mel resit konkretni problem (implementaci unixu) a ne jako univerzalni reseni vsech problemu.
. [joke] va_arg to tehdy asi neumělo co? [/joke]
. Mě ale spíš zarazilo, jak se vlastně teda dělal printf s třeba jen dvěma argumentama (formát a proměnná), to šlo volat funkci s jiným počtem parametrů?
printArgs(var1, var2, var3)
{
printff("args: %d %d %d\n", var1, var2, var3);
}
main(argc, argv)
int argv[]; {
printArgs(1);
}
vypíše args: 1 0 16402
Jen hádám, že prostě v rámci funkce brali argumenty přímo z paměti relativně k vrcholu SP a uklid zásobníku se staral ten, kdo prováděl volání.
.
%rdi, %rsi, %rdx, %rcx, %r8, %r9). Ale i pak pořád platí, že pokud volající předá víc parametrů, než si volaný myslí, že jich má být, bude to stejně fungovat (pokud souhlasí typy).
or EOF on end of file or errorKaždopádně rozumíme si. Prostě víc stavů než 256.
signed short (o kterém se píše v komentáři, na který jste odpovídal) pro reprezentaci 257 různých hodnot nestačil.
signed short 16 bitů, což na 257 různých hodnot bohatě stačí. Zato na příklad nějaké, kde by měl 8 bitů, vzpomínám marně. (Ale možná se nějaká taková kdysí dávno opravdu používala.)
Tady osobní zkušeností posloužit nemohu, ale Kernighan a Ritchie ve své knize uvádějí, že to bylo… 16 bitů. A ani na žádném dalším systému, které uvádějí jako příklad v téže tabulce (Honeywell 6000, IBM 370, Interdata 8/32), nemá short méně než 16 bitů - a už vůbec ne tak málo, aby nestačil k zápisu 257 různých hodnot. (Abychom byli úplně přesní: na Honeywell 6000 má char 9 bitů - ale short 36, takže pořád ostře větší.)
Takže se zeptám přímo: víte vy o nějaké reálně používané platformě, kde by měl datový typ short (resp. signed short) méně než 9 bitů?