разгон вычислений
От: MadHuman Россия  
Дата: 06.06.19 15:08
Оценка:
Всем привет!

Есть определённые пользовательские выражения с тривиальными возможностями (скобки, вызовы функций, доступ к переменным), есть парсер — парсит строку в AST,
есть простой интерпретатор, ему на вход AST и enviroment, внутри обход AST и для каждого узла выполняется соотвествующее ему действия.
Стоит задача разогнать скорость выполнения, тк при большом кол-ве повторений скорости интерпретатора уже недостаточно.

Какие подходы на мой взгляд возможны:
1. по AST сформировать функцию-делегат, которая является композицией используемых операций. до конца ещё не понятно как сделать, но где-то слышал про технику.

2. собрать лямбда выражение и компильнуть его.
тут смущает, что слышал, что вроде результаты таких компиляций остаются в памяти и соотвествеено есть риск чрезмерного её расхода при большом и частом количестве вычислений.
также слышал, что компиляция лямбд сильно не быстрый процесс и при частом выполнении разных выражений может стать проблемой..

3. заморочится за прям генерацию MSIL, но это видится сильно сложнее чем 2, и есть ощущение что не будет сильно быстрее..


Кто сталкивался с подобными задачами или имеет понимание, какой подход лучше выбрать и почему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.