The Rust Programming Language 中译本

配套材料:Rust By Example 中译本

第零~二章 Rust 入门

  • 个人收集的几个国内比较流行的中文社区:
    • rust-lang-cn:Rust 中文官网提到的“非官方翻译”由此组织提供,维护了目前最全的 中文 Wiki
    • rustcc:维护了中文社区的 https://github.com/rustcc/awesome-rust,翻译了 Rust Atomics and Locks、Rust Primer、Write an OS in Rust 等书籍,保存了一些国内大会讲义;
    • rustlang-cn:维护了非常完善的 锈书 https://github.com/rustlang-cn/rusty-book,以及 Rustt、rust-weekly、rust-algos、Asynchronous Programming in Rust 翻译 等项目;
    • sunface:有 Rust 语言圣经rust-by-practice
阅读全文 »

文中标明【11】的为C++11新增标准。

第零部分

第一章 开始

  • C++是静态(编译时检查变量类型)、弱类型(会自动做隐式类型转换);
  • cin >>cout << 运算顺序均为从左至右,运算结果为一个istream/ostream对象;
  • while (cin >> a) 在读到EOF 时跳出循环;
  • 由于/* */ 注释的判定为遇到第一个*/ 结束,因此该注释不能嵌套。一般只用它来写注释,需要注释掉代码时使用多行//
  • cerr不可重定向,不通过缓冲区;endl会刷新缓冲区;
  • Windows下文件结束符为Ctrl+ZEnter,Linux下为Ctrl+D
  • 用户自定义的标识符不能连续出现两个下划线,也不能以下划线紧连大写字母开头,定义在函数体外的标识符不能以下划线开头;
阅读全文 »

参考:

CUDA C++ Programming Guide

《CUDA 编程:基础与实践》

《GPGPU 异构高性能计算》

GPU 介绍

  • 一个典型的 GPU 参数,以 NVIDIA H100 GPU 为例:
    • 16896 FP32 CUDA cores;
    • 66.9 TFLOPS (FP64 Tensor core);
    • 33.5 TFLOPS (FP64);
    • 3352 GB/s memory bandwidth;
    • 700W TDP;
    • TSMC’s 4N customized for NVIDIA;
阅读全文 »

参考

《Rust Primer》

《Rust 编程之道》

《Rust Course》(Rust 语言圣经)

THU《程序设计训练(Rust)》课件

  • 裸指针(不安全): *const T*mut T
  • 单字节字符 b'H' ,单字节字符串 b'Hello' ,仅限 ASCII 字符; r#"..."# 表示不转义字符串;
  • String&str 很廉价,而反之涉及分配内存,代价相对更高;
  • 即使结构体是公有的,成员仍然默认私有;枚举如果是公有的则其成员均为公有;
  • 可以在 match 中通过 refref mut 获取对应变量的引用;
  • try! 宏在 Ok 时提取内部值,否则直接 return 期望返回的 Error 类型;现在可以直接使用 ?
  • 使用 io::stdin.read_line(&mut String) 读入;
  • Rust 项目结构:
阅读全文 »

Pine 是一个使用 C++17 编写的高并发框架,支持 Linux / MacOS 跨平台;它也是 30 天自制 C++ 服务器(目前更至第十六天)的配套代码。

本文为 Github 源码 阅读笔记。

前置技能:

  • Modern C++ (包括并行库);
  • 网络编程基础
    • 《Linux 高性能服务器编程》—— 游双:服务器编程必读;
    • 《Linux 多线程服务端编程:使用 muduo C++ 网络库》—— 陈硕:经典网络库 muduo 作者,本框架采用类 muduo 架构;
    • 《C++ 服务器开发精髓》—— 张远龙:类似以上两本书的组合,编写年份较新,对部分技术做了相应更新;
    • 《UNIX网络编程卷1:套接字联网API》、《UNIX网络编程卷2:进程间通信》:可以作为字典书;
阅读全文 »

堆、栈、RAII、容器

  • delete 一个空指针是合法的,但不能多次 delete
  • 手写智能指针:先实现一个 auto_ptr(赋值为移动语义),再定义引用计数类;每个智能指针类包含两个类的指针:引用技术类和对象类;
  • 异常安全的赋值函数:复制并交换;
1
2
3
4
T& operator= (T rhs) {
rhs.swap(*this);
return *this;
}
  • vector 保证强异常安全性,如果没有 noexcept 的移动构造函数,会调用拷贝构造函数;
  • queuestack 依赖现有容器,因此称为容器适配器,默认均为 deque 实现;
  • lessgreater 均为通过重载同名结构体的 bool operator() (const T& x, const T& y) 得到的函数对象;它们继承的 binary_functionunary_function 已在 C++11 被废弃;
阅读全文 »

  • Go 是静态、强类型语言;
1
2
3
4
5
6
7
8
9
10
11
12
package main // 定义包名

import "fmt" // 引入包

// 没有 init() 时的程序入口,可执行程序必须包含
func main() { // 注意大括号不能换行
/*
当标识符以一个大写字母开头,就可以被外部包的代码所使用(public),
否则对包外不可见(protected)
*/
fmt.Println("Hello, World!") // 不需要分号,除非一行多条语句
}
阅读全文 »

C++ Concurrency in Action - SECOND EDITION

本文为此书中文译本前四章的读书笔记。

https://github.com/xiaoweiChen/CPP-Concurrency-In-Action-2ed-2019

<pthread.h>

<pthread.h>是贴近底层的 POSIX 线程接口:

1
2
3
4
5
6
7
8
pthread_create():创建一个新的线程。
pthread_join():等待指定的线程退出,并回收其资源。
pthread_detach():将指定的线程设置为分离状态,使其资源在退出时自动回收。
pthread_exit():使当前线程退出,并返回指定的状态值。
pthread_mutex_init():初始化互斥锁。
pthread_mutex_destroy():销毁互斥锁。
pthread_mutex_lock():尝试获取互斥锁,如果已经被其他线程占用,则阻塞等待。
pthread_mutex_unlock():释放互斥锁。
阅读全文 »

项目目标:完成远程真机调试插件,实现对端侧 3D/XR 场景的 Unity 实时场景部署与调试;

具体内容

  1. 在端侧构建调试 SDK,用于接收 Unity 发送的命令,和向 Unity 同步状态;
  2. 在 Unity 中基于插件实现Debug Server,用于和端侧进行实时通信(Unity 场景快速导出并推送到端侧)和同步状态(Unity 场景双向状态同步调试);
  3. PC端:MacOS,移动端:iOS;
阅读全文 »

代码书写

  • 代码书写规范基本遵循 谷歌代码书写规范中文版
  • 不使用using namespace std,不使用goto,不使用vector<bool>,使用using代替typedef
  • 谨慎使用宏定义(尽可能使用const代替宏),#代表将宏参数内容转换成字符串,##代表将两个参数内容连接成为一个字符串;
  • 一个可参考的 C++ 工程目录结构:https://github.com/hattonl/cpp-project-structure
  • 一些常见的注释约定:// TODO(待办),// FIXME(待修复),// HACK(临时解决方案),// NOTE(备注),// OPTIMIZE(待优化),// REVIEW(待审查),// DEPRECATED(已过时);
阅读全文 »