Dostępne są języki zinterpretowane, takie jak Lisp, Tcl, Perl itd., Które ułatwiają zdefiniowanie lambda/proc/sub w kodzie w czasie wykonywania i ocenę to w tej samej sesji.Składanie funkcji według potrzeb i szybkie jej obliczanie
Istnieją skompilowane języki, takie jak C++, które byłyby wykonywane o wiele szybciej niż te interpretowane, jednak zdefiniowanie funkcji w skompilowanym programie podczas wykonywania i wykonanie go nie jest łatwe, jeśli w ogóle możliwe.
Problem polega na tym, aby wykonać następujące czynności:
zdefiniować funkcję w trakcie wykonywania: na przykład, na podstawie wstępnych danych wejściowych czerpać analitycznego modelu danych.
Wykonaj powyższą funkcję szybko w pętli: na przykład zastosuj wyprowadzony model analityczny do analizy danych przychodzących.
Jednym z rozwiązań, które widziałem nie była bardzo ładna:
Procedura reprezentujący analitycznego modelu pochodzi z wbudowanego Tcl na podstawie wstępnych danych wejściowych.
Tablica przeglądowa została stworzona poprzez ocenę procedury w Tcl na tablicy punktów prób, które, optymistycznie rzecz biorąc, obejmowałyby zakres stosowalności.
Tablica wyników została przekazana z interpretera Tcl z powrotem do pliku binarnego (który został opracowany w C++).
Następnie przychodzące dane zostały przeanalizowane poprzez interpolację między wartościami "wystarczająco zbliżonymi" w tabeli odnośników.
Powyższe rozwiązanie działa, ale ma sporo problemów, zarówno koncepcyjnych, jak i obliczeniowych. Zatem pytanie: czy możliwe jest zdefiniowanie funkcji wyłącznie w C++ i udostępnienie jej do wykonania w ramach tej samej sesji środowiska wykonawczego?
Czy można rozumieć koncepcyjnie, jak stworzyć funkcję jako ciąg znaków, skompilować ją w pamięci i jakoś połączyć z powrotem do wykonywanego pliku binarnego?
Istnieje wiele wydajnych kompilatorów Lisp. Istnieją wirtualne maszyny oparte na JIT, takie jak .NET i JVM. Istnieją wbudowane kompilatory C (tcc, clang). Łatwo jest również wygenerować LLVM IR bezpośrednio, z wszystkimi zaletami potężnego kompilatora optymalizującego. –
Nawet interpretatory C++ są szeroko stosowane, zobacz CINT i ROOT. –