JDK 7 – nowości podsumowanie

Po ponad dwóch tygodniach i 4 postach zapoznawania się z JDK 7, mogę się wreszcie pokusić o podsumowanie. Nowe JDK nie wprowadza rewolucji, nie wrzuca dużo nowości, jednak będzie miało wiele fajnych cech które naprawdę się przydadzą. Pisząc ostatnio trochę kodu łapałem się na tym, że w danym momencie przydałaby się mi jedna czy druga funkcjonalność z JDK7. Warto chyba było się z tym zapoznać i warto czekać i śledzić rozwój JDK7. Kilka najważniejszych według mnie zmian:

Read More

JDK 7 – nowości 4

Po przerwie świątecznej, wracamy do zapoznawania się z planowanymi nowościami w JDK7.
Dziś czas na zmiany w kliencie.

Klient

      • XRender pipeline for Java 2D

Dzięki temu Java2D będzie mogła lepiej wykorzystywać wsparcie z nowych kart graficznych. Wydaje mi się, że dotyczy to bardziej linuksa (i innych systemów gdzie wyświetlanie grafiki oparte jest na systemie X11). Podobne rozszerzenie dla Windows (korzystające z Microsoft Direct3D 9 API) jest już włączone w JDK 6u10.

      • Forward-port 6u10 deployment features

Powyższa rzecz unowocześnia (nowy sposób downloadu chyba) rozszerzenie które było zaimplementowane w jdk 6u10 – nie ma potrzeby przy uruchamianiu apletu/aplikacji WebStart na maszynie bez jdk ściągania całego JDK (15MB), ściągany jest na początku tylko “kernel” (2.5MB), następnie dociągane są te biblioteki które są potrzebne do uruchomienia tego programu, biblioteki są nieduże mają po około 1MB. Gdy wymagania programu są spełnione, jest on uruchamiany, a pozostałe biblioteki są dociągane w tle przez specjalny downloader.

      • Create new platform APIs for 6u10 graphics features

Chcesz mieć półprzezroczyste elementy lub okienka w Javie? Teraz jest to możliwe, co prawda wymaga pogrzebania w AWT, ale możesz nadawać dowolny stopień przezroczystości, możesz tworzyć okrągłe okienka, lub zaokrąglać krawędzie. Jest to już możliwe w JDK6u10, ale w JDK7 ma się pojawić nowe API (pewnie bardziej wygodne) do tego.

Krótkie wprowadzenie do tego co już jest zaimplementowane w JDK6u10

      • Nimbus look-and-feel for Swing

Kolejna nowość, która tak naprawdę została już zaimplementowana w JDK6u10. Nimbus to całkiem przyjemny, całkowicie wektorowy look&feel. Bardzo się według mnie nie różni od wyglądu Metal, ale jest trochę ładnych zaokrągleń, ładniejsze zakładki i paski przewijania. Dzięki wektorowości ma się bez problemów skalować (co dla mnie może być chyba jego największą zaletą ;) ).

      • Swing JLayer component

Włączenie do standardowego JDK biblioteki

JXLayer

    . Nowy komponent dekorator który umożliwia trochę więcej zabawy i graficznych ciekawostek. Polecam zobaczyć przykłady na stronie JXLayer.

Web

    • Update the XML stack

Upgrade JAXP, JAXB i JAX-WS APIs do najnowszych stabilnych wersji.

I to by było na tyle z nowości JDK7. Jak widać trochę tego jest, choć zmiany opisane dziś to przeważnie unowocześnienie nowych możliwości z JDK6u10. W następnym tygodniu spróbuję podsumować całość.

JDK 7 – nowości 3

I wracam po dwóch dniach choroby do zapoznawania się z nowościami w JDK7. Dzisiaj czas na podstawowe zmiany, czyli:

Core

    • Project Jigsaw – Modularyzacja

Projekty w Javie stają się coraz większe, samo JDK staje się ogromne. Stąd potrzeba modularyzacji. Podstawą do wdrożenia modułów w JDK ma być projekt Jigsaw
Korzysta on z wcześniej omawianego przez mnie JSR294 – czyli zmian w języku Java udostępniających modularyzacje JDK 7 nowości 2

W proponowanym rozwiązaniu ma się pojawić plik opisujący metadane modułu. Plik ten (nazwany module-info.java i umieszczony w podstawowym katalogu modułu) opisywałby zależności między tym modułem a innymi modułami. Mógłby mieć np. następującą składnie:

