Programowanie asynchroniczne - zupełnie nowa era

Programowanie asynchroniczne nie jest przyjemne. Każdy to wie. Nie dlatego że jest trudne bo można się wszystkiego nauczyć ale dlatego że kod jest nieczytelny jeżeli scenariusz wykracza poza 'Hello world'. Sam spędziłem lata pisząc rozwiązania bazowane na platformie Eclipse i moim najlepszym przyjacielem było 'asyncExec'. Jednak nawet pomimo tak przydatnych funkcji całość jest zwyczajnie nieczytelna. Pojawiło się jednak światło w tunelu - automatyczne przekształcanie kodu synchronicznego w asynchroniczny poprzez adnotacje dla kompilatora. Niestety nie jest to mechanizm dostępny w Javie ale i tak warto prezentację zobaczyć. To przyszłość każdego języka :)

Klasyczny program pisany jest imperatywnie. Komenda za komendą. Całość wywołuje się synchronicznie za pomocą jednego wątku. Jeżeli chcemy część pracy przekazać do innego wątku to musimy to jawnie napisać (stworzyć klasę anonimową np. Runnable, wywołać 'asyncExec' itp). Taki kod jednak szybko przestaje być czytelny. Trudno sobie wyobrazić czytelny kod z kilkoma zagnieżdżeniami. Nie wspominając już o obsłudze wyjątków czy wywołań zwrotnych itp. Szybko robi się z tego spagetti. Logika biznesowa w takim kodzie schodzi na plan dalszy a główne skrzypce gra tutaj aspekt techniczny kodu.

Czy to jedyna metoda? Wygląda na to że nie. Półtorej roku temu oglądałem materiały z PDC 2010 podczas których zapowiedziano iż MS pracuje nad wprowadzeniem obsługi asynchroniczności do jęzka C#. Temat wydał mi się diabelnie ciekawy ale zapomniałem o nim napisać. Wczoraj oglądając materiały z konferencji BUILD trafiłem na prezentację wersji finalnej która stała się podstawą nowego API Windows 8 (RuntimeRT).

O co chodzi? O to by programista mógł pisać zwyczajny kod wyglądający na synchroniczny ale kompilator potrafił przekształcić go w kod asynchroniczny bazowany na wywołaniach callback. Wygląda to niewiarygodnie. Można napisać metodę mającą 100 linii z czego np. 10 wywołań będzie wywołaniami asynchronicznymi. Kompilator rozbije taką metodą na serię metod zwrotnych. Nawet więcej można oznaczyć jakąś iterację że ma się wywołać równolegle a kolejna linijka kodu wykona się dopiero gdy przetworzone zostaną wszystkie elementy kolekcji. Całość sterowana dwoma prostymi słowami kluczowymi 'async' oraz 'await' umieszczanymi przy wywołaniu. To jest przyszłość jaką chciałbym kiedyś zobaczyć także w Javie.

Prezentację można zobaczyć na poniższym wideo. Poza wywołaniami asynchronicznymi architekt prezentuje jeszcze kilka innych ciekawych rozwiązań (np. pisanie programów które wywołują kompilator dodając nowe metody "w locie" które następnie ten kod wywołuje itp.). Całość jest imponująca



Mam nadzieję że Oracle znajdzie szybko porozumienie z Google i OpenJDK stanie się wspólną maszyną Javy wspieraną przez wszystkich producentów. Tak by język po kilku latach stagnacji znów rozwijał się tak szybko jak jeszcze 5 lat temu. Współpraca nad jedną wspólną maszyną wirtualną to konieczność by składnia języka dogoniła najnowsze trendy. Transformacja asynchroniczna w C# pokazuje że jeszcze sporo można zrobić na poziomie języka.

Prezentacja OSGi w JEE we Wrocławiu [Wrocław JUG]

Właśnie przeczytałem że jutro na Politechnice Wrocławskiej odbędzie się prezentacja "OSGI + J2EE". Została ona zorganizowana przez zespół R&D Eurobanku. Myślę że warto się na taką prezentację wybrać. W rozwinięciu przekleiłem informację ze strony JUG’a

--------------
Program prezentacji:
- Case study: System informatyczny z dużą liczbą rozwijanych jednocześnie obszarów
- Analiza potrzeby modularyzacji systemów informatycznych
- Przegląd i porównanie dostępnych technik modularyzacji w środowisku Java EE
- Wprowadzenie w kluczowe koncepcje OSGi
- Propozycja modelowej architektury łączącej zalety Java EE i OSGi
- Prezentacja praktycznego działania i architektury wielomodułowej platformy webowej

Politechnika Wrocławska (budynek B4)
Łukasiewicza 5
Sala 448

Zapisać można się poprzez stronę Wrocław JUG
--------------


Przy okazji jeżeli ktoś interesuje się tematem zachęcam do lektury książki "OSGi and Equinox". Czytałem ją rok temu i sporo mi wyjaśniła. Przy okazji jeżeli ktoś ma problemy z widocznoscią pakietów w trakcie integracji modułów to tutaj można znaleźć "niekonwencjonalne rozwiązanie":

http://deepdiveinto.blogspot.com/2010/06/jak-wamac-sie-do-obcego-bundla-w-osgi.html