Намерно програмирање

колекција концепата Чарлса Симонјија

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

Намерно програмирање је развио бивши главни архитекта Мајкрософта Чарлс Симоњи, који је водио тим у Мајкрософт истраживању који је развио парадигму и изградио интегрисано развојно окружење (ИРО) под називом IP (за намерно програмирање) који показује парадигму.  Мајкрософт је одлучио да не продукује намерно програмирање парадигме, као у раним 2000-им када је Мајкрософт избацио С# и .NET се супротставио Јава усвајању.[1] Чарлс Симоњи одлучује, уз сагласност Мајкрософта, да предузме своју идеју из Мајкрософта и комерцијализације сам. Он је основао компанију Намерни Софтвер да настави ово. Мајкрософт лиценцира намерно програмрање патената Симоња које је стекао док је био у Мајкрософту, али не и изворни код, у намерни софтвер.

Преглед намерног програмирања како је развијено у Мајкрософт истраживању је дат у поглављу 11. књиге Генеративно програмирање: Методе, алати и апликације.[2]

Развој циклуса уреди

Као што је предвиђено од Симоњиа, развија нову апликацију преко намерног програмирања парадигма средстава на следећи начин. Програмер гради WYSIWYG попут окружења које подржава шему и нотацију бизнис знања за дати проблем домен (као што су апликације продуктивности или животног осигурања). Корисници онда користите ову средину да заузму своје намере, које су снимљене на високом нивоу апстракције. Окружење може да ради на овим намерама и помаже корисницима да креирају семантички богатије документе који могу бити процесуирани и погубљени, сличне табели. Снимљена знања врши се од стране оцењивача или је састављено за генерисање коначног програма. Узастопне промене се врши на нивоу самог WYSIWYG-а. За разлику од процесора речи, табеле или презентације софтвера, намерна средина има већу подршке за структуру и семантику намера да се изразе, и може створити интерактивне документе који захватају богатије шта корисник жели да постигне. Посебан случај је када садржај програм кода и животне средине постаје интелигентан IDE.[3]

Раздвајање складиштење и презентација изворног кода уреди

Кључ за користи намерног програмирања служи да домен код који захвата намере се не чува у изворном коду текстуалних фајлова, него у дрво-основном сладишту  (може бити бинарни или XML). Тесна интеграција животне средине са формата за складиштење доноси неке од лепших особина нормализације базе података до изворног кода. Технолошки вишак се елиминише давањем дефиниције јединственом идентитету, и складиштењем имена променљивих и оператора у тачно једном месту. То суштински олакшава разлику декларације референци, а животна средина може да их покаже другачије.

Размак у програму се такође не чува као део изворног кода, а сваки програмер који ради на пројекту може да изабере увлачење приказа извора. Веће радикалне визуелизације укључују приказивање листе изјава као угњежђене кутије, уређивање условних израза као логичке капије, или re-rendering имена у кинеском.

Систем користи нормализовани језик за популарне језике као што су  C++ и Java, док пушта корисничко окружење и комбинује их са идејама из Ајфела и других језика. Често се помиње у истом контексту као и језик-оријентисано програмирање преко домена-специфичног језика, и аспект оријентисано програмирање IP тврди да пружа неке продоре у генеративном програмирању. Ове технике омогућавају програмерима да продужи окружења језика за снимање домена специфичне конструкције без улагања у писање пуног компајлера и едитора за све нове језике.

Пример програмирање уреди

Java програм који испише бројева од 1 до 10, користећи коврџаву конзолну синтаксу, може да изгледа овако:

 for (int i = 1; i <= 10; i++) {
    System.out.println("the number is " + i);
 }

Код изнад садржи заједнички конструкт већине програмских језика, тако ограничену петљу, у овом случају заступа за конструкт. Код, када је састављен, повезан и покренут, петља увећава вредност i 10 пута сваки пут након штампања it out-а.

Али овај код не схвата намере програмера, односно да се "штампају бројеве од 1 до 10". У овом једноставном случају, програмер је затражио да се код одржаног кода може вероватно схватити шта је намеравао да уради, али то није увек тако лако. Петље које се протежу у многим линијама, или страницама, могу постати веома тешко разумљиве, нарочито ако је оригинални програмер користио нејасне етикете. Традиционално једини начин да се укаже на намеру кода је додавање коментара изворног кода, али често се не додају коментари, или су нејасни, или нису синхронизовани са изворним кодом су првобитном опису.

