Function-level programování
Function-level programování odkazuje na jeden ze dvou kontrastních paradigmat zjištěnými Johnem Backusem v jeho práci o programech na které se dívá jako na matematické objekty. Roku 1977 Backus představil důvody proč je podle něj potřeba změnit filozofii vytváření programovacích jazyků:
Zdá se, že programovací jazyky na tom nejsou zrovna nejlépe. Každý další jazyk přidává, s malými úpravami, všechny možnosti jeho předchůdců plus několik dalších. Každý nový jazyk se chlubí novými a moderními funkcemi, ale faktem je, že jen několik málo jazyků dělají programování dostatečně levné a nebo jsou schopny omluvit cenu vývoje a jejich učení.
Navrhl FP což je první programovací jazyk, který speciálně podporuje function-level programování.
Function-level program je bez proměnných, jelikož programové proměnné, které jsou potřebné ve value-level definicích nejsou potřebné ve function-level
V function-level programovacím stylu, je program postaven přímo z programů, které dostaneme na začátku. Jejich kombinováním za použití operací vytvářejících program nebo funkce. Na rozdíl od value-level přístupu, který volá dané programy k hodnotám tak aby vytvořil sled hodnot, který vyvrcholí v požadovaný výsledek. Functional-level přístup aplikuje operace vytvářející program, na dané programy aby vytvořil sled programu, který vede k požadovanému výsledku.
Rozdíl od funkcionálního programování
Backus studoval a zveřejnil jeho functional-level styl programování, jeho zpráva byla většinou špatně pochopena, tak že podporoval tradiční funkcionální jazyky (jako například Lisp popřípadě Haskell) místo jeho vlastního FP a následovníka FL.
Backus nazýval funkcionální programování funkčně orientovaným jazykem; jeho functional-level programování je částečně vynucený typ funkčně orientovaného programování.
Klíčový rozdíl oproti Lispu a jiným funkcionálním jazykům že Backusův jazyk má následující typy hierarchie:
- atomy
- funkce, které dělají atomy atomy
- Higher – order funkce (které on nazývá „functional forms”), které přijmou jednu nebo dvě funkce do funkce.
…a jedinou cestou k generování nových funkcí je použití functional forms, které jsou neměnné: nemůžete si vytvořit vlastní functional forms (alespoň ne v FP; jde to ve FFP (formát FP))
Tyto omezení znamenají že funkce ve FP jsou moduly (generované vestavěnými funkcemi) přes algebru k functional forms, a proto jsou algebraicky stopovatelné. Například hlavní otázka rovnosti dvou funkcí, je ekvivalentní halting problému, a je neřešitelná, ale rovnost dvou funkcí ve FP je jenom rovnost v algebře proto je jednodušší.
Dokonce dnes si spousta uživatelů lambda style jazyků špatně vyloží Backusův functional-level přístup, jako omezující variantu lambda styku, který je de facto value-level styl. Backus by s nimi souhlasil co se týče slova omezený, argumentoval by že to bylo přesně uzpůsobeno takovým omezením aby dobře formované matematické místo mohlo vyniknout.
Příklady jazyků
Základním functional-level programovacím jazykem je FP. Další zahrnují FL aj.