LevelDB 源码阅读:禁止对象被析构

LevelDB 源码中有一个获取 Comparator 的函数,第一次看到的时候觉得有点奇怪,看起来像是构造了一个单例,但又略复杂。完整代码如下:

1
2
3
4
5
// util/comparator.cc
const Comparator* BytewiseComparator() {
static NoDestructor<BytewiseComparatorImpl> singleton;
return singleton.get();
}

这里的 NoDestructor 是一个模板类,看名字是用于禁止对象析构。为什么要禁止对象析构,又是如何做到禁止析构呢?这篇文章来深入探讨下这个问题。

阅读全文

免费版 Claude3.5 配合 Artifacts,一句话就能写个游戏

Anthropic 不声不响地发布了 Claude 3.5 模型,除了模型效果提升,还支持了 Artifacts。初步体验后,感觉这才是未来 AI 的样子,比之前 GPT4-o 更让我震撼。

Artifacts 工作空间内写代码

在 Artifacts 之前,如果想用 ChatGPT 等 LLM 来帮忙实现程序功能,需要先提功能需求,然后复制 AI 的代码到自己的环境中运行。如果和预期不符合,要再追问、再修改代码运行。需要重复这个过程,直到满意或者放弃(有些复杂代码目前 AI 还是写不太好)。

阅读全文

溢出、异常、线程池、阻塞,奇怪的服务重启问题定位

最近在业务中遇见一个很奇怪的服务重启问题,定位过程比较有曲折,本文来复盘下。这个问题涉及到 C++ 线程池、整数溢出、异常捕获、阻塞等多个方面,还是挺有意思的。

接下来我会按照问题排查的过程来组织本文内容,会先介绍问题背景,接着列出初步的排查思路,定位异常请求的方法。然后,通过代码分析,以及复现问题的一些简单用例,来揭开服务重启的神秘面纱。

阅读全文