Automatické programování

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání

V počítačové vědě termín automatické programování identifikuje druh počítačového programování, kdy je počítačový program generován nějakým mechanismem a umožňuje tak lidským programátorům psát kód na vyšší úrovni abstrakce.

Ohledně přesné definice automatického programování panují neshody, především proto, že se jeho význam časem změnil. David Parnas, stopujíc historii „automatického programování“ v publikovaném výzkumu, poznamenal, že tento termín ve 40. letech popisoval automatizaci manuálního zpracování děrné pásky. Později odkazoval na překlad vyšších programovacích jazyků jako Fortran a ALGOL. Ve skutečnosti byl jeden z prvních programů identifikovatelných jako kompilátor s názvem Autocode. Parnas vyvodil, že „automatické programování vždy bylo eufemismem pro programování ve vyšším programovacím jazyce, než měl programátor k dispozici“.

Původ[editovat | editovat zdroj]

Mildred Koss, jedna z raných UNIVAC programátorek, vysvětluje: „Psaní strojového kódu zahrnovalo několik únavných kroků – rozložení procesu do samostatných strojových instrukcí, přiřazení konkrétních míst v počítačové paměti všem příkazům a řízení I/O zásobníků. Po provedení těchto kroků za účelem implementace matematických procedur, knihovny podprocedur a řadicích programů, bylo naším úkolem zaměřit se na širší proces programování. Potřebovali jsme porozumět tomu, jak bychom mohli opětovně použít testovaný kód a využít pomoci stroje s programováním. Jak jsme programovali, zkoumali jsme onen proces a snažili se nalézt způsoby, jak abstrahovat tyto kroky tak, abychom je začlenili do vyššího programovacího jazyku. To vedlo k vývoji interpretů, překladačů, kompilátorů a generátorů — programů určených k obsluze nebo vytváření dalších programů, tedy, k automatickému programování.“

Generativní programování[editovat | editovat zdroj]

Generativní programování je způsob počítačového programování, který využívá automatizované vytváření zdrojového kódu pomocí generických rámců, tříd, prototypů, vzorů, aspektů a generování kódu ke zvýšení produktivity programátora. Často je spojováno s tématy blízkými znovupoužití kódu, jako je „component-based software engineering“ a „product family engineering“.

Generování zdrojového kódu[editovat | editovat zdroj]

Generování zdrojového kódu je proces generování kódu na základě ontologického modelu, jako je šablona, čehož je dosaženo pomocí programovacího nástroje, jako je šablonový procesor nebo vývojové prostředí (IDE). Tyto nástroje umožňují generování zdrojového kódu mnoha způsoby. Makroprocesor, jako je preprocesor jazyka C, který nahrazuje vzory ve zdrojovém kódu na základě relativně jednoduchých pravidel, je jednoduchou formou generátoru zdrojového kódu.

Implementace[editovat | editovat zdroj]

Některá vývojová prostředí pro Javu a další jazyky disponují pokročilejšími způsoby generování zdrojového kódu, kterými programátor může interaktivně volit a přizpůsobovat „útržky“ zdrojového kódu. Programové návrháře („wizardy“), které umožňují programátorovi interaktivně rozvrhnout grafické uživatelské rozhraní, přičemž překladač nepozorovaně generuje odpovídající zdrojový kód, jsou další běžnou ukázkou automatického generování kódu. Toto kontrastuje například se značkovacími jazyky pro uživatelská rozhraní, které definují uživatelská rozhraní deklarativně.

Kromě generování kódů z „wizardu“ nebo šablony často IDE dokáží také generovat kód a manipulovat jím tak, aby automatizovaly refaktorování kódu vyžadující několik manuálních kroků zvyšujících pravděpodobnost vzniku chyby, a tudíž zvyšují produktivitu vývojáře. Ukázkou takových schopností vývojových prostředí je refaktorovací průzkumník pro Smalltalk či refaktoring v mnohých IDE pro Javu, například v Eclipse.

Specializovaná alternativa zahrnuje generování optimalizovaného kódu pro kvantity definované matematicky v rámci počítačového algebraického systému (CAS). Optimalizace překladače sestávající z nalezení společných intermediátů pro vektor velikosti vyžaduje či operací, zatímco samotný návrh počítačového algebraického systému vyžaduje pouze operací. To může být použito pro předběžnou optimalizaci před zpracováním kódu překladačem, čehož bývá využíváno při zpracování matematicky objemných výrazů například ve výpočetní (kvantové) chemii.

Příklady:

  • Acceleo je open source generátor zdrojového kódu pro Eclipse používaný ke generování v libovolných textových jazycích Java, PHP, Python atd.) z EMF modelů definovaných na základě libovolného metamodelu (UML, SysML atd.).
  • Actifsource je plugin pro Eclipse, který umožňuje grafické modelování a generování kódu z modelů prostřednictvím vlastních šablon.
  • Altova MapForce je grafický mapovací, konverzní a integrační nástroj schopný generování kódu v jazycích Java, C# či C++ pro provádění rekurentních transformací.
  • DMS Software Reengineering Toolkit je systém pro definici libovolných doménově specifických jazyků a jejich převod do jiných jazyků.
  • HPRCARCHITECT (od MNB Technologies, Inc.) je na umělé inteligenci založený softwarový vývojářský nástroj s lidským rozhraním Virtual Whiteboard. Nástroj byl vyvinut nezávisle na jazyce a technologii za financování US Air Force za účelem vyřešení problému generování kódu pro systémy cílené na smíšené procesorové technologie.
  • Spring Roo je aktivní open-source generátor kódu pro Java aplikace založené na Spring Framework. Využívá AspectJ mixiny pro oddělení zodpovědnosti během round-trip synchronizace.
  • RISE je svobodný modelovací nástroj pro vývoj systémů pomocí ERD či UML, generování kódu pro databáze MySQL, PostgreSQL a Microsoft SQL Server, generování persistentního kódu pro C# (.NET) a PHP zahrnující jak webové služby stylu SOAP a JSON, tak proxy kód AJAX.
  • Počítačový algebraický systém Maple nabízí optimalizátory generátorů kódu pro jazyky Fortran, MATLAB, C a Java. Mathematica a MuPAD mají srovnatelná rozhraní.
  • Screen Sculptor, SoftCode, UI Programmer a Genifer jsou příklady průkopnických generátorů, které se vznikly v průběhu 80. let a začátkem 90. let 20. století. Vyvinuly a prosadily technologii rozšiřitelných šablonových generátorů zdrojového kódu v rámci měřítka masového trhu.
  • GeneXus je multiplatformní vývojový nástroj na bázi znalostních systémů orientovaný především na enterprise aplikace, webové aplikace, chytrá zařízení a platformu Microsoft Windows. Vývojář zde popisuje aplikaci ve vyšším, většinou deklarativním jazyce, z něhož je nativní kód generován pro několik prostředí.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Automatic programming na anglické Wikipedii.