Revolucia Budet!

Je to revoluce v programování. Zásadní průlom. Dramaticky urychlí vývoj aplikací. Ušetří spoustu času. A přišla tak tiše a nenápadně, bez fanfár a potlesku.

Vlastně jsem si její přítomnost uvědomil až nedávno. Po delší době programování v PHP a JavaScriptu jsem potřeboval napsat něco v Delphi. To, že jsem měl tendenci psát v podmínkách == místo = a volat funkce bez parametrů jako foo(); namísto foo; jsou drobnosti (potěšilo mě, že ` foo()` Delphi zkousne). Tím, co mi v Delphi skutečně chybělo, byla Automatická Správa Paměti. Ona je tou tichou revolucí.

Přehlídla revolucí

Za svůj krátký život jsem už pár softwarových revolucí zažil. První byl asi příchod OOP. Bylo to roku 1989, za oknem zuřila totalita a já si v teple domova četl samizdatové vydání referenční příručky k Turbo Pascalu 5.5. Tehdy jsem se zajímal o tvorbou vizuálních aplikačních rozhraní (menu, okénka, atd) a OOP k tomu bylo jako dělané. Jen podotýkám, že tehdy vládl DOS, knihovny Turbo Vision neexistovaly a kdo chtěl mít v programu menu, okno nebo nedej bože myš, musel si to od píky naprogramovat sám.

Pamatuji si, že OOP v té době hodně schopných programátorů vůbec nepochopilo. Zůstali u svých osvědčených postupů a vystačí si s nimi dodnes.

Svým způsobem další revolucí bylo hromadné tažení směrem na Windows. Kdo tehdy nezvládl předělat svou aplikaci do okénkového prostředí Windows 3.1, skončil v propadlišti dějin. V této bitvě padlo několik „neporazitelných“ softwarových gigantů a z jejich popela povstali noví bojovníci. Tehdy Microsoft prosadil svůj balík Office a porazil konkurenci v podobě Lotus 1–2–3 a WordPerfect.

Byla to hodně krvavá revoluce, síto budoucích dějin.

Jak šel čas dál, počítače se začaly spojovat do sítí, Windows se naučily multithreading a programování se zase posunulo jinam. Časem Internet úplně zdomácněl, SQL server se stal vedle pizzy dalším příručním doplňkem aplikačního programátora, vznikla a zanikla spousta nových technologií a programovacích technik.

Automatická Správa Paměti

A. Správa: Paměti

Jenže automatická správa paměti (dále GC) je revoluce jako hrom. Ale nepíší se o něm desítky příruček, nepořádají se výukové kurzy „Jak pochopit a správně používat GC“. GC je totiž natolik intuitivní a samozřejmé, že jej není třeba vyučovat.

O co jde? V PHP, JavaScriptu, Javě, .NET můžete alokovat kus paměti (třeba pro pole hodnot) a nemusíte se starat o to, kdy a jak ji uvolnit. Možná Vám pojem „uvolnění paměti“ vůbec nic neříká, protože prostě znáte jen ty jazyky, které GC umí. Podstatné je, že používám těchto jazyků dosáhnete mnohem vyšší tvůrčí výkonnosti.

Když někdo pátrá po důvodech obrovské popularity interpretovaných jazyků, jakými jsou třeba zmíněné PHP nebo VisualBasic, tak zjistí, že programátoři s nimi dosáhnu mnohem dříve kýženého výsledku. Jak je to možné? Je to díky bohatým knihovnám funkcí? Kvůli jednodušší syntaxi? Kdepak… Jsem přesvědčen, že je to díky automatické správě paměti.

Příklad

Vezměme si tyto dvě funkce

function foo() {
  alokuje velké pole a vrací ukazatel
}

function sum(pole) {
  spočítá součet položek v poli.
}

celkem = sum(foo())

Volání sum(foo()) označí zkušený céčkový programátor za vážnou chybu. Protože paměť alokovanou ve funkci foo() je třeba někde zase uvolnit. Jiný návrhář označí za vadu už to, že foo() vůbec nějakou paměť alokuje. Zastává totiž teorii, že paměť by měla alokovat ta funkce, který ji i uvolní. Takto fungují třeba funkce z Windows API a ty je proto nutné často volat dvakrát: poprvé s dotazem, kolik paměti potřebuje k uložení výsledku, poté paměť alokovat a pak podruhé, aby výsledek vrátila.

A ještě je třeba paměť uvolnit. Tedy musí se najít všechna místa, kde se může funkce ukončit, aby se před tím uvolnila paměť. Programátor zkrátka věnuje spoustu času správě paměti, zatímco hlavní úkol ustupuje do pozadí.

Oproti tomu v PHP stačí napsat jen ono `celkem = sum(foo()) `.

Programovací jazyky & auta

Kdo vyzkoušel automatiku, nechce už bez ní jezdit. Přitom nejvíc na ni nadává ten, kdo ji v životě nevyzkoušel 😉