Automatic Source Code Reduction Jiří Diviš, Ondřej Bojar This work has been supported by the grants Euro- MatrixPlus (FP7-ICT-2007-3-231720 of the EU and.

Slides:



Advertisements
Podobné prezentace
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Advertisements

(instance konkrétní třídy)
Aplikační a programové vybavení
Jazyk VHDL Martin Štěpánek
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Algoritmizace od algoritmu k Pascalu.
Internetové publikování Doc. Ing. Petr Zámostný, Ph.D. místnost: A-72a tel.: 4222, 4167 (sekretariát ústavu 111)
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Programování v C++ Cvičení.
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Materiály k přednášce Úvod do programování Ondřej Čepek.
Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.
Praha6.cz Nové trendy v e-publishingu Statické stránky, mapa stránek, menu a fulltextové vyhledávání.
Lestes C++ compiler. Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr.
Vyhodnocení lomových experimentů: Efektivní náhrady zatěžovacích diagramů Petr Frantík David Lehký Zbyněk Keršner F AKULTA STAVEBNÍ V YSOKÉ UČENÍ TECHNICKÉ.
REDUKCE DAT Díváme-li se na soubory jako na text, pak je tento text redundantní. Redundance vyplývá z:  některé fráze nebo slova se opakují  existuje.
© 2007 Cisco Systems, Inc. All rights reserved.Cisco Public ITE PC v4.0 Chapter 1 1 Operating Systems Networking for Home and Small Businesses – Chapter.
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
6. cvičení Polymorfismus
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Školní informační systémy
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Příkaz "echo" Příkaz "echo" Příkaz "echo" se používá pro zobrazení daných informací na monitoru. Příkaz "echo" se používá pro zobrazení daných informací.
Dynamické dokumenty na straně serveru Informatika pro ekonomy II přednáška 8.
Dokumentace informačního systému
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Actor model Novotný Marek Svata Bohuslav Lhotan Petr.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Milan Kryl(c) 2004 MFF UK Databáze Caché NLS national language settings.
Přednáška č. 1 Proces návrhu databáze
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Vít Profant Obhajoba bakalářské práce
Databázové systémy 2 Zkouška – 8:00. Příklad I - Procedura Vytvořte proceduru PROCEDURE ZK_ZAM_HISTOGRAM(P_ROK_OD IN NUMBER, P_ROK_DO IN NUMBER)
Infrastruktura pro dotazování nad sémantickými daty Jiří Dokulil, Jakub Yaghob, Filip Zavoral Katedra softwarového inženýrství, MFF UK Praha
Jazyky pro umělou inteligenci RNDr. Jiří Dvořák, CSc.
Řešitel: Fialík Ondřej Vedoucí práce: Ing. Stankovič Jan Ph.D.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Informatika pro ekonomy přednáška 4
Prolog (add) Jan Hric, KTI MFF UK, a
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Balíky Hlavní balík - main - zatím jsme s jiným nepracovali Rozdělují tzv. namespaces = množiny jmen pro proměnné $lemma = "cukr"; znamená $main::lemma.
Visual Basic - programování
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Lukáš Patka PFE. Microsoft Security Risk Assessment Identifikovat bezpečnostní rizika napříč IT infrastrukturou, aplikacemi, provozními procesy Zaměřen.
Umělá plicní ventilace
ZÁSADY KONCIPOVÁNÍ LOGISTICKÝCH SYSTÉMŮ KAPITOLA 5: VZTAH STRATEGIE PODNIKU A LOGISTICKÉHO PLÁNOVÁNÍ, CÍLE, METODY A NÁSTROJE PLÁNOVÁNÍ, POSTUPOVÉ KROKY.
Perzistence XML dat Kamil Toman
si Vám dovoluje představit
Algoritmizace a programování Soubory. Oč jde? Vytvoření externího souboru Vytvoření externího souboru Tento soubor může být: Tento soubor může být: Textový.
Bezdrátové senzorické sítě Operační systémy a vývojové prostředky Ing. David Široký Katedra informatiky a výpočetní techniky Fakulta aplikovaných.
Model struktury strategického managementu
Web services – když si Java sedne s M$ na kus řeči Ing. Petr Přibyl CCA Group a.s.
WWW a HTML Základní pojmy Ivo Peterka.
Podklady pro zpracování semestrální práce
WWW a HTML Základní pojmy Ivo Peterka.
Optimalizace finančních toků ve vybrané společnosti
Název školy: Svobodná základní škola, o. p. s
Moderní didaktické technologie a zdroje informací
OBHAJOBA MATURITNÍ PRÁCE
Informatika pro ekonomy přednáška 4
Instalace programů do Linuxu
TELNET, FTP.
Informatika pro ekonomy přednáška 4
Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/
Monitor Object 1.
Composite “Spojuj a panuj”.
Transkript prezentace:

Automatic Source Code Reduction Jiří Diviš, Ondřej Bojar This work has been supported by the grants Euro- MatrixPlus (FP7-ICT of the EU and 7E09003 of the Czech Republic) and MSM

Obsah ● Programovací jazyk Mercury ● Motivace ● Reprezentace programu ● Redukce podrobně ● Rozhraní pro přenesení výsledků redukce zpět do zdrojáku.

Programovací jazyk Mercury ● V zásadě rozšíření Prologu ● Deklarace a definice typů proměných ● Deklarace směru toku dat (tzv. mode). ● Informace zda prdikát smí selhat, nebo vrátit více výsledků ● kompiluje také do C nebo Javy ● Foreign Language Interface ● Oproti Prologům běží výrazně rychleji a snadněji se v něm odlaďují programy

Motivace, Reductor a jeho redukce ● Funkcionalita: ● Statická redukce, dynamická redukce ● Zachovává původní strukturu kódu – Formátování – Jména proměných – ap. ● Účel: ● Hlavně porozumění nebo znovupoužití rozsáhlých zdrojáků ● Pripřípadně “urychlení” kompilace, nebo “zmenšení” binárky

Levels of representation Melbourne Mercury Compiler (MMC) Kód z MMC, přizpůsobený pro Reductor

Dynamická redukce ● Mercury Deep Profiler ● Získání informací o volání predikatů – krabičkový model + vyjímky ● Kompilace az po HLR ● Mode reordering ● Předpoklad: strict sequential operational semantics ● Přenos informací o volání do HLR ● Redukce ● Predaní výstupu I/O modulu

Dynamická redukce – příklad split(P, [], []). split(P, [H|S], A, B):- (P>H, append(B0, H, B), split(P, S, A, B0)) ; (P<H, append(A0, H, A), split(P, S, A0, B)). _

Dynamická redukce – mode reordering split(P, [], []). split(P, [H|S], A, B):- (P>H, split(P, S, A, B0), append(B0, H, B)) ; (P<H, split(P, S, A0, B), append(A0, H, A)). _

Dynamická redukce – sběr informací split(P, [], []). split(P, [H|S], A, B):- (P>H, split(P, S, A, B0), append(B0, H, B)) ; (P<H, split(P, S, A0, B), append(A0, H, A)). Vstup: 2 a [1,2]

Dynamická redukce – sběr informací split(P, [], []). split(P, [H|S], A, B):- (P>H, split(P, S, A, B0), append(B0, H, B)) ; (P<H, split(P, S, A0, B), append(A0, H, A)). Vstup: 2 a [1,2]

Dynamická redukce – sběr informací split(P, [], []). split(P, [H|S], A, B):- (P>H, split(P, S, A, B0), append(B0, H, B)) ; (P<H, split(P, S, A0, B), append(A0, H, A)). Vstup: 2 a [1,2]

Dynamická redukce – označení split(P, [], []). split(P, [H|S], A, B):- (P>H, split(P, S, A, B0), append(B0, H, B)) ; (P<H, split(P, S, A0, B), append(A0, H, A)). Vstup: 2 a [1,2]

Dynamická redukce – označení split(P, [], []). split(P, [H|S], A, B):- (P>H, append(B0, H, B), split(P, S, A, B0)) ; (P<H, append(A0, H, A), split(P, S, A0, B)). Vstup: 2 a [1,2]

Dynamická redukce – označení split(P, [], []). split(P, [H|S], A, B):- (P>H, append(B0, H, B), split(P, S, A, B0)) ; (P<H, append(A0, H, A), split(P, S, A0, B)). Vstup: 2 a [1,2]

Dynamická redukce – výsledek split(P, [], []). split(P, [H|S], A, B):- (P>H, throw(“red'd”)/*append(B0, H, B),split(P, S, A, B0)*/) ; (P<H, append(A0, H, A), split(P, S, A0, B)). Vstup: 2 a [1,2]

Rozhraní pro přenesení redukcí zpět do zdrojáků ● Interface pro zápis změn redukcí (I/O interface) ● Prijma změny typu: ● Nahraď term podtermem ● Přepiš term řetězcem ● Rozhraní hledá znakové pozice ve zdrojáku ● Priklad: term ↔ token ● Takto čistě jen term ↔ token ● Další vrstvy jdou podobně též – Hezké, ale pracné – Pro implementované redukce zbytečné

token level term level term1(A, B):- term2(cons(1,A),Y), term4(1,B). term1(A, B):- term2(A,Y), throw, term4(Y,B). no_lvl_change |`:-`| no_change |term1| no_lvl_change |`,`| no_lvl_change |term2| subst_del |cons| no_change |1| orig([]) |A| no_change |Y| subst_ins " throw " no_lvl_change |term4| replace("Y") |1| no_change |A| "" `:-` term(A,B) `,` term2 cons 1 A Y term4 1 A

Ideální rozhraní

Rozhraní – realita

Závěrem ● Bohužel není vůbec snadné ověřit, jak moc se Reductor skutečně hodí ke svému hlavnímu účelu ● Není na čem to vyzkoušet... ● Jinak k “urychlení” kompilace, nebo “zmenšení” binárky se samozřejmě hodí

Statická redukce jde implementovat jako pruchod grafem. Problemy prinasi polymorfizmus: existencial types typeclasses lze si predstavovat jako virtualni metody z OOP