A
A
  • Angol
  • Magyar
  • 16 perc

Mini C fordító: pusztán 12 ARM64 utasítással

Egy egyszerű, mindössze 12 ARM64 utasítást használó C fordító kulisszatitkaiba nyerhetsz betekintést, miközben kiderül, hogyan működik egy fordító háttere és mire képes egy ilyen minimális rendszer.

A videó bemutat egy kisméretű C fordítót, amely mindössze 12 ARM64 utasítást használ a programok gépi kódra fordításához. Az alkotó gondolatkísérletként indította el ezt a projektet, hogy vizsgálja, mennyire egyszerűsíthető le egy fordító háttere anélkül, hogy teljesítmény szempontjából túlzottan visszaesne a használhatóság.

Az anyag részletesen ismerteti, miként épül fel egy fordító: bemutatja a lexikai elemző, a szintaktikai elemző és a szemantikai elemző lépéseit, majd rátér arra, hogyan alakítja át a háttér mindezt gépi kóddá. Közelebbről megismerhetjük, mely ARM64 utasításokra épül a projekt, milyen kompromisszumokat jelent ennyire szűk utasításkészlettel dolgozni, és milyen trükköket lehet alkalmazni például regiszterek másolásához vagy konstansok kezeléséhez.

Részletes példa szemlélteti, hogyan néz ki egy egyszerű C program fordítása ezzel a fordítóval, hogyan történik változók tárolása, illetve C futásidejű könyvtári függvények meghívása, mint például a putchar. Kiderül, milyen lépéseket kell követni a verem kezeléséhez és a visszatéréshez.

Az alkotó elmagyarázza, hogy a kapott fordító képes saját magát is lefordítani, ami önmagában érdekes kérdéseket vet fel a minimális funkcionalitás és az önállóság kapcsolatáról. A teljesítménytesztek rámutatnak, milyen különbségek vannak egy ilyen minimalista megközelítés, illetve egy optimalizált GCC fordító eredményei között. Felvetődik a platformfüggetlenség lehetősége, hiszen a 12C fordító működik Raspberry Pi, Nvidia Jetson, sőt, Apple Silicon alapú Mac gépeken is.