У меня есть (гипотетический) вопрос, и я думаю, что решение будет заключаться в динамической генерации кода.
Я хочу быстро оценить произвольную математическую функцию, введенную пользователем, например, найти сумму от i=1 до N числа i^3+2i^2+6i+1. N произвольно, и i^3+2i^2+6i+1 тоже произвольно (это не обязательно должен быть многочлен, и он может содержать тригонометрические функции и другие функции). Предположим, что N может быть очень большим. Я хочу знать, как я могу быстро оценить ответ, предполагая, что я уже проанализировал пользовательский ввод в какой-то байт-код или что-то еще, что моя программа может понять.
Если возможно, я также хотел бы, чтобы мой код легко компилировался и работал на разных операционных системах (в том числе мобильных).
Я придумал несколько способов:
1) Написать интерпретатор, который интерпретирует и выполняет каждую команду в моем байт-коде. Это позволяет мне свободно использовать любой язык, но это медленно.
2) Пишите на Java/С# и используйте генерацию динамического кода (например, Возможна ли динамическая компиляция и выполнение фрагментов кода C#?). Это будет выполняться так же быстро, как если бы я написал функцию непосредственно в своем исходном коде, с небольшим замедлением, поскольку C#/Java оба JIT-компилируются в машинный код. Ограничение заключается в том, что Java мало поддерживается на мобильных устройствах, а C# доступен только для Windows.
3) Встроить компилятор/компилятор ассемблера/С++ для любого скомпилированного языка, который я использую. Ограничение в том, что он не будет работать и на мобильных устройствах — он не позволит мне выполнить файл данных.
4) Напишите HTML/Javascript, затем вставьте его в элемент управления веб-браузера и поместите в приложение (я думаю, что некоторые люди используют этот способ для создания универсального приложения, которое будет работать где угодно). Но это также медленно, и написание реальных приложений на Javascript — это боль.
Какой вариант вы считаете наиболее подходящим? Или, возможно, мне следует пойти с миксом, может быть, код моего приложения создаст и выполнит сгенерированную функцию Javascript?