C#脚本语言与自己的语言

Ben*_*dEg 0 .net c#

我正在为我的产品搜索脚本语言,这将允许轻松定制.

我已经构建了自己的基于XML的小语言,但我对这个解决方案并不满意:

<ScrArp>
    <StaticClass Name="Root">
        <Method Return="Void" Name="Main">
            <Call Method="Print" Text="Hello World" />

            <Declare Type="SampleClass" Name="myInstance">
                <Set>
                    <NewInstance Type="SimpleClass" />
                </Set>
            </Declare>

            <Call Text="Hello 123">
                <Instance Name="myInstance">
                    <!-- <Instance Name="mySample2..."> -->
                    <Method Name="TestMethod" />
                    <!-- </Instance> -->
                </Instance>
            </Call>
        </Method>
    </StaticClass>

    <Class Name="SampleClass">
        <Method Return="Void" Name="TestMethod">
            <Parameter>
                <Declare Type="String" Name="Text" />
            <Parameter>
            <Call Method="Print">
                <Text>
                    <Get Name="Text" />
                </Text>
            </Call>
        </Method>

        <Method Return="String" Name="Method2">
            <Declare Type="String" Name="cReturnValue" />

            <Set>
                <Instance Name="cReturnValue" />
                <Value>
                    <Call>
                        <Instance Name="cReturnValue" />
                    </Call>
                <Value>
            </Set>

            <Return>
                <Instance Name="cReturnValue" />
            <Return>
        </Method>
    </Class>
</ScrArp>
Run Code Online (Sandbox Code Playgroud)

我之前使用过Lua和IronPython,但我不太喜欢Lua,据我所知,IronPython只支持社区.

现在我的问题.哪个是C#脚本编写的最佳解决方案? - IronPython - Lua - 我自己的小语言?

谢谢!

Mos*_*aou 6

如果你想艰难前行,我建议你花费大约6个月左右的时间来编写自己的"编译器".如果您想要一种更简单的方法,我建议您使用实际的C#语言提供脚本,并使用CodeDOM进行编译和执行.

为了正确使用生成/编译的程序集,我建议您强制最终用户使用接口,并在应用程序中使用依赖注入.

编辑:

在您对问题进行编辑之后.说实话,我对Lua或IronPython都没有任何线索,但我肯定知道的事情:你永远不应该尝试重新发明轮子.不要尝试编写自己的语言.我记得花了3个月的时间尝试编写我自己的小型ORM(SQL Generator for Dapper)最终突然发现ServiceStack ORMLite,它比我的代码更好,并提供更高的性能.

正如我之前所解释的,我真的建议使用C#(因为你也在你的应用程序中使用它).

  • @MarkWalsh:问题不在于找到一种方法来实现尚未存在的东西.这是在寻找在特定应用程序中最佳实现的解决方案.再次,重新发明轮子仍然会导致你的轮子.我们不讨论火星探险车. (2认同)