Nasz moduł M1 w wersji 1.0 dostarcza funkcjonalność modułu M2 (w wersji 2.0) i M3 (w wersji 3.0), do działania wymaga M4 (w wersji 4.0) i M5 (w wersji 5.0). Pozwala z siebie korzystać modułowi M6. Krótkie przeczytanie tego uzmysławia jaką fajną zabawkę dostaną wszyscy programiści – dzięki zdefiniowaniu konkretnych wymagań (w konkretnych wersjach), dzięki definiowaniu, że moduł dostarcza konkretnych funkcjonalności (w konkretnych wersjach) wszystkie biblioteki będą mogły łatwiej ze sobą współpracować. Będzie można łatwo zastosować “zamienniki” – implementacje innych autorów. Projekt Jigsaw nie będzie jednak wchodził do Oficjalnej Java SE 7 Platform Specification i może nie być wspierany przez inne (niż Sunowskie OpenJDK) JDK.

    • Poprawienie architektury class-loadera

takie poprawienie ClassLoader API aby uniknąć deadlocków, nie zmieniając istniejącego kodu korzystającego z ClassLoadera.

    • Metoda close w URLClassLoader

Dodanie metody close() w klasie URLClassLoader. Dzięki temu łatwo będzie można skorzystać z Automatic Resource Management (JDK 7 nowości 2).

    • Unicode 5.1
    • JSR166y

Nowa biblioteka/framework wspierający i ułatwiający korzystanie z współbieżności w Javie z ParallelArrays.

    • JSR 203: Nowe I/O APIs dla Javy (NIO.2)

Jest to rozszerzenie istniejących już rozwiązań. Umożliwia np.

      1. łatwe kopiowanie:

      • Obsługę atrybutów pliku, obsługę symbolicznych linków:

      • Obsługę katalogów jako strumieni:

      • Dodatkowe rzeczy w Socket Channel API
      • Asynchroniczne API w dostępie do plików jaki i socketów
      • SCTP i SDP dla Solarisa
      • I trochę innych jeszcze nowości
    • Elliptic-curve cryptography (ECC)

Implementacja ECC którą będzie częścią standardową JDK 7
Uff. Trochę tego jest ale nie są to (poza projektem Jigsaw) tak bardzo interesujące rzeczy.
c.d.n.

JDK 7 – nowości 2

Ciągniemy dalej nasze zapoznawanie się z JDK7. W dzisiejszym odcinku to co wszystkich dotyczy i interesuje chyba najbardziej, czyli zmiany w języku Java.

Zmiany w języku Java

  • JSR 294: Wsparcie w języku i JVM dla programowania modułowego

Moduły (czyli “superpackage” jak były nazywane na początku) zwiększają możliwości kontroli dostępu dla obiektów. Do tej pory jeżeli budowaliśmy jakieś biblioteki które składały się z wielu pakietów deklaracja dostępu “package” ograniczała nas tylko do pakietu i jego podpakietów. A jeżeli chciało się sięgnąć między dwoma równoległymi “podpakietami” trzeba było deklarować to jako “public” czyli udostępnić też na zewnątrz biblioteki. Moduły pomogą to rozwiązać przez nowe słowo kluczowe “module”, które będzie występowało w pliku przed definicją “package”. Do tego będzie można zastosować nowy modyfikator dostępu “module”. Będzie to ciekawe wsparcie dla systemów modułowych jak OSGI czy Jigsaw. Więcej można poczytać tu:

http://blogs.sun.com/abuckley/resource/JSR294AndModuleSystems.pdf

  • JSR308 – rozszerzenie annotacji

Od JDK7 annotacje zyskają dodatkowy wymiar, będzie je można używać w wielu nowych miejscach. Popatrzmy na możliwości np:

  • Project Coin – czyli małe zmiany w języku Java ułatwiające prace

Tak jak w wcześniejszym poście pisałem są to małe zmiany w języku Java zaproponowane przez programistów.

  • Używanie String w instrukcji switch

  • Automatic Resource Management

To już ciekawostka – automatyzacja zamykania strumieni (lub innych zasobów z metodą close). Do tej pory przy zasobach należało pilnować zamknięcia w finally. np:

W propozycji rozszerzamy instrukcje try przez umożliwienie jej przyjęcia zmiennych lokalnych z interfejsem Disposable, który deklaruje metodę close(). Ta metoda będzie automatycznie wywołana przy wychodzeniu z try.

  • Notacja diament (“diamond”)

