人类智慧的总和不包含在任何一种语言中
--埃兹拉·庞德
Octave是一种极好的语言,可以解决科学和工程中的许多问题。然而,它并不是唯一的计算机语言,有时你可能想使用其他语言编写的代码。这样做的充分理从包括:1)不重新发明轮子;已经过充分测试和调试的现有函数库或大规模模拟代码库就是一个很好的例子,2)访问不同语言的独特能力;例如,众所周知的Perl正则表达式函数(但不要这样做,因为正则表达式
Octave中已存在)。
性能通常应不是使用compiledextension的一个原因。尽管编译后的扩展可以更快地运行,特别是如果它们取代了Octave代码中的循环,但这几乎从来都不是最好的路径。首先,有许多技术可以在保留语言的同时提高Octave的性能。其次,Octave是一种高级语言,使它能够轻松地执行常见的数学任务。放弃这一点意味着将焦点从解决实际问题转移到解决计算机编程问题上。这意味着返回到低级别结构体,如指针、内存管理、数学上溢/下溢等。从于低级别的性质,以及编译的代码在Octave之外执行的事实,很有可能导致解释器崩溃并丢失工作。
在继续之前,您应该首先确定是否真的需要在Octave之外麻烦地编写代码。
即使函数已经存在于语言之外,也最好在m文件中暗示再现行为,而不是尝试与外部代码接口。
若性能是一个问题,那个么您应该始终从语言内技术开始,以获得更好的性能。其中最主要的是向量化(详见向量化和更快的代码执行)这不仅使代码简洁易懂,而且提高了性能(10X-100X)。如果必须使用循环,请确保变量空间的赋值是在循环之外进行的,使用对适当大小或零的矩阵的赋值。
这些子程序是高度优化的,并且许多子程序不承担被解释的开销。
学习Octave的外部代码接口需要时间,编译器等工具也不可避免地会出现问题。
话虽如此,Octave提供了一个通用的接口,用于将编译代码块作为动态链接的扩展包含在内。这些动态链接的函数可以用与任何普通函数相同的方式从解释器调用。接口是双向的,外部代码可以调用Octavefunctions(如plot
)否则可能很难开发。
该接口以支持C++、C和Fortran语言为中心。Octave本身是用C++编写的,可以通过其原生oct文件接口调用外部C++/C代码。还通过themex文件接口支持C语言,以与兼容MATLAB.Fortran代码最容易通过oct文件接口访问。
因为许多其他语言提供C或C++API,所以在Octave和其他语言之间建立桥梁相对简单。这也是桥接硬件资源的一种方式,这些资源通常具有用C编写的设备驱动程序。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号