使用Rust实现Helang😅

引入 最近b站上很多小伙伴对何同学的错误代码进行了一些很有意思的二创,一度登上了Github Trending: 其中看到有人使用C++中的宏实现了何同学的“或运算”,于是受到启发,使用Rust中的宏实现了一下。 Source Code fn parse_to_vec(nums: &str) -> Vec<usize> { let nums = nums.replace(' ', ""); nums.split('|').map(|x| x.parse().unwrap()).collect() } fn power_con(powers: &mut [u8], nums: &[usize], power: u8) { for &num in nums { powers[num] = power; } } #[macro_export] macro_rules! powerCon { ($powers: expr, $nums: expr, $force: expr) => { power_con($powers, &parse_to_vec(stringify!($nums)), $force) }; } fn main() { let mut powers = [0_u8; 68]; powerCon!(&mut powers, 0, 100); powerCon!...

August 19, 2022 · 1 min · fffzlfk

Java泛型

擦拭法 编译器把类型<T>视为Object public class Pair<T> { private final T first; private final T last; public Pair(T first, T last) { this.first = first; this.last = last; } public T getFirst() { return first; } public T getLast() { return last; } } Java中泛型是在编译阶段的,编译器将上述代码经过擦除法,JVM实际看到的代码如下所示: public class Pair { private final Object first; private final Object last; public Pair(Object first, Object last) { this.first = first; this.last = last; } public Object getFirst() { return first; } public Object getLast() { return last; } } 编译器根据<T>实现安全的强制转型 Pair<String> p = new Pair<>("Hello", "world"); String first = p....

August 4, 2022 · 4 min · fffzlfk

Cloudflare事故报告(中文翻译)

Cloudflare outage on June 21, 2022 (Chinese translation)

June 21, 2022 · 2 min · fffzlfk

可变参数模板的应用

引入 在C++中经常打印变量来调试代码,但无论是printf还是cout总是很麻烦: printf int a = 1; float b = 2.0; char c = 'c'; printf("a = %d, b = %f, c = %c", a, b, c); cout int a = 1; float b = 2.0; char c = 'c'; std::cout << "a = " << a << ", b = " << b << ", c = " << c << '\n'; 可变参数宏 可变参数宏是C99引入的一个特性,C++11开始支持。 #define def_name(...) def_body(__VA_ARGS__) 可变参数模板 C++11允许模板定义有任意类型任意数量的模板参数(包括 $0$ 个模板参数)。...

April 2, 2022 · 2 min · fffzlfk

MapReduce in Go

简单版Generic Map func Map[T any](data []T, f func(T) T) []T { res := make([]T, len(data)) for i, v := range data { res[i] = f(v) } return res } 我们可以下面的代码测试这个简易的Map函数 func TestMap(t *testing.T) { square := func(x int) int { return x * x } nums := []int{1, 2, 3, 4, 5} squareArr := Map(nums, square) for i, num := range nums { if squareArr[i] != num*num { t.Errorf("Expected %d, got %d", num*num, squareArr[i]) } } upCase := func(s string) string { return strings....

March 27, 2022 · 2 min · fffzlfk