Uproszczenie składni:

  • Małe zmiany w składni stałych numerycznych: podkreślnik i zapis binarny

  • Uproszczenie składni Map i List

Propozycja przewiduje uproszczenie składni dla Map i List przez dodanie możliwości odnoszenia się do nich jak do tablic za pomocą nawiasów kwadratowych.

  • Dynamiczna Java, wsparcie dla JSR292

Wsparcie w Javie dla dynamicznych typów przez specjalny interfejs java.dyn.Dynamic. Umożliwi łatwiejszą integracje z językami dynamicznymi.

  • Project Lambda – czyli domknięcia (“closures”)

Tak, tak, tak ;) Więcej o tym:

http://blogs.sun.com/mr/entry/closures

      i

http://blogs.sun.com/mr/entry/closures_qa

Uff.. trochę tego jest – a dopiero zbliżam się do połowy zmian w JDK7.
Nie wszystkie te zmiany na pewno wejdą do JDK7, część (dwa ostanie punkty Project Coin i Project Lambda) jeszcze nawet nie są przypisane do odpowiednich Milstonów (choć część rzeczy z Project Coin jest już zaimplementowana, nie wiem jak z domknięciami). Część rzeczy nawet jeżeli już zaimplementowana i wdrożona może jeszcze w czasie testów wylecieć…

JDK 7 – nowości 1

Pisałem ostatnio, że jestem rozczarowany zmianami w najnowszym JDK które będzie wydane. Chyba nie zgłębiłem dostatecznie tematu. Zaprezentowane przez mnie nowości okazały się tylko fragmentem całości, a dokładnie jednym z projektów zaczętych przez Sun-a pod nazwą “Project Coin”. W ramach tego projektu każdy programista mógł wysłać formularz z drobnymi zmianami jakie są potrzebne w języku Java. Zaprezentowane w poprzednim poście zmiany są właśnie wybranymi zmianami które będą wprowadzone.

Oprócz tych zmian szykuje się trochę innych. Najlepsze informacje można znaleźć na stronie http://openjdk.java.net/projects/jdk7/features/, a pewne kalendarium na podstawie którego można przewidywać kiedy pojawi się finalna wersja jest dostępne pod http://openjdk.java.net/projects/jdk7/milestones/.

Ponieważ temat jest dość ciekawy postaram się zerknąć i zapoznać z zmianami jakie szykuje nam JDK7. W końcu trzeba być gotowym na zmiany :)

Zmiany w VM

  • Kompresja 64bitowych wskaźników

Coraz większe programy w Javie wymagają coraz więcej pamięci. Dla przyśpieszenia wersji 64bitowych wymyślono kompresję wskaźników 64bitowych do 32bitowych. Powinno to przyśpieszyć jave na 64bitach.

  • Garbage First (G1)

Nowy garbage collector. W tym momencie w jdk używany jest gc o nazwie CMS, dość sprytnie dzielący obiekty w javie na takie które będą długo w pamięci i takie które są tylko krótkoterminowe. Niestety wymaga on częstych “stop-the-world”, czyli przerw w pracy aplikacji… Nowy gc o nazwie “Garbage First” (G1) ma zminimalizować fragmenty “stop-the-world” czyli nasze aplikacje będą chodziły bardziej płynnie.

  • Zmiany w JVM ułatwiające/przyśpieszające działanie języków innych niż Java

Chodzi o wprowadzenie pewnych zmian w maszynie wirtualnej (JVM), które ułatwiłyby działanie języków dynamicznych i skryptowch. JVM była projektowana dla Javy, więc w wielu miejscach kompilatory języków dynamicznych muszą stosować czasochłonne obejścia. Rozszerzenie JVM o kilka nowych możliwości mogłoby mocno przyśpieszyć inne języki korzystające z JVM. Brzmi bardzo zachęcająco zwłaszcza, że zaczynam się uczyć Grooviego ;) Ale chyba nie będziemy z tego mogli korzystać od razu, gdyż wymagana jest zmiana w JDK, upowszechnienie się nowego JDK, a następnie zmiany w kompilatorach tych języków. Choć patrząc na tempo rozwoju języków skryptowych, można mieć nadzieję, że nie będzie trzeba czekać aż tak długo.

Ciąg dalszy w następnym poście – mam nadzieję, że jutro znajdę czas :)