Witam ostatnio wpadłem na pomysł zrobienia programu w c++ który mógłby sam się edytować.
Trochę programowałem w c++ więc podstawy znam. Chodzi oto by np. za pomocom wpisania
jakiejś komendy np. nowy! w konsole, tworzył by się nowy if w kodzie, który by wypełniał się
w zależności od tego co wpisze dalej w konsoli.
Praktycznie wszystkie kompilatory C++ wspierają tylko tryb AOT (ahead of time) kompilacji, a więc docelowy kod źródłowy musi być kompletny przed zaczęciem kompilacji. W takim przypadku nie da się zrobić programu w C++, który by edytował swój kod w C++ tak by jednocześnie się to przekładało 1:1 na jego działanie. No chyba, że chcesz tworzyć osobny plik .cpp i jego kompilować osobnym przejściem.
A w innym języku nisz c++?
Możesz zawrzeć kompilator wraz z programem (jakiś libjit), albo interpreter jakiegoś języka, np. JS. Przy czym: co chcesz osiągnąć?
Ponoć da się w TCC, ale nie próbowałem:
https://web.stanford.edu/~engler/tickc.pdf
https://blog.mister-muffin.de/2011/10/22/discovering-tcc/
Zależy co chcesz osiągnąć. Zmienianie kodu w locie nie jest takie proste. Mainstreamowe kompilatory jak gcc czy clang, raczej na to nie pozwolą, gdyż strony z kodem w pamięci z są oznaczane jako tylko do odczytu.
Ale można dodać do binarki kompilator c++, skompilować wejście jako biblioteka współdzielona, a następnie załadować ją. Spodziewaj się jednak problemów z ABI c++, gdyż (tutaj mogę się mylić) musiałbyś zrezygnować z używania funkcji z biblioteki standardowej aby uniknąć problemów z interfejsem binarnym albo dostarczać biblioteki w wersji odpowiedniej dla hosta albo liczyć na to, że na hoście będzie kompilator lub przynajmniej biblioteki, które chciałbyś wykorzystać.
Trochę assemblera, trampoliny i longjump pewnie też będą niezbędne.
Zawsze da się w locie skompilować DLL/so i wywołać odpowiednią funkcję.