我有一个用C#编写的系统,它被设计为一个包含实现某个接口的类的dll,然后实例化该类并调用某些接口方法并使用响应。
背景是建立人工智能竞赛,人们将他们的AI提交为C#dll。这一切都很完美。耶!
现在我想通过相同的方法开始支持其他语言。
从根本上说,用户应该上传一个文件(以及有关哪种文件的元数据),然后我会相应地调用该文件的内容。
对于C#,那就是"上传一个dll"和#34;使用C#System.Reflection
实例化它以获得实现接口的C#对象,然后只需调用相关方法"。
我有兴趣知道我可以支持哪些其他语言? 我可以与任何可以编译成.exe并通过命令行进行交互的东西进行交互,或者我可以设置基于Web API的交互。
但是对于那些更直接类似于实例化对象并直接与该对象交互的东西有什么选择呢?
我非常高兴能找到解决这个特定语言问题的其他SO问题的链接的答案 - 尽管我希望您确保它在我的特定上下文,用户上传文件(可能是zip?),我直接在服务器端C#环境中调用它。
答案 0 :(得分:2)
发现在CLR中运行的语言绝对是最好的方法吗?它们与C#的接口方式并不是很一致,而且您正在做额外的工作来支持每种语言。
另一种方法是生成一个单独的沙盒进程,并通过一些定义明确的接口进行交互(例如,某些商定的协议使用标准I / O流,或TCP在特定端口或某些东西上)。 IIRC这就是Google AI挑战过去的工作方式。这样,您就不必专门实现您需要支持的每种语言。人们只需要提供符合您界面的可执行文件。当然,你有不同的安全沙箱问题,但这仍然是一个普遍的问题,而不是一个必须在每种语言基础上解决的问题。