Hot Reload w C++


#1

Może ktoś wyjaśnić jak się robi takie “hot-reload” w C++ ? Tzn. część silnika która pozwala na skompilowanie odrębnego kodu C++ i wyświetlenie rezultatu po naciśnięciu przycisku, tak jak w Unity “Play” albo w UE4 .


#2

W wielkim skrócie w Unity działa to tak:
Podczas pracy w edytorze, każda zmiana na publicznych polach dla klas z atrybutami System.Serializable jest serializowana, tj. zapisywana do pamięci, która przetrwa dłużej niż czas życia skryptu bądź edytora.
W momencie, gdy zapisujesz zmodyfikowana skrypt, Unity:
a) Wykonuje proces serializacji.
b) Niszczy instancje klas po stronie c++ będące odwzorowaniem tych ze skryptu.
c) Przeładowuje wszystkie skrypty z danego assembly.
d) Tworzy obiekty po stronie c++
e) Deserializuje wcześniej zapisane informacje.

Podobna sytuacja ma miejsce, gdy naciskasz przycisk Play, chociaż zakładam, że pomijany jest w tedy etap kompilacji assembly.


#3

A gdybym chciał tak zrobić od początku samemu taki mechanizm w C++ to od czego powinienem zacząć ?


#4

Temat rzeka. Ale najprościej za pomocą DLL + serializacja.
Serializujesz dane z modułu dll. Kompilujesz bibliotekę. Przeładowujesz obraz i odświeżasz wskaźniki do funkcji a na koniec przywracasz (deserializujesz dane).

Może ten link ci pomoże: https://gamedev.stackexchange.com/questions/221/how-can-one-implement-hot-swappable-c-modules