妙到颠毫: bigcache优化技巧

最近看到 yoko 翻译的一篇文章: [译] Go开源项目BigCache如何加速并发访问以及避免高额的GC开销, 翻译自 How BigCache avoids expensive GC cycles and speeds up concurrent access in Go, 应该是 Douglas Makey Mendez Molero 在阅读了 bigcache 的作者写的 bigcache设计文章Writing a very fast cache service with millions of entries in Go做的一些调研和总结。

我在刚读取这篇文档的时候,顺着连接把相关的文章都找出来细细读了一遍,结合bigcache的代码,仔细学习了相关的优化设计,感觉设计非常的精妙,所以特意根据自己的理解又总结了一篇。

bigcache的精妙的设计也吸引了fasthttp的作者Aliaksandr Valialkin,他在bigcache的基础上,结合自己的公司的使用场景,进一步的做了相应的优化, 也开源了这个项目fastcache, 本文在最后也做了介绍。

阅读全文

[译]Golang template 小抄

这是 Curtis Vermeeren 做的 Go模板技术的小抄,这是我非常喜欢的形式,可以以一个简短的总结把相关的技术介绍出来。 大家可以看我以前翻译的Go文件操作大全,也是统一风格的文章。我翻译了这篇文章,补充了遗漏的知识点。

Go标准库提供了几个package可以产生输出结果,而text/template 提供了基于模板输出文本内容的功能。html/template则是产生 安全的HTML格式的输出。这两个包使用相同的接口,但是我下面的例子主要面向HTML应用。

阅读全文

Rust每周一库: matches!

每周一个 rust 库的时间到了,今天要介绍的是matches库。

最近Patrick Walton分析了crates.io上的500个rust库,对这些库按照某个维度计算了分数进行排名,其中一个分数就是根据它的流行度和它的大小计算一个分数进行排名,用来挑选小而美的rust库,这些库可以移植到标准库中,或者可以汇总到一个大库中。这个指数叫做left-pad index, 这个排名文件可以在这里找到。

left-pad是2016年nodejs圈发生的一个非常著名的事件。left-pad是一个只有17行的npm代码库,却被很多的代码库所使用,包括 babel 这样的热门项目。作者 Azer 将其从npm删除后,所有直接或者间接依赖这个模块的 NPM 包就悲剧的挂掉了,影响广泛。 原因在于作者写了一个叫 kik 的工具和某个公司同名了,这天公司的律师要求其删掉这个模块,把 kik 这个名字“让”给他们,作者不答应,律师就直接找 NPM 了,而 NPM 未经作者同意就把包的权限转移给了这家公司。于是,Azer 一怒冲冠,将他所有的 NPM 包全部删掉了。

所以Patrick Walton分析了crates.io库,对于那些代码量很小但是全被广泛应用的库提出了讨论,这些库是不是应该移动到标准库中?

其中,排名第一的就是matches库。

阅读全文

深入Libra: 使用Move编程语言编写Libra模块和脚本

这一次,我们将尝试编写简单的Libra模块和脚本,初步了解Move编程语言。

Move编程语言还在演化之中,白皮书参照Move: A Language With Programmable
Resources
, 现阶段只能通过Move Intermediate Representation (IR) 编写,要求请不要太高。Libra能活下来Move才能光大。

本文主要整理和参考官方文档: Run Move Programs Locally

阅读全文

Rust每周一库: structopt

标准库提供了std::env::args()用来获取命令行的参数,第一个值是程序的名称,这和其它语言中的获取参数的方式类似:

1
2
3
4
5
6
7
let args: Vec<String> = env::args().collect();
let query = &args[1];
let filename = &args[2];
println!("Searching for {}", query);
println!("In file {}", filename);

但是在产品开发的过程中,我们需要比较多的程序参数,并且需要一定的规则和校验,这个时候我们就需要使用其它的一些库对这些参数进行解析,比如structopt库。

阅读全文