我正在制作一个遗传程序,但是我遇到了C#的局限,我想向该算法展示新功能,但是如果不重新编译该程序就无法做到。本质上,我希望程序的用户提供允许的功能,GP将自动使用它们。如果要求用户尽可能少地了解编程,那就太好了。
我想插入新功能而不将其编译到程序中。在Python中,这很容易,因为它们都是已解释的,但是我不知道如何使用C#进行操作。有人知道如何在C#中实现这一目标吗?是否有任何库,技术等?
最佳答案
这取决于您希望程序的用户“提供允许的功能”的方式。
在这里托管DLR(以及IronPython或IronRuby)可能是一个不错的选择,因为您将获得一个经过良好测试的环境以及DLR提供的所有优化。 Here's a how-to using IronPython.
针对您的性能问题而添加: DLR在优化方面相当明智。它不会每次都盲目地重新解释源代码:一旦将源代码(或具体而言,给定的函数或类)转换为MSIL,它将继续重用该编译表示,直到源代码发生更改(例如,函数已重新定义)。因此,如果用户继续使用相同的功能但在不同的数据集上使用,那么只要您可以保持相同的ScriptScope,就应该获得不错的性能。如果您只是担心您将要在遗传算法中无数次地运行相同的功能,则同上。托管DLR相当容易,因此,不难进行概念验证和度量以查看其是否满足您的需求。
关于c# - C#如何创建在运行时解释的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2458869/