通过SSA的解释执行窥探Golang编译之一角通过SSA的解释执行窥探Golang编译之一角 丁尔男 武汉航天远景 产品总监 凹语言 联合发起人 PLOC 联合发起人 目 录 Golang 编译流程简介 01 SSA 解释执行 02 基于 SSA 的应用 03 Golang 编译流程简介 源代码 抽象语法树 抽象语法树 (带语义信息) 静态单赋值 目标代码 Golang 编译流程简介 源代码 抽象语法树 抽象语法树 Rosen、Mark N. Wegman、F. Kenneth Zadeck 提出的一种中间代码(IR) 表示形式,典型特征是所有变量被且仅被赋值一次。 2016年,Go 1.7 加入 SSA 支持。 SSA 解释执行 02-HelloSSA const src = ` package main func main() { println("Hello, GoCN!") println("The answer *ssa.Call - Call = *ssa.Builtin, println - Args = [“The answer is”, 42] Instrs[2] *ssa.Return SSA 解释执行 02-HelloSSA *ssa.Package main *ssa.Function Blocks[0] *ssa.BasicBlock Instrs[0] *ssa.Call - Call0 码力 | 30 页 | 1.50 MB | 1 年前3
Hyperledger Fabric 1.4 中文文档基本应用 直接执行远程命令 命令行参数 Per-task arguments 配置文件 Fabfile 文件的结构和使用 指定 fabfile 引用 Fabric 定义任务并导入 callable 任务 与远程程序集成 合并 stdout 和 stderr 伪终端 两者结合 作为库使用 连接服务器 断开连接 最后注意 输出管理 输出等级 隐藏和/或显示输出级别 并行执行 它是如何运转的 文档助手 网络 业务(Operation) 任务 实用工具 扩展 API Fabric 的 扩展包 包括常用而有用的工具(通常是从用户的 fabfile 中合并进来 的),可用于用户 I/O、修改远程文件等任务中。核心 API 倾向于保持小巧、 不随意变更,扩展包则会随着更多的用户案例被解决并添加进来,而不断成长 进化(同时尽量保持向后兼容)。 终端输出工具 与 Django 集成 文件和目录管理 更具体地说,Fabric 是: 一个让你通过 命令行 执行 无参数 Python 函数 的工具; 一个让通过 SSH 执行 Shell 命令更加 容易 、 更符合 Python 风格 的命令 库(建立于一个更低层次的库)。 自然而然地,大部分用户把这两件事结合着用,使用 Fabric 来写和执行 Python 函数或 task ,以实现与远程服务器的自动化交互。让我们一睹为快吧。 Hello,0 码力 | 145 页 | 161.53 KB | 1 年前3
Hyperledger Fabric 2.5 中文文档基本应用 直接执行远程命令 命令行参数 Per-task arguments 配置文件 Fabfile 文件的结构和使用 指定 fabfile 引用 Fabric 定义任务并导入 callable 任务 与远程程序集成 合并 stdout 和 stderr 伪终端 两者结合 作为库使用 连接服务器 断开连接 最后注意 输出管理 输出等级 隐藏和/或显示输出级别 并行执行 它是如何运转的 文档助手 网络 业务(Operation) 任务 实用工具 扩展 API Fabric 的 扩展包 包括常用而有用的工具(通常是从用户的 fabfile 中合并进来 的),可用于用户 I/O、修改远程文件等任务中。核心 API 倾向于保持小巧、 不随意变更,扩展包则会随着更多的用户案例被解决并添加进来,而不断成长 进化(同时尽量保持向后兼容)。 终端输出工具 与 Django 集成 文件和目录管理 更具体地说,Fabric 是: 一个让你通过 命令行 执行 无参数 Python 函数 的工具; 一个让通过 SSH 执行 Shell 命令更加 容易 、 更符合 Python 风格 的命令 库(建立于一个更低层次的库)。 自然而然地,大部分用户把这两件事结合着用,使用 Fabric 来写和执行 Python 函数或 task ,以实现与远程服务器的自动化交互。让我们一睹为快吧。 Hello,0 码力 | 138 页 | 154.00 KB | 1 年前3
Apache Shiro参考手册中文版该尽可能掩盖复杂的地方,露出一个干净而直观的 API,来简化开发人员在使他们的应用程序安全上的努力。 以下是你可以用 Apache Shiro 所做的事情: 验证用户来核实他们的身份 对用户执行访问控制,如: 判断用户是否被分配了一个确定的安全角色 判断用户是否被允许做某事 在任何环境下使用 Session API,即使没有 Web 或 EJB 容器。 该程序 所能够做到全部事情是打印出文本"My First Apache Shiro Application"并退出。 Test Run 要试用我们的教程应用程序,请在你的教程项目的根目录下执行以下的命令提示符,并键入以下内容: mvn compile exec:java 然后你将看到我们的 little 教程“程序”运行并退出。你应该会看到与下面相似的一些东西(注意粗体文本,它显 Spring,Guice 后 JBoss DI 容器实例)。 Using Shiro 现在我们的 SecurityManager 已经设置好并可以使用了,现在我们能够开始做一些我们真正关心的事情——执行安 全操作。 当保护我们的应用程序时,我们对自己可能提出的最为相关的问题是“当前用户是谁”或“当前用户是否被允许做 XXX”。当我们编写代码或设计用户接口时,问这些问题是很常见的:应用程序通常是基于用户的背景情况建立的,0 码力 | 92 页 | 1.16 MB | 1 年前3
Flask入门教程Watchlist 程序作为示例 复原完整的开发流程 只提供入门所需的最少信息 优化术语解释,更容易理解 阅读方法 本书复原了编写这个 Watchlist 程序的完整流程,包括每一行代码块,每一个需要 执行的命令。在阅读时,你需要自己输入每一个代码和命令,检查输出是否和书中 一致。在这个过程中,你也可以对它进行一些调整。比如,示例程序的界面语言使 用了英文,你可以修改为中文或是其他语言。对于页面布局和样式,你也可以自由 或 Sublime Text。浏览器建议使用 Firefox 或 Chrome。 使用命令行 在本书中,你需要使用命令行窗口来执行许多操作。你可以使用 Windows 下的 cmd.exe,或是 macOS 和 Linux 下的终端(Terminal)。下面我们执行一个最简单 的 whoami 命令(即 Who Am I?): $ whoami greyli 这个命令会打印出当前计算机用户的名称。其他常用的命令还有 directory)。在不同的操作系统上,执行某个操作的命令可能会有所不同,在必要 的地方,书里会进行提示。 我们先来为我们的程序创建一个文件夹: $ mkdir watchlist $ cd watchlist 除非特别说明,从现在开始,本书假设你的工作目录将是在项目的根目录,即 watchlist/ 目录。 第 1 章:准备工作 7 为了确保你已经正确安装了 Python,可以执行下面的命令测试是否有报错:0 码力 | 127 页 | 7.62 MB | 1 年前3
Apache Shiro 1.2.x Reference Manual 中文翻译Test Run 测试运行 Apache Shiro 1.2.x Reference Manual 中文翻译 9 2. Tutorial 教程 在教程项目的根目录(如 shiro-tutorial )执行以下命令提示符中,输入以下: mvn compile exec:java 你就会看到我们的小教程应用程序的运行和退出。 您应当会看到类似于下面的输出(译者 注:红框中的内容) 我们已经验证了应用程序成功运行——现在让我们使 setSecurityManager(securityManager); System.exit(0); } 这就是我们要做的--仅仅使用三行代码就把Shiro加进了我们的程序,就是这么简单。 执行mvn compile exec:java 可以看到程序成功的运行(由于 Shiro 默认在 debug 或更底层才 记录日志,所以你不会看到任何 Shiro 的日志输出--只要运行时没有错误提示,你就可以知道 上面所加入的代码做了下面的事情: 1. 使用 Shiro 的 IniSecurityManagerFactory 加载了我们的shiro.ini 文件,该文件存在于 classpath 根目录里。这个执行动作反映出 shiro 支持 Factory Method Design Pattern(工厂模式)。classpath:资源的指示前缀,告诉 shiro 从哪里加载 ini 文件(其 它前缀,如0 码力 | 196 页 | 2.34 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器K-V 对的一份深拷贝。你写入的只是这份拷贝 后的 V ,不是 map 中的那个 V 。 map 的遍历:遍历的同时修改怎么办? k v map 中的 堆空间 执行你这段代码 的栈空间 未初 始化 v2 要写入的数 执行中的代码 for (auto [k, v]: m) { v = v2; } • 我们现在遍历一个 map ,然后把他里面所有的 V 都设为 v2 ,要怎么做? K-V 对的一份深拷贝。你写入的只是这份拷贝 后的 V ,不是 map 中的那个 V 。 map 的遍历:遍历的同时修改怎么办? k v map 中的 堆空间 执行你这段代码 的栈空间 k v v2 要写入的数 执行中的代码 for (auto [k, v]: m) { v = v2; } • 我们现在遍历一个 map ,然后把他里面所有的 V 都设为 v2 ,要怎么做? • K-V 对的一份深拷贝。你写入的只是这份拷贝 后的 V ,不是 map 中的那个 V 。 map 的遍历:遍历的同时修改怎么办? k v map 中的 堆空间 执行你这段代码 的栈空间 k v2 v2 要写入的数 执行中的代码 for (auto [k, v]: m) { v = v2; } 你修改的是栈空间 ( 周树人 ) 管我堆空间 ( 鲁迅 ) 什么事? • 我们现在遍历一个0 码力 | 90 页 | 8.76 MB | 1 年前3
PyWebIO v1.3.1 使用手册辑便可改造为Web服务 支持整合到现有的Web服务,目前支持与Flask、Django、Tornado、 aiohttp、 FastAPI(Starlette)框架集成 同时支持基于线程的执行模型和基于协程的执行模型 支持结合第三方库实现数据可视化 Installation 稳定版: pip3 install -U pywebio 开发版: pip3 install -U https://code 致的,因此PyWebIO应用非常适合使用控制台程序的编写逻辑来进行开发。 此外,PyWebIO还支持事件回调:PyWebIO允许你输出一些控件并绑定回调函 数,当控件被点击时相应的回调函数便会被执行。 下面是一个例子: hobby.insert(0, put_markdown('**Coding**')) # insert the Coding into the top of the hobby task_1, task_2]) start_server() 提供了远程访问的支持,当开启远程访问后(通过在 start_server() 中传入 remote_access=True 开启 ),你将会得到一个用于访 问当前应用的临时的公网访问地址,其他人任何都可以使用此地址访问你的应 用。远程接入可以很方便地将应用临时分享给其他人。当前远程接入功能由 localhost.run [https://localhost0 码力 | 132 页 | 7.45 MB | 1 年前3
PyWebIO v1.3.3 使用手册辑便可改造为Web服务 支持整合到现有的Web服务,目前支持与Flask、Django、Tornado、 aiohttp、 FastAPI(Starlette)框架集成 同时支持基于线程的执行模型和基于协程的执行模型 支持结合第三方库实现数据可视化 Installation 稳定版: pip3 install -U pywebio 开发版: pip3 install -U https://code 致的,因此PyWebIO应用非常适合使用控制台程序的编写逻辑来进行开发。 此外,PyWebIO还支持事件回调:PyWebIO允许你输出一些控件并绑定回调函 数,当控件被点击时相应的回调函数便会被执行。 下面是一个例子: hobby.insert(0, put_markdown('**Coding**')) # insert the Coding into the top of the hobby task_1, task_2]) start_server() 提供了远程访问的支持,当开启远程访问后(通过在 start_server() 中传入 remote_access=True 开启 ),你将会得到一个用于访 问当前应用的临时的公网访问地址,其他人任何都可以使用此地址访问你的应 用。远程接入可以很方便地将应用临时分享给其他人。当前远程接入功能由 localhost.run [https://localhost0 码力 | 132 页 | 7.45 MB | 1 年前3
PyWebIO v1.3.0 使用手册辑便可改造为Web服务 支持整合到现有的Web服务,目前支持与Flask、Django、Tornado、 aiohttp、 FastAPI(Starlette)框架集成 同时支持基于线程的执行模型和基于协程的执行模型 支持结合第三方库实现数据可视化 Installation 稳定版: pip3 install -U pywebio 开发版: pip3 install -U https://code 致的,因此PyWebIO应用非常适合使用控制台程序的编写逻辑来进行开发。 此外,PyWebIO还支持事件回调:PyWebIO允许你输出一些控件并绑定回调函 数,当控件被点击时相应的回调函数便会被执行。 下面是一个例子: hobby.insert(0, put_markdown('**Coding**')) # insert the Coding into the top of the hobby task_1, task_2]) start_server() 提供了远程访问的支持,当开启远程访问后(通过在 start_server() 中传入 remote_access=True 开启 ),你将会得到一个用于访 问当前应用的临时的公网访问地址,其他人任何都可以使用此地址访问你的应 用。远程接入可以很方便地将应用临时分享给其他人。当前远程接入功能由 localhost.run [https://localhost0 码力 | 132 页 | 7.45 MB | 1 年前3
共 434 条
- 1
- 2
- 3
- 4
- 5
- 6
- 44













