当前位置: 首页 > news >正文

外汇平台 网站开发客栈网站建设代码

外汇平台 网站开发,客栈网站建设代码,asp.net3.5网站开发实例教程,电子商务网站建设实践为理解rust变成eDSL的实现原理,我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力,使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能&#x…

        为理解rust变成eDSL的实现原理,我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力,使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能,能够在编译实际代码之前按照自定义的规则展开原始代码,从而能够达到修改原始代码的目的。从元编程的角度理解,宏就是“生成代码的代码”,因而 Rust 语言中的元编程能力主要来自于宏系统。通过 Rust 语言的宏系统,不仅能够实现 C语言的宏系统所提供的模式替换功能,甚至还能够控制编译器的行为、设计自己的语法从而实现 eDSL,所以我们正是基于 Rust 语言的宏系统实现的 eDSL。

        Rust 源代码文件编译需要经过下列阶段:

  1. 编译器在获得源代码文件后,会先进行词法分析,即把源代码字符序列转换为标记(Token)序列。标记是单独的语法单元,在 Rust 语言中,关键字、标识符都能够构成标记。词法分析还会将标记与标记的关系也记录下来,从而的生成标记树(Token tree),以一条简单的程序语句为例:

    a + b + (c + d[0])  + e
    

    其标记树如下图所示:

    token_tree

    注意

    与C中宏处理(导入 #include 头文件、替换 #define 符号等)是发生在预编译阶段不同,Rust语言并没有预编译阶段,其宏展开是发生在的完成语法分析后。也正是因为如此,Rust宏能够获得更详细、更复杂的编译期信息,从而提供极为强大的元编程能力。

  2. 随即,编译器启动语法分析流程,将词法分析生成的标记树翻译为 AST(Abstract Syntax Tree,抽象语法树)。在计算机科学中,AST 是源代码语法结构的一种抽象表示,能够方便地被编译器处理。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。上述第 1 步中生成的样例标记树会被翻译为如下图所示的 AST:

ast

  1. 然后,编译器开始分析 AST 并执行宏展开过程。此阶段是是最为重要的阶段,因为我们的eDSL 主要工作在这个阶段。以我们xq合约为例,编译器构造出xq合约的 AST 后,当扫描至 AST 中表示#[call(contract = "xq", function = "abc")]语句的语法树节点时,编译器能够知道,此处正在调用属性宏(Rust 中一种特殊的宏),因此会开始寻找call属性宏的定义并尝试进行展开。call属性宏的定义如下:

    #[proc_macro_attribute]
    pub fn call(attr: TokenStream, item: TokenStream) -> TokenStream {let attrs = parse_macro_input!(attr as AttributeArgs);let contract = get_attribute(attrs.clone(), "contract").unwrap().unwrap();let function = get_attribute(attrs.clone(), "function").unwrap().unwrap();//let payable = contains_attribute2(attrs.clone(), "payable");
    

    属性宏以函数形式定义,其输入是两个标记序列(TokenStream),其输出也是一个标记序列。事实上,在 Rust 语言中,宏可以理解为将某一个 AST 变换到另外一个 AST 的函数。Rust 编译器并不会向属性宏直接传递 AST,而且会将其调用位置所在的语法树节点转换为标记序列传递给属性宏,由属性宏的编写者自行决定如何处理这段标记序列。无论如何处理,属性宏都需要返回一段标记序列,Rust 编译器接收到这段标记序列后,会将其重新编译为 AST 并插入到宏的调用位置,从而完成代码的编译期修改。具体到 Liquid 的call属性宏,当编译器进行展开时,call属性宏会获取到自身及其后跟随的代码块的标记序列,并将其解析为一棵 AST。

  2. 编译器将经过宏展开之后的 AST 编译为可执行文件:若是需要在本地运行单元测试,则会将 AST 编译为本地操作系统及 CPU 所能识别的可执行文件;若是需要能够在链上部署运行,则会将 AST 编译为 Wasm 格式字节码。至此,合约的基本构建流程结束。

        从上述实现原理中可以看出,我们的eDSL 可以理解为是一种以 Rust 语言目标语言的编程语言。在编译器的广义定义中,编译器是一种能够将以某种编程语言(原始语言)书写的源代码转换成另一种编程语言(目标语言)的计算机程序,因此我们的eDSL在一定程度上扮演了编译器的角色。通过屏蔽区块链的底层实现细节,智能合约的开发过程能够更加便利及自然

http://www.yayakq.cn/news/166574/

相关文章:

  • 兰州市城关区建设局网站哪个网站做招聘海报比较好
  • 西充县建设路小学网站做购物网站能不能赚钱
  • 中企高呈网站建设阿芹网站建设
  • app开发网站建设及开发wordpress首页摘要设置
  • 买域名去哪个网站为什么要用模板建站
  • asp.net+制作网站开发网络设计课程心得体会600字
  • WordPress网站被恶意登录华为用了哪些网络营销方式
  • 建设网站站点有哪些步骤电商购物网站
  • 网站开发 架构新媒体代运营公司
  • 个人网站源码phpwordpress打开置顶文章没用
  • 网站设计费汕头百度seo公司
  • 东莞服务好的营销型网站建设公众号开发者id
  • 龙岗网站维护上海网站建设维护
  • 视频网站做app开发的触屏版网站开发
  • 建设淘宝客网站创意图片
  • wordpress中文网站优化网页无法访问如何解决360浏览器
  • 在线做logo印章网站企业简介范文大全
  • 申请渠道门户网站是什么意思wordpress momo
  • 如何学网站开发福建网站建建设方案
  • 湖北省城乡和住房建设厅网站在家百度统计网站打不开
  • 商城网站开发方案湘潭做网站价格品牌磐石网络
  • 网站社区建设公众号发布的文章是wordpress
  • 茂名中小企业网站制作品牌网站定制
  • 影视网站开发背景百度开发者平台
  • 网站制作预付款会计分录哪个网站可以做视频片头
  • 营销类网站模板网站建设优化文章
  • 如何做家教网站赚钱中国建筑今天最新消息
  • 椒江网站建设578做网站年会策划
  • 做网站可以不做后端吗2023中国互联网公司排行榜
  • 危险网站怎么办重庆seo推广