2020 年 08 月 - 6 文章

Gitlab简易Release脚本

  |   0 评论   |   0 浏览

#!/usr/bin/env bash echo -n "0.请输入你的 GitHub Access Token:" read token echo -n "1.请输入项目的 id:" read id echo -n "2.请输入项目 release 的名称:" read name echo -n "3.请输入即将创建 release 版本的 tag:" read tag_name echo -n "4.请输入 release 的描述:" read description curl --header 'Content-Type: application/json' --header "PRIVATE-TOKEN: token" \ --data '{ "name": "'name'", "tag_name": "'tag_name'", "ref":"'tag_name'" ,"description": "'description'" }' \ --request POST http://gitlab_url/api/v4/projects/id/releases

SSA IN GO

  |   0 评论   |   0 浏览

关于源码到语法树的部分编译在 这里 编译阶段 src/cmd/compile/internal/gc/main.go 中 存有如下一段代码 initssaconfig() // Just before compilation, compile itabs found on // the right side of OCONVIFACE so that methods // can be de-virtualized during compilation. Curfn = nil peekitabs() // Phase 8: Compile top level functions. // Don't use range--walk can add functions to xtop. timings.Start("be", "compilefuncs") fcount = 0 for i := 0; i < len(xtop); i++ { n := xtop[i] if n.Op == ODCLFUNC { funccompile(n) fcount++ } } timings....

nebula-helper in macos

  |   0 评论   |   0 浏览

查看项目结构 第一步:含有 package.json 的项目基本上为 nodejs 项目 第二部:查看 package.json 依赖表明这是一个 vue/element/electron 的混合项目 由于有 electron 的依赖,所以大概率为一个客户端程序 0.安装环境 确定为 Nodejs 环境后,mac 用户可以使用 Home brew 安装 Node 环境,Homebrew 会自动将 node,npm 命令加入到环境变量里 brew install node 等待一段时间后 node -v npm -v 还可以用 brew 查看安装的具体位置和其他信息 至此,node 环境安装完毕 如果网络不好的或者不想使用 brew 安装 Node 应该如何安装呢 下载 Nodejs 的二进制包,放到一个目录 将目录下的 bin 目录加入到环境变量中 这里我拿 Dart 环境举例 Macos 的环境变量文件在 /etc/profile 或 ~/.bash_rc 或高版本 Mac 在 ~/.zsh_rc 如果没有该文件可以手动创建 最后关闭 terminal 重新打开即可刷新环境变量 再次使用 node,npm 进行环境测试 1.安装依赖 cd n....

Go词法语法分析

  |   0 评论   |   0 浏览

词法分析 下列一段代码 package main import ( "fmt" ) func main() { fmt.Println("Hello") } 通过 lex 规则最终解释成 PACKAGE IDENT IMPORT QUOTE IDENT QUOTE IDENT IDENT LPAREN RPAREN LBRACE IDENT DOT IDENT LPAREN QUOTE IDENT QUOTE RPAREN RBRACE 这样将源码翻译成 好多的 token(字符) 这一过程可以理解成词法分析 go 的词法分析最终生成的 Token 列表 src/cmd/compile/internal/syntax/tokens.go // Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package syntax type to....

Static Single Assignment Form

  |   0 评论   |   0 浏览

Static Single Assignment Form 静态单一分配形式,每个变量只赋值一次 intermediate representation(IR): 中间代码表示 作用 常数传播(constant propagation) 值域传播(value range propagation) 稀疏有条件的常数传播(sparse conditional constant propagation) 消除无用的程式码(dead code elimination) 全域数值编号(global value numbering) 消除部分的冗余(partial redundancy elimination) 强度折减(strength reduction) 寄存器分配(register allocation) demo x = 1 y = x 变成了 y = 1 转化 { "title": { "text": "Graph 简单示例" }, "tooltip": {}, "animationDurationUpdate": 1500, "animationEasingUpdate": ....

Abstract Syntax Code

  |   0 评论   |   0 浏览

抽象语法树 AST 将代码进行词法分析语法分析后变成树结构以便于生成中间代码的环节 如图所示,该树为 2*3+7 词法分析 比如一段代码 const a = 5; 经过词法分析 [{value: 'const', type: 'keyword'}, {value: 'a', type: 'identifier'}, ...] 语法分析 词法分析的输出是语法分析的输入,将词法分析的结果转化为树 { type: "VariableDeclarator", id: { type: "Identifier", name: "a" }, ... } 当生成树的时候,解析器会删除一些没必要的标识 tokens(比如:不完整的括号),因此 AST 不是 100% 与源码匹配的。 与源代码互相匹配的叫做 具体语法树 关于研究用途拆解包 recast 包可以在 nodejs 中拆解 code 输出词法语法分析后的结果,并且可以进行 inspect 操作等等 拿到抽象语法树之后 Go 语言的编译器会对语法树中定义和使用的类型进行检查 常量、类型和函数名及类型; 变量的赋值和初始化; 函数和闭包的主体....