Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.
Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u
… více »Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila (𝕏) open-source robota Microduck. Předobjednat jej lze za 340 eur.
Open-source autonomní AI agent OpenClaw (Wikipedie) byl vydán ve verzi 2026.8.1 aneb 2.0. Přehled novinek v poznámkách k vydání.
Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším
… více »Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.
Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.
Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.
Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.
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ů?