Przeglądałem, pisząc mały framework IRC w C, który teraz zamierzam rozszerzyć z pewną podstawową funkcjonalnością - ale poza tym chciałbym, żeby było rozszerzalne z wtyczkami !Architektura wtyczek w języku C przy użyciu biblioteki libdl
Do tej pory, gdy pisałem coś związanego z IRC (i dużo pisałem, w około 6 różnych językach teraz ... jestem w płomieniach!) I faktycznie poszedłem do przodu, aby zaimplementować architekturę wtyczek, to było w środku język interpretowany, który miał ułatwienia (czytaj: nadużywanie), tak jak zacina cały plik skryptu za pomocą eval
w Ruby (złe!).
Teraz chcę nadużyć coś w C!
Zasadniczo tam trzy rzeczy mogłem zrobić
- zdefiniować prosty język skryptowy wewnątrz mojego programu
- użyć istniejącego, osadzanie tłumacza
- użytkowania libdl załadować * .so modułów na starcie
Ja lubię trzeci i raather unikaj dwóch pozostałych opcji, jeśli to możliwe. Może jestem pewnego rodzaju masochistą, ale myślę, że może to być zarówno zabawne, jak i użyteczne dla celów edukacyjnych.
Logiczne myślenie, oczywisty "łańcuch bólu" będzie (najniższy lub najwyższy) 2 -> 1 -> 3, z prostej przyczyny, że libdl ma do czynienia z surowym kodem, który może (i będzie) eksplodować na mojej twarzy częściej niż nie.
Więc to pytanie wychodzi do ciebie, inni użytkownicy stackoverflow, myślisz, że libdl jest do tego zadania, a nawet realistyczna myśl?
Zmiany w głównej funkcji nie działają - po prostu zaimplementowałem funkcje takie jak "on_channel_message (...)" - na inną myśl .. czy biblioteki mogą być załadowane funkcjami dostępu do libdl zdefiniowanymi w głównym programie? – LukeN
Czasami mogą, ale najbezpieczniej jest założyć, że nie (ponieważ (a) czasami trzeba przekazać specjalne flagi kompilacji, aby je włączyć, oraz (b) na ogół nie chcesz, aby działały z dowolnymi funkcjami w głównym programie!). Zwykle najlepiej jest przekazać strukturę zawierającą listę wskaźników funkcji, które wtyczka może wywoływać. – psmears