У намерним програмским системима горе петља може бити представљена, на неком нивоу, као нешто што је очигледно као "штампање бројеве од 1 до 10". Систем ће онда користити намере за генерисање изворног кода, вероватно нешто веома слично коду горе. Кључна разлика је у томе што намерно програмирање система одржава семантички ниво, који изворном коду недостаје, а који може драматично олакшати читљивост у великим програмима.

Иако већина језика садржи механизме за снимање одређених врста апстракција, IP, као Lisp породица језика, омогућава додавање потпуно нових механизама. Према томе, ако је програмер почео са језиком као што је C, он би могао да прошире језик са карактеристикама као што су оне у C++ без чекања на компајлер програмере да их додају. По аналогији, много више моћних механизам израза може се користити од стране програмера за класе и процедуре.

Идентитет уреди

IP се фокусира на појам идентитета. Будући да већина програмских језика представља изворни код као обичан текст, објекти су дефинисани именима, а њихова посебност мора да се извлачи од стране преводиоца. На пример, иста симболика имена може се користити за именовање различитих варијабли, процедура или чак типова. У коду који се протеже на неколико страница - или, за глобално видљивим именима, више датотека - може да постане веома тешко рећи на шта се симбол односи на који стварни објекат. Ако се назив промени,  где се користи код мора пажљиво да се испитивати.

Насупрот томе, у IP систему, све дефиниције не само додељуј симболичка имена, него и јединствене приватне идентификаторе за објекте. То значи да у развојном окружењу IP-а, свака референца на променљиву или процедуру није само име - то је веза са оригиналним ентитетом.

Највећа предност овога је да ако је преименован ентитет, све референце на њему у програму остају на снази (познат као референцијални интегритет). То такође значи да уколико се исти назив користи за јединствене дефиниције у различитим именским (као што су ".то_стринг ()"), референцама са истим именом, али различитим идентитетом неће бити преименован, као што се понекад дешава с претраживањем/заменити у текућем уреднику. Ова функција такође олакшава више-језичне верзије програма; може имати низ имена на енглеском језику за све дефиниције, као и низ имена на јапанском језику који се могу мењати по вољи.

Имајући јединствен идентитет за сваки објекат дефинисан у програму такође олакшава обављање аутоматско прављење задатака, као и поједностављује код чекирања у верзионисаном систему. На пример, у многим садашњим кодовима за сарадњу система (нпр CVS), када су два програмера починила промене које нису усаглашене (односно ако један програмер преименује функцију док је други мења једну од линија у тој функцији),  верзионисани систем ће мислити да је један програмер створио нову функцију, док је други модификовао стару функцију. У IP-верзији система, он ће знати да је један програмер само променио име, а други променио код.

Нивои детаља уреди

IP системи такође нуде неколико нивоа детаља, омогућавајући програмеру да "увелича" или "умањи". У горњем примеру, програмер може да умањи дат ниво који ће рећи нешто као:

<<штампај бројеве од 1 до 10>>

Тако су IP системи само-документовани у великој мери, дозвољавајући програмеру да задржи добар висок ниво слике програма у целини.

Слични радови уреди

Постоје пројекти који експлоатишу сличне идеје да се створи код са вишег нивоа апстракције. Међу њима су:

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

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

  1. ^ "Simonyi explains, 'It was impractical, when Microsoft was making tremendous strides with .Net in the near term, to somehow send somebody out from the same organization who says, "This is not how you should do things--what if you did things in this other, more disruptive way?'"[1] Архивирано на сајту Wayback Machine (5. март 2012) (Quote from "Part II: Anything You Can Do, I Can Do Meta: Space tourist and billionaire programmer Charles Simonyi designed Microsoft Office. Now he wants to reprogram software." Архивирано на сајту Wayback Machine (8. мај 2012), Tuesday, January 9, 2007, Scott Rosenberg, Technology Review.)
  2. ^ Generative Programming: Methods, Tools, and Applications, by Krzysztof Czarnecki and Ulrich Eisenecker, Addison-Wesley, Reading, MA, USA, June 2000.
  3. ^ Scott Rosenberg: "Anything You Can Do, I Can Do Meta Архивирано на сајту Wayback Machine (11. фебруар 2012)." Technology Review, January 8, 2007.

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