Vyšlo v týdeníku Computerworld č. 5/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a305c120.php3

Environment

Každá úloha, která má něco smysluplného dělat, musí mít vhodnou vazbu na prostředí, ve kterém je spuštěna a ve kterém běží. Nejde přitom jen o nezbytný vstup dat, které má úloha zpracovávat, a o výstup dat, které úloha generuje. Většina úloh potřebuje také určité údaje systémového charakteru - například informaci o tom, kde má úloha hledat soubory, které ke své práci potřebuje, kde si má vytvářet své dočasné pracovní soubory apod. Kromě toho mnohé úlohy nabízejí i určitý počet parametrů, jejichž nastavením je možné modifikovat činnost úlohy - například dosáhnout monochromního výstupu na obrazovku místo barevného apod. Všechny tyto informace (včetně nastavení parametrů) se obvykle předávají úloze jednorázově, v okamžiku jejího spuštění. Nás však v tuto chvíli nebude zajímat jejich význam a smysl. Zastavíme se spíše u konkrétních mechanismů, pomocí nichž lze zmíněné informace právě spouštěné úloze předat.

Jednou z možností je předávat příslušné informace jako součást příkazu volání úlohy - tedy ve formě skutečných parametrů přímo na příkazové řádce. Nevýhodou tohoto řešení je skutečnost, že příslušné informace je nutné znovu explicitně uvádět při každém jednotlivém volání úlohy a není možné je například zadat jednou tak, aby se použily při každém následném volání téže úlohy, případně i pro volání jiné úlohy, která také potřebuje tytéž informace.

Alternativní možností je zapsat příslušné informace na předem dohodnuté místo, odkud si je pak úloha v případě potřeby sama přečte. Představme si například, že na takovém předem dohodnutém místě bude seznam přístupových cest k adresářům, ve kterých se nacházejí často požadované soubory. Toho může využít úloha, která ke své práci potřebuje určitý soubor, ale nezná jeho přesné umístění. Z onoho předem dohodnutého místa si přečte seznam přístupových cest a požadovaný soubor pak hledá v příslušných adresářích. Zmíněný seznam přístupových cest pro vyhledávání souborů může být navíc dosti dlouhý, takže uvádět jej přímo na příkazové řádce při volání úlohy by bylo dosti nepraktické. Navíc jej úloha nemusí v konkrétním případě vůbec potřebovat. Umístění seznamu na předem dohodnuté místo je pak výhodnější, a to ještě více v případě, kdy umožníme, aby toto předem dohodnuté místo, resp. jeho obsah přetrvaly běh jedné úlohy a byly použitelné i pro následná spuštění téže úlohy či úloh jiných.

V angličtině se toto předem dohodnuté místo označuje jako environment, což v doslovném překladu znamená okolí či prostředí (a v užším slova smyslu také životní prostředí). V praxi jde vždy o určitý úsek paměti, ke kterému má příslušná úloha přístup (například prostřednictvím ukazatele). Zajímavou otázkou je však to, zda toto předem dohodnuté místo (environment) má být vždy jen jedno, a tudíž společné pro všechny úlohy, nebo zda má mít každá úloha své místo vlastní. U víceúlohových operačních systémů je odpověď vcelku jednoznačná - každá úloha by měla mít vlastní environment, tedy vlastní "životní prostředí", neboť je záhodno, aby v něm mohly být obsaženy informace specifické pro danou úlohu a také aby jej úloha mohla měnit a přizpůsobovat si jej svým potřebám. Co však dělat v případě, kdy některá úloha sama spustí jinou úlohu (či několik tzv. dceřiných úloh)? Má její "životní prostředí" (environment) být zcela nezávislé na "životním prostředí" její rodičovské úlohy, nebo mají spolu nějak souviset? Zde záleží na konkrétním operačním systému, ve kterém jsou jednotlivé úlohy provozovány. Environment nově spuštěné úlohy nejčastěji vzniká jako přesná kopie "životního prostředí" rodičovské úlohy (tj. dochází k dědění obsahu environmentu), ale dále již žije svým vlastním životem a případné změny v něm se automaticky nepromítají do "životního prostředí" rodičovské úlohy.

