将AutoLISP遗留代码转换为C#最有效的方法是什么?

将AutoLISP遗留代码转换为C#最有效的方法是什么?,c#,functional-programming,legacy,autocad,autolisp,C#,Functional Programming,Legacy,Autocad,Autolisp,我从事的项目主要是在AutoCAD中设计和制造预制建筑构件,如屋顶桁架。我们的目标之一是重新设计一个用LISP编写的程序,用于设计屋顶桁架。我们将在C#中重写LISP代码,并逐步将其实现到他们设置的当前库中 我的问题是,我的任务是构建一个基本的LISP到C#转换器。经过一些研究(谷歌的搜索结果很快表明,这样的事情并不存在于手边),我已经开始考虑用哪种方式转换这些遗留代码会更有效。用C#分析和重写LISP代码块是更好的选择,还是我应该继续为AutoLISP代码开发一个基本的转换器?你应该用C#分析

我从事的项目主要是在AutoCAD中设计和制造预制建筑构件,如屋顶桁架。我们的目标之一是重新设计一个用LISP编写的程序,用于设计屋顶桁架。我们将在C#中重写LISP代码,并逐步将其实现到他们设置的当前库中


我的问题是,我的任务是构建一个基本的LISP到C#转换器。经过一些研究(谷歌的搜索结果很快表明,这样的事情并不存在于手边),我已经开始考虑用哪种方式转换这些遗留代码会更有效。用C#分析和重写LISP代码块是更好的选择,还是我应该继续为AutoLISP代码开发一个基本的转换器?

你应该用C#分析和重写LISP代码块

即使用C#编写通用LISP解释器比用C#重写LISP要省力(这是极不可能的),LISP可能正在运行AutoCAD命令,就像您在AutoCAD命令行中键入的命令一样,而不是用ObjectARX方式。因此,您还需要将命令转换为使用ObjectARX API。

C#是一种编译的面向对象编程语言,而AutoLISP是一种面向解释表达式的语言。因此,如果不付出巨大的努力,就永远不会有一种真正直接的方式将一个转化为另一个


值得注意的是,AutoLISP具有快速修改的灵活性,无需重新编译。使用本机进程内C#的好处是,与类似的LISP方法相比,它的速度非常快。我发现在保持LISP的灵活性方面有一个很好的折衷方案,即C#的速度和功能,它利用了.NET本机API中的LispFunction命令标志和ResultBuffer类型。

为什么?除非性能有问题或者代码很糟糕,那么为什么不维护Lisp代码呢?周围有很多了解Autolisp的资源和开发人员,它不会很快消失。另外,该API比.NET或ObjectArx API稳定得多。