Namerno programiranje

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

U programiranju, namerno programiranje je paradigma programiranja koje je razvio Čarls Simonji koji kodira u softveru izvornog koda tačnu nameru koje programeri (ili korisnici) imaju na umu kada shvataju taj rad. Koristeći odgovarajući nivo apstrakcije na kome programer misli, stvaranje i održavanje računarskih programa postaje lakše. Razdvajajući zabrinutosti od namera i posle operacije, softver postaje modularan i omogućava veću višekratnu upotrebu softverskog koda.

Namerno programiranje je razvio bivši glavni arhitekta Majkrosofta Čarls Simonji, koji je vodio tim u Majkrosoft istraživanju koji je razvio paradigmu i izgradio integrisano razvojno okruženje (IRO) pod nazivom IP (za namerno programiranje) koji pokazuje paradigmu.  Majkrosoft je odlučio da ne produkuje namerno programiranje paradigme, kao u ranim 2000-im kada je Majkrosoft izbacio S# i .NET se suprotstavio Java usvajanju.[1] Čarls Simonji odlučuje, uz saglasnost Majkrosofta, da preduzme svoju ideju iz Majkrosofta i komercijalizacije sam. On je osnovao kompaniju Namerni Softver da nastavi ovo. Majkrosoft licencira namerno programranje patenata Simonja koje je stekao dok je bio u Majkrosoftu, ali ne i izvorni kod, u namerni softver.

Pregled namernog programiranja kako je razvijeno u Majkrosoft istraživanju je dat u poglavlju 11. knjige Generativno programiranje: Metode, alati i aplikacije.[2]

Razvoj ciklusa uredi

Kao što je predviđeno od Simonjia, razvija novu aplikaciju preko namernog programiranja paradigma sredstava na sledeći način. Programer gradi WYSIWYG poput okruženja koje podržava šemu i notaciju biznis znanja za dati problem domen (kao što su aplikacije produktivnosti ili životnog osiguranja). Korisnici onda koristite ovu sredinu da zauzmu svoje namere, koje su snimljene na visokom nivou apstrakcije. Okruženje može da radi na ovim namerama i pomaže korisnicima da kreiraju semantički bogatije dokumente koji mogu biti procesuirani i pogubljeni, slične tabeli. Snimljena znanja vrši se od strane ocenjivača ili je sastavljeno za generisanje konačnog programa. Uzastopne promene se vrši na nivou samog WYSIWYG-a. Za razliku od procesora reči, tabele ili prezentacije softvera, namerna sredina ima veću podrške za strukturu i semantiku namera da se izraze, i može stvoriti interaktivne dokumente koji zahvataju bogatije šta korisnik želi da postigne. Poseban slučaj je kada sadržaj program koda i životne sredine postaje inteligentan IDE.[3]

Razdvajanje skladištenje i prezentacija izvornog koda uredi

Ključ za koristi namernog programiranja služi da domen kod koji zahvata namere se ne čuva u izvornom kodu tekstualnih fajlova, nego u drvo-osnovnom sladištu  (može biti binarni ili XML). Tesna integracija životne sredine sa formata za skladištenje donosi neke od lepših osobina normalizacije baze podataka do izvornog koda. Tehnološki višak se eliminiše davanjem definicije jedinstvenom identitetu, i skladištenjem imena promenljivih i operatora u tačno jednom mestu. To suštinski olakšava razliku deklaracije referenci, a životna sredina može da ih pokaže drugačije.

Razmak u programu se takođe ne čuva kao deo izvornog koda, a svaki programer koji radi na projektu može da izabere uvlačenje prikaza izvora. Veće radikalne vizuelizacije uključuju prikazivanje liste izjava kao ugnježđene kutije, uređivanje uslovnih izraza kao logičke kapije, ili re-rendering imena u kineskom.

Sistem koristi normalizovani jezik za popularne jezike kao što su  C++ i Java, dok pušta korisničko okruženje i kombinuje ih sa idejama iz Ajfela i drugih jezika. Često se pominje u istom kontekstu kao i jezik-orijentisano programiranje preko domena-specifičnog jezika, i aspekt orijentisano programiranje IP tvrdi da pruža neke prodore u generativnom programiranju. Ove tehnike omogućavaju programerima da produži okruženja jezika za snimanje domena specifične konstrukcije bez ulaganja u pisanje punog kompajlera i editora za sve nove jezike.

Primer programiranje uredi

Java program koji ispiše brojeva od 1 do 10, koristeći kovrdžavu konzolnu sintaksu, može da izgleda ovako:

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

Kod iznad sadrži zajednički konstrukt većine programskih jezika, tako ograničenu petlju, u ovom slučaju zastupa за konstrukt. Kod, kada je sastavljen, povezan i pokrenut, petlja uvećava vrednost i 10 puta svaki put nakon štampanja it out-a.

