Prowadzący: Tomasz Jędrzejewski
Warsztaty bez czegoś o kompilacji/interpretacji to nie warsztaty. Tym razem wyjdziemy poza akademickie rozważania i przyjrzymy się budowie i działaniu chyba najbardziej znanej maszyny wirtualnej świata - Java Virtual Machine stanowiącej serce języka Java, ale nie tylko.
Czego się dowiesz?
W trakcie trzydniowego bloku przyjrzymy się szczegółowo architekturze JVM, strukturze kodu bajtowego Javy, a także mechanizmom i technikom stosowanym w rzeczywistych implementacjach związanym z wykonywaniem, optymalizacją oraz bezpieczeństwem. Dowiemy się m.in.:
- dlaczego Java już nie jest tak powolna, jak kiedyś i dlaczego nie zawsze jest tak szybka, jak kod maszynowy,
- jak działają wydajne algorytmy odśmiecania pamięci,
- ile tak naprawdę jest procent kodu bajtowego Javy w kodzie bajtowym Javy,
- dlaczego aplety umieszczane na stronach internetowych nie zagrażają naszemu komputerowi i dlaczego zagrażają, jeśli twórcą naszej implementacji maszyny wirtualnej jest Microsoft :)
- jak ręcznie hackować kod bajtowy JVM?
Warsztaty będą mieć charakter praktyczny. Po krótkim teoretycznym wprowadzeniu do architektury maszyny wirtualnej pozostałe aspekty i właściwości będziemy poznawać, pisząc niewielkie programiki do hackowania kodu bajtowego oraz zajeżdżania JVM, oraz obserwując efekty działania. Będzie sporo miejsca na dyskusje, analizy i pytania.
Poziom trudności
- Poziom trudności: średniozaawansowany
- Dla licealistów: jak najbardziej (tematyka + poziom zaawansowania)
- Dla studentów: również (tematyka)
Czy wiedza ta jest przydatna?
Zdecydowanie! Jeżeli programujesz w Javie, dzięki blokowi zyskasz nowe spojrzenie na wiele aspektów tego języka. Zdobyta tu wiedza ułatwi Ci debugowanie aplikacji, ich optymalizację, a także pomoże w tworzeniu własnych. Równie cenne doświadczenia wyniosą osoby zainteresowane tworzeniem własnych interpreterów dzięki zapoznaniu się z rzeczywistymi, sprawdzonymi w boju koncepcjami.
Wymagania dla uczestników
Blok poświęcony jest maszynie wirtualnej Java, a nie językowi Java. Dlatego do uczestnictwa w bloku wymagana jest jedynie:
- umiejętność programowania w ogóle,
- podstawowa znajomość programowania obiektowego (pojęcie klasy, obiektu, dziedziczenia, zakresy widoczności itd.) - aczkolwiek im więcej wiesz, tym lepiej,
- znajomość dowolnego języka programowania, który da się skompilować na maszynę wirtualną Javy, na przykład:
-
-
-
- Java
- Python (implementacja na JVM: Jython)
- Ruby (implementacja na JVM: JRuby)
- Groovy
- Scala
- Clojure (dialekt Lispa)
- Erlang (implementacja na JVM: Erjang)
-
-
-
- W razie wyboru języka innego niż Java należy upewnić się, że umiemy w nim ładować i wykorzystywać klasy z biblioteki standardowej Javy; będzie to nam potrzebne, abyśmy byli w stanie używać biblioteki do manipulacji kodem bajtowym.
Kwalifikacja
Do napisania jest jedno zadanie kwalifikacyjne sprawdzające wiedzę z wymagań:
- Zaimplementuj w postaci prostej klasy algorytm przeszukiwania binarnego tablicy dowolnych obiektów.
- Klasa musi implementować interfejs, który dostarczam w postaci pliku JAR. Plik można pobrać stąd: binsearch.jar
- Dodatkowo, napisz prosty program demonstrujący działanie algorytmu.
- Algorytm należy zaimplementować samodzielnie!
- Zadanie należy wykonać w dowolnym języku, który da się skompilować na maszynę wirtualną Javy: Java, Groovy, Scala, Clojure, Ruby, Python. Zalecane jest wykorzystanie języka, którego będziesz używać w trakcie zajęć.
Specyfikacja interfejsu, dodatkowe wskazówki, zasady oceniania oraz dodatkowa literatura znajduje się w poniższym dokumencie PDF: jvm_kwalifikacja.pdf
Rozwiązania należy wysłać w postaci spakowanego kodu źródłowego przy pomocy aplikacji warsztatowej.