Analogicky je tomu i v případě jednoúlohových operačních systémů (jako například v MS DOSu), kde sice nemůže současně běžet více úloh, ale kde stále jedna úloha může spustit jinou (dceřinou) úlohu a dále pokračovat po jejím ukončení.

Vraťme se nyní zpět k tomu, co všechno může být v "životním prostředí" (environmentu) úlohy obsaženo. Příklad se seznamem implicitních přístupových cest pro vyhledávání souborů je dosti typický, a to jak pro MS DOS, tak i např. pro Unix a další operační systémy. Obecně však mohou být v environmentu jakékoli informace. Aby se zajistil jejich jednotný formát, jsou všechny uváděny ve formě textu, přesněji jako znakové řetězce. Jednotlivé údaje jsou opatřeny identifikátory (opět ve formě znakových řetězců), které určují význam vlastního údaje a jsou od něj odděleny oddělovačem (nejčastěji rovnítkem). Velmi často jsou tyto identifikátory chápány jako identifikátory proměnných (proměnných environmentu, anglicky: environment variables) a vlastní údaje pak jako hodnoty těchto proměnných. Celé "životní prostředí" (environment) je pak posloupností položek tvaru:

                   <proměnná> = <hodnota>

například (v MS DOSu):

  PATH=C:\DOS;C:\WINDOWS;C:\SPOJ
  PROMPT=$P$G
  TEMP=E:\

Samotné proměnné, resp. jejich identifikátory nejsou nijak předem vymezeny. Ten, kdo spouští nějakou novou úlohu (ať již je to operační systém či jiná úloha), může do jejího nově vytvořeného environmentu vložit libovolnou proměnnou a přiřadit jí jako její hodnotu libovolný znakový řetězec. Záleží pak na vlastní úloze, zda takovouto proměnnou ve svém environmentu vůbec očekává, a jak ji interpretuje. Existují sice některé proměnné environmentu se standardním významem (v MS-DOSu např. PATH pro seznam přístupových cest, PROMPT pro tvar tzv. nápovědného znaku, v Unixu TERM pro druh použitého terminálu apod.), ale jinak je možné vytvořit v environmentu jakoukoli novou proměnnou.

Některé operační systémy, jako například Unix, používají environment a jeho proměnné dosti intenzivně, zatímco například v MS-DOSu je tento mechanismus aplikacemi spíše ignorován (s výjimkou seznamu přístupových cest v proměnné PATH a několika dalších případů). I v MS-DOSu je však velmi užitečný například pro vytváření příkazových (tzv. BATCH) souborů, které jej mohou využít pro vzájemnou komunikaci. Například jeden příkazový (BATCH) soubor si může na uživateli vyžádat jeho jméno, a to uložit do environmentu operačního systému do vhodně pojmenované proměnné (v MS-DOSu např. pomocí příkazu SET USER=NOVAK). Hodnotu této proměnné pak může otestovat později spuštěná úloha (která ve svém environmentu zdědí kopii "životního prostředí" operačního systému) - samozřejmě pokud právě tuto proměnnou ve svém environmentu očekává - nebo jiný příkazový soubor, který si také může tuto proměnnou environmentu otestovat a podle její hodnoty se dále zařídit (např. příkazem IF %USER%==NOVAK GOTO ........).

Otázkou je, jak anglický termín environment vhodně přeložit do češtiny. Překládat jej jako "životní prostředí úlohy" je asi možné jen s uvozovkami a ve vhodném kontextu, ze kterého je dostatečně zřejmé, o co se jedná. Pouhé "prostředí úlohy" či "okolí úlohy" je zase příliš zavádějící.

Nejvýstižnější by asi bylo počeštit původní anglický termín, ale to je zase hodně násilné. Co takhle překládat anglické "environment" jako "systémové prostředí (úlohy)" a "environment variable" jako "proměnnou systémového prostředí (úlohy)"?