Xander's Wiki


  • Home

  • Tags

  • Categories

  • Archives

  • Search

从零开始实现一个日志库(二)

Posted on 2024-12-25 | In log library

今日目标

  1. 提取和抽象msg类
  2. 打印source location

具体实现

具体可见:day-2

  1. Msg类

当前仅包含3个字段, source location, timestamp, payload。

  1. 记录source location

通过新增

1
2
3
4
5
6
#define MINILOG_CALL(...)                                                                \
MiniLog::log(MiniLog::Detail::SourceLoc{std::source_location::current().file_name(), \
std::source_location::current().line(), \
__func__}, \
__VA_ARGS__)
#define MINILOG(...) MINILOG_CALL(__VA_ARGS__)

完成记录,需要注意的是,std::source_location::current().file_name()返回的是完整函数签名,因此暂时使用__func__代替。

Day-3 TODO

  1. 实现日志落盘

从零开始实现一个日志库(一)

Posted on 2024-12-24 | In log library

前言

本系列将尝试从零开始实现一个c++ header-only的demo级日志库。
设计思路将follow spdlog,并在其基础上使用现代c++特性做一些代码简化。
计划从最基本的日志库开始实现,逐步完善,最终实现以下基本功能。

  1. 支持同步/异步日志
  2. 支持日志消息多目的地落盘
  3. 支持简单的消息格式化
  4. 支持运行时日志级别过滤
Read more »

从0开始学习velox源码(三)

Posted on 2024-12-04 | In velox

前言

orderBy是velox中的排序算子,其源码位置为

1
2
velox/exec/OrderBy.h
velox/exec/OrderBy.cpp

其主要逻辑基本转交给了sortbuffer来处理,sortbuffer的源码位置为
1
2
velox/exec/SortBuffer.h
velox/exec/SortBuffer.cpp

本节我们将重点关注sortbuffer的实现。
按照先易后难的顺序,我们先关注无需考虑spill的情况,再在后续章节讨论包含spill的情况。

Read more »

从0开始学习velox源码(二)

Posted on 2024-12-02 | In velox

前言

最近在学习velox orderby算子,其排序存在一个列转行的过程,其中行数据的表现形式是RowContainer。
本节主要描述RowContainer的layout和基础api。
笔者当前仅关注SortBuffer所需要关注的部分,对于RowContainer的其他部分(aggregate、join等),将在后续补充。

Read more »

从0开始学习velox源码(一)

Posted on 2024-12-02 | In velox

前言

本系列是笔者学习velox源码的笔记,主要记录在学习velox源码时遇到的问题和解决方案。
本节是最基础也是最磨人的一节————搭建开发环境。

Read more »

clang-tidy customized checker example

Posted on 2024-01-21 | In 杂项

前言

 
本文给出了一个自定义clang-tidy checker的实例,并介绍了引入该实例的背景和原因,旨在帮助读者以此为蓝本快速开发own clang-tidy checker。
本文并不对clang-tidy的基本使用做过多介绍,不熟悉的读者可以阅读官方文档。
此外,本文同样可以视作对write our own checkers的补充说明。

Read more »

cpp dev tools && clang tools

Posted on 2023-12-18 | In 杂项

abstract

  1. C++ dev tools
  2. clang tools
Read more »

C++模板元编程入门

Posted on 2022-08-05 | In 杂项

前言

 
本文只是针对TMP(Template Metaprogramming)的简单说明,并不涉及模板元编程中的各种黑魔法诸如编译期堆排序,实现反射特性等等。
旨在对TMP做一个入门科普,以及简单介绍TMP在实际业务中存在哪些应用。

Read more »

记一次懵懂的源码阅读经历————static_cast,priavte继承与friend杂烩

Posted on 2022-07-29 | In 杂项

前言

 
由于工作需要,最近在读folly库src,在阅读源码过程中产生了一些关于private继承,static_cast,friend之间的疑问。

Read more »

设计无锁并发数据结构——无锁结构实例

Posted on 2021-08-04 | In C++并发编程实战

前言

 
为了演示一些在设计无锁数据结构中用到的技术,本节将给出一系列简单数据结构的无锁实现。
如前文所述,无锁结构依赖原子操作和相关的内存顺序保证来确保数据以正确的顺序对其他线程可见。在本节之初,所有的原子操作将使用默认的memory_order_seq_cst内存顺序,因为它最好理解(所有的memory_order_seq_cst操作构成一个全序),但后续将逐渐减少约束至memory_order_acquire,memory_order_release,甚至memory_order_relaxed。
虽然实例中没有直接使用互斥锁,但需要注意,仅有std::atomic_flag保证无锁实现。如C++内存模型与原子类型操作一章所述,在某些平台上C++标准库内的原子类型可能是基于锁实现的,此时倒不如选择直接使用基于锁的数据结构。

Read more »
12…27<i class="fa fa-angle-right"></i>

xander.liu

266 posts
11 categories
36 tags
RSS
GitHub E-Mail
© 2024 xander.liu
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4