• Nie Znaleziono Wyników

A 3.4 Uniwersum programowania (bardzo)wysokopoziomowego

! 2 czerwca 2014 roku podczas swojej największej dorocznej imprezy Worldwide Developers Conference firma Apple zaprezentowała nowy język programowania: Swift przeznaczony do tworzenia softwaru na platformy tego producenta (systemy operacyjne MacOS oraz iOS). Dotychczas tworząc programy na urządzenia firmy z Cupertino należało korzystać z dostarczonego przez nią wariantu języka Objective-C.!

!

! Kiedy założona w 1985 przez odsuniętego od Apple Stevena Jobsa roku firma NeXT w drugiej połowie lat dziewięćdziesiątych ubiegłego stulecia została wykupiona przez przedsiębiorstwo z jabłkiem w logo - poza osobą swojego CEO wprowadziła ona do nowej firmy-matki swoje oprogramowanie (system operacyjny NeXTSTEP), które stało się potem zalążkiem dla iOS'a i MacOS X. Było ono zaprogramowane w oparciu o rozwiązania charakterystyczne dla paradygmatu obiektowego (o którym szerzej w następnym rozdziale) przy użyciu nowoczesnego na ówczesne czasy języka objective-C stanowiącego rozszerzenie klasycznego i doskonale znanego C o wzorowane na Smaltalku właściwości obiektowe. Jednak okazało się, że niewiele dużych firm i organizacji również adaptowało ten język jako swoje główne narzędzie. Z punktu widzenia Apple nie było to zbyt wielkim problemem ze względu na wysoką spójność całego ekosystemu firmy (własne systemy + autorskie platformy + samodzielnie rozwijane narzędzia deweloperskie). Z perspektywy programistów natomiast rzecz nie była najwygodniejsza, szczególnie jeśli ktoś nie specjalizował się wyłącznie w oprogramowaniu dla Apple. Spójność i konsekwencja w budowaniu produktu pozwoliła jednak na utrzymanie się objective-C jako języka przez bardzo długi czas pomimo jego malejącej

atrakcyjności. Czasy jednak uległy zmianie, a wraz z nimi podejście twórców oprogramowania do narzędzi i wymagania wobec nich stawiane. Mechanizm tych zmian jest dla nas szczególnie interesujący z perspektywy refleksji z zakresu studiów nad oprogramowaniem. !

!

! Swift generalnie jest językiem nabudowanym na dotychczasowych narzędziach developerskich Apple. To znaczy, że z punktu widzenia zaawansowanego programisty, szczególnie doświadczonego w pracy z objective-C wprowadzone zmiany nie będą wydawać się drastyczne. Stanowi on jednak - zgodnie ze współczesnym wektorem zmian w świecie technologii - wyciągnięcie ręki w stronę użytkowników, którzy chcą stać się twórcami. Sami autorzy nazywają Swifta "objective-C bez obciążeń wynikających z C" , 42 które osobie niezaangażowanej mogą się wydać trudne i niepotrzebne. Edytor dostarczany w pakiecie Xcode 6 zawiera również narzędzie nazwane Playground, które pozwala na dynamiczne testowanie czy wręcz - jak sugeruje nazwa - zabawę tworzonymi aplikacjami.!

!

!

