_ __ o | | o / \ __ __ __, ,_ __ | | _ _|_ _/ / / \_ | / | / | / \_|/ \_| |/ | | | | \___/\__/ |/\_/|_/ |_/\__/ \_/ |_/|__/ |_/ \_/|_/o /| \_ \| 8.XI.2010 ___ __ | _ _| _ _ _ (_ _ __ | | (_|(_|(/_|_|_> /_ __) /_| ||_| |< ================================================================================ Plan prezentacji ================= * KrĂłtka historia BML-a. * Problemy z BML-em. * PomysĹ na nowy standard specyfikacji bajtkodu. * Dalsze plany. ================================================================================ KrĂłtka historia BML-a. ======================= * Stworzony w ramach MOBIUS-a. * Podstawowe przeznaczenie: PCC. * Jest to w zasadzie JML zapakowany w plik .class. * Zestaw narzÄdzi: - BMLLib: podstawowa biblioteka. - Umbra: edytor - JML2BML - translator z JML. - BMLVCGEN, BML2BPL - VCGen-y. * Case study: Bill ================================================================================ Klasa Bill =========== * Zawiera dwie metody (jedna jest abstrakcyjna), pÄtlÄ z niezmiennikiem oraz niezmiennik klasowy. * PrĂłby weryfikacji za pomocÄ zestawu BML-owych narzÄdzi przyniosĹy nastÄpujÄ ce rezultaty: - PodstawowÄ biblioteka i pozostaĹe narzÄdzia wymagaĹy licznych przerĂłbek. - VCGen wygenerowaĹ duĹźÄ iloĹÄ formuĹ coq-owych :: Niestety nie do koĹca wĹaĹciwych. :: ZĹoĹźonoĹÄ formuĹ powstajÄ cych w trakcie dowodu czÄsto prowadziĹa do zawieszania siÄ systemu. - Ostatecznie dowĂłd powstaĹ kosztem wielu dni pracy. - Zweryfikowanie jakiegokolwiek systemu o praktycznych rozmiarach jest ta metodÄ niemoĹźliwe. ================================================================================ Wady dotychczasowego podejĹcia =============================== * Brak jakiegokolwiek wsparcia dla automatycznej weryfikacji. * Przekomplikowane i sĹabo dziaĹajÄ ce narzÄdzia. * BML jest kiepsko przystosowany do opisu bajtkodu. - Jest zbyt silnie zwiÄ zany z JML. - Tworzenie narzÄdzi przetwarzajÄ cych BML jest trudne. - Mechanizm konstrukcji dowodu polegajÄ cy na uĹźyciu Bicolano oraz wielu zapisanych w Coq-u przksztaĹceĹ jest nieefektywny i tworzy maĹo przejrzyste formuĹy. * Wiele bardziej zaawansowanych kwestii zwiÄ zanych z generowaniem obligacji dowodowych zostaĹo zignorowanych podczas projektowania jÄzyka specyfikacji. ================================================================================ Wnioski ======== * Weryfikacja bez wsparcia ze strony automatycznych solverĂłw jest zbyt zĹoĹźona nawet dla maĹych programĂłw. - ZwĹaszcza po uwzglÄdnieniu niskopoziomowego charakteru bajtkodu. * Bajtkod potrzebuje innego jÄzyka weryfikacji niĹź Java. * Potrzebna jest duĹźa liczba róşnych narzÄdzi. * Trzebaby tego Bill-a zrobiÄ na powaĹźnie. "But there's no sense crying over every mistake. You just keep on trying till you run out of cake." ================================================================================ ____ __ __ /\ _`\ __ /\ \ /\ \__ \ \ \L\ \_ __ ___ /\_\ __\ \ \/'\\ \ ,_\ \ \ ,__/\`'__\/ __`\\/\ \ /'__`\ \ , < \ \ \/ \ \ \/\ \ \//\ \L\ \\ \ \/\ __/\ \ \\`\\ \ \_ \ \_\ \ \_\\ \____/_\ \ \ \____\\ \_\ \_\ \__\ \/_/ \/_/ \/___//\ \_\ \/____/ \/_/\/_/\/__/ \ \____/ \/___/ __ __ ______ __ __ ______ ______ /\ \ __/\ \/\__ _\ /\ \ /\ \ /\__ _\ /\ _ \ /'\_/`\ \ \ \/\ \ \ \/_/\ \/ \ \ \ \ \ \ \/_/\ \/ \ \ \L\ \/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ __\ \ \ __\ \ \ \ \ __ \ \ \__\ \ \ \ \_/ \_\ \ \_\ \__\ \ \L\ \\ \ \L\ \\_\ \__\ \ \/\ \ \ \_/\ \ \ `\___x___/ /\_____\\ \____/ \ \____//\_____\\ \_\ \_\ \_\\ \_\ '\/__//__/ \/_____/ \/___/ \/___/ \/_____/ \/_/\/_/\/_/ \/_/ ================================================================================ ZaĹoĹźenia ========== * Nowy jÄzyk specyfikacji dla bajtkodu. * NIE bÄdÄ cy przerĂłbkÄ JML. * Ĺatwy w implementacji. * Kilka implementacji zamiast jednej biblioteki. * Weryfikacja zautomatyzowana. * JÄzyk NIE musi byÄ czytelny. * Bez zamiatania pod dywan (aliasowania, refleksja, wielowÄ tkowoĹÄ, finalizacja). * JÄzyk wyraĹźeĹ = bajtkod. * Zestaw narzÄdzi do Eclipse. ================================================================================ Po co nowy jÄzyk? ================== * Stary siÄ nie sprawdziĹ. * Nie jest Ĺatwo go naprawiÄ. - Stan implementacji temu nie sprzyja. - NiektĂłre decyzje projektowe naleĹźaĹoby zmieniÄ. * JML ma sporo wad, z ktĂłrymi moĹźna siÄ przy okazji zmierzyÄ. * OczywiĹcie ciÄĹźko byĹoby zmieniÄ JML... - Ale BML ma znacznie sĹabszÄ pozycjÄ. ================================================================================ Czemu nie oprzeÄ siÄ na JML? ============================= * Bo Ĺatwo siÄ wtedy przewrĂłciÄ. * JML korzysta z wyraĹźeĹ Javowych. W efekcie kaĹźde narzÄdzie musiaĹoby rozumieÄ dwa róşne jÄzyki wyraĹźeĹ - JML i bajtkod. * JML Ĺrednio sobie radzi z kontrolÄ aliasowania, refleksjÄ itp. * JML ma nieco inne przeznaczenie - powinien byÄ czytelny i bezpoĹrednio zapisywalny przez programistÄ. * Dla jÄzykĂłw innych niĹź Java korzystanie z jÄzyka specyfikacji opartego na JML moĹźe byÄ niewygodne. * JML jest olbrzymim standardem, do ktĂłrego doklejane sÄ wciÄ Ĺź nowe koncepcje. W efekcie Ĺźadne narzÄdzie nie 'rozumie' caĹego JML. ================================================================================ Po co kilka implementacji? =========================== * Mamy wiele róşnych bibliotek do bajtkodu. - BCEL - ASM - SAWJA - ... * Przy projektowaniu narzÄdzia wybĂłr bywa ograniczony. - Czasem istniejÄ ce narzÄdzie uĹźywa juĹź ktorejĹ biblioteki i nie jest Ĺatwo to zmieniÄ. * Pozwoli to zweryfikowaÄ zaĹoĹźenie o prostocie jÄzyka. ================================================================================ CzytelnoĹÄ =========== * Bajtkod nie jest czytelny. * I nie musi, bo przecieĹź nikt go bezpoĹrednio nie pisze. * WiÄc jÄzyk specyfikacji mĂłgĹby mieÄ podobne wĹasnoĹci. * Czasem jednak dobrze byĹoby mĂłc przeczytaÄ specyfikacjÄ biblioteki, z ktĂłrej siÄ korzysta. * MoĹźna wtedy uĹźyÄ ĹşrĂłdĹowej postaci tejĹźe specyfikacji, udostÄpnianej na zasadach podobnych jak symbole do odpluskwiania. * OczywiĹcie nieczytelnoĹÄ sama w sobie nie jest zaletÄ , ale usuniÄcie z jÄzyka wszelkich postaci lukru syntaktycznego (czyli zapewnienie jego prostoty przy zachowaniu siĹy wyrazu) w naturalny sposĂłb do niej prowadzi. ================================================================================ Implementacja ============== * MoĹźna zaĹoĹźyÄ, Ĺźe implementacja biblioteki obsĹugujÄ cej nasz nowy jÄzyk bÄdzie korzystaÄ z jednej z bibliotek bajtkodowych. * ByĹoby dobrze, gdyby nie byĹo potrzeba wiele wiÄcej. * WiÄc moĹźna uĹźyÄ bajtkodu do opisu formuĹ i wyraĹźeĹ. * OczywiĹcie sÄ pewne problemy np. z kwantyfikatorami. * Ĺťeby przeciÄtna biblioteka mogĹa sparsowaÄ ww. wyraĹźenia, trzeba je zapakowaÄ w treĹci metod, a nie na przykĹad atrybuty (jak BML) czy adnotacje (JIR). * Wynik takiego dziaĹania jest doĹÄ paskudny i niskopoziomowy, ale za to Ĺatwy do uzyskania i przetwarzania. ================================================================================ Specyfikacje w Javie ===================== * Specyfikacje w bajtkodzie bÄdÄ skompilowanÄ wersjÄ specyfikacji w innych jÄzykach. * W szczegĂłlnoĹci JML. * Na razie jednak trzeba je bÄzie pisaÄ rÄcznie. * Edytowanie bajtkodu jest niezbyt przyjemne. * MoĹźna jednak tak zaprojektowaÄ jÄzyk specyfikacji, Ĺźeby daĹo siÄ uzyskaÄ stosowny plik piszÄ c w samej Javie/ - Wszelkie metainformacje kodowane w adnotacjach, a nie na przykĹad atrybutach. - KaĹźdy kawaĹek bajtkodu musi byÄ w treĹci jakiejĹ metody. ================================================================================ Dywan ====== * Opisywany jÄzyk ma peĹniÄ rolÄ kodu poĹredniego dla innycn jÄzykĂłw specyfikacji. * WiÄc w szczegolnoĹci nie moĹźe pomijaÄ zagadnieĹ, ktĂłre we wspomnianych jÄzykach sÄ obsĹugiwane. * Tradycja formalnej specyfikacji kaĹźe zamieĹÄ pod dywan: - WielowÄ tkowoĹÄ - RefleksjÄ - FinalizacjÄ - ... * Jak je wymieĹÄ spod ww. dywanu? - OdsĹaniajÄ c struktury danych maszyny wirtualnej - UĹźywajÄ c dynamicznych ramek - Dwustanowych niemziennikĂłw - ??? <------ ================================================================================ Eclipse ======== * Projekt tego typu i rozmiaru jest umiarkowanie sensowny, jeĹli nikt nie bÄdzie z niego potem korzystaĹ. * Trzeba go wiÄc sprzedaÄ. * W tym celu musi byÄ kolorowy. * Eclipse pozwoli speĹniÄ to wymaganie. * Ponadto pewne narzÄdzia zawarte w Eclipse, w szczegĂłlnoĹci EMF oraz Xtext, mogÄ byÄ bardzo przydatne przy pierwszej implementacji nowego jÄzyka. * Spora grupa ludzi, ktĂłrzy mogÄ byÄ zainteresowani omawianym projektem, ma doĹwiadczenie w tworzeniu wtyczek do Eclipse. ================================================================================ NarzÄdzia ========== * VCGen korzystajÄ cy z Boogie. * Edytor bajtkodu i specyfikacji. * TĹumaczenie z JML. * Specyfikacje dla innych jÄzykĂłw uĹźywajÄ cych JVM. - Scala? * Integracja z Eclipsowymi narzÄdziami do JML? * Abstrakcyjna interpretacja bajtkodu? * Sporo pomniejszych programĂłw. ============================================================================== Dalsze plany ============= * Bajtkod jest w zasadzie wysokopoziomowy. * W przypadku PCC jest to wada. * MoĹźna wiÄc prĂłbowaÄ zejĹÄ trochÄ niĹźej: - Bajtkod LLVM - Instrukcje prostego mikrokontrolera (np. AVR). * Skoro usuwamy refleksjÄ spod dywanu, to moĹźe przy okazji sprobowaÄ zastosowaÄ specyfikacje w jÄzykach dynamicznie typowanych? - Na przykĹad w jÄzyku Lua. - NIE w Pythonie. - Ani tym bardziej tym czymĹ na 'R'. ==============================================================================