Ali ovaj kod ne shvata namere programera, odnosno da se "штампају бројеве од 1 до 10". U ovom jednostavnom slučaju, programer je zatražio da se kod održanog koda može verovatno shvatiti šta je nameravao da uradi, ali to nije uvek tako lako. Petlje koje se protežu u mnogim linijama, ili stranicama, mogu postati veoma teško razumljive, naročito ako je originalni programer koristio nejasne etikete. Tradicionalno jedini način da se ukaže na nameru koda je dodavanje komentara izvornog koda, ali često se ne dodaju komentari, ili su nejasni, ili nisu sinhronizovani sa izvornim kodom su prvobitnom opisu.

U namernim programskim sistemima gore petlja može biti predstavljena, na nekom nivou, kao nešto što je očigledno kao "štampanje brojeve od 1 do 10". Sistem će onda koristiti namere za generisanje izvornog koda, verovatno nešto veoma slično kodu gore. Ključna razlika je u tome što namerno programiranje sistema održava semantički nivo, koji izvornom kodu nedostaje, a koji može dramatično olakšati čitljivost u velikim programima.

Iako većina jezika sadrži mehanizme za snimanje određenih vrsta apstrakcija, IP, kao Lisp porodica jezika, omogućava dodavanje potpuno novih mehanizama. Prema tome, ako je programer počeo sa jezikom kao što je C, on bi mogao da prošire jezik sa karakteristikama kao što su one u C++ bez čekanja na kompajler programere da ih dodaju. Po analogiji, mnogo više moćnih mehanizam izraza može se koristiti od strane programera za klase i procedure.

Identitet uredi

IP se fokusira na pojam identiteta. Budući da većina programskih jezika predstavlja izvorni kod kao običan tekst, objekti su definisani imenima, a njihova posebnost mora da se izvlači od strane prevodioca. Na primer, ista simbolika imena može se koristiti za imenovanje različitih varijabli, procedura ili čak tipova. U kodu koji se proteže na nekoliko stranica - ili, za globalno vidljivim imenima, više datoteka - može da postane veoma teško reći na šta se simbol odnosi na koji stvarni objekat. Ako se naziv promeni,  gde se koristi kod mora pažljivo da se ispitivati.

Nasuprot tome, u IP sistemu, sve definicije ne samo dodeljuj simbolička imena, nego i jedinstvene privatne identifikatore za objekte. To znači da u razvojnom okruženju IP-a, svaka referenca na promenljivu ili proceduru nije samo ime - to je veza sa originalnim entitetom.

Najveća prednost ovoga je da ako je preimenovan entitet, sve reference na njemu u programu ostaju na snazi (poznat kao referencijalni integritet). To takođe znači da ukoliko se isti naziv koristi za jedinstvene definicije u različitim imenskim (kao što su ".to_string ()"), referencama sa istim imenom, ali različitim identitetom neće biti preimenovan, kao što se ponekad dešava s pretraživanjem/zameniti u tekućem uredniku. Ova funkcija takođe olakšava više-jezične verzije programa; može imati niz imena na engleskom jeziku za sve definicije, kao i niz imena na japanskom jeziku koji se mogu menjati po volji.

Imajući jedinstven identitet za svaki objekat definisan u programu takođe olakšava obavljanje automatsko pravljenje zadataka, kao i pojednostavljuje kod čekiranja u verzionisanom sistemu. Na primer, u mnogim sadašnjim kodovima za saradnju sistema (npr CVS), kada su dva programera počinila promene koje nisu usaglašene (odnosno ako jedan programer preimenuje funkciju dok je drugi menja jednu od linija u toj funkciji),  verzionisani sistem će misliti da je jedan programer stvorio novu funkciju, dok je drugi modifikovao staru funkciju. U IP-verziji sistema, on će znati da je jedan programer samo promenio ime, a drugi promenio kod.

Nivoi detalja uredi

IP sistemi takođe nude nekoliko nivoa detalja, omogućavajući programeru da "uveliča" ili "umanji". U gornjem primeru, programer može da umanji dat nivo koji će reći nešto kao:

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

Tako su IP sistemi samo-dokumentovani u velikoj meri, dozvoljavajući programeru da zadrži dobar visok nivo slike programa u celini.

Slični radovi uredi

Postoje projekti koji eksploatišu slične ideje da se stvori kod sa višeg nivoa apstrakcije. Među njima su:

Vidi još uredi

Refrence uredi

  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] Arhivirano na sajtu Wayback Machine (5. mart 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." Arhivirano na sajtu Wayback Machine (8. maj 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 Arhivirano na sajtu Wayback Machine (11. februar 2012)." Technology Review, January 8, 2007.

Spoljašnje veze uredi