Hexi Blog

About Lifestyle

小心使用 golang 的 init 函数

有什么注意事项?

init 函数简要介绍 init 函数是 go 中的 package 初始化函数。例如有一个 http 客户端包 A: 1 2 3 4 5 6 7 8 9 10 11 12 13 package A import "fmt" var Dial func(string) (io.ReadWriteCloser, error) func Get(address string) (*Resp...

nightly-09-11 引入的 async 块 `Send` 约束问题

原因及解决方案?

本文旨在总结并解释 rust-lang/rust#64477 和 rust-lang/rust#64856。本文代码地址:Github。 引言 如果你正在使用 2019-09-11 到 2019-11-05(最新)版本的 rust nightly 工具链,你会发现下面这段代码无法通过编译: 1 2 3 4 5 6 7 8 9 10 // examples/format.rs asy...

现代化的内存管理:Cpp vs Rust

Which is safer?

Rust 自诞生起就以它独特、现代化的内存管理机制闻名于世;而其指定的竞争对手 Cpp 自 C++11 以来在内存管理现代化的道路上也下了很大功夫。笔者平时写 Rust 比较多,最近在写 Cpp 便试图给脑中零散的概念做个总结,并使用 Rust 与其作对比,也算是一篇面向 Cpp 用户的 Rust 推销文章吧。 本文主要讨论四点内容,引用(reference)、拷贝(copy)、移动(mo...

如何理解 Sync 和 Send?

如何保证线程安全?

如何理解 Sync、Send? Sync 和 Send 是 rust 安全并发中两个至关重要的 marker,但绝大多数的文档或书籍每当谈到它们就只是直接抛出它们的语义: 实现了 Send 的类型,可以安全地在线程间传递所有权。也就是说, 可以跨线程移动。 实现了 Sync 的类型, 可以安全地在线程间传递不可变借用。也就是说,可以跨线程共享。 ...

震惊!社会主义核心价值观竟蕴含了宇宙的奥秘?

Base Core Socialist Values

我和可奥 昨天在办公室抱怨着获取 精 品 网 络 越来越艰难了,想着是不是应该搞个和谐的编码来向美帝传播社会主义核心价值观,然后糊出了这个库:BaseCoreSocialistValues。 其中 base_core_socialist_values 是库的本体,bcsv 是一个命令行工具,效果如下: 由于现在编码效率极低,现在 Just For Fun!

rust asynchronous io

从 mio 到 coroutine

Table of Contents 引言 异步 IO 的基石 - mio 异步网络 IO 容错性原则 Poll Option Still Block 自定义事件 Callback is evil coroutine generator 自引用 ...

Efficient Scraper

高效地提取网页数据

前几个月打算开个爬虫的坑,然后开出了一坨新坑。 其实最早的坑很容易: 拿到 HTML -> 解析 HTML,但总觉得前人的做法过于原始,要糊一堆模板代码。于是我构思了一下,我只要能做到这两件事,就能高效地完成我的工作。 高效地拿到 HTML 高效地解析 HTML 目前来看,最接近我第一个需求的项目就是 retrofit,而能满足第二个需求的好像并找不到。 找不到就只...

unhtml: HTML 到结构体的映射

An efficient HTML unmarshaler for golang

最近要用 golang 写一个需要解析 HTML 的项目,到网上找了一个库叫 goquery。虽然它的 API 挺不错,css selector 基本上也全支持了,但写这种代码果然还是有点无聊,于是我就想,为什么不能跟 go 的 json 库和 xml 库一样,直接 Unmarshal(HTML) 呢? 然后我花了两天时间撸出了 unhtml -> Github 样例 & ...

Animal Sniffer: JVM 上的 API 检查器

For Compatibility and Stability

起因 最近给 retrofit 写一个子项目 retrofit-processors时遇到了一个问题:我在父项目根目录下执行 mvn compile 非常正常,然后 mvn test 炸了,报的错是 1 Undefined reference: boolean javax.lang.model.element.ExecutableElement.isDefault() Undefin...

编码:字符串和二进制

Encoding: String and Binary

Introduction 计算机是如何储存数据的? 毫无疑问,对现代计算机来说,数据的基本单元是位(bit),即一位二进制数,值为 0 或 1。那用枯燥的二进制如何描述出文字、图片、视频等丰富多彩的内容呢? 我最初了解计算机相关知识时,这是最吸引我的问题,而它最简洁的答案就是编码。 编码是计算机的基石,其内容十分庞大,本篇文章不可能涉及太多,仅仅介绍字符编码的相关内容。 字符集 ...