LabVIEW是编译型语言还是解释型语言

更新时间:2023-04-20 14:04:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

LabVIEW 是编译型语言还是解释型语言

LabVIEW 和常用的VC++、VB 一样,是编译型语言。LabVIEW 的语法定义比较严格,在程序运行之前会检查所有语句的语法,一旦查出有差错,程序会报错,不能运行。

在LabVIEW是否是编译型语言的问题上容易引起混淆的原因,一是用户看不到编译时生成的目标文件(在LabVIEW 的环境中,可以直接运行一个VI,并不生成任何其他可执行文件);二是LabVIEW 没有编译这个按钮。此外,VI 运行前似乎也没有占用编译时间。

我们可以把LabVIEW 和 C 语言的存储与编译方法作一比较:C 语言的原文件存储在.c 文件中。需要编译时,要显式地告知编译器进行编译。在耗费一段编译时间后,可以看到编译后生成的含有可执行二进制代码的.obj 文件。而LabVIEW 的原代码是存储在.vi 文件中的。

一个.c 文件中通常保存了多个函数,一个由几十个函数构成的 C 语言工程,也许只由两三个.c 文件组成。而通常情况下,一个.vi 文件只存储一个VI,即相当于 C 语言中的一个函数。所以,一个小型LabVIEW 工程也可能由几十个.vi 文件组成。

但在某些情况下,一个.vi 文件也可能包含了某些子VI(子函数),即这些子函数没有他们自己的.vi 文件。这样的子VI 被称为实例VI(Instance VI)。LabVIEW 7版本中出现的、目前很常用的Express VI就是这种Instance VI。他们都是被存储在调用他们的VI 中的。

.c 文件只保存程序的原代码;而.vi 文件不仅保存了LabVIEW 程序的原代码,也保存了程序编译之后生成的目标代码。在LabVIEW 的工程中看不到类似.obj 这样的文件,就是因为编译后的代码也已经被保存在了.vi 中的缘故。

LabVIEW 在运行VI 之前无需编译,是因为LabVIEW 在把VI 装入内存的时候、以及在编辑VI 的同时进行了编译。

当把一个VI 装入内存时,LabVIEW 先要判断一下这个VI 是否需要被编译。一般情况下,如果不对VI的代码做改动,是不需要重新编译的。但是在两种情况下需要重新编译。第一种,是在高版本LabVIEW 中打开一个用低版本LabVIEW 保存的VI;第二种,是在不同的操作系统下装入和打开了同一个VI。

比如,要在LabVIEW 8.0 中打开一个原来用LabVIEW 7.0 编写保存的VI,则被装入的VI 需要被重新编译,因为不同版本的LabVIEW 生成的目标代码会稍有不同。如果你的工程包含有上百个VI,在新版本的LabVIEW 中打开顶层VI,就会明显地察觉到编译所占用的时间。第二种情况的例子是,在Linux 中打开一个原来是在Windows XP 下编写保存的VI,LabVIEW 也需要重新编译。LabVIEW 为不同操作系统生成的目标代码也是不同的。

在以上两种情况下,打开一个VI 后,会发现VI 窗口的标题栏中的标题后面出现一个星号,这表示需要重新保存VI。此时,虽然VI 中的程序原代码没有改变,但是编译生成的目标代码已经变了,所以需要重新保存。

在LabVIEW 安装了升级补丁之后(比如从8.0升级到8.01),程序会提示你是否需要把LabVIEW 自带的VI 全部批量编译(mass compile)。如果你选择“是”,则可能需要占用几个小时的时间才能完成编译。

LabVIEW 在你编辑程序原代码的同时,就会对它进行编译。LabVIEW 只编译你当前正在编辑的这个VI,它的子VI 已经保存有已编译好的目标代码,所以不需要重新编译了。因为每个.vi 只相当于一个函数,代码量不会很大,编译速度就相当快,用户基本上是察觉不到的。你在编写一个LabVIEW程序时,假如你把两个类型不同的接线端联在一起,会看到程序的运行按钮立即断裂,它表示程序已经编译了,并且编译后的代码不可执行。程序编写完毕,所有VI也都已是被编译好了,程序直接运行即可。

有时会出现这种情况:打开一个VI,VI 左上方运行按钮上的箭头是断裂的,表示VI 不能运行。但是点击断裂的箭头,在错误列表里却没有列出任何错误信息。此时箭头断裂是由于VI 保存的编译后的代

码不能执行引起的。例如在上一次打开这个VI 时,有一个被此VI 调用的DLL 文件没有找到,编译后的代码自然不能执行。而后关闭VI 再把缺失的DLL 文件放回去。下次打开始VI 时,理论上VI 应当可以运行了,但是这时LabVIEW 没有重新编译这个VI,VI 中保存的是上一次不可执行的代码,所以运行按钮的箭头仍然断裂。而程序原代码没有任何错误,所以错误列表中什么都看不到。

修复箭头状态的方法是按住Ctrl + Shift 键,再用鼠标左键点击运行按钮(断裂的箭头)。在LabVIEW 中按住Ctrl + Shift 键+ 鼠标左键点击运行按钮表示编译,但不运行,这相当于其他语言的Compile 按钮。

LabVIEW 采用的把可执行代码与源程序保存在同一文件,分散编译的方式,与其它语言相比是相当特殊的。它既有优点也有缺点。

它最大的缺点是不利于代码管理。比较正规的做法,程序代码需要每天都上传至代码管理服务器。因此,源代码管理需要占用大量的硬盘空间。如果只是程序代码还好,把编译好的执行代码也存在同一个文件里,这就大大加重了代码管理的负担。程序开发的时候,经常需要回头查看过去的修改历史。如果某个文件发生了变化,代码管理软件就会意识到这是代码作了修改。但是VI中有时只是它包含的执行代码发生的变化,因此代码管理软件无法正确的判断出是否代码有变化。

它的优点主要有两条:1. 运行子VI 极为方便。其它语言要运行,只能从主入口进入,不能够单独运行某一个函数。而LabVIEW 则可以直接运行任何一个VI;2. 分散了编译时间。大型的C++程序,编译起来很花时间,有时要用几天。LabVIEW 把编译时间分散到了写代码的同时,因此用户基本感觉不到LabVIEW 编译占用的时间。

本文来源:https://www.bwwdw.com/article/dpjq.html

Top