A programozási nyelv szabványos könyvtára olyan modulok, osztályok, objektumok, konstansok, globális változók, sablonok, makrók, függvények és eljárások halmaza, amelyek bármely, az adott nyelven írt programból meghívhatók, és a nyelv minden implementációjában jelen vannak. .
A korai programozási nyelvekben (például Fortran, Algol, Cobol, BASIC) a nyelvhez közvetlenül nem kapcsolódó, de a legtöbb valódi program létrehozásához szükséges funkcionalitást közvetlenül a nyelvbe foglalták, és gyakran közvetlenül a fordító vagy a futási szinten implementálták. (tolmácsolt nyelvekhez) . Ezek a funkciók elsősorban azokat tartalmazták, amelyeket a programozási nyelv segítségével lehetetlen, kényelmetlen vagy nem hatékony megvalósítani: input-output parancsok, szabványos matematikai és logikai függvények számítása, speciális műveletek bizonyos típusú adatokkal, munka külső eszközökkel, "nyers" memória, interakció az operációs rendszerrel stb. Ennek a megközelítésnek voltak hátulütői: a fordítóprogramról kiderült, hogy nemcsak a statikus és ritkán változó számítógép-architektúrához kötődik, hanem szoftverkörnyezetéhez is, elsősorban az operációs rendszerhez, amely sokkal gyakrabban változhat.
Az 1970-es években a modularitás fogalma széles körben elterjedt a procedurális nyelvekben. Megjelentek a szintaktikai eszközök a program leírására, mint viszonylag független modulok halmaza. Ennek természetes következménye volt, hogy a programozási nyelvek fejlesztői elkezdték a korábban nyelvek részét képező univerzális funkciókat külső könyvtári modulokba kivenni, és szükség esetén ezeket a modulokat programokhoz csatlakoztatni. A szabványos függvények nyelvből való kizárása azonban kompatibilitási problémákhoz vezethet: minden fordítóprogram-gyártó biztosíthatja a saját könyvtárát. Ezért a programozási nyelv specifikációjával együtt a fejlesztők elkezdtek egy specifikációt javasolni a szabványos könyvtárhoz - a szoftverkörnyezet azon részéhez, amelynek jelen kell lennie a nyelv bármely megvalósításában. Ettől kezdve egy adott programozási nyelv bármilyen implementációja három részre oszlik: magának a nyelvnek a megvalósítása (a fordító), a szabványos könyvtár megvalósítása és további eszközök (fejlesztői környezet, linkszerkesztő, dokumentációs eszközök, további könyvtárak), amelyek általában nincsenek szabványosítva a nyelvvel együtt, bár lehetnek külön szabványaik. Elméletileg minden programozó, aki csak a szabványos nyelvi lehetőségeket és a szabványos könyvtárat használja, biztos lehet benne, hogy programja bármely platformon ugyanúgy fog működni.
Egyes esetekben a szabványos könyvtárat közvetlenül a nyelvi szabvány írja le ( Python , Perl , Java ), bizonyos esetekben külön szabványok írják le ( C ), néha a függvények nyelvi megvalósításokban való gyakorlati elérhetősége alapján határozzák meg ( Basic , Pascal ).
Két megközelítés létezik a programozási nyelv szabványos könyvtárának végrehajtandó feladatok meghatározására.
A nyelv képességeitől függően a szabványos könyvtár a következőket tartalmazhatja:
Általában a szabványos könyvtár tartalmazza az alapvető algoritmusokat és adatstruktúrákat, amelyek szükségesek:
Bjorn Stroustrup a következő 11 alapvető követelményt terjesztette elő a szabványos könyvtár által kínált eszközökkel szemben:
Egyes nyelvekben az I/O függvények magának a nyelvnek a szintaxisának részét képezik (pl. Basic , Pascal , Python ), és nem reprodukálhatók független függvényként (eljárásként). Ez egyrészt lehetővé teszi rugalmasabb szintaxis létrehozását a kimeneti utasításokhoz (például a Pascal-ban a writeln operátor szintaxisa sokkal egyszerűbb, mint a C szabványkönyvtár printf függvénye ), másrészt bonyolítja a a nyelv szintaxisa, és megnehezíti a nyelvi fordító használatát olyan programok létrehozásához, amelyek nem használják ezeket a szolgáltatásokat (például beágyazott számítógépeken ).