Přeskočit na obsah

HQ9+

Z Wikipedie, otevřené encyklopedie

HQ9+ je parodický ezoterický programovací jazyk, navržený Cliffem Bifflem. Není turingovsky úplný, ale je vysoce efektivní pro některé základní programátorské úlohy.

HQ9+ je tvořen čtyřmi příkazy, z nichž každý je kódován jedním znakem:

  • Příkaz H vypíše „Hello, world!“.
  • Příkaz Q vypíše zdrojový text programu (a tím umožňuje velmi efektivně napsat krátký program, který vypíše svůj vlastní zdrojový text, tzv. quine).
  • Příkaz 9 vypíše text písně „99 Bottles of Beer on the Wall“. Tato úloha se často používá k ověření, jak elegantně lze skládat v jazyce cykly. Vysoká optimalizace HQ9+ ji umožňuje zvládnout pomocí jednoho znaku.
  • Příkaz + zvýší o jedničku hodnotu akumulátoru.

Příklad programu:

HHQ+HQ++

Tento program vypíše „Hello, world!Hello, world!HHQ+HQ++Hello, world!HHQ+HQ++“ a navíc třikrát inkrementuje akumulátor.

Další verze

[editovat | editovat zdroj]

Existuje objektové rozšíření jazyka, nazývané HQ9++, které vytvořil David Morgan-Mar. To přidává nový, zpětně kompatibilní příkaz ++, který zvýší hodnotu akumulátoru o dvě a navíc vytvoří instanci objektu. V souladu s principem zapouzdření k objektu nelze přistupovat.[1]

Dalším jazykem vycházejícím z původního jazyka je HQ9+- od Ivana Melikampa, které je rozšířením HQ9++. Přidává příkaz -, který má zajišťovat ladění programu a jeho kvalitu kontroly. Tento příkaz vyvolává některé běžné programové chyby v závislosti na tom, na jakém místě se tento příkaz nachází:[2]

  1. Pokud je prvním operátorem, vyvolá syntaktickou chybu.
  2. Pokud mu předchází znak H, vyvolá I/O chybu.
  3. Pokud mu předchází znak Q, dostane se program do nekonečné rekurze.
  4. Pokud mu předchází znak 9, dostane se program do nekonečné smyčky.
  5. Pokud mu předchází znak -, zmenší hodnotu akumulátoru o jedna.
  6. Pokud mu předchází znak +, dělí jedničku nulou, ledaže předchozími znaky byl řetězec ++. V takovém případě vyvolá virtuální výjimku, která sama o sobě je metodou objektu nové podtřídy generické supertřídy. V souladu s principem zapouzdření dat neexistuje způsob jak tuto výjimku zachytit.

CHIQRSX9+ je turing-kompletní verzí původního jazyka, která jej rozšiřuje o další příkazy. Vytvořil ji Ørjan Johansen 3.–5. dubna 2002.[3] Přidává tyto příkazy:

  • Příkaz C zkopíruje vstup na výstup.
  • Příkaz I interpretuje vstup jako zdrojový kód programu napsaného v CHIQRSX9+.
  • Příkaz R zakóduje vstup pomocí ROT13.
  • Příkaz S seřadí vstupní řádky.
  • Příkaz X udělá jazyk turing-kompletním, přičemž není definováno, jak toho má být dosaženo.

Jazyk H9+ je totožný s jazykem HQ9+ s tím rozdílem, že je vypuštěn příkaz Q. Pro zachování stejné funkcionality je každý znak jiný než H, 9 nebo + ignorován. Pro vytvoření quine je potřeba například následný zdrojový kód:

Hello, world!

Jazyk HQ9+2D obsahuje oproti originální verzi ještě čtyři příkazy ^, v , > a < které slouží k posunu čítače instrukcí daným směrem. Ten začíná na prvním bajtu programu a jeho posunem je možné přeskakovat příkazy, nebo se k nim vracet. Program po skoku pokračuje normálně z cíle skoku, čili nevrací se na původní místo skoku.

  1. DAVID, Morgan-Mar. HQ9++ [online]. [cit. 2011-07-23]. Dostupné online. (anglicky) 
  2. MELIKAMP, Ivan. HQ9+- [online]. 2007-01-12 [cit. 2011-07-23]. Dostupné online. (anglicky) 
  3. chiqrsx9+.pl, zdrojový kód intrepretru v němž byl jazyk definován Ørjanem Johansenem

Externí odkazy

[editovat | editovat zdroj]