理解Virtools脚本语言(VSL)

简介: 理解VSL “Global”VSL 脚本与“Run” VSL 脚本 VSL脚本可以是Global VSL 或 Run VSL两种类型之一。 Global VSL脚本定义可被所有其它VSL脚本调用的函数。

 

理解VSL

Global”VSL 脚本与“Run” VSL 脚本

VSL脚本可以是Global VSL 或 Run VSL两种类型之一。

Global VSL脚本定义可被所有其它VSL脚本调用的函数。Global VSL脚本不能被运行,仅供其它VSL脚本(包括Global VSL 与 Run VSL)调用。

Run VSL脚本依附于图形化脚本编辑器中的 Run VSL BB - 一个 Run VSL 脚本对应一个 Run VSL BB,该Run VSL BB的第一个pIn即包含着被该BB执行的VSL代码。Run VSL脚本可以在创作模式(以在VSL脚本管理器内部执行的方式)下运行,也可在当该BB在运行时被激活并像其它BB一样被处理。
Run VSL脚本可以使用 bc (行为背景或译作行为环境,behavior context) 全局变量。

全局变量 bc (行为环境,behavior context) 与 ac (动作环境,action context)

bc 是一种仅能在Run VSL脚本中使用的全局变量。
ac 是一种仅能在动作脚本中使用的全局变量。

两者都提供了一些非常有用的方法:

  • 创建对象
  • 在控制台或3D视图中写入文本
  • 管理属性
  • 与变量管理器进行通信
  • 提取脚本轮廓
  • 等等

bc 则有一些特殊的运行时方法,如:

  • 管理消息
  • 启动场景
  • 等等

ac 主要关注选择(selection)与鼠标位置。

译注:关于行为(behavior)与行动(action,本文中一般译作动作),请参看:http://www.xschina.org/show.php?id=5987

脚本间的依赖关系

请注意:任何调用了Global VSL脚本中的函数的脚本(Global VSL 或 Run VSL)都依赖于该Global VSL脚本。如果你修改了某个Global VSL脚本,在VSL能解析那些调用了该Global VSL脚本之前,不仅该脚本本身要重新编译,而且那个Global VSL脚本也需重新编译。当你对VSL脚本作出变更时,你会在VSL管理器的VSL脚本视图区“已编译”列看到该变更要求重新编译其它VSL脚本。

变量类型

除了以下列出的基类型,你可以使用VSL <- SDK Binding Tables - Classes and Methods中列出的类。也可以使用VSL <- SDK Binding Tables - Enumerations中列出的枚举参数类型。

基类型

bool: 布尔值。真 (TRUE) 或假 (FALSE)。
char: 字符值。char是带符号的单字节值,取值范围-128至127(包括127)。
int: 整数值。int是带符号的4字节值,取值范围-2,147,483,648 至 2,147,483,647(包括2,147,483,647)。
float: 浮点值。float是带符号的4字节值。
str: 字符串。str是字符构成的连续数组,以空字符0或'/0'终止。注意:如果你想进行字符串操作,你就应该使用Virtools SDK及VSL中定义的String类了。

就像上面提到的,VSL <- SDK Binding Tables列出了所有其它可用变量类型。你在VSL <- SDK Binding Tables中未找到的类型就表示该类型的变量不被支持。

为了避免定义Null对象,强烈建议使用调试检测(Debug Check,可在变量管理器中激活或禁用)。运行使用了Null对象变量的脚本会导致VSL管理器失效,也可能导致Virtools崩溃。再就是在进行软件开发时,强烈建议时常保存项目各个阶段的版本。

编译

所有的VSL脚本在运行前必须进行编译。在下列情形下,VSL管理器会自动尝试编译那些未编译的VSL脚本:

  • 当加载一个Virtools文件(CMO, VMO, NMO 或 NMS) 时
  • 当某个Run VSL BB被激活时

注意:VSL管理器在编译Run VSL脚本前会尝试编译所有需要的(链接的)Global VSL脚本。我们强烈建议在运行你的VSL脚本前对它们先进性编译,以检测错误并帮助你确保VSL脚本按你的意图执行。

你可以选择编译VSL脚本管理器中的所有脚本或仅仅某些特定的脚本。当你在编译VSL脚本时,你必需决定是将它编译为Debug(调试)版本还是Release(发行)版本。

Debug(调试)与Release(发行)

Debug方式编译的VSL脚本可以使用VSL脚本管理器中的调试工具进行调试。Learning VSL through Examples系列中给出了使用这些工具的实例。

以Release方式编译的VSL脚本则不能进行调试。在运行时,Release VSL脚本执行速度会比Debug VSL脚本快很多倍,尽管它们是由JIT编译器编译。这种JIT编译器能创建高度优化的类汇编程序代码。

注意:
1.有可能会出现一些特定的脚本为Debug而其它则为Release的情况 - 除非是脚本共享某个Global VSL脚本,如Global VSL 脚本可以是debug也可以是release状态,但不可能同时为两种状态。 
2. 更改某个VSL脚本的编译模式(如从Debug变成Release),会导致相链接的Global脚本重新被编译。
3. 当在编译某个脚本 (无论 Global VSL 还是 Run VSL),VSL管理器先会尝试编译任何未编译或不同编译模式(如releale/debug)的global脚本。如果编译失败,错误消息会出现在VSL脚本管理器的错误段与事件日志中。
4. 在编辑某个global脚本之后,那个脚本会变成"uncompiled(未编译)"状态。其它任何使用了该脚本任意部分的脚本也都处于“未编译”状态。
5. 高度建议:选择变量管理器中的“Debug Check Variable”,以确保所有对象被测试,并确保这些对象在被使用前为非空(not NULL)。

运行VSL脚本

