Pluginy


#1

Witam. Wiem że temat pluginów był już poruszany.
Proponował był dodanie pluginów załączanych w dll’kach. Dzięki temu będzie można pisać pluginy w wielu jeżykach.No i dzięki temu ktoś by mógł napisać plugin do obsługi jeżyków typu lua ,python itp


#2

Vcmi ma oficjalna wersje na linuxa, da sie zaladowac do takiej aplikacji dll? :open_mouth:


#3

To nie tak różowo, bo taki DLL musi się jakimś interfejsem z VCMI komunikować. Jeśli interfejs jest w C++, to wtedy i DLL musi być w C++. Do tego trzeba go budować tym samym kompilatorem i z tymi samymi opcjami, co silnik (C++ nie ma ustandaryzowanego ABI). Robienie alternatywnego interfejsu w czystym C — mnóstwo roboty, a potem by trzeba i tak jeszcze raz interfejsować do „języka docelowego”.

Zalążek obsługi języków skryptowych, jaki jest obecnie zrealizowany w VCMI, faktycznie wykorzystuje ten mechanizm (pluginy w dll). Tyle, że takie pluginy muszą być częścią projektu (nie zaś niezależnym przedsięwzięciem), inaczej się będzie rozwalać przy każdym releasie. Tak więc jest to raczej wewnętrzny sposób organizacji kodu niż forma, w jakiej bym widział przyszłe, niezależne od jądra projektu, dodatki.

Tak, tyle że na Linuksach się to nazywa biblioteką dzieloną i ma rozszerzenie .so. Niby inny mechanizm, ale w praktyce można używać identycznie. Przynajmniej w zakresie, jaki jest nam potrzebny.


#4

ja tam myślę że niektóre elementy serweraq można “upublicznić” i stworzsyć mechanizm pluginów podobny do tego w jakim jest zrealizowane AI w VCMI. to znaczy że przy niektórych zdarzeniach (niekoniecznie wszystkich) można przypiąć własny kod z tą samą klasą bazową. oczywiście taki mechanizm byłby średnio kompatybilny póki VCMI zamierza wprowadzić duże zmiany, ale opracowanie takiego mechanizmu pomogło by projektowi i byłoby bardzo użyteczne w “finalnej” wersji. Gdy już powstanie API dla pluginów, dodanie nowych języków skryptowych/interpretowanych nie będzie problemem - nic nie przeszkadza by plugin był wrapperem. natomiast dodanie innych języków kompilowanych będzie trudniejsze z powodu wnętrzności C++, choć nie wykluczone jest napisanie wrappera API w C++ na API w C, który umożliwi crosscompiling (tj. korzystanie z różnych kompilowanych języków programowania w jednym projekcie)