Я читал о eval в C , и имеет смысл, что если вы напишите синтаксический анализатор / оценщик строки C, вы можете просто сопоставить его с конкретными функциями в вашей основной программе на C.Но на самом деле он не помещает его в исполняемую память из того, что я понимаю, как это делает JIT-компилятор .Я не совсем понимаю JIT-компиляторы (я никогда не создавал один), но я понимаю суть.
Так что мне интересно, если вы можете создать своего рода JIT-компилятор в C, не выполняя слишком много работыРазбор строк C и преобразование в AST и еще много чего.В принципе, можете ли вы сделать как в JavaScript и динамически создать функцию (в C), такую, что эта функция точно такая же, как любая другая функция C (то есть она скомпилирована непосредственно в исполняемый машинный код в исполняемом файлеэто часть программы).
Если это невозможно сделать, вторым подходом будет динамическая загрузка импорта / файлов / модулей на С.Таким образом, вы запускаете процесс, который говорит компилятору clang скомпилировать некоторые библиотечные функции, и после того, как это сделано, не останавливая текущую программу, он связывает / присоединяет эту новую библиотеку программы к себе, и поэтому может выполнить код таким образом .
Если это невозможно, возможно, можно просто перекомпилировать программу в фоновом режиме, а затем заменить текущую программу новой программой, которая загружается с нуля.Это было бы просто очень примитивно.
Попытка выяснить, есть ли у вас структуры для собственного типа данных пользовательской функции в C, как вы можете затем выполнить эту функцию в C наиболее оптимизированным способом.