SWAN(Scade One) 语言原理介绍

SCADE 团队于2024年推出了下一代 SCADE 工具 Scade One,工具的建模语言也基于Scade 6 进行了演化。在语言命名方面,并没有复用"Scade"这一标志性的名称,而是使用了新的名字:Swan。在本篇中,将叙述 Swan 语言的原理。更详细的内容,可参考 Scade One 文档中的材料《Introduction to Swan Language Principles》。

Swan 语言是专为安全(Safe)和实时软件所设计的领域特定语言。

反应式系统 (Reactive System)

反应式系统是指能够持续地与其环境交互的系统。这种交互旨在根据来自系统所处环境的信息来控制环境。这里的环境包括系统的使用者、作用于该环境的物理规律,以及与之通信的其他系统。在系统内部包含了反应的功能数学函数。该数学函数根据通过传感器和设备从环境获取的信号,再计算要通过物理执行器反馈给环境的信号。

离散时间响应式系统

在基于计算机的实现中,对信号的处理需要采用离散化的视角。通过离散化,信号被视作序列,信号的时间变量成为该序列的下标。离散响应式系统就是接受若干输入序列,输出对应的输出序列的一种运算。

Swan, 面向时序逻辑的语言

Swan 是一种抽象层次较高的计算机语言,能够定义相互递归的序列。在 Swan 中,这些值序列称为“流”(flow);变量,或更通用地说,表达式,都可以代表一个流。由于语言提供了高度抽象,Swan 程序也常被称为“模型”;建模设计者用 Swan 表达的程序更接近数学模型,而非传统编程语言中的实现细节。

该语言还可视为专用于定义“时序逻辑函数”(sequential logic functions)的语言,即其输出既取决于当前输入,也取决于过去输入的序列。

对流定义,Swan语言支持两种风格:方程式风格(Equational)和图示风格(Diagrammatic)。

比如,定义序列y_n作为给定序列x_n的累计和。在数学上,能定义为如下的递归公式:

y_0 = x_0 
y_n = x_n + y_(n-1) for n > 0 

使用Swan的方程风格编写流y的序列定义可以是

y = x -> (x + pre y);

若使用图示风格建模,则会是块状图与连线构成的图。

定义序列函数需要语言具备引用输入的过去状态的能力。在上面的例子中,通过延迟算子(pre)来实现。在某些情况下,通过使用状态机来表达序列性会更加便利。Swan 中提供了层次化的状态机,支持块状图和方程组在相同的语义框架下进行混合设计。

从 Swan 模型进行代码生成

在前面叙述中,通过序列的观点构造的系统,仍然是以抽象的视角来表达系统。从实现角度考虑,相对应的程序,是将序列中第n位的输入,和当前状态S_n,计算出输出序列中第n位的输出。这种计算被称为"反应",或者"step", 或者"cycle"。所以在命令式语言(C/C++, Ada)的实现里,程序的形态会是

i_n => [S_n -> S_(n+1)] => o_n 

在Swan模型的代码生成中,会将状态结构S_0进行提取,以及从模型中生成f_cycle step函数。状态的初始值,与将状态重置为初始状态的函数都会被生成。

以静态的方法保证模型的正确性

如同任何一种形式化语言一样,Swan语言具备形式化定义的语法。同时,Swan语言也包含静态的分析阶段,来确保模型的正确性。

  • 类型检查确保函数操作的所有操作数,其类型是符合预期的。并且对数组的访问都在长度限制之内。
  • 时钟检查确保所有流的消费端与生成端具有相同的节拍。
  • 初始化分析确保所有输出不会依赖未初始化的前序(past)状态。
  • 因果分析确保每一项流的当前值不会依赖自身。

当模型的正确性被确定了,则可认为模型具备了语义,也就是定义明确的行为,并且可以被进一步的用于其他的处理阶段,比如:仿真、代码生成、形式化验证、覆盖率分析等。

所有实现Swan语言的工具,都需要在这些工具的前端(front-end)去实施上述提到的验证工作。

Swan 的语言特征

这里列举 Swan 语言的主要特征,使读者将 Swan 与其他编程语言比较时,能更好地定位 Swan 语言的位置。

  • 数据流。Swan 关注的是流之间的数据依赖关系,模型语句的相对顺序是不重要的。只要运算所需的所有输入值到位,便可立即计算该运算。
  • 声明式。Swan 是声明式语言,设计者只需关注“是什么”(What),而无需显式指明“怎么做”(How)。方程式和图示定义了流间关系,语言语义负责调度;任何满足数据依赖的周期内调度均为正确。
  • 确定性。正确的 Swan 模型定义了唯一的流到流的函数。对于给定模型和输入序列,输出序列唯一且由语言语义定义。
  • 同步性。当前周期的输出基于当前输入和状态计算而来,“同步”指所有这些计算被抽象为瞬时完成。虽然操作间无先后执行顺序,但仍满足数据依赖,且可并行设计与组合而不互相干扰。
  • 实时性。上述内容描述的语言构造和静态属性,确保了反应函数能在有界时间资源和有界内存资源内实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…

sql中group by使用场景

GROUP BY语句在SQL中用于将多个记录分组为较小的记录集合,以便对每个组执行聚合函数,如COUNT(), MAX(), MIN(), SUM(), AVG()等。GROUP BY的使用场景非常广泛,以下是一些典型的应用场景: 统计数量 当你想要计算某个字段的唯一值数…

MongoDB慢查询临时开启方法讲解

