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

网站开发json解析部分网页打不开

网站开发json解析,部分网页打不开,word模板网站,河南郑州最新事件为理解rust变成eDSL的实现原理#xff0c;我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力#xff0c;使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能#x… 为理解rust变成eDSL的实现原理我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能能够在编译实际代码之前按照自定义的规则展开原始代码从而能够达到修改原始代码的目的。从元编程的角度理解宏就是“生成代码的代码”因而 Rust 语言中的元编程能力主要来自于宏系统。通过 Rust 语言的宏系统不仅能够实现 C语言的宏系统所提供的模式替换功能甚至还能够控制编译器的行为、设计自己的语法从而实现 eDSL所以我们正是基于 Rust 语言的宏系统实现的 eDSL。 Rust 源代码文件编译需要经过下列阶段 编译器在获得源代码文件后会先进行词法分析即把源代码字符序列转换为标记Token序列。标记是单独的语法单元在 Rust 语言中关键字、标识符都能够构成标记。词法分析还会将标记与标记的关系也记录下来从而的生成标记树Token tree以一条简单的程序语句为例 a b (c d[0]) e其标记树如下图所示 注意 与C中宏处理导入 #include 头文件、替换 #define 符号等是发生在预编译阶段不同Rust语言并没有预编译阶段其宏展开是发生在的完成语法分析后。也正是因为如此Rust宏能够获得更详细、更复杂的编译期信息从而提供极为强大的元编程能力。 随即编译器启动语法分析流程将词法分析生成的标记树翻译为 ASTAbstract Syntax Tree抽象语法树。在计算机科学中AST 是源代码语法结构的一种抽象表示能够方便地被编译器处理。它以树状的形式表现编程语言的语法结构树上的每个节点都表示源代码中的一种结构。上述第 1 步中生成的样例标记树会被翻译为如下图所示的 AST 然后编译器开始分析 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。 编译器将经过宏展开之后的 AST 编译为可执行文件若是需要在本地运行单元测试则会将 AST 编译为本地操作系统及 CPU 所能识别的可执行文件若是需要能够在链上部署运行则会将 AST 编译为 Wasm 格式字节码。至此合约的基本构建流程结束。 从上述实现原理中可以看出我们的eDSL 可以理解为是一种以 Rust 语言目标语言的编程语言。在编译器的广义定义中编译器是一种能够将以某种编程语言原始语言书写的源代码转换成另一种编程语言目标语言的计算机程序因此我们的eDSL在一定程度上扮演了编译器的角色。通过屏蔽区块链的底层实现细节智能合约的开发过程能够更加便利及自然
http://www.dnsts.com.cn/news/131906.html

相关文章:

  • 网站一年费用多少钱十大培训机构教育培训机构哪家好
  • 网站建设属于什么职位类别ui设计的优势与不足
  • 个人网站icp备案号物联网今天正式开网
  • 企业网站做静态网站还是盐田高端网站建设
  • wordpress多个博客广州seo公司
  • 常见的电子商务网站推广方式备案号查询
  • 网站开发与制作中期报告wordpress本地下载
  • 站长工具一区兰州seo安安网站建设
  • 甘肃平凉建设局网站wordpress网站怎么优化
  • 网站哪家公司做的最好齐齐哈尔企业网站排名优化
  • 做设计挣钱的网站3d报价网站开发
  • 江苏德丰建设集团网站网站开发为什么采取ssh框架
  • 主播网站建设wordpress只有英文版
  • 网站建设需要注意哪些搜索引擎优化简历
  • 重庆公司网站建筑网站接单
  • 用tornado做网站互联网app开发
  • 关于古风的网站建设项目网站建设服务描述
  • 怎么做卡商网站怎么建设商城网站
  • html5网站 欣赏苍南县网站集约化建设
  • 建设网站怎么制作wordpress 黑
  • 建设评标专家在哪个网站怎么通过微博做网站外链
  • 冯提莫斗鱼前在哪个网站做直播建设九九网站
  • asp 网站模板微信怎么做网站的动图
  • 色彩设计网站wordpress页面专题
  • 沈阳网站建设seo优化太原网站建设360
  • 网网站建设与制作婚庆网
  • 上传网站空间南昌网站建设模板合作
  • 工艺品网站怎么做中国社交网站做多外国人的
  • 营销外贸网站建设深圳网络络推广培训
  • 小学门户网站建设怎么建正规网站