我在一家专门从事金融业的精品店工作。
我们考虑设计一种语言来描述与金融市场相关的金融实体。
这主要用作某种脚本语言来替换电子表格和VBA宏中的许多进程。
它必须简单,事实上它在幕后调用各种C ++和C#库。它必须让用户处理抽象的对象,这些对象可以表示时间序列(日内和日常)。
它必须是完全可调试的,当用户遇到问题时,我们必须能够介入C ++ / C#代码并重现错误。理想情况下,它必须能够通过Excel中的某种机制启动并在Excel中返回结果。 (不幸的是,几乎所有在财务部门工作的人都使用Excel)
如果你不得不做这个任务,你会怎么做呢?
你会选择功能语法吗?
你会开发一些可以解释的脚本语言吗?或者你会用另一种语言编译它(比如用C ++或C#转换脚本)?
我没有找到任何开源项目进行此类开发,但有没有使用这种语法的商业产品?
编辑:我读了你所有的答案,但我会等待更多时间才能找到答案。虽然它们都是非常有用的意见!
EDIT2:我将High-Performance Mark标记为解决方案。您的所有回复都非常有用,我已将其全部修改完毕。他是第一个答案之一,他的答复对我们非常有见地。
答案 0 :(得分:10)
我建议您专注于使用您首选的OO语言(C#或C ++)开发一组丰富的类,但我怀疑您可能会发现将前者与Excel集成更容易。这将为您提供语言来描述与金融市场相关的金融实体。完成后,您应该考虑是否继续使用某种特定于域的语言包装这些类,或者只是将它们公开给您的用户社区。 p>
我怀疑你的域有一些不可复制的复杂性,并且中间DSL必须(几乎)像你的类集一样复杂,因此,你创建它时几乎没有什么好处。
另一种方法是将Excel与Mathematica集成,Wolfram为其生成某种工具箱。我没有这方面的经验,但Mathematica当然适合你必须做的任何计算。
此致
答案 1 :(得分:5)
我会用Python包装C ++库。
我会定义一个流畅的类包,实际上是我的域特定语言。
我会基于这两个基础直接使用Python语言。我不会发明自己的新语法。世界不需要另一种语法;我们有足够的语法和语法来解析,足以持续到时间结束。
你会选择功能语法吗? Python具有功能。如果你对Python类设计很小心,你可以实现一个干净的功能风格。
理想情况下,必须能够通过Excel中的某种机制启动并在Excel中返回结果。
由于Python解释器可以嵌入到C ++(或C#)应用程序中,因此您可以轻松创建Excel API。从Excel到您的新语言,在C ++ API中尽可能少地启动Python功能。
顺便说一下,你的竞争对手是Resolver One。这就是他们所做的。答案 2 :(得分:3)
ResolverOne(http://www.resolversystems.com/products/resolver-one/)是Excel和Python的组合。你有没有考虑过使用它?
答案 3 :(得分:3)
我建议使用R。
答案 4 :(得分:3)
利用c#的另一种观点。
由于您已经拥有一个功能强大的通用功能编程工具,您的用户熟悉并以Excel的形式购买,我希望能够构建一个解决方案。你仍然可以选择使用其他第三方附加组件和集成选项(例如R和Mathematica)
我会研究用户定义函数的托管自动化加载项。这些本质上是使用System.Runtime.InteropServices的c#库项目,如本文link text中所述。对于用户,使用函数向导以正常方式在单元级别添加这些函数,并且可以或多或少地按照您希望的那样。这就是你的DSL。用户可以选择轻松地将功能集成到现有模型中。对原型进行原型设计以测试其可行性也很快。这些是完全可调试的。
此外,使用Visual Studio Tools for Office,您可以访问完整的Excel对象层次结构,甚至可以添加操作窗格,可以通过拖放控件来布置更复杂的数据输入要求。我相信如果您需要添加专门的可视化,甚至可以以这种方式使用WPF和Excel。如果您需要将数据保留回来说出Sql Server,您可以使用这种方法构建一个转向验证表单。
我听起来像M $ shill! (只是为了记录,我不适合他们)。
你需要评估这个的表现,我不确定它会如何扩展。
答案 5 :(得分:3)
我相信LexiFi的产品旨在将这项研究商业化。
答案 6 :(得分:2)
Jane Street Capital使用OCaml,并写下他们的经历here。如果广泛阅读,这是非常有趣的。
对于您的环境,如果您遵循他们的模型,您可以使用F#,它开始以OCaml方言为生,但当然在.NET世界中运行。
答案 7 :(得分:1)
如果你的底层库使用Java,你应该看看在Groovy中做DSL。有很多关于此的播客和文章,请尝试Googling“DSL Groovy”。
答案 8 :(得分:1)
大多数数字运算的金融机构(或其中的部门)已经获得了Matlab许可证。我建议你看一下Matlab提供的面向对象设施(实际上,在他们的Financial Toolbox)。
预先我认为你获得了三件事:
1)访问高级环境,用户可以专注于问题,而不是实施 2)高质量图形的可用性 3)与Excel和其他生产力软件包无缝集成
我知道你的意思是开发一种语言(而不是应用程序),但考虑将你的语义捎带到一个熟知的语言 - 这样你就可以避免用户的学习曲线。