Dav*_*vid 48 c++ delphi api plugins
我已经为这个问题开始了赏金
...因为我真的想要社区的意见.我可以(并且已经)查看了几种语言/框架,并且"好吧,这可能会正常工作" - 但我真的很感谢那些专门针对我面临的问题的建议,尤其是那些有经验整合/使用什么的人你推荐.
我从事科学分析软件的研究.它为数据的数学转换提供了许多工具.一个工具允许用户输入他们自己的等式,该等式在数据集(大的2D或3D矩阵值)上运行并进行评估.
这个工具有一个图形方程编辑器,它在内部构建一个面向对象的表达式树,每个操作都有一个不同的对象(例如,会有一个Logarithm类的实例,它是树中用于添加计算对数的节点一个值的基础;它有两个孩子作为其输入.)部分截图:
您可以在左侧看到它正在构建的树,以及右侧菜单中的许多(五十个)潜在操作中的一些.
这有一些缺点:
对于我们的用户希望能够使用它的那种东西,它更简单,但不再是更简洁.如果我现在写它我会做得完全不同 - 这是我的机会:)
我想为用户提供更强大的功能,让他们编写代码 - 脚本或编译 - 可以执行更高级的操作. 我正在寻求对这应该使用的技术或采取最佳方法的建议.
这问题的其余部分很长 - 我很抱歉.我试图详细描述这个问题.在此先感谢您阅读:)
我们的数学运算在大型矩阵上.在上面的等式中,V1表示输入(可能是许多之一)并且是2D或3D,并且每个维度可以是大的:大约数千或数十万.(我们很少同时计算所有这些,只是片段/片段.但如果答案涉及需要编组数据的内容,请注意这个问题的大小和速度.)
我们提供的操作允许您编写,比如说,2 x V
将每个元素乘以V
2.结果是另一个相同大小的矩阵.换句话说,一个脚本或编程语言,其中包括标准的数学元是不够的:我们需要的是能够控制哪些元可用,或如何得到实施.
这些操作可能很复杂:输入可以像数字(2,5.3,pi)一样简单,也可以像1,2或3维矩阵一样复杂,其中包含数字,布尔或复数(配对值)数据.我目前的想法是一种强大的语言,我们可以将数据类型公开为类,并可以实现标准运算符.一个简单的评估者是不够的.
我们的受众主要是研究科学家,他们不习惯编码,或者可能习惯于像Matlab或R这样的语言.
我们使用Embarcadero C++ Builder 2010进行开发,使用少量Delphi.这可能会限制我们可以使用的东西 - 仅仅因为某些东西的C++,并不意味着如果它只是针对VC++或GCC进行编码就会起作用.它还必须适合与商业软件一起使用.
我们的软件目前有一个COM接口,部分应用程序可以自动化,我们的应用程序是进程外的COM服务器.我们可以将COM接口添加到某些内部对象,或者如果需要,可以专门为此创建第二个COM框架.
包括这个在内的"工具"正在迁移到多线程框架.最终解决方案需要能够在任何线程中执行,并且可以在多个线程中同时执行多个实例.这可能会影响托管语言运行时 - 例如,Python 2.x具有全局锁定.
使用图书馆附带的语言进行数学或科学使用会很棒.
向后兼容旧表达式工具并不重要.这是版本2:干净的石板!
TObject
派生类的语言.我不知道是否可以提供运算符重载.感谢您的输入!我很欣赏所有的答案,即使它们不是很完美 - 我可以研究,我只是在指示去哪里,以及意见(请在答案中包含理由的意见:p)如何处理它或者可能的适用.每个答案,无论多短,都将受到赞赏.但是如果你推荐一些细节而不仅仅是"使用语言X"我会非常感兴趣阅读它:)
干杯,
大卫
到目前为止,已推荐以下内容:
Python:2.6具有全局锁定,听起来像游戏杀手.3(显然)尚未得到有用库的广泛支持.听起来对我来说(我知道我是Python社区的局外人),就像它有点碎片一样 - 使用它真的安全吗?
Lua:似乎不是直接OO,而是提供"实现功能的元机制,而不是直接在语言中提供大量功能".从程序员的角度来看,这听起来非常酷,但这不是针对那些想要玩酷玩的程序员.我不确定它对目标受众的效果如何 - 我认为提供更多基础知识的语言会更好.
MS脚本/ ActiveScript.我们已经提供了一个外部COM接口,用户可以使用它自动化我们的软件,通常是在VBScript中.但是,我想要一个比VBS更强大(而且,坦率地说,设计得更好)的语言,我不认为JScript也适合.我也不确定可能在COM上编组数据的问题 - 我们有很多数据,通常是非常具体的类型,所以速度和保持这些类型很重要.
Lisp:我甚至都没想过那种语言,但我知道它有很多粉丝.
托管.Net插件:任何人都没有提到.这不是个好主意吗?你得到C#,F#,Python ...... COM可能有相同的编组问题吗?(托管CLR是通过COM工作吗?)
一些澄清:通过"矩阵",我指的是Matlab变量意义上的矩阵,即一个巨大的值表 - 而不是像你可能用于3D软件的4x4变换矩阵.它是随着时间的推移收集的数据,成千上万的值通常是每秒多次.我们也不是在计算机代数系统之后,而是用户可以编写完整插件并编写自己的数学的东西 - 尽管具有处理复杂数学能力的系统,如计算机代数系统,可能会很有用.如果两者不混合,允许在用户代码中使用复杂的分支/路径,以及OO接口,我会对"代数"采用"全语言".
Arn*_*hez 18
根据您的需求,这里有一些指导方针:
所以我猜它可以减少候选人名单:
在开源世界中,您可以找到许多非常有趣的解决方案.请参见http://blog.interlinked.org/science/open_source_math_programs.html
我想可以考虑Octave.它简单,强大,成熟,众所周知,被许多软件和跨平台使用.
据我所知,您可以从C/C++代码调用Octave库.在翻译相关的.h文件后,可以从Delphi IMHO完成.
但要注意GPL许可证.如果您的软件是专有软件,则可能无法将Octave作为软件的一部分进行分发.但是,如果您明确区分软件和GPL软件,则可以从软件中调用Octave库或任何其他GPL内容(如Python).
嵌入Python可能是一个很好的解决方案.这个语言可以从Delphi调用,你应该有一个很好的架构,而不需要像Octave那样直接调用一些C库.从您的Delphi应用程序中,Python可以成为所有其他计算库的主要门户.例如,可以从一些Python库中调用Octave.您还可以使用Python脚本自动化您自己的应用程序.你在Delphi中有一些Python IDE.当然,每个组件的开源许可证都是安全的.我想的越多,我就越喜欢后一种解决方案......
只是我的两分钱.:)
没有确定的答案,但还有一些其他的建议: -
查看支持本机Pascal脚本的LMD Innovative ScriptPack以及基于ActiveScripting的语言.警告:我使用了很多LMD工具和组件,但我没有亲自使用过Scriptpack.
LMD还有IDE-Tools软件包,如果你需要走这条路,它可以真正简化制作简单定制'RAD'工具的任务
回覆.Lua:我们的产品多年来都有一个超级简单的"自制"脚本系统.没有循环,条件或过程 - 只是一系列参数化命令.我们希望将其扩展到更强大的功能,而选择第三方解决方案似乎比重新发明轮子要轻松得多.选择Lua的主要原因是: -
我敢肯定其他语言本来可以同样好,但是Lua的"轻量级"特性为我提供了它.
归档时间: |
|
查看次数: |
3092 次 |
最近记录: |