摸鱼精选第 25 期

1. const vs constexpr vs consteval vs constinit in C++20

关键字 放在变量前 放在 static/thread_local 前 放在函数前 常量表达式前
const 可以 可以 成员函数 有时可以
constexpr 可以 (初始化得是 constexpr 的) 可以 必须是满足 constexpr 属性的函数 可以
consteval 不行 不行 满足 consteval 的函数 接受返回值,可以
constinit 不行 必须常量初始化 不行 不行

2. Rust 语言圣经

又一个 Rust 开源教程。截至目前,Rust 语言圣经已写了 170 余章,110 余万字,历经 800 多个小时。

3. Qt6 QML Book

QT 官方开源的 QML 教程,这个教程是一个简单的 QML 开发教程,每个章节都有一个 QML 开发的练习。 Github: https://github.com/qmlbook/qt6book

另外还有官方的 QT for Python: QtPySide6

4. An Interactive Guide to Flexbox

一个交互式学习 Flexbox 的教程。

5. C 语言编程透视

如果对 Linux 进程想了解一下的话,可以看看进程这一章节。当然更好的教程还是《Unix 环境编程》。

6. Shell 编程范例

不同于传统 Shell 书籍,本书并未花大篇幅去介绍 Shell 语法,而是以面向“对象” 的方式引入大量的实例介绍 Shell 日常操作,“对象” 涵盖数值、逻辑值、字符串、文件、进程、文件系统等。这样有助于学以致用,并在用的过程中提高兴趣。也可以作为 Shell 编程索引,在需要的时候随时检索。

7. Tackling TypeScript

Axel Rauschmayer 博士,非常有名 Web、JS 专家,写了很多免费的 js、ts、node 的书。 他的其他免费书籍:

8. 函数式编程术语

函数式编程有很多术语,这个仓库收集这些术语,一一配上 JavaScript 示例,给予解释。它是英文版的,但是有中译

9. Metal 每日分享 - 系列专栏

Metal 是 Apple 推出的一个和 OpenGL ES 类似的面向底层的图形开发套件,通过使用相关的接口可以直接操作 GPU,本专栏是基于 Metal 技术的系列文章,囊括了很多 Metal 实战相关的技术文章,并且更新频率较高,对 Metal 相关领域感兴趣的同学不妨收藏阅读。

10. 实现无入侵式 C++代码 mock 工具

本文作者基于开源 Hook 框架 Frida-gum 提供的 API,利用 C++ 模板进行封装,编写了一个可跨平台的(MacOS、Linux、Windows、Android、iOS 等) mock 工具。作者先结合代码介绍了该工具的主要功能(函数替换,mock 函数的调用次数,函数的回滚操作等等),然后再结合代码来讲解如何使用该工具来实现这些功能。

11. 容器网络|深入理解 Cilium

一篇 19 年的英文老文的中文翻译,主要讲述了为什么要关注 eBPF,为什么 eBPF 如此强大,以及 Cilium 在 eBPF 之上做的一系列封装,介绍数据包是如何穿过 network datapath(网络数据路径)的:包括从硬件到内核,再到用户空间。

12. C++服务编译耗时优化原理及实践

一些常用的编译优化的方案:

  • 并行编译: make -j 4
  • 分布式编译:Distcc 之类的
  • PCH 头文件:很多 Shared 的源码可以放在这里
  • CCache:按文件内容做的缓存,且同一机器的多个项目可以共享缓存
  • Module 编译:C++ 20 才支持
  • Google 的 Include-What-You-Use 工具: 基于 Clang 的 C/C++工程冗余头文件检查工具

代码优化方案:

  • 前置声明是必须的
  • 外部模板: 由于模板被使用时才会实例化这一特性,相同的实例可以出现在多个文件对象中
  • 多态替换模板使用: 通过继承和多态,可以抽象出几类接口,只实现针对基类的操作
  • 少用 header only 的库:比如 Boost,虽然方便使用,但是预编译展开后很大
  • 预编译成动态库
  • 优化 makefile

13. Swift Package Manager 工程实践

狐友 iOS 技术团队深度使用了 SwiftPM,在实际项目中全面替代曾经长期使用的 CocoaPods;本文将详细介绍狐友团队在引入 SwiftPM 进行工程实践中,探索和累积的相关知识和实践经验,我们将从结构设计、资源处理、链接方式的选择、编译与链接参数设置、异常处理,这五个方面展开详细介绍,每个小部分结尾都提供了最佳实践的总结;希望能够帮助其他想要尝试 SwiftPM 的开发者顺利过渡。

本文面向了解 SwiftPM 基本知识,但是没有深度使用的开发者;如果你还不了解 SwiftPM,建议首先阅读 WWDC 相关视频。

15. 单机 200 万 PPS 的 STUN 服务器优化实践

  1. 使用多线程和网卡多队列绑核的特性能够显著得提高服务器性能;
  2. 使用 linux recvmmsg 和 sendmmsg API 可以有效的降低 CPU 负载,批量收取的消息量 vlen 需要根据各个业务的实际情况去设置,并且加上合理的超时时间,这样才能发挥 recvmmsg 的最大功效;
  3. rust 是一门性能非常优秀,开发工具完善,语法设计十分优雅的语言,值得投入。

16. Minimal TypeScript Crash Course For React

最小的 React TypeScript 速成课 — Johannes 深信学习 TypeScript 是很好的利用时间的方式,他把它归结为基础知识,并辅以互动练习来帮助你坚持下去。