Hlavní navigace

Kudy dál v kompilovaných jazycích?

2. 12. 2007 19:20 inkvizitor

Nejpoužívanější programovací jazyk pro programování linuxových aplikací je pravděpodobně pořád C, v závěsu za ním bude asi C++. C je jazyk, který byl navržen pro psaní operačního systému někdy v roce 1972. A 35 let poté se ještě stále používá pro tvorbu uživatelských aplikací. Sice už díky Bohu méně, ale stejně ještě pořád. Přiznám se, že tento jazyk, jakožto i jeho objetově orientovaného bratra se dvěma plusy nemám moc rád. Hlavní důvod mojí zášti je nutnost explicitní alokace a dealokace paměti. Nejde jenom o tu práci a o to, že by se měl kvalifikovaný člověk neměl podle mě pokud možno zabývat takovými malichernostmi jako jsou problémy procesoru s pamětí, ale hlavně jde o to, že z toho pramení nepříjemné chyby – zažil jsem „machry“, kteří ohrnovali nos nad jazyky vyšší úrovně, ale jejich kód byl plný memory leaků.

Pokud se tedy těmto jazykům (Pascal řadím do stejné rodiny fuj fuj pointer-oriented jazyků) chceme vyhnout, máme dvě možnosti – použít interpreter postavený nad nějakým virtuálním strojem nebo použít kompilovaný jazyk, který pointerům neholduje. JRE považuju za poměrně velkého molocha, projektu Mono nevěřím z licenčních důvodů a jazyky jako Python, Ruby atd. jsou možná prima, ale někdy se ukazuje, že rychlostí ne zcela vyhovují. A obecně přinášejí virtuální stroje dodatečné závislosti a až občas příliš odstiňují aplikaci od nativního prostředí. Lákají mě kompilátory do nativního kódu.

Existuje možnost zkompilovat do nativního kódu Javu, existují však i (podle mého názoru) zajímavější jazyky, které lze zkompilovat do „strojáku“. Jedná se hlavně o funkcionální jazyky, které mají i spoustu dalších výhod – snadnější statická analýza kódu, propracovaná teorie, snadná paralelizace funkcionálního kódu, bohaté výrazové prostředky atd. Asi nejznámějším funkcionálním jazykem je Lisp a jedna z hlavních větví se jmenuje Common Lisp. Velmi dobrých výsledků dosahují překladače CMUCL a zejména SBCL, který je ale o něco hůře přenositelný. Do nativního kódu lze přeložit i Haskell – ten patří mezi čistě funkcionální jazyky nebo Erlang, který se specializuje na konkurenční a distributivní zpracování dat.

Mě ale v poslední době zaujal OCaml, který má výhodu například v poměrně čitelné syntaxi, standardním objektovém rozšíření, standardních nástrojích pro tvorbu překladačů (ocamllex a ocamlyacc), makrojazyku (camlp4), debuggeru a profileru a generátoru dokumentace (pravděpodobně inspirovaném Javou). Právě v OCaml zpracovávám projektík, který analyzuje závislosti mezi balíčky v linuxových distribucích. Je to pro mě nový svět a docela mě to baví, snad o tom brzy napíšu víc.

Závěrem bych chtěl napsat, že bych byl rád, kdyby z Linuxu nějaký lepší jazyk výrazně vytlačil C. Nemusí to být žádný ze jmenovaných, ale moc dalších možností momentálně nevidím. A co Vy?