Database design 我应该如何构建财务DSL?

Database design 我应该如何构建财务DSL?,database-design,programming-languages,finance,dsl,Database Design,Programming Languages,Finance,Dsl,我决定建立一个数据库,跟踪我在邮件中收到的信用卡优惠,其中一个令人困惑的因素是如何表示优惠。在最低财务费用、可变利率和最低可变利率的情况下,它比10.99%要复杂一些。我决定,如果我有机会比较或分析这些产品,我需要构造一种语言来表示这些东西 问题是,我如何表示这一点?这些公式太复杂了,无法通过创建字段来建模,所以我将把公式存储在数据库中。是的,这意味着模糊了数据和执行之间的界限,但由于这是一个个人项目,我不那么担心 嵌入式python。将公式表示为Python,只需绑定相关变量并调用公式。 使用

我决定建立一个数据库,跟踪我在邮件中收到的信用卡优惠,其中一个令人困惑的因素是如何表示优惠。在最低财务费用、可变利率和最低可变利率的情况下,它比10.99%要复杂一些。我决定,如果我有机会比较或分析这些产品,我需要构造一种语言来表示这些东西

问题是,我如何表示这一点?这些公式太复杂了,无法通过创建字段来建模,所以我将把公式存储在数据库中。是的,这意味着模糊了数据和执行之间的界限,但由于这是一个个人项目,我不那么担心

嵌入式python。将公式表示为Python,只需绑定相关变量并调用公式。 使用特定于域的语言。我不是第一个想到用这种方式来表达事物的人,事实上我知道我不是。是否有任何免费的公共语言可以代表这一点?
有人能就哪种方法更好提供建议吗?

如果您觉得必须将公式存储在数据库中,我支持嵌入式Python


DSL似乎有点过头了;您已经有了一种非常好的计算公式的语言。

如果您觉得必须将公式存储在数据库中,我支持嵌入式Python


DSL似乎有点过头了;您已经有了一种非常好的计算公式的语言。

这听起来有点类似于Simon Peyton Jones等人的工作,包括一个,包括在它们上面运行计算函数的能力,以计算给定模型的合同价值。我对金融的了解还不足以告诉你这是否正是你所要寻找的,但听起来好像是在正确的范围内


至于您的具体问题,我通常更喜欢嵌入式领域特定语言,即嵌入在宿主语言中的类似DSL的结构,例如Ruby及其面向对象的元编程、Scheme及其宏或Haskell combinator库,因为它免费为您提供宿主语言的全部功能;通常,在编写具有自己的语法、执行模型、运行时等的领域特定语言时,您会遇到一些事情,如果您有可用的现有语言,这些事情将很容易完成,但是,由于您还没有在DSL中实现某些东西,因此很难处理这些问题。

这听起来有点类似于Simon Peyton Jones等人的工作,包括一个,包括对它们运行评估函数以计算给定模型的合同价值的能力。我对金融的了解还不足以告诉你这是否正是你所要寻找的,但听起来好像是在正确的范围内

至于您的具体问题,我通常更喜欢嵌入式领域特定语言,即嵌入在宿主语言中的类似DSL的结构,例如Ruby及其面向对象的元编程、Scheme及其宏或Haskell combinator库,因为它免费为您提供宿主语言的全部功能;通常,在编写具有自己语法、执行模型、运行时等的特定于域的语言时,您会遇到一些事情,如果您有可用的现有语言,这些事情将很容易完成,但由于您尚未在DSL中实现某些功能,因此很难处理。

另一种选择是使用。它有一个很好的公式表示;将其存储为字符串,然后使用eval函数对其求值。还有大量的金融图书馆,请参见

R还与其他语言非常好地交互,包括Python、java和C++。您提到了Python:如果您想编写包装器脚本,可以使用RPy。

另一个选项是使用。它有一个很好的公式表示;将其存储为字符串,然后使用eval函数对其求值。还有大量的金融图书馆,请参见


R还与其他语言非常好地交互,包括Python、java和C++。你提到Python:如果你想写一个包装器脚本,你可以使用RPy。

我非常赞赏你在这里的努力,你让我们现在就想去清理垃圾。我非常赞赏你在这里的努力,你让我们现在就想去清理垃圾。我想,好处是,可能操作DSL的解析树比借用语法更容易。这两种方法都有优点。我发现最好从嵌入式DSL开始,因为你不太可能花太多时间提前重新实现一些在你的宿主语言中已经实现得更好的东西;然后,如果更好的语法真的能帮助你表达你的想法,在某些情况下,你可以编写你的解析器,让它在后端使用你为嵌入式DSL构建的所有东西。同样,当我在Scheme中设计宏时,我会首先尝试设计一个好的常规API,并将宏用作
我认为,它的优点可能是操作DSL的解析树比借用语法更容易。这两种方法都有优点。我发现最好从嵌入式DSL开始,因为你不太可能花太多时间提前重新实现一些在你的宿主语言中已经实现得更好的东西;然后,如果更好的语法真的能帮助你表达你的想法,在某些情况下,你可以编写你的解析器,让它在后端使用你为嵌入式DSL构建的所有东西。类似地,当我在Scheme中设计宏时,我会首先尝试设计一个好的常规API,并将宏作为一个薄层使用。