piątek, 31 lipca 2009

Revenge of the Modelers !

Jeśli nie lubicie modelowania to mam dla was złe wiadomości… poniżej. Najpierw małą dygresja.

Wakacje wakacjami, jednak przygoda z Erasmusem kończy się dla mnie ich brakiem (przynajmniej do września). Szkoda, bo dzieje się dużo. Moda na nowe języki jak Groovy, Scala czy nawet Clojure jest w pełni... I choć uważam Scala za nie najlepszy język to i tak pewnie będę się go uczył bo
a) jest statycznie typowany z inferencją typów i domknięciami
b) Java 1.7 domknięć nie będzie mieć
c) Groovy jest wyłącznie dynamicznie typowany
d) Fan jest fajny, ale stara się za bardzo być wieloplatformowy, a ja chcę po prostu lepszą Java, chociaż...

No i dalej nie ma dobrego języka na JVM!

Ps.:
Lepsze wsparcie dla Groovy w Eclipse
http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/
Cywilizowane wymienienie czym Fan się wyróżnia
http://fandev.org/sidewalk/topic/675

Wracając do tematu,
Jakiś czas temu wyszedł Eclipse 3.5 - http://eclipse.org/galileo/projects.php. Jeśli ktoś przeglądnie listę projektów, to zauważy 17 linków do projektów związanych ściśle z modelowaniem. W Galileo mamy nowe wersje między innymi: Acceleo, ATL, EMF, CDO, JET2, GMF, OCL, Net4J, UML2, Teneo, QVTo, Xpand i Xtext. To nie wszystkie ciekawe projekty z działu modelowanie.

Przyszły Eclipse 4 jest w całości oparty na modelach, wersja alfa (e4 0.9) jest dostępna do testów. E4 to między innym model Workbench (perspektywy, komendy, okienka, to wszystko jest modelem, który można w dowolnym momencie zmienić), deklaratywne SWT -> XWT (taki odpowiednik HTML ale dla SWT, czyli kopia XAML), port SWT na Flash(Flex właściwie) ze wsparciem Draw2D więc, definiowanie wyglądu aplikacji SWT za pomocą CSS, wsparcie dla "dowolnego" języka przy pisaniu pluginów (JavaScript z pudełka), wsparcie dla DI wbudowane w platformę. Nowa platforma ma też zmiany w swoich wnętrznościach i właściwie nie widzi różnicy w tym, czy działa przez web, czy działa stacjonarnie, czy lokalnie, czy rozproszona :)
http://download.eclipse.org/e4/downloads/drops/R-0.9-200907291930/e4-news-all.html

Eh, i pojawia się problem - coraz więcej projektów Eclipse jest oparta lub wykorzystuje EMF (Eclipse Modeling Framework), a  jest spory problem w tłumaczeniu co ta biblioteka właściwie robi. Nawet jej twórcy nie bardzo wiedzą jak ją sprzedać. No bo jeśli powiem komuś, że jest to meta metamodel z mapowaniami do Java(generacja kodu), XML Schema i UML to
a) przesadnie uproszczę temat i pominę dużo
b) słuchający ucieknie z krzykiem jak usłyszy "meta metamodel" i "generacja kodu"

Modele już nie czają się w krzakach. One atakują. Nowe projekty jak Microsoft Oslo i Quadrant, Eclipse Modeling Framework z Xtext i starym GMF, czy JetBrains MPS znalazły nową broń marketingową - DSL.

EMF nie zna litości, gdy ma się stworzony model, to nie dość, że można go bez problemu zapisać w pliku XML o dość dowolnej strukturze, to można go zapisać w pliku XMI, który każde narzędzie wspierające EMF potrafi otworzyć i edytować. Co gorsza taki model może być zapisany w zwykłym pliku tekstowym(XText), który wygląda jak nie pozorny język lub konfiguracja i jest czytelniejszy niż kod albo XML! Może też być obrazkiem jak diagram klas, albo encji(GMF). EMF również kpi sobie z baz danych i pozwala bez dodatkowej pracy się w nich przetrzymywać (Teneo, CDO),  jeśli chce to nawet można zmienić zasady zapisu do bazy danych za pomocą Hibernate lub EclipseLink i ich mapowań. EMF ignoruje fakt, że pamięć jest ograniczona, a użytkownicy rozproszeni. Pozwala pracować na modelach większych niż dostępny ram, na dodatek w dowolnej lokalizacji, wielu użytkownikom równocześnie (CDO). Aplikacja E4 RCP mogłaby mieć model UI trzymany na serwerze i wtedy można by go zdalnie zmienić, a wszyscy użytkownicy systemu natychmiast mogli by zobaczyć zmiany w swoim interfejsie!

Ciężkie czasy idą ;)

2 komentarze:

Paweł Badeński pisze...

No a czemuż to uważasz Scalę za nie najlepszy język ? ;)

Krzysiek pisze...

Hm, by to wytłumaczyć potrzeba trochę dłuższej dyskusji. W skrócie, to Scala wnosi za mało zmian semantycznych by uzasadniać tak duże zmiany syntaktyczne, tworząc zupełnie inny język. Jednocześnie stara się być w pełni z Java kompatybilna. To jest nie konsekwentne. Plus parę innych drobiazgów.