1、首先连接数据库 mongosh "mongodb://localhost:27017" 2、选择目标数据库 show databases;#显示所有数据库 use lidb;#使用某数据库 3、查看当前分析级别 db.getProfilingStatus() 输出 { was: 0, slowms: 100, sampleRate: 1, ok: 1 } #was0表示关闭&…

UML活动图与泳道图

活动图的作用,与用例图类似,也是帮助我们捕获用户的需求。 活动图主要是用来描述用户的业务流程,如果能把用户的这个业务流程描述的很清楚的话,就可以帮助我们做用例分析。 1 活动图定义 活动图描述了在一个过程中,…

算法练习-回溯

今天给大家带来的是在dfs查用的降低复杂度的方法---剪枝 所谓减枝 第一题 代码部分:(未剪枝) 代码部分(剪枝) 第二题 代码部分(未剪枝) 剪枝后 通过这些题目可以看出如果没有进行剪枝操作&#…

Elasticsearch + Milvus 构建高效知识库问答系统《一》

🔍 Elasticsearch Milvus 构建高效知识库问答系统(RAG 技术实战) 📌 目录 背景介绍Elasticsearch 在知识库检索中的作用Milvus 在知识库检索中的作用混合检索:Elasticsearch Milvus完整代码实现部署建议与优化方向…

10万QPS高并发请求,如何防止重复下单

1. 前端拦截 首先因为是10万QPS的高并发请求,我们要保护好系统,那就是尽可能减少用户无效请求。 1.1 按钮置灰 很多用户抢票、抢购、抢红包等时候,为了提高抢中的概率,都是疯狂点击按钮。会触发多次请求,导致重复下…

基于单片机的病房呼叫系统(源码+仿真)

该系统由以 STM32F4 为平台的监控终端以及以 CC2530 为平台的无线传感网组成。系统上电后自动完成 ZigBee 网络的组建、终端节点的加入,病人可利用便携式的病人终端发出呼叫求助请求信息、节点在线信息以及对护士的服务评价信息等,这些信息通过路由节点发…

使用WebSocket实时获取印度股票数据源(无调用次数限制)实战

使用WebSocket实时获取印度股票数据源(无调用次数限制)实战 一、前置准备 1. 获取API密钥 登录 StockTV开发者平台 → 联系客服获取测试Key(格式MY4b781f618e3f43c4b055f25fa61941ad),该密钥无调用次数限制且支持实时…

kafka消息积压排查

kafka监控搭建:https://insights.blog.csdn.net/article/details/139129552?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7EPaidSort-1-139129552-blog-132216491.235%5Ev43%5Econtrol…

Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满!

Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满! 目录 Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满&#xf…

6套bootstrap后台管理界面源码

后端管理系统是指一种用于管理和监控网站、应用程序或系统的后台管理界面。它通常由一组后端代码和数据库组成,用于处理和存储数据,提供给前端用户界面展示和操作数据。 后端管理系统的功能和特点可以包括: 用户权限管理:可以设…

JavaScript性能优化实战:从核心原理到工程实践的全流程解析

下面我给出一个较为系统和深入的解析,帮助你理解和实践“JavaScript 性能优化实战:从核心原理到工程实践的全流程解析”。下面的内容不仅解释了底层原理,也结合实际工程中的最佳模式和工具,帮助你在项目中贯彻性能优化理念&#x…

ELK日志管理框架介绍

在小铃铛的毕业设计中涉及到了ELK日志管理框架,在调研期间发现在中文中没有很好的对ELK框架进行介绍的文章,因此拟在本文中进行较为详细的实现的介绍。 理论知识 ELK 框架介绍 ELK 是一个流行的开源日志管理解决方案堆栈,由三个核心组件组…

2025.6.4总结

工作:今天效率比较高,早上回归4个问题,下午找了3个bug,晚上二刷了科目一(贪吃蛇系统),写了四个点,唯一没达标的就是两自动化没完成。美中不足的是电脑上下载不了PC版的番茄工作软件。…

【vue3学习】vue3入门

目录 1、vue2选项式API 2、Vue3 组合式 API (1)setup 函数​ 基本实现​编辑 补充方法 setup语法糖 (2)响应式数据​ ref reactive: 大家好啊,我是jstart千语。好久没更新咯,因为最近一…

【Linux基础知识系列】第八篇-基本网络配置

网络配置是Linux系统维护中重要的一部分,正确配置网络能够确保系统与其他设备的有效连接。在本篇文章中,我们将探讨Linux系统中的基本网络配置,包括网络接口的管理、IP地址的设置,以及使用ping和traceroute命令进行网络诊断。通过…

React从基础入门到高级实战:React 高级主题 - React设计模式:提升代码架构的艺术

React设计模式:提升代码架构的艺术 引言 在React开发中,设计模式是构建可维护、可扩展和高性能应用的关键。随着应用复杂性的增加,掌握高级设计模式不仅是技术上的挑战,更是打造优雅架构的艺术。对于有经验的开发者而言&#xf…

Chrome书签的导出与导入:步骤图

Chrome书签的导出与导入:步骤图 步骤一:打开 Chrome。点击右上角的“更多”图标。依次选择书签 接着 书签管理器。 步骤二:在管理器中,点击“整理”菜单。 步骤三:选择导出书签。 步骤四:Chrome 会将您的…

PPO和GRPO算法

verl 是现在非常火的 rl 框架,而且已经支持了多个 rl 算法(ppo、grpo 等等)。 过去对 rl 的理解很粗浅(只知道有好多个角色,有的更新权重,有的不更新),也曾硬着头皮看了一些论文和知…