rust 在可执行文件中嵌入代码版本信息-编程思维
缘起 我想要最终编译出的可执行文件中包含代码仓库的版本信息 fn main() { println!("Hello RustHub"); // git rev-parse --short HEAD let commit_hash = "6c1b45f"; println!("commit_hash: {}", commit_hash); } 为了自动获取这个 "6c
morethink program
缘起 我想要最终编译出的可执行文件中包含代码仓库的版本信息 fn main() { println!("Hello RustHub"); // git rev-parse --short HEAD let commit_hash = "6c1b45f"; println!("commit_hash: {}", commit_hash); } 为了自动获取这个 "6c
定义一个 procedural macro 新建一个 lib 类型的 crate: cargo new hello-macro --lib procedural macros 只能在 proc-macro 类型的 crate 内定义,所以需要修改 Cargo.toml: [lib] proc-macro = true 删除 src/lib.rs 里的全部内容,然后定义第一个过程宏(proce
引子 元编程会有如下的定义: 一种计算机程序的编写方式,它可以将其它程序(或者其本身)作为数据进行编写和操作,或者在编译时做一部分工作,在运行的时候做另外一部分工作。 在这里讲到的很多也许只和程序对于工作机制的操作有关,但是作为初探也许也就足够了。 鉴于我也是边学边写的这篇文章,如果有谬误之处,还请指出。 创建带有默认参数的函数 function repeat(func, times)
宏的卫生(hygienic)是指, 我们在宏里赋值的变量, 不会对宏之外的变量造成影响. 例如: defmodule Hygiene do defmacro no_interference do quote do a = 1 end end end require Hygiene a = 10 Hygiene.no_interference a #=>
网络媒体类型(MIME type) 是互联网通信协议中很重要的一部分,每种 MIME 类型对应着任意种文件的扩展名. elixir 的 mime 包实现了 mime 类型和扩展名之间的转换. 让我们来看看它的实现方法. mime.types 文件 # MIME type Extensions application/1d-interleaved-parit
关键词 装饰器 Decorator 元编程 前言 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。 本篇先从项目的宏观角度来总结一下Decorator如何组织。 我会持续分享一些知识整理,如果文章对您有帮助记得点赞鼓励一下哦😁~
DSL(domain-specific languages)即领域特定语言,唯一能够确定DSL边界的方法是考虑“一门语言的一种特定用法”和“该语言的设计者或使用者的意图。在试图设计一个DSL的时候,发现了一些有意思的简单的示例。 jQuery 最流行的DSL jQuery是一个Internal DSL的典型的例子。它是在一门现成语言内实现针对领域问题的描述。 $('.mydiv').add
C++ 模板技法 C++模板的学习,一来就是Trick太多,二来是规则太复杂而且资料少。我希望在这里总结一下,方便学习。这些C++特性可能只能在比较新的编译器上才能正确编译。下面的代码也都只是Demo,万不能在生产环境中使用。应用在生产环境中时,你还要考虑到const的增减、右值引用以优化性能、访问控制以增强封装等等。 此文不定期更新。若这些代码在你的编译器上无法编译成功,请及时告知。 一、ty
如果你读完了《Scala元编程:伊甸园初窥》,理论上你已经具备实现lombok.Data的能力了。 所以,我建议你不要阅读本文,直接自己尝试。 定义lombok.Data的 Scala 版 @data class A { var x: Int = _ var y: String = _ } 我们希望通过@data这个注解,自动生成如下代码: class A { var x: Int
1 简介 由 clean C 实现。需要被宿主程序调用,可以注入 C 函数。 2 语法 采用基于 BNF 的语法规则。 2.1 语法约定 Lua 对大小写敏感。 2.1.1 保留关键字 C 语言中没有的关键字有: and elseif functionin nil local not orrepeat then until 规范:全局变量以下划线开头。 2
live with scope 序言 源起于Python开发者'公众号转载的深刻理解Python中的元类一文, 回忆着自己看过的 Ruby元编程 一书, 参照写个相应的Ruby版. Python和Ruby在很多方面都非常相像, 特别是Ruby的设计部分参考了Python. 但在很多方面, 它俩的很多概念并非一一对应的. 在这里的 元类 在Ruby 中并没有相应的概念, 如果理解为创建类的类, 最
目录类型元编程内置工具类型窥探外部工具类型推荐新操作符声明文件类型元编程什么是元编程:维基百科是这样描述的:元编程是一种编程技术,编写出来的计算机程序能够将其他程序作为数据来处理。意味着可以编写出这样的程序:它能够读取、生成、分析或者转换其它程序,甚至在运行时修改程序自身。在某些情况下,这使程序员可以最大限度地减少表达解决方案的代码行数,从而减少开发时间。它还允许程序更灵活有效地处理新情况而无需重