O ile wiem i rozumiem,języków statycznych i Reflection
Odbicie jest zdolność do tworzenia/modyfikowania kodu źródłowego w czasie wykonywania.
Z Wikipedii:
- Odkrywanie i modyfikować kod źródłowy (konstrukcje, takie jak bloki kodu, klas, metod, protokołów, etc.) jako obiekt pierwszej klasy w wykonywania.
- Konwertuj ciąg znaków pasujący do nazwy symbolicznej klasy lub funkcji na odwołanie lub wywołanie tej klasy lub funkcji.
- Oceń ciąg znaków, tak jakby był instrukcją kodu źródłowego w czasie wykonywania.
Utwórz nowy interpreter dla kodu bajtowego języka, aby nadać nowy sens lub cel konstruowaniu programistycznego.
Języki dynamiczne są językami, które możemy ocenić (ocenić bezpośrednio z łańcucha) w czasie wykonywania.
z Wikipedii: „przedłużenie programu, poprzez dodanie nowego kodu, poprzez rozszerzenie obiektów i definicje, lub modyfikując system typu”
Ok, teraz moje pytanie brzmi: Jak statyczny język ד (bez zdolność eval) może mieć odbicie (np. Java)? (nowy kod źródłowy nie ocenia?: /)
Z góry dziękuję!
Java ma bibliotekę manipulacji kodu bajtowego o nazwie [ASM] (http://asm.ow2.org/).Odbicie nie służy do dodawania nowego kodu, tak jak opisujesz w swoim pytaniu. –
Odbicie pozwala na manipulowanie (tak, może być szkodliwe w niektórych przypadkach) z klasą poprzez zapytanie o jej metody, pola, poziomy dostępu i takie, ale nie generujesz nowego kodu. Ma inne zastosowania, jak na przykład wywoływanie metody zdefiniowanej w określonej klasie w oparciu tylko o dane na jej temat (* metadane *). Dostajesz instancję z klasy, otrzymujesz od niej metodę opartą na jej firmie, a następnie ją wywołujesz. – Gamb
@Gamb 10x, ale jeśli modyfikujesz kod źródłowy, więc generujesz kod źródłowy (jak mówi wikipedia), nieprawdaż? – gran33