【发布时间】:2011-12-28 20:23:43
【问题描述】:
我完全是 Matlab 的新手 我想问一下,当我们在 Matlab 软件或 IDE 中编写程序并保存时 .m(dot m)文件然后编译执行,那么.m(dot m)文件转换成哪个文件?我想知道这一点,因为我听说 matlab 是独立于平台的,我用谷歌搜索了这个,但我将 matlab 文件转换为 C、C++ 等 抱歉这个愚蠢的问题,提前谢谢。
【问题讨论】:
标签: matlab
我完全是 Matlab 的新手 我想问一下,当我们在 Matlab 软件或 IDE 中编写程序并保存时 .m(dot m)文件然后编译执行,那么.m(dot m)文件转换成哪个文件?我想知道这一点,因为我听说 matlab 是独立于平台的,我用谷歌搜索了这个,但我将 matlab 文件转换为 C、C++ 等 抱歉这个愚蠢的问题,提前谢谢。
【问题讨论】:
标签: matlab
Matlab 是一个interpreted language。所以在大多数情况下,没有持久的中间形式。但是,有一种称为pcode 的加密中间形式,还有 MATLAB 编译器和 MATLAB 编码器,它们以 C 等其他高级语言提供代码。
编辑:
pcode 不会自动生成,应该与平台/版本无关。但它的主要目的是加密代码,而不是编译它(尽管它会进行一些部分编译)。要使用pcode,您仍然需要安装 MATLAB 环境,因此在许多方面它就像解释代码一样。
但从您的后续问题来看,我猜您不太了解 MATLAB 的工作原理。代码被解释(尽管有一点即时编译),所以不需要持久的中间代码文件:表示代码的实际数据结构由 MATLAB 维护。与编译语言相比,您的开发周期类似于“编写代码、编译和链接、执行”,编译(实际上是解释)步骤是执行的一部分,因此您最终会得到大多数情况下都是“写代码,执行”。
只是为了让您对编译器和解释器之间的区别有一些直观的了解。编译器将高级语言翻译成低级语言(比如说可以由您的计算机执行的机器代码)。之后,编译后的代码(很可能存储在文件中)由您的计算机执行。另一方面,解释器逐段解释您的高级代码,确定在程序运行时哪些机器代码对应于您的高级代码,并立即执行该机器代码。因此,实际上不需要提供与整个程序等效的机器代码(因此在许多情况下,解释器不会存储完整的机器代码,因为这只是浪费精力和空间)。
您可以或多或少地将解释视为人类对代码的解释:当您尝试手动确定某些代码的输出时,您会逐行跟踪计算并跟踪结果。您通常不会将整个代码翻译成某种不同的形式,然后再执行该代码。而且由于您不完全翻译代码,因此无需持久存储中间形式。
正如我上面所说:您可以使用其他工具(例如 MATLAB coder)将您的 MATLAB 代码转换为其他高级语言(例如 C/C++),或者您可以使用 MATLAB compiler 将您的代码编译为依赖于的可执行形式在一些运行时库上。但这些仅在非常特定的情况下使用(例如,当您必须在没有 MATLAB 的计算机/嵌入式设备上部署 MATLAB 应用程序时,当您需要提高代码性能时,......)
注意:我对编译器和解释器的解释是对原型解释器和编译器的快速比较。许多现实生活中的案例介于两者之间,例如Java 通常编译为(JVM)字节码,然后由 JVM 解释,对于 .NET 语言及其 CLR 也有类似的说法。
【讨论】:
p 代码不会自动生成,但我建议您作为初学者远离pcode。如果我上面的解释不够清楚,您可能想看看编译语言和解释语言之间的区别。
由于 MATLAB 是一个解释器,您可以编写代码并从 IDE 中直接执行,无需编译。
如果您想部署您的程序,您可以使用 MATLAB 编译器创建一个可以在 C++ 项目中使用的独立可执行文件或共享库。在 Windows 上,MATLAB 代码将分别编译为 .EXE 文件或 .DLL 文件。
【讨论】: