L'anatra - Library for interoperability between C# and Java
L'anatra - knihovna pro interoperabilitu mezi jazyky C# a Java
diplomová práce (OBHÁJENO)
Zobrazit/ otevřít
Trvalý odkaz
http://hdl.handle.net/20.500.11956/193799Identifikátory
SIS: 266543
Kolekce
- Kvalifikační práce [11216]
Autor
Vedoucí práce
Oponent práce
Parízek, Pavel
Fakulta / součást
Matematicko-fyzikální fakulta
Obor
Informatika - Softwarové systémy
Katedra / ústav / klinika
Katedra distribuovaných a spolehlivých systémů
Datum obhajoby
11. 9. 2024
Nakladatel
Univerzita Karlova, Matematicko-fyzikální fakultaJazyk
Angličtina
Známka
Výborně
Klíčová slova (česky)
Interoperabilita|C#|Java|JNI|Project PanamaKlíčová slova (anglicky)
Interoperability|C#|Java|JNI|Project PanamaTato práce měla za cíl vytvořit softwarovou knihovnu umožňující interoperabilitu mezi programovacími jazyky C# a Java. Práce umožňuje použití podmnožiny Javové funkcionality ze C#. Požadavky, které by měla knihovna splňovat, byly určeny analý- zou potenciálních scénářů použití a již existujících souvisejících implementací. Důraz byl kladen na návrh uživatelsky přívětivého a typově bezpečného API. Implementované řešení umožňuje volání statických i instančních Javových metod ze C#. Dále umožňuje vytvářet instance Javových objektů ze C# nebo je získávat prostřednictvím návratových hodnot volaných Javových metod. C# reprezentuje in- stance Javových objektů prostřednictvím proxy tříd, které emulují API jim odpovída- jících Javových tříd, potenciálně včetně hiearchie dědičnosti a rozhraní, která implemen- tují. Implementace C# proxy typů (tříd i rozhraní) je generována v době kompilace prostřednictvím inkrementálního generátoru zdrojového kódu. Generované proxy typy jsou založeny na API poskytovaném implementovanou knihov- nou pro interoperabilitu. Tato knihovna je převážně založena na kombinaci Java Native Interface (JNI) a .NET Platform Invoke (P/Invoke). Nicméně, řešení také experimen- tuje s optimalizací určitých typů volání pomocí Foreign Function API poskytovaného aktuálním Javovým projektem Panama. 1
This thesis aimed at creating a software library enabling interoperability between C# and Java programming languages by enabling the use of a subset of Java features from C# code. Requirements that the library should meet were determined via analysis of potential use case scenarios and similar existing implementations. The emphasis was put on providing a user-friendly and type-safe API. The implemented solution enables the invocation of static and instance Java methods from C#. It also allows creating Java object instances from C# code or obtaining them as return values of invoked Java methods. C# represents Java object instances as proxy classes that emulate the API of corresponding Java classes, possibly including an inher- itance hierarchy between them and the interfaces they implement. Implementation of C# proxy types (classes and interfaces) is generated at compile time via the incremental source generator. Generated proxy types are based on API provided by the implemented interoperability library. This library is mainly based on a combination of Java Native Interface (JNI) and .NET Platform Invoke (P/Invoke). However, the solution also experiments with optimizing certain invocation kinds using Foreign Function API provided by the recent Java Project Panama. 1