在创作模式或播放器模式下都可运行VSL脚本。

创作模式
VSL脚本管理器中,选中Run VSL脚本,并点击“运行脚本”或按F5键。注意:在创作模式运行某个脚本仅会执行VSL代码;该BB本身并未被激活。这意味着pIn被用到了,pOut也会被进行相关计算,但bIn和bOut不在考虑之列。

播放器模式(运行时)
BB必需被从其它BB或Start传来的链接激活。

保存/导入

你可以通过VSL脚本管理器界面中的“保存”与“加载”按钮来保存和加载Global VSL 与 Run VSL 脚本。VSL脚本以“.VSC”扩展名存为文本文件。注意:只能将VSL脚本载入一个现有VSL脚本中。在加载前,要确保该脚本中是空的;否则,你导入的 脚本会替换掉原有内容。还要注意你在保持或导入的所有内容是来自代码视图中源代码-而与connectors(bIns, bOuts, pIns, pOuts)相关的信息是未被保存的。

当然,你可以保存含有VSL脚本的Virtools文件(CMO/VMO/NMO/NMS)。若是这样的话,要确保所有依赖的脚本在载入被保存的文件时可用。

调试

VSL脚本管理器中有很多调试工具 来帮助你调试脚本。要使用调试工具,你必须在调式模式下。注意:你不能再VSL中调试SDK元素。

限制

VSL可以作为SDK的辅助,而不是替代。在某些场合,SDK更合适,而且有些特定任务是VSL无法完成的:

- VSL中没有模板(templates)
- VSL中没有指针(pointers)
- VSL中没有动态分配(如像New运算符)
- VSL不能从磁盘读写
- VSL中不能进行类创建
- VSL没有 double 类型
- VSL脚本限制长度为 65,535 字符

 VSL <- SDK Binding Tables 页面列出了VSL中所有可用的功能,以及其对应的SDK元素。表中未列出的SDK元素,即表示该元素在VSL中无法使用。

注意: 一些如管理器的创建、文件导入器、新参数类型等功能,仅能在Virtools SDK中使用。查看Schematic v. VSL v. SDK - 使用哪一种? 在VSL介绍 页面浏览更多信息。

目录
相关文章
|
数据采集 Web App开发 自然语言处理
|
Java 持续交付
SpringBoot项目打包分离lib,配置和资源文件部署总结
前言 半自动化部署     (1)当前目录的config目录下     (2)当前目录     (3)classpath的config目录下     (4)classpath的根目录 全自动化部署
1395 0
|
7月前
|
安全 数据建模 物联网
关于IP SSL证书的9大常见问题解答
IP SSL证书用于实现IP地址的HTTPS加密,确保数据传输安全。它分为DV型和OV型企业型,支持单个或多个IP地址保护。常见问题包括:什么是IP SSL证书、其作用与类型、签发机构、内网申请可行性、应用场景、价格范围、申请条件与流程等。锐安信sslTrus和CFCA等品牌支持内网IP加密,价格从几百到几千元不等。申请需确认型号、生成CSR文件并提交验证。
|
存储 NoSQL MongoDB
MongoDB数据库转换为表格文件的Python实现
MongoDB数据库转换为表格文件的Python实现
393 0
|
存储 自然语言处理 DataWorks
通过云上数据库三步构建RAG系统
本文介绍了如何使用OpenSearch LLM智能问答版通过云上数据库一站式构建RAG系统。
20550 10
|
测试技术
软件复杂度量化:McCabe度量法及其环路复杂度的计算方法
McCabe度量法(McCabe&#39;s Cyclomatic Complexity)是一种经典的方法,用于度量软件程序的复杂度。通过计算程序中独立路径的数量,帮助开发人员评估代码的维护难度和测试覆盖率。本文详细介绍了McCabe度量法的原理、计算方法及其在实际应用中的作用。
2461 0
|
机器学习/深度学习 人工智能 编解码
AI生成壁纸的工作原理
AI生成壁纸基于深度学习和生成对抗网络(GANs),通过生成器与判别器的对抗学习,以及条件生成对抗网络(CGANs)来创造特定风格的壁纸。技术还包括风格迁移、深度卷积生成对抗网络(DCGAN)、潜在空间扩展和自注意力机制。审美评价机制的引入确保了生成的壁纸既符合技术标准又有艺术价值。CGANs能根据用户条件生成个性化壁纸,而风格迁移技术通过多种方法实现图像风格转换。DCGAN和其他GAN变体在处理图像数据时有优势,如高质量样本生成和特征学习,但也存在图像质量、训练效率和模式崩溃等问题。通过构建审美评估模型和使用XAI技术,AI在生成壁纸时能更好地平衡技术与艺术标准。
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
418 1
Flask框架在Python面试中的应用与实战
|
监控 Java API
Spring Boot与异步任务:整合与应用场景
【4月更文挑战第29天】异步任务在现代应用程序开发中扮演着重要的角色,它们可以提高应用程序的性能和响应速度,尤其适用于处理长时间运行的任务或需要等待外部资源的场景。Spring Boot提供了强大的支持来简化异步任务的实现。
270 0
|
存储 数据处理 C语言
NumPy 通用函数(ufunc):高性能数组运算的利器
NumPy的通用函数(ufunc)提供高性能的逐元素运算,支持向量化操作和广播机制,能应用于数组的数学、逻辑和比较运算。ufunc可提高计算速度,避免低效的循环,并允许自定义函数以满足特定需求。例如,ufunc实现加法比循环更高效。通过`frompyfunc`可创建自定义ufunc。判断函数是否为ufunc,可检查其类型是否为`numpy.ufunc`。ufunc练习包括数组的平方、平方根、元素积及性能对比。
331 0

热门文章

最新文章