Caelansar


  • Home

  • Tags

  • Categories

  • Archives

rust中的「函数」

置顶 | Posted on 2024-09-05 | In rust

Function Item

第一次接触到function item这个新概念可能会令人感到困惑,因为在其它语言中几乎都找不到类似的设计,但它却是 Rust 零成本抽象(zero-overhead abstractions)的一个重要体现

Read more »

rust的魔法参数

Posted on 2024-08-24 | In rust

初看axum 时,对于它的示例代码惊为天人:一个静态强类型语言竟然可以做出比肩动态语言的效果,可以写出如此灵活,且做了严格类型检查的代码

Read more »

使用lldb探索trait object的结构

Posted on 2023-03-26 | In rust

trait object

rust中支持了静态派发(static dispatch)和动态派发(dynamic dispatch)两种方式

静态派发指的是具体调的函数,在编译阶段就能确定下来,静态派发通过泛型来完成。对于不同的泛型类型参数,编译器通过单态化(monomorphization)生成不同的函数实现,在编译阶段就确定了应该调用哪个函数。动态派发指的是具体调用哪个函数,在执行阶段才能确定。它通过 trait object 来完成。trait object类似golang中的interface,本质上是个胖指针,它可以指向不同的类型,从而动态地选择调用的方法

Read more »

简单说说golang中的string

Posted on 2023-03-05 | In golang

现象

最近使用bytes.Buffer的过程中发现了一个有意思的问题

1
2
3
4
5
6
7
8
var b bytes.Buffer
b.WriteString("hello")
var val = b.Bytes()
t.Log(string(val)) // hello
b.Reset()
b.WriteString("bye")
t.Log(string(val)) //byelo

Read more »

golang http中的context

Posted on 2023-02-26 | In golang

源码分析

对 HTTP 服务器和客户端来说,超时处理是最容易犯错的问题之一。因为在网络连接到请求处理的多个阶段,都可能有相对应的超时时间。以 HTTP 请求为例,http.Client 有一个参数 Timeout 用于指定当前请求的总超时时间,它包括从连接、发送请求、到处理服务器响应的时间的总和。

1
2
3
4
client := &http.Client{
Timeout: 1 * time.Second,
}
resp, err := client.Get("https://baidu.com")
Read more »

实现一个dns服务器 -- 1.协议概览

Posted on 2022-06-05 | In dns

The Domain Name System (DNS) is the hierarchical and decentralized naming system used to identify computers reachable through the Internet or other Internet Protocol networks.

本文是实现一个dns服务器的第一章,实现一个dns服务器系列文章将从研究 DNS 协议开始,一步步实现一个简单的DNS server

Read more »

实现一个ss客户端

Posted on 2022-06-04 | In rust

一、协议

Shadowsocks is a secure split proxy loosely based on SOCKS5

ss是建立在socks5协议上的一种代理协议,它的职责是建立两个通道,一个用于把客户端数据传输到服务端,一个用于把服务端的数据传输到客户端。

Read more »

golang泛型初探

Posted on 2022-04-17 | In golang

问题

假设有如下场景,我们需要给两个不同的struct实现Equal方法

Read more »

golang实现LRU缓存淘汰算法-泛型版本

Posted on 2022-04-16 | In golang

说明

之前这篇文章中的lru cache实现有很多考虑不周之处,加之golang1.18版本支持了泛型,趁这次机会对之前问题进行修正,顺便学习一下泛型的用法

Read more »

golang中的function value

Posted on 2022-04-10 | In golang

一、function value

在golang中,函数是一等公民,将函数作为参数、变量或返回值的情况称为function value。function value本质上是一个指针,指向runtime.funcval,这个runtime.funcval结构体里只有一个地址,即函数指令的入口地址

Read more »
12>

20 posts
6 categories
11 tags
© 2024 Caelansar