Аутоматско програмирање

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

У информатици, термин аутоматско програмирање[1] идентификује тип компјутерског програмирања у којем неки механизми генеришу компјутерски програм који омогућава људским програмерима да пишу код на вишем нивоу апстракције.

Нема сагластности у погледу прецизног дефинисања аутоматског програмирања, углавном зато што се њено значење мењало током времена. Дејвид Парнас је пратећи историју "аутоматског програмирања" у објављеним истраживањима уочио да је током 1940-тих оно описивало аутоматизацију ручног процеса бушења папирних трака. Касније се односило на превод програмских језика високог нивоа, као што су Фортран и Алгол. У ствари, један од првих програма препознатљивих као компајлер звао се Аутокод. Парнас је закључио да је "аутоматско програмирање увек било еуфемизам за програмирање на језику вишег нивоа него што је доступно програмеру."[2]

Порекло[уреди]

Милдред Косс, рани UNIVAC програмер, објашњава: "Писање машинског кода укључује неколико заморних корака - разчлањавање процеса у дискретна упутства, додељивање посебне меморијске локације за све команде и управљање I/O буферима. Након праћењљ тих корака за имплементацију математичких рутина, субрутина библиотека, и програма за сортирање, наш задатак је био да размотримо шире програмске процесе. Морали смо да разумемо како се тестирани код може поново употребити и како да користимо помоћ машине у програмирању. Док смо програмирали, анализирали смо процес и покушали да мислимо о начинима како да генерализујемо те кораке да бисмо их укључили у језике вишег нивоа. То је довело до развоја интерпретатора, асемблера, компајлера и програмских генератора дизајнираних да раде на или производе друге програме, односно до аутоматског програмирања."[3]

Генеративно програмирање[уреди]

Генеративно програмирање је стил компјутерског програмирања који користи аутоматско генерисање изворног кода путем генеричких оквира, класа, прототипова, шаблона, аспеката, и генератора кода ради побољшања програмерске продуктивности.[4] То се често сродно са темама вишеструке употребе изворног кода, као што су компонентно оријентисано програмирање и инжењеринг производне породице.

Генерисање изворног кода[уреди]

Генерисање изворног кода је процес стварања изворног кода на основу онтолошког модела као што је образац и постиже се са програмским алатом као што је шаблонски процесор или интегрисано развојно окружење (ИРО). Ови алати омогућавају стварање изворног кода на више различитих начина. Макро процесор, као што је С препроцесор, који замењује образац у изворном коду у складу са релативно једноставним правилима, једноставан је облик генератора изворног кода.

Имплементација[уреди]

Неки IDE програми за Јаву и друге језике имају развијеније облике генерисања изворног кода, са којима се програмер може интерактивно одабрати и прилагодити "исечке" изворног кода. Програмски "чаробњаци", који омогућава програмеру да интерактивно дизајнира графичке корисничке интерфејсе док компајлер у позадини генерише одговарајући изворни код, су још један чест облик генерисања изворног кода. Ово се може упоредити са, на пример, језицима за обележавање корисничког интерфејса, који декларативно дефинишу корисничке интерфејсе.

Поред генерације кода помоћу чаробњака или шаблона, IDE такође може да генерише и манипулише кодом да би се аутоматизовала рефакторизација кода, за шта би иначе било неопходно да се изврше вишеструки ручни (грешкама подложни) кораци, чиме се повећава продуктивност програмера.[5] Примери таквих особина у IDE програмима су рефакторисање класе претраживача за  Smalltalk и они у Јава IDE-у попут Еклипсе.

Специјализована алтернатива подразумева стварање оптимизованог кода за математички дефинисане величине унутар компјутерског алгебарског система (КАС). Оптимизација компајлера се састоји од проналажења заједничких интермедијерс вектора величине који захтевају комплексност или операције, док сам дизајн компјутерског система алгебре захтева само  операције.[6][7][8] Ови објекти се могу користити као пред-оптимизер пре обраде компајлером. Ова опција се користи за руковање великим математички изразима у нпр. компјутерској (квантној) хемији.

Примери:

  • Acceleo је отворен изворни код генератора за Еклипсу који се користи за генерисање било ког текстуалног језика (Јава, PHP, Пајтон, итд) из EMF модела дефинисаних било којим метамоделима (UML, SysML, итд).
  • Actifsource је додатак за Еклипсу који омогућава графичко моделирање и на моделу засновано генерисање кода помоћу прилагођених шаблона.
  • Altova MapForce је оруђе за графичко мапирање, конверзију и интеграцију података, које има способност генерисања апликационог кода у Јави, C#, или C++ за извршење рекурентних трансформација.
  • CodeFluent Entities предузећа SoftFluent је графички алат интегрисан у Мајкрософтовом визуелном студију који генерише .NET изворни код, у C# или Вижуалном бејсику.
  • DMS Software Reengineering Toolkit је систем за дефинисање произвољних доменски специфичних језика и њихово превођење на друге језике.
  • HPRCARCHITECT (од MNB технологије, Inc) је алат за развој софтвер базиран на вештачкој интелигенцији са Whiteboard људским интерфејсом. Језички и технолошки агностичан развој овог оруђа је финансирало Америчко ратно ваздухопловство да реши проблем генерисања кода за системе који се извршавају на мешовитим процесорским технологијама.
  • Spring Roo је отворен изворни активни код генератор за Spring Framework базиран на Јава апликацијама. Он користи AspectJ mixins да обезбеди сепарацију концепата током циклуса процеса одржавања.
  • RISE је бесплатни пакет за моделовање информација за развој система који користи ERD или UML. Генерише код за базе података као што су MySQL, PostgreSQL и Microsoft SQL Server. Персистентна генерација кода за C# (.NET) и PHP укључујући SOAP и JSON стилове веб сервиса и AJAX прокси код.
  • Maple компјутерско алгебрски систем нуди оптимизаторе генератора кода за Фортран, МАТЛАБ, С и Јаву. Wolfram језик (Mathematica) и MuPAD имају сличне интерфејсе.
  • Екран скулптор,[9] Софткод,[10] интерфејс програмер,[11] и Џенифер[12] су примери пионирских програмских генератора који су се појавили од средине 1980—их до раних 1990—их. Они су развили и напредне технологије проширљивих, на шаблонима заснованиг генератора изворног кода на масовној тржишној скали.
  • GeneXus је унакрсно платформни, базиран на репрезентацији знања, развојни алат, који је углавном оријентисан на професионалну класу примена Веб апликација, паметне уређаје и Мајкрософт Виндоус платформу. Програмер описује апликацију на високом нивоу, углавном декларативним језиком, из кога се генерише изворни код за више окружења.
  • Bidji је Apache Ant пројекат за генерисање кода и трансформацију података.

Види још[уреди]

Референце[уреди]

  1. ^ Ricardo Aler Mur, "Automatic Inductive Programming", 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). стр. 30.
  4. ^ James Wilcox, "Paying Too Much for Custom Application Development", March 2011.[непоуздан извор?]
  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. стр. 281. 
  10. ^ Announcing Softcode Version 2.5
  11. ^ Wallsoft/Template Garden Software
  12. ^ Arora, Ashok; Bansal, Shefali. Comprehensive Computer and Languages. Firewall Media. стр. 41. ISBN 978-81-7008-355-9. Приступљено 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.« 

Литература[уреди]

  • Генеративно Програмирање: Методе, алати и апликације по Крзисзтоф Цзарнецки и Улрицх В. Еисенецкер, Аддисон Веслеи, 2000.

Спољашње везе[уреди]