Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Neuznávacie kompletné jazyky sú zámerne obmedzené jazyky, ktoré * nemôžu * vypočítať nič, čo môže Turingov stroj. Toto obmedzenie, prekvapivo, môže byť v určitých kontextoch silou.
Výhody:
* zaručené ukončenie: Keďže nemôžu vykonávať ľubovoľné slučky, neurčité úplné jazyky zaručujú, že akýkoľvek program napísaný v nich nakoniec ukončí. To je rozhodujúce pre systémy v reálnom čase, bezpečnostné kritické systémy a systémy, v ktorých sú nekonečné slučky neprijateľné.
* predvídateľnosť: Vďaka svojej obmedzenej povahe je správanie programov napísaných v týchto jazykoch často ľahšie predpovedať a analyzovať. Vďaka tomu sú cennými pre formálne overenie, preukázanie vlastností správania systému a ladenia.
* Zabezpečenie: Obmedzená povaha obmedzuje potenciál škodlivého kódu na vykonávanie škodlivých akcií (napr. Písanie na ľubovoľné miesta pamäť a vytváranie sieťových pripojení). Často sú bezpečnejšie vykonávať v pieskovisku. Toto je obzvlášť dôležité pri riešení nedôveryhodných vstupov.
* doména špecifickosť: Neuznávacie kompletné jazyky môžu byť navrhnuté tak, aby boli vysoko špecializované pre konkrétnu doménu. Táto špecializácia môže viesť k stručnejším, výraznejším a ľahšie zrozumiteľným kódom v tejto doméne. Napríklad konfiguračný jazyk sa môže zamerať výlučne na definovanie dátových štruktúr a vzťahov, nie na všeobecné výpočty.
* Výkon: Zjednodušená povaha môže umožniť určité optimalizácie, ktoré nie sú možné alebo ťažko dosiahnuteľné v jazykoch, ktoré sú úplným doplnkom Turing.
* Formálne overenie: Vďaka obmedzenej povahe týchto jazykov sú prístupné formálnemu overeniu. Na preukázanie vlastností o vykonávaní jazyka je možné použiť matematické techniky, čím sa zaručuje absencia určitých chýb alebo neočakávaného správania.
Obmedzenia:
* obmedzená expresivita: Najzreteľnejším obmedzením je, že nemôžu vyjadriť všetky možné výpočty. Zásadne nie sú schopné vykonávať úlohy, ktoré vyžadujú ľubovoľné slučky, rekurziu alebo zložité algoritmy.
* Neschopnosť priamo vyriešiť zložité problémy: Problémy vyžadujúce všeobecné výpočty nie je možné vyriešiť výlučne v rámci kompletného jazyka, ktorý nie je v poriadku.
* Závislosť od externých systémov: Zložité úlohy si často vyžadujú interakciu s vonkajšími kompletnými systémami alebo jazykmi. Neuteračný kompletný jazyk sa môže použiť na konfiguráciu, definíciu údajov alebo jednoduché spracovanie, zatiaľ čo ťažké zdvíhanie sa vykonáva inde.
* Zvýšená zložitosť kombinovaných systémov: Zatiaľ čo jednotlivé moduly môžu byť jednoduchšie, integrácia neurčného úplného jazyka s komplexným doplnkom môže zvýšiť celkovú zložitosť systému, najmä pokiaľ ide o komunikáciu a výmenu údajov.
* učenia sa pre konkrétne domény: Zatiaľ čo jazyky špecifické pre doménu sa môžu ľahšie učiť vo svojej doméne, zvládnutie viacerých takýchto jazykov pre rôzne úlohy by mohlo predstavovať strmšiu krivku učenia ako učenie sa jedného všeobecného jazyka.
Príklady neurčiacich kompletných jazykov a ich prípadov ich použitia:
* regulárne výrazy (regex): Používa sa na porovnávanie vzorov v texte. Zaručené ukončenie, ale nemôže vykonať ľubovoľné transformácie reťazcov.
* html/xml/json: Značkové jazyky sa používajú predovšetkým na definovanie dátových štruktúr. Opisujú *údaje *, nie *algoritmy *.
* sql (bez uložených postupov/rekurzie): Zatiaľ čo SQL môže vykonávať manipuláciu s údajmi, základné dotazy SQL (bez funkcií, ktoré zavádzajú slučky alebo rekurziu), nie sú kompletné.
* konfiguračné jazyky (yaml, toml): Používa sa na zadanie nastavení konfigurácie. Zamerajte sa na definíciu údajov a vzťahy.
* Shader Languages (GLSL, HLSL): Spočiatku navrhnuté pre jednoduché úlohy spracovania grafického spracovania sa mnohí vyvinuli smerom k úplnosti Turingu. Staršie verzie a obmedzené profily však boli úmyselne neurčené, aby sa zabezpečilo deterministické a predvídateľné vykreslenie.
* Dáta popisy jazyky (protokolové vyrovnávacie pamäte, avro): Definujte dátové schémy pre serializáciu a výmenu údajov.
v súhrne:
Non-Turing Complete Languages sú výkonným nástrojom na budovanie konkrétnych druhov systémov, v ktorých sú prvoradé ukončenie, predvídateľnosť, bezpečnosť a špecifickosť domény. Ich obmedzená expresivita však znamená, že často musia byť integrované do systémov Turing-komplex, aby sa vytvorili zložitejšie a všeobecné aplikácie. Kľúčom je porozumieť kompromisom a zvoliť si správny nástroj pre prácu.