跳至主要內容
Chi

Chi

EveryBody dies but not everybody lives

DragonOS
Rust开发的服务器操作系统
友链
龙进的技术笔记 - LJ's Blog
gRPC入门

什么是 gRPC

前期准备

在本篇内容中,我们将通过go+gin+gRPC的组合来初步认识 gRPC,并实现一个简单的网关应用

Go 环境安装

创建项目

mkdir app-gateway
cd app-gateway
go mod init app-gateway

Chiichen原创大约 3 分钟笔记后端后端gRPCgo
利用Erased-trait进行类型擦除

为什么要类型擦除

这里的类型擦除和通常我们听到的,在 Java 里的类型擦除不太一样,这里的类型擦除是指,通过某些手段,屏蔽掉一些我们不关心的范型,从而达到统一存储的目的,这样说可能很抽象,直接看代码

pub trait Source{
    type Event
    pub fn poll(&self)->Result<Self::Event,SourceError>
}

pub struct SourceEntry<S:Source,T>{
    source:S,
    callback: Box<dyn Fn(S::Event,T)>
}

pub struct SourceList<S:Source,T>{
    sources:Vec<Rc<RefCell<SourceEntry<S,T>>>>
}

Chiichen大约 3 分钟笔记RustRust
vscode+qemu开发Linux内核

参考于QEMU 调试 Linux 内核环境搭建

获取 Linux 源码

编译 Linux 内核

cd /linux
export ARCH=x86
make  x86_64_defconfig
# 如果想要更好的clangd补全就用clang编译(make CC=clang x86_64_defconfig ) ,但是clang在部分模块可能需要特殊的编译选
# 项才能编译,所以还是推荐用默认的gcc编译,尽管这样clangd的效果会差一点

# ./scripts/config --file .config -e CONFIG_NUMA_BALANCE CONFIG_NUMA_BALANCING_DEFAULT_ENABLED CONFIG_NUMA
# Todo 还有一些nuuma_balance相关设置项要打开,不然后面要在编译时手动选择Y

Chiichen大约 2 分钟笔记Linux 内核Linux 内核开发环境
Chapter0 前言

前言

写给华工软院学生

  1. 2021 级编译原理考试难度较低,复习优先级低,不建议花太多时间准备。虽然根据老师不同(以徐老师为例),可能上课的内容比较深入,让学生产生了这门科目难度很大的错觉。诚然要彻底理解编译原理需要花费大量的时间,但考试内容基本都是简单的算法,只要把几个重要算法理解了,都不需要把每个概念搞的非常清楚,考试都基本不会出问题。
  2. 编译原理博大精深,作为计算机底层设计的一部分,课堂上教授的内容少之又少,甚至可以说和一些工程实践是严重脱钩的,比如上课会花很大的精力教你自动机和自动机的相关算法,但是在实际工程运用中,我们有诸如 lexer 的工具帮我们完成这个工作,而且如果是编写一个简单的词法分析器,甚至只需要简单的 最长字串匹配 就能实现一个词法分析。仅凭课堂上学的内容,大概率连怎么写一个 TinyC(精简版的 C 语言) 都不知道。感兴趣的同学可以认真钻研一番,这对编程能力会有极大的提高。

Chiichen原创大约 2 分钟课程笔记编译原理
Chapter1 编译器组成

编译器的结构

  • 词法分析 Lexical analysis (Scanning)
  • 语法分析 Syntax analysis (Parsing)
  • 语义分析 Semantic analysis

相关信息

以上三步的目的是通过分析输入代码,生成能被统一处理的中间层代码,亦即编译器前端(front-end)

  • 中间代码生成 IR Generation
  • 中间代码优化 IR Optimization
  • 最终代码生成 Generation
  • 最终代码优化 Optimization

Chiichen原创小于 1 分钟课程笔记编译原理