Ilustracja 32: Swiftowy Playground(

( !

!

wypowiedź Craiga Federighi szefa działu Software Engineering w Apple podczas pierwszej prezentacji

42

Swifta na Apple Special Event WWDC 2014

! Chris Lattner, jeden z twórców Swifta napisał na swoim blogu: "Mam nadzieję, że czyniąc programowanie bardziej przystępnym i zabawnym dotrzemy do nowego pokolenia programistów i pomożemy przedefiniować myślenie o informatyce." !43

!

! Wysokopoziomowość języka stworzonego przez Apple - działanie w wysokich stopniach abstrakcji, przyjazne procesowi myślowemu i twórczemu programisty pozostaje jednak w dalszym ciągu "przyjazna maszynie". Kod źródłowy stworzony w Swifcie kompiluje się i jest realizowany równie szybko (a czasem nawet z większą efektywnością) co generowany przez dotychczasowe rozwiązania. Wydaje się, że to jeden z ważniejszych kierunków ewolucji języków programowania - w stronę zatarcia różnicy między użytkownikiem a programistą. Oczywiście omawiany język nie robi tego całkowicie - aby tworzyć w nim programy nadal potrzebna jest solidna wiedza informatyczna - nie mniej jednak fakt, że jeden z największych "graczy" rynku komputerowego decyduje się na

"odhermetyzowanie" swojego podstawowego narzędzia świadczy o kierunku w jakim rozwija się technologia. !

!

! Jeszcze wyraźniej kwestia ta unaocznia się w przypadku innego, stosunkowo nowego i innowacyjnego projektu jakim jest Wolfram Language należący do ekosystemu projektów Wolfram Research obejmującego m.in. oprogramowanie Mathematica, Wolfram Programming Cloud, silnik wiedzy (knowledge engine) Wolfram Alpha i wiele innych narzędzi. Stephen Wolfram - fizyk i matematyk, autor systemu algebry komputerowej to osoba, która stoi za tym przedsięwzięciem. W swojej kontrowersyjnej książce A new kind of science postuluje on modelowanie złożonych systemów obserwowalnych w naturze za pomocą prostych programów komputerowych, które radzą sobie z tą problematyką lepiej niż "zwykła" matematyka. Projekt Wolfram Language stanowi gest w tym kierunku.

Skonstruowany w kierowanej przez fizyka grupie badawczej system jest niezwykły pod wieloma względami - opracowano go tak aby obejmował jak najszerszy zakres informacyjnej rzeczywistości (jest wieloparadygmatowy, wieloplatformowy, pozwala na włączanie gigantycznych baz wiedzy, algorytmów itd.) oraz by funkcjonował na tak wysokim poziome abstrakcji jak to tylko możliwe. Oznacza to, że jego składnia stara się naśladować język naturalny, a sam kod na poziomie programistycznym w żaden sposób nie odnosi się do hardwaru, na którym ma być realizowany. Prezentowany na stronie

http://www.nondot.org/sabre/ (dostęp 1.07.2014)

43

internetowej projektu przegląd właściwości języka (principles and concepts) wymienia 44 cechy, które w większości są unikatowe dla Wolfram Language:!

!

-

knowledge based programming zakłada wykorzystanie tak dużej bazy wiedzy informatycznej jak to tylko możliwe, środowisko WA posiada np. wbudowaną imponującą bazę gotowych algorytmów;!

-

automatyzacja, łączy się z poprzednią kwestią: chodzi o to, żeby korzystać z jak najszerszego repozytorium gotowych rozwiązań; !

-

koherencja oznacza, że pisząc kod zgodny ze specyfikacją nie musimy zwracać uwagi na zgodność typów czy współpracę różnych konstrukcji programistycznych; jeśli napisaliśmy poprawny kod w Wolframie - będzie on działał; !

-

cały język jest zbudowany na wyrażeniach symbolicznych - dane, formuły, kod, grafika, dokumenty: każdy z tych obiektów ma w nim tego rodzaju reprezentację co pozwala na elastyczne manipulowanie zarówno strukturami jak i zawartością; !

-

jedną z najbardziej interesujących kwestii jest fakt, że w omawiany system pozwala odnosić się kodem do modelu świata rzeczywistego w bardzo intuicyjny sposób;

możemy używać danych geolokacyjnych, jednostek miar i wag, a także wzorców opisujących miliony konkretnych przedmiotów (!); !

-

Wolfram Language w sposób niespotykany pozwala na wprowadzenie wyrażeń języka naturalnego do kodu źródłowego (!), nie tylko na zasadzie pojedynczych wyrażeń-kluczy (typu polecenie "write"); !

!

! Wziąwszy pod uwagę wymienione powyżej cechy, możemy bezpiecznie nazwać Wolfram Language językiem bardzo wysokiego poziomu - samo twórcy jako jedno z jego zastosowań podają ultra-high level scripting. Przykładowy kod w nim realizowany może wyglądać następująco : !45

!

gameOfLife = {224, {2, {{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}}, {1, 1}};

board = RandomInteger[1, {50, 50}];

Dynamic[ArrayPlot[board = Last[CellularAutomaton[gameOfLife, board, {{0, 1}}]]]]

!

wygeneruje nam, znany już z poprzednich rozdziałów automat Gry w Życie. Pierwsza linia kodu implementuje reguły obowiązujące w conwayowskim układzie, druga generuje siatkę

http://www.wolfram.com/language/principles/ (dostęp 1.08.2014)

44

źródło: dokumentacja na stronie http://www.wolfram.com/language (dostęp 1.08.2014)

45

50x50 wypełniając ją losowymi liczbami naturalnymi z zakresu 0 do 1 (czyli zerami i jedynkami), trzecia "rysuje" dynamiczny układ. Jak widać program, którego implementacja w Processingu zajmuje co najmniej kilkadziesiąt linii kodu tutaj zredukowana została do trzech, co daje wyobrażenie na temat siły ekspresyjnej języka i czyni go niezwykle ciekawym narzędziem do szybkiego prototypowania. Wolfram Language nadaje się również wyśmienicie do przetwarzania i wizualizacji informacji zawartych w różnego rodzaju źródłach (dokumentach, bazach danych, obrazach etc). !

!

! Co ciekawe pomimo dużych możliwości WL nie należy do najpopularniejszych języków programowania. Prawdopodobnie wynika to z faktu, że świat IT upodobał sobie specjalizację i nadmierna elastyczność - tak jak w przypadku Lispu - może początkowo wydawać się czymś nie do końca pożądanym. Duzi producenci oprogramowania ze silną nieufnością spoglądają na projekty, które wprowadzają potężne, rewolucyjne wręcz zmiany w bardzo krótkim czasie - pojawiają się pytania o stabilność i skalowalność tego rodzaju rozwiązań. Dlatego takie firmy jak Apple wolą na razie rozwijać swoje narzędzia ostrożniej - tak jak to miało miejsce z wprowadzeniem Swifta, który został zaproponowany jako standard równolegle z objective-C, a nie zamiast niego. Daje to wyspecjalizowanym programistom czas na zapoznanie się z nowym zjawiskiem, nie odcinając ich od aktualnie zdobytego doświadczenia - nowi twórcy oprogramowania zaś, zgodnie z przewidywaniami, zaczną naukę od razu od nowego języka, wchodząc od razu do uniwersum wyższego poziomu. Wolfram Language, ponieważ nie jest związany z żadną fizyczną platformą ani nie "ciągnie za sobą balastu" w postaci już zaimplementowanych rozwiązań biznesowych, które muszą być wspierane dla ciągłości i spójności ekosystemu - może być futurystycznym skokiem naprzód, do którego reszta świata być może za jakiś czas dołączy. Tak czy inaczej wydaje się, że programowanie (bardzo) wysokopoziomowe to przyszłość rozwoju technologii informatycznych. Jest bardzo prawdopodobne, że w niedługim czasie wszyscy będziemy oprogramowywać nasze wszechobecne urządzenia komputerowe (w postaci samochodów, inteligentnych domów) stosując dostosowane do wiedzy informatycznej zwykłego użytkownika "klocki", będące tak naprawdę gotowymi fragmentami kodu i algorytmami. !

! !

!

Αναλυτικά 4: Paradygmaty programowania.