如何解决对高度依赖数学的用户编码的脚本或插件语言的建议?
| 关闭。这个问题是题外话。它当前不接受答案。解决方法
根据您的需要,以下是一些准则:
在语言和库之间进行区分-您可以使用数学语言(如MATLAB)或从高级语言调用的数学库(如Python);
语言(或库)应由数学家为数学家设计;
使用的语言应该是现有的语言(不要重新发明轮子);
您应该能够与现有软件共享脚本内容。
您不应该从头开始这么大的复杂项目(数学脚本)。
所以我想这可能会减少候选人名单:
没有为此类用法设计(未使用)JavaScript;
Delphi脚本(DWS或PascalScript)主要用于自动化,而不是用于计算(并且未得到广泛使用)。
我不知道为什么要谈论在客户应用程序中使用Delphi IDE,但是您不应该使用Delphi IDE进行这样的专有开发:原始的自定义IDE将比完整的RAD更具生产力。
也许应该考虑使用Lua:您可以使用此脚本引擎进行任何操作-但是与Python不同,使用Lua的数学家并不多。
在开源世界中,您可以找到很多非常有趣的解决方案。参见http://blog.interlinked.org/science/open_source_math_programs.html
我想可以考虑使用八度。它简单,强大,成熟,知名,被许多软件和跨平台使用。
据我所知,您可以从C / C ++代码中调用Octave库。翻译相关的.h文件后,可以从Delphi IMHO中完成此操作。
但是请注意GPL许可证。如果您的软件是专有软件,则不可能将Octave作为软件的一部分进行分发。但是,如果您在软件和GPL软件之间做出明确区分,则可以从软件中调用Octave库或任何其他GPL内容(例如Python)。
嵌入Python可能是一个很好的解决方案。可以从Delphi调用此语言,您应该具有良好的体系结构,而无需直接调用某些C库(例如Octave)。在您的Delphi应用程序中,Python可能是您通往所有其他计算库的大门。例如,可以从某些Python库中调用Octave。您还可以使用Python脚本来自动化您自己的应用程序。而且您在Delphi中有一些Python IDE。当然,每个组件的开源许可证都是安全的。我想得越多,我越喜欢后一种解决方案...
只是我的两分钱。 :)
, 没有明确的答案,但还有其他一些建议:
看一下LMD创新ScriptPack,它支持本机Pascal脚本以及基于ActiveScripting的语言。警告:我使用了许多LMD工具和组件,但我个人并未使用Scriptpack。
LMD还有一个IDE-Tools软件包,如果您需要这样做,它可以真正简化制作简单的自定义\'RAD \'工具的任务
再次投票给Lua。我已经在C ++ Builder2010应用程序中使用Lua作为脚本语言,并且效果很好。您可以利用C ++ Builder / Delphi RTTI来帮助Lua脚本和C ++代码之间的集成。
回覆。 Lua:我们有一个产品,其中多年来一直使用超简单的“自制”脚本系统。没有循环,条件或过程-只是一系列参数化命令。我们希望将其扩展到更强大的功能,并且选择第三方解决方案似乎比重新发明轮子要容易得多。为此选择Lua的主要原因是:
快速
提供已出版的书籍(在Lua编程)
用C写
通过静态链接可直接嵌入我们的项目中
麻省理工学院执照
C ++代码可以调用调用Lua代码并访问Lua变量
Lua代码可以调用C ++函数
部署占用空间小。在压缩之前,Lua及其标准库在200K以下添加到我们的.EXE中。
我确定其他语言本来也一样好,但是Lua的“轻量级”特质为我提供了帮助。
,我喜欢那里的许多答案,而且,我是一个有偏差的Delphi书呆子:),但我建议您使用以下组合:RO Pascal Script + ESBPCS for VCL。
我不知道这听起来是否像您-但我会尝试一下。
从网站上,我提取了有关库的矩阵非可视部分的此链接。
还有更多,您可能想尝试一下!
, 使用Python,您可以“免费”获得NumPy和SciPy。是的,有GIL,但是只有在您的Python解释器运行多个线程时,它才处于活动状态。我相信您可以在单独的线程中运行多个Python主机,而不会出现问题(请尝试一下,请尝试)。
另外,还有诸如多处理之类的东西。
Python 3仍在流行,NumPy在1.5.0版中开始支持Python 3,而SciPy在0.9.0版中开始支持。此外,GIL仍与Python 3配合使用,尽管已重做,所以它应该更好。 NumPy还会在操作过程中释放锁定。
, 我们已经非常成功地使用了Microsoft脚本自动化(活动脚本)。基本上,您必须实现将运行脚本的主机。可以使用当前计算机上安装的任何语言编写脚本。我们在脚本中使用JavaScript,但您不仅限于此。那里有很多脚本实现(甚至是python)。
从您的角度来看,您将必须提供一个脚本运行框架。这不简单,但具有基本的COM理解也不难。有一些针对Delphi的实现。这里有一些资源:http://www.torry.net/pages.php?id=280,但是您可以在网上找到所有资源。
祝好运!
, 我建议卢阿。它是最常用的脚本语言之一,有很多工具,例如调试器,带有语法高亮显示的编辑器等,很多人都在使用它,它是您可以轻松插入的最快的脚本语言之一进入ac / c ++引擎。将C函数扩展到其中真的很容易(特别是如果您使用的是LuaJIT和FFI)。在lua中没有真正好的多线程方法,但是您可以在单独的线程中轻松运行lua的多个实例以运行多个脚本。
, 因为您需要一种针对数学的脚本语言,所以我建议您看一下Common Lisp。它是LISP的方言,它最初是作为计算机程序的常规数学符号开发的。像Maxima和Axiom这样的计算机代数系统是用Common Lisp编写的。最值得注意的通用列表实现是ECL,它是根据LGPL许可发布的。当然,还有许多其他开源实现。
还有用于Scheme编程语言(Lisp的方言)的GNU Guile解释器。他们的网站指出
Guile是一种高效的虚拟机,可执行由其优化编译器生成的可移植指令集,并且非常容易与C和C ++应用程序代码集成。除了Scheme之外,Guile还包括ECMAScript和Emacs Lisp的编译器前端(正在支持Lua)...
但是,我从来没有亲自使用过该库,因此无法保证将其嵌入到您的应用程序中实际上是多么容易。
, 没有人提到PaxCompiler,它可以将Pascal,Javascript和Basic编译为本机代码,并且可以轻松地设置为访问Delphi项目中的对象。它具有许多优点:
编译后的代码将比解释后的代码运行得更快
它提供了3种不同的编程语言,因此几乎所有开发人员都可以感到宾至如归
作为Delphi开发人员,您可以访问源代码,并且它与您的项目紧密集成。
价格很有趣
受欢迎的项目的缺点和挑战是:
确保三种语言均等对待:根据我的测试,感觉捆绑示例中的JavaScript落后了
如果您选择捆绑所有3种编程语言,则可能要提供所有语言的几乎所有示例,并且必须对这三种语言都感到满意
,我建议您围绕经典的开源数学程序Maxima(在Windows上称为wxMaxima)研究基于wx(C ++)的GUI包装。但是,它是GPL许可的,而不是LGPL的,因此衍生作品也必须是开源的。
您应该能够使用此应用程序及其代数引擎,也许您可以围绕MACSYMA / MAXIMA(LISP)引擎为此C ++ UI编写自己的Delphi包装器。他们系统的源代码包括一些您可能还希望包装并作为服务提供的东西:
一种将数学方程式编码为来自用户输入格式的显示格式的方法,该格式定义明确,然后可以记录下来。
一个简单的“语言”规范,您可以用来编写“ WYSIWYG方程”工具。
Maxima可以处理图,矩阵,线性代数和基本计算,并且引擎坚固。
由于您已经在C ++中做过很多事情,因此,我将考虑使用以wxMaxima为基础的wxWidgets进行整个应用程序。我不确定是否可以在C ++ Builder中进行wx + VCL混合,但是您当然应该尝试一下。如果不能,那么我会说使用wxWidgets在VC ++中创建主应用程序,并在Delphi中为其创建插件(作为DLL)。
, 我的想法:
通过其API(C,Java,C#)调用Mathematica,但恐怕对您而言可能太慢
http://reference.wolfram.com/mathematica/guide/MathLinkAPI.html
使用http://fsharppowerpack.codeplex.com/及其fslex fsyacc生成F#。
另请参阅:如何评估以字符串形式存储在F#中的表达式,
Tim Robinson用F#构建LISP编译器
, 您提到您的听众可能已经习惯了R。您应该考虑将产品与R集成在一起,既可以作为R扩展,也可以从产品中调用R。请参阅编写R扩展。这样,您就可以利用R \的功能和用户对R的熟悉程度。
, python上的GIL不应成为风云人物,因为它的存在并不意味着您的应用程序无法执行多线程。的确,您不能使用系统上所有可用的CPU内核,但是同样,这只会影响大多数代码是用python编写的情况。您的应用程序将托管python代码,对吗?这些脚本会密集调用宿主应用程序中可用的数学例程。这意味着仍然有很多方法可以释放并保持GIL在您的应用程序上,以最大程度地减少其副作用,您会很好的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。