Dizertační práce
Rychlé a robustní kanály pro analýzu dat
Analýza dat se obvykle provádí složením řady diskrétních nástrojů a knihoven do datově-analytických kanálů. Ty jsou jádrem datových věd, které dnes zažívají strmý růst počtu výpočetních metod a objemu analyzovaných dat. Díky tomu vznikají problémy se škálovatelností těchto kanálů a důvěryhodností jejich výsledků.
Obsahem této disertační práce je výzkum škálovatelnosti (přizpůsobivosti se rostoucí velikosti dat a výpočetním potřebám) a důvěryhodnosti (usnadňují auditování výsledku) datově-analytických kanálů. Výzkum bude probíhat ve dvou rovinách. První se zaměří na možnosti rozšíření programovacího jazyka R umožňující transparentní vertikální a horizontální škálování. Druhá rovina bude výzkum kombinací technik statické a dynamické analýzy programů k získání informací o typech a závažnosti programovacích chyb, které se vyskytují v kódech datově-analytických kanálů a následně návrh algoritmů pro jejich detekci a možné automatické odstranění.
Vidět skrz FFI: Analýza nativního kódu v dynamických jazycích
Školitel-specialista: Mgr. Tomáš Petříček, Ph.D.
Dynamické programovací jazyky, jako jsou R, Python nebo Ruby, se často opírají o rozsáhlé kolekce vestavěných funkcí implementovaných v nativních jazycích, jako je C nebo C++. Například samotný základní balíček jazyka R obsahuje téměř tisíc vestavěných funkcí napsaných v jazycích C a Fortran. Tato závislost vychází z přetrvávajícího výkonového rozdílu mezi vysoce abstraktními dynamickými jazyky a nízkoúrovňovými kompilovanými jazyky. Aby tento rozdíl zmírnili, spoléhají se implementátoři jazyků a autoři knihoven na foreign-function interface (FFI), který umožňuje implementovat výkonně kritické části programu v nativním jazyce a volat je z běhového prostředí dynamického jazyka.
Ačkoli je FFI nezbytné pro dosažení přijatelného výkonu, zároveň představuje zásadní překážku pro analýzu a optimalizaci programů. Nativní kód, obvykle napsaný v C nebo C++, je z pohledu kompilátoru a analytických nástrojů hostitelského jazyka neprůhledný. Kompilátor tak nemůže zohlednit sémantiku těchto funkcí, jejich vedlejší efekty ani datové závislosti. To výrazně omezuje rozsah možných optimalizací a znemožňuje provádět analýzu celého programu, tedy analýzu a optimalizaci napříč hranicí mezi vysokoúrovňovým jazykem a jeho nativními rozšířeními.
Cílem této disertační práce je systematicky analyzovat a modelovat vestavěné a přes FFI volané nativní funkce, a tím překlenout zmíněnou sémantickou mezeru. Prvním krokem je vyvinout techniky pro extrakci nebo aproximaci informací o jejich chování – včetně čistoty, řídicích efektů a transformací dat. Tyto poznatky lze následně využít ke zlepšení statických i dynamických analýz, k efektivnější optimalizaci a k vyšší bezpečnosti a predikovatelnosti interakce mezi jazykovými úrovněmi.
Na tomto základě se výzkum zaměří na možnosti zvýšení úrovně abstrakce vestavěných funkcí – tedy vyjádření jejich sémantiky tak, aby jí mohl hostitelský kompilátor rozumět a optimalizovat ji. Konečným cílem je přiblížit nativní funkcionalitu zdrojovému jazyku natolik, aby bylo možné provádět celoprogramovou analýzu a optimalizaci napříč všemi jeho komponentami.