Pređi na sadržaj

Automatsko programiranje

S Vikipedije, slobodne enciklopedije

U informatici, termin automatsko programiranje[1] identifikuje tip kompjuterskog programiranja u kojem neki mehanizmi generišu kompjuterski program koji omogućava ljudskim programerima da pišu kod na višem nivou apstrakcije.

Nema saglastnosti u pogledu preciznog definisanja automatskog programiranja, uglavnom zato što se njeno značenje menjalo tokom vremena. Dejvid Parnas je prateći istoriju "automatskog programiranja" u objavljenim istraživanjima uočio da je tokom 1940-ih ono opisivalo automatizaciju ručnog procesa bušenja papirnih traka. Kasnije se odnosilo na prevod programskih jezika visokog nivoa, kao što su Fortran i Algol. U stvari, jedan od prvih programa prepoznatljivih kao kompajler zvao se Autokod. Parnas je zaključio da je "automatsko programiranje uvek bilo eufemizam za programiranje na jeziku višeg nivoa nego što je dostupno programeru."[2]

Poreklo[uredi | uredi izvor]

Mildred Koss, rani UNIVAC programer, objašnjava: "Pisanje mašinskog koda uključuje nekoliko zamornih koraka - razčlanjavanje procesa u diskretna uputstva, dodeljivanje posebne memorijske lokacije za sve komande i upravljanje I/O buferima. Nakon praćenjlj tih koraka za implementaciju matematičkih rutina, subrutina biblioteka, i programa za sortiranje, naš zadatak je bio da razmotrimo šire programske procese. Morali smo da razumemo kako se testirani kod može ponovo upotrebiti i kako da koristimo pomoć mašine u programiranju. Dok smo programirali, analizirali smo proces i pokušali da mislimo o načinima kako da generalizujemo te korake da bismo ih uključili u jezike višeg nivoa. To je dovelo do razvoja interpretatora, asemblera, kompajlera i programskih generatora dizajniranih da rade na ili proizvode druge programe, odnosno do automatskog programiranja."[3]

Generativno programiranje[uredi | uredi izvor]

Generativno programiranje je stil kompjuterskog programiranja koji koristi automatsko generisanje izvornog koda putem generičkih okvira, klasa, prototipova, šablona, aspekata, i generatora koda radi poboljšanja programerske produktivnosti.[4] To se često srodno sa temama višestruke upotrebe izvornog koda, kao što su komponentno orijentisano programiranje i inženjering proizvodne porodice.

Generisanje izvornog koda[uredi | uredi izvor]

Generisanje izvornog koda je proces stvaranja izvornog koda na osnovu ontološkog modela kao što je obrazac i postiže se sa programskim alatom kao što je šablonski procesor ili integrisano razvojno okruženje (IRO). Ovi alati omogućavaju stvaranje izvornog koda na više različitih načina. Makro procesor, kao što je S preprocesor, koji zamenjuje obrazac u izvornom kodu u skladu sa relativno jednostavnim pravilima, jednostavan je oblik generatora izvornog koda.

Implementacija[uredi | uredi izvor]

Neki IDE programi za Javu i druge jezike imaju razvijenije oblike generisanja izvornog koda, sa kojima se programer može interaktivno odabrati i prilagoditi "isečke" izvornog koda. Programski "čarobnjaci", koji omogućava programeru da interaktivno dizajnira grafičke korisničke interfejse dok kompajler u pozadini generiše odgovarajući izvorni kod, su još jedan čest oblik generisanja izvornog koda. Ovo se može uporediti sa, na primer, jezicima za obeležavanje korisničkog interfejsa, koji deklarativno definišu korisničke interfejse.

Pored generacije koda pomoću čarobnjaka ili šablona, IDE takođe može da generiše i manipuliše kodom da bi se automatizovala refaktorizacija koda, za šta bi inače bilo neophodno da se izvrše višestruki ručni (greškama podložni) koraci, čime se povećava produktivnost programera.[5] Primeri takvih osobina u IDE programima su refaktorisanje klase pretraživača za  Smalltalk i oni u Java IDE-u poput Eklipse.

Specijalizovana alternativa podrazumeva stvaranje optimizovanog koda za matematički definisane veličine unutar kompjuterskog algebarskog sistema (KAS). Optimizacija kompajlera se sastoji od pronalaženja zajedničkih intermedijers vektora veličine koji zahtevaju kompleksnost ili operacije, dok sam dizajn kompjuterskog sistema algebre zahteva samo  operacije.[6][7][8] Ovi objekti se mogu koristiti kao pred-optimizer pre obrade kompajlerom. Ova opcija se koristi za rukovanje velikim matematički izrazima u npr. kompjuterskoj (kvantnoj) hemiji.

