Programowanie według intencji – Wikipedia

before-content-x4

W programowaniu komputerowym, Programowanie według intencji (PPI, po angielsku celowe programowanie W Ip ) to paradygmat programowania, który pozwala kodom źródłowym oprogramowania precyzyjnie odzwierciedlać intencję programisty podczas projektu. Szanując poziom abstrakcji myśli programisty, przegląd i konserwacja programów komputerowych stają się łatwiejsze, ponieważ czytelnik kodu źródłowego nie musi już rozumieć zakładu, niż deweloper postanowił wiedzieć, co powinien zrobić program.

after-content-x4

Koncepcja została wprowadzona przez Charlesa Simonyi podczas prowadzenia zespołu w Microsoft Research. Jego grupa opracowała zintegrowane środowisko programistyczne o nazwie PPI który pokazuje tę koncepcję. Z niejasnych powodów [[[ Pierwszy ] , Microsoft przerwał rozwój PPI Na początku 2000 roku.

Prezentacja programowania według intencji jest dostępna w rozdziale 11 książki Programowanie generatywne: metody, narzędzia i aplikacje , de Krzysztof Czarnecki et ulrich eisenecker [[[ 2 ] .

Jak przewiduje Simonyi, opracowanie nowej aplikacji za pośrednictwem paradygmatu programowania według intencji postępuje w następujący sposób. Programista najpierw tworzy zestaw narzędzi specyficzny dla pola danego problemu (na przykład ubezpieczenie na życie ). Eksperci w tej dziedzinie, pomagali programista, a następnie opisują planowane zachowanie aplikacji w sposób „to, co widzisz, to, co dostajesz” (w języku angielskim: Wysiwyg). Podsumowując, zautomatyzowany system używa opisu programu i przybyszu do wygenerowania ostatecznego programu. Kolejne zmiany są wprowadzane tylko na poziomie „takiego wyświetlacza, takiego jak wynik” (WYSIWYG), przy użyciu systemu o nazwie „Warsztaty domeny” (w języku angielskim: domena robocza) [[[ 3 ] .

Przechowywanie kodu źródłowego i separacja prezentacji [[[ modyfikator |. Modyfikator i kod ]

Główną zaletą PPI (i prawdopodobną przeszkodą dla jego akceptacji przez społeczności programistów) jest to, że kod źródłowy nie jest przechowywany w plikach tekstowych, ale w pliku binarnym właściciela, który przypomina XML. Podobnie jak w przypadku XML, nie ma potrzeby konkretnego analizatora składniowego dla każdego fragmentu kodu, który powinien działać na informacjach tworzących program, obniżając barierę w pisaniu narzędzi analizy lub narzędzi restrukturyzacji. Film pokazuje, w jaki sposób system manipuluje językami, które używają preprocesora na podstawie tekstu poprzez badanie konkretnych zastosowań makr w zbiorniku kodu w celu wymyślenia bardziej higienicznej abstrakcji.

Ścisła integracja wydawcy z formatem binarnym wprowadza do kodu źródłowego jedne z najładniejszych funkcji normalizacji baz danych. Redundancja jest eliminowana, podając każdą definicję zidentyfikować Unikalne i przechowując nazwy zmiennych i operatorów w dokładnie unikalnym miejscu. Oznacza to, że łatwiej jest również rozróżnić wewnętrznie między sprawozdania A odniesienia, następnie środowisko pokazuje typ w typu odważnym. Przestrzeń nie jest również przechowywany jako element kodu źródłowego, a każdy programista pracujący nad projektem może wybrać wyświetlanie wcięcia źródła, jak preferuje. Bardziej radykalne wizualizacje obejmują wyświetlanie stwierdzeń deklaracji jako zagnieżdżonych podprogramów, edytując Wyrażenia warunkowe Podobnie jak drzwi logiczne lub ponowna reprodukcja nazw w języku chińskim.

after-content-x4

Projekt wydaje się normalizować rodzaj schematu XML dla popularnych języków, takich jak C ++ i Java, pozostawiając użytkownikom mieszankę środowiska i połączenie tego z pomysłami Eiffla i innych języków. Często wspomniane w tym samym kontekście co Programowanie zorientowane na język Dzięki dedykowanym językom i programowaniu zorientowanym na wygląd PPI twierdzi, że zapewnia przełom w Programowanie generatywne . Techniki te pozwalają programistom rozszerzyć środowisko językowe, aby uchwycić konstrukcje specyficzne dla tej domeny bez inwestowania w pisanie kompletnego kompilatora i wydawcy każdego nowego języka.

Program w Javie, który zapisuje liczbę od 1 do 10, przy użyciu składni z nawiasami programowymi, może być taki:

for (int i = 1; i <= 10; i ++)
{
   System.out.println („liczba to” + i);
} 

Powyższy kod zawiera zamówienie wspólne dla większości języków programowania, pętla, w tym przypadku reprezentowana przez Do . Kod po skompilowaniu, połączeniu i wykonaniu ukończy 10 razy, zwiększając w ten sposób wartość zmiennej I Z każdą iteracją tuż po wydrukowaniu.

Jednak ten kod nie rozumie intencje programisty, a mianowicie „liczby drukowania od 1 do 10”. W tym prostym przykładzie programista może najprawdopodobniej odgadnąć, jaki jest cel programu bez zbytniego wysiłku, ale nie zawsze jest to tak proste. Lurki rozciągające się na wiele linii, widząc strony, mogą stać się bardzo złożone do zrozumienia, zwłaszcza jeśli programista nie używa nazw istotnych zmiennych. Tradycyjnie jedynym sposobem wskazania celu kodu jest dodanie komentarzy do kodu źródłowego, ale często nie są one dodawane lub nie są jasne, lub istnieje różnica synchronizacji z kodem źródłowym, który początkowo ma wyjaśnić .

W umyślnych systemach programowania pętla widoczna powyżej może być reprezentowana na pewnych poziomach, jak coś tak oczywistych jak " Drukuj liczby 1 do 10 ». System użyłby wówczas zamiarów do generowania kodu źródłowego, prawdopodobnie tworząc wcześniej coś bardzo podobnego do widoku kodu. Główną różnicą w umyślnych systemach programowania polega na tym, że utrzymują one poziom semantyczny, nieobecny w samym kodzie źródłowym, co może znacznie ułatwić czytelność długich programów.

Chociaż większość języków zawiera mechanizmy przechwytywania niektórych rodzajów abstrakcji, PPI, takie jak rodzina języka LISP, pozwala na dodanie zupełnie nowych mechanizmów. Tak więc, jeśli programista zaczął od języka takiego jak język C, byłby w stanie rozszerzyć język o funkcje takie jak w C ++ bez oczekiwania na dodanie twórców kompilatora. Analogicznie znacznie mocniejsze mechanizmy ekspresji mogą być stosowane przez programiści niż proste klasy i procedury.

Zidentyfikować [[[ modyfikator |. Modyfikator i kod ]

PPI koncentruje się na koncepcji tożsamość . Ponieważ większość języków programowania reprezentuje kod źródłowy w formacie tekstowym, obiekty są zdefiniowane według nazwy i ich unikalnego znaku, który musi być wydedukowany przez kompilator. Na przykład ta sama symboliczna nazwa może być używana dla różnych nazw zmiennych, procedur, a nawet typów. W kodzie, który rozciąga się na kilka stron - lub na wielu plikach dla ogólnie widocznych nazw - może być bardzo trudno powiedzieć, który symbol odnosi się do obecnego obiektu. Jeśli nazwa zostanie zmodyfikowana, kod, w którym jest używana, musi zostać dokładnie zbadany.

Z drugiej strony, w systemie PPI, wszystkie definicje przypisują nie tylko nazwy symboliczne, ale także prywatne i unikalne identyfikatory dla obiektów. Oznacza to, że w opracowywaniu PPI za każdym razem, gdy odnosisz się do zmiennej lub procedury, która nie jest tylko nazwą - istnieje link do pierwotnej jednostki.

Główną zaletą tej sytuacji jest to, że jeśli zmienisz nazwę jednostki, wszystkie odniesienia w programie są zmieniane automatycznie. Oznacza to również, że jeśli używasz tej samej nazwy dla unikalnych definicji w różnych przestrzeniach nazwy (takich jak " .to_string () ), Nie będziesz w stanie zmienić nazwy złych odniesień, jak to jest czasem w przypadku funkcji wyszukiwania/wymiany w obecnych wydawcach. Ta funkcja ułatwia także posiadanie wielu wersji programu. Możesz mieć zestaw angielskich nazwisk dla wszystkich swoich definicji, a także serię japońskich nazwisk, które można odwrócić w woli.

Posiadanie unikalnej tożsamości dla każdego obiektu zdefiniowanego w programie jest również ułatwiające zautomatyzowane zadania odnawiania, a także uproszczenie rejestracji kodu w Systemy kontroli wersji . Na przykład w wielu aktualnych systemach współpracy kodowania (na przykład CVS ), Gdy dwóch programistów potwierdza modyfikację, która jest w konflikcie (na przykład: jeśli programista zmienia nazwę funkcji, a drugi modyfikuje wiersze tej funkcji), system wersji będzie myślał, że programista tworzy nową funkcję, a inny modyfikuje stare funkcjonować. W systemie wersji PPI będzie wiedział, że programista po prostu zmienił nazwę, podczas gdy inny zmienił kod.

Poziom szczegółów [[[ modyfikator |. Modyfikator i kod ]

Systemy PPI oferują również kilka poziomów szczegółowości, umożliwiając programistę „powiększanie” lub „dézoomer”. W poniższym przykładzie programista może powiększyć, aby uzyskać poziom, który powiedziałby coś takiego:

< > 

Tak więc systemy PPI są L'Auto-Documentation W dużej mierze, co pozwala programistowi utrzymać dobry wysoki poziom widoku całego programu.

Istnieją projekty, które wykorzystują podobne pomysły, aby stworzyć kod o wyższym poziomie abstrakcji. Wśród nich znajdujemy:

  1. „Simonyi chciała wykorzystać swój pomysł z laboratorium i umieścić go przed obsługą klienta. Wyjaśnia, że ​​był nierealny, podczas gdy Microsoft dokonał ogromnych postępów w krótkim okresie. , powiedz klientom, że nie był to właściwy sposób robienia rzeczy (...) '" ' http://www.technologyreview.com/Infotech/18021/page4/» ( Archive.org• • Wikiwix• • Archive.is• • Google• Co robić ?) (Cytat z „Część II: coś, co możesz zrobić, mogę to zrobić meta: Space Tourist i miliarder programista Charles Simonyi zaprojektował Microsoft Office. Teraz chce przeprogramować oprogramowanie.”] Wtorek, 9 stycznia 2007 r., Scott Rosenberg, Przegląd technologii w Massachusetts (MIT) Institute of Technology (MIT).)
  2. Addison-Wesley, Reading, MA, USA, Juin 2000.
  3. Scott Rosenberg: " Wszystko, co możesz zrobić, mogę zrobić meta . " Massachusetts (MIT) Review Technology Institute of Technology Institute (MIT) , 8 stycznia 2007

osoba mówiąca po angielsku [[[ modyfikator |. Modyfikator i kod ]

Frankofony [[[ modyfikator |. Modyfikator i kod ]

after-content-x4