摸鱼精选第 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 服务器优化实践
- 使用多线程和网卡多队列绑核的特性能够显著得提高服务器性能;
- 使用 linux recvmmsg 和 sendmmsg API 可以有效的降低 CPU 负载,批量收取的消息量 vlen 需要根据各个业务的实际情况去设置,并且加上合理的超时时间,这样才能发挥 recvmmsg 的最大功效;
- rust 是一门性能非常优秀,开发工具完善,语法设计十分优雅的语言,值得投入。
16. Minimal TypeScript Crash Course For React
最小的 React TypeScript 速成课 — Johannes 深信学习 TypeScript 是很好的利用时间的方式,他把它归结为基础知识,并辅以互动练习来帮助你坚持下去。