Primeri:

  • Acceleo je otvoren izvorni kod generatora za Eklipsu koji se koristi za generisanje bilo kog tekstualnog jezika (Java, PHP, Pajton, itd) iz EMF modela definisanih bilo kojim metamodelima (UML, SysML, itd).
  • Actifsource je dodatak za Eklipsu koji omogućava grafičko modeliranje i na modelu zasnovano generisanje koda pomoću prilagođenih šablona.
  • Altova MapForce je oruđe za grafičko mapiranje, konverziju i integraciju podataka, koje ima sposobnost generisanja aplikacionog koda u Javi, C#, ili C++ za izvršenje rekurentnih transformacija.
  • CodeFluent Entities preduzeća SoftFluent je grafički alat integrisan u Majkrosoftovom vizuelnom studiju koji generiše .NET izvorni kod, u C# ili Vižualnom bejsiku.
  • DMS Software Reengineering Toolkit je sistem za definisanje proizvoljnih domenski specifičnih jezika i njihovo prevođenje na druge jezike.
  • HPRCARCHITECT (od MNB tehnologije, Inc) je alat za razvoj softver baziran na veštačkoj inteligenciji sa Whiteboard ljudskim interfejsom. Jezički i tehnološki agnostičan razvoj ovog oruđa je finansiralo Američko ratno vazduhoplovstvo da reši problem generisanja koda za sisteme koji se izvršavaju na mešovitim procesorskim tehnologijama.
  • Spring Roo je otvoren izvorni aktivni kod generator za Spring Framework baziran na Java aplikacijama. On koristi AspectJ mixins da obezbedi separaciju koncepata tokom ciklusa procesa održavanja.
  • RISE je besplatni paket za modelovanje informacija za razvoj sistema koji koristi ERD ili UML. Generiše kod za baze podataka kao što su MySQL, PostgreSQL i Microsoft SQL Server. Persistentna generacija koda za C# (.NET) i PHP uključujući SOAP i JSON stilove veb servisa i AJAX proksi kod.
  • Maple kompjutersko algebrski sistem nudi optimizatore generatora koda za Fortran, MATLAB, S i Javu. Wolfram jezik (Mathematica) i MuPAD imaju slične interfejse.
  • Ekran skulptor,[9] Softkod,[10] interfejs programer,[11] i Dženifer[12] su primeri pionirskih programskih generatora koji su se pojavili od sredine 1980—ih do ranih 1990—ih. Oni su razvili i napredne tehnologije proširljivih, na šablonima zasnovanig generatora izvornog koda na masovnoj tržišnoj skali.
  • GeneXus je unakrsno platformni, baziran na reprezentaciji znanja, razvojni alat, koji je uglavnom orijentisan na profesionalnu klasu primena Veb aplikacija, pametne uređaje i Majkrosoft Vindous platformu. Programer opisuje aplikaciju na visokom nivou, uglavnom deklarativnim jezikom, iz koga se generiše izvorni kod za više okruženja.
  • Bidji je Apache Ant projekat za generisanje koda i transformaciju podataka.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ Ricardo Aler Mur, "Automatic Inductive Programming Arhivirano na sajtu Wayback Machine (4. mart 2016)", ICML 2006 Tutorial. June 2006.
  2. ^ D. L. Parnas. "Software Aspects of Strategic Defense Systems." American Scientist. November 1985.
  3. ^ Chun, Wendy. "On Software, or the Persistence of Visual Knowledge." Grey Room 18. Boston:. 2004. str. 30.
  4. ^ James Wilcox, "Paying Too Much for Custom Application Development", March 2011.[nepouzdan izvor?]
  5. ^ Martin Fowler, "Crossing Refactoring's Rubicon"
  6. ^ C. Gomez and T.C. Scott, Maple Programs for Generating Efficient FORTRAN Code for Serial and Vectorized Machines, Comput. Phys. Commun. 115, pp. 548-562, 1998 [1].
  7. ^ T.C. Scott and Wenxing Zhang, Efficient hybrid-symbolic methods for quantum mechanical calculations, Comput. Phys. Commun. 191, pp. 221-234, 2015 [2].
  8. ^ T.C. Scott, I.P. Grant, M.B. Monagan and V.R. Saunders, Numerical Computation of Molecular Integrals via optimized (vectorized) FORTRAN code, Proceedings of the Fifth International Workshop on New computing Techniques in Physics Research (Software Engineering, Neural Nets, Genetic Algorithms, Expert Systems, Symbolic Algebra, Automatic Calculations), held in Lausanne (Switzerland), Nucl. Instr. Meth. Phys. Res. 389, A, pp. 117-120, 1997 [3].
  9. ^ Inc., Ziff Davis (1986). PC Mag. Ziff Davis, Inc. str. 281. 
  10. ^ Announcing Softcode Version 2.5
  11. ^ „Wallsoft/Template Garden Software”. Arhivirano iz originala 03. 03. 2016. g. Pristupljeno 16. 01. 2016. 
  12. ^ Arora, Ashok; Bansal, Shefali. Comprehensive Computer and Languages. Firewall Media. str. 41. ISBN 978-81-7008-355-9. Pristupljeno 19. 9. 2014. „Jenifer is a full-scale code generator that provides a pattern called template, from which the code is generated. After definig screens, menus and reports, Genifer creates the data files, index files and programs. 

Literatura[uredi | uredi izvor]

  • Arora, Ashok; Bansal, Shefali. Comprehensive Computer and Languages. Firewall Media. str. 41. ISBN 978-81-7008-355-9. Pristupljeno 19. 9. 2014. „Jenifer is a full-scale code generator that provides a pattern called template, from which the code is generated. After definig screens, menus and reports, Genifer creates the data files, index files and programs. 
  • Generativno Programiranje: Metode, alati i aplikacije po Krzisztof Czarnecki i Ulrich V. Eisenecker, Addison Veslei, 2000.

Spoljašnje veze[uredi | uredi izvor]