作者:迟子建

一九五六年吧,我三十来岁,已经是三个孩子的妈妈了。上头的两个是儿子,一个九岁,一个六岁。老小是个丫头,三岁,还得抱在怀里。

那年初夏的一个日子,我在河源老家正喂猪呢,乡邮递员送来一封信,是俺男人老潘写来的,说是组织上给了笔安家费,林业工人可以带家属了。他让我把家里的东西处理一下,带着孩子投奔他去。

阅读全文 »

作者:阿城

第一章

车站是乱得不能再乱,成千上万的人都在说话。谁也不去注意那条临时挂起来的大红布标语。这标语大约挂了不少次,字纸都折得有些坏。喇叭里放着一首又一首的语录歌儿,唱得大家心更慌。

我的几个朋友,都已被我送走插队,现在轮到我了,竟没有人来送。父母生前颇有些污点,运动一开始即被打翻死去。家具上都有机关的铝牌编号,于是统统收走,倒也名正言顺。我虽孤身一人,却算不得独子,不在留城政策之内。我野狼似的转悠一年多,终于还是决定要走。此去的地方按月有二十几元工资,我便很向往,争了要去,居然就批准了。因为所去之地与别国相邻,斗争之中除了阶级,尚有国际,出身孬一些,组织上不太放心。我争得这个信任和权利,欢喜是不用说的,更重要的是,每月二十几元,一个人如何用得完?只是没人来送,就有些不耐烦,于是先钻进车厢,想找个地方坐下,任凭站台上千万人话别。

阅读全文 »

众所周知C函数是无状态的(如果不算全局变量),如果要实现类似闭包的功能通常会将第一个参数设置为上下文,让回调函数在被调用的时候传入,但实际上通过构造机器码是可以实时生成一个闭包函数的,代码放在github gist.

<

上一篇文章中我描述了一个更强大的JavaScript全栈框架。好吧,我承认他在设计有很多失误,当然,为了避免以后再发生这样的事情我决定还是要先做足充分的调研和实践再开始进行设计,总之就放在那提醒自己了。在本文中,我会纠正之前的错误(主要是实现非常困难以及没有必要的部分),并重新规划设计remux框架。

阅读全文 »

假如我们需要设计一个需要密码才能登录的页面,某些偷懒的大聪明可以很容易地写出这样的代码:

1
2
3
4
5
6
7
8
9
10
11
12
function login(password) {
if (password === 'fuck') {
return 'hello';
} else {
return 'wrong password';
}
}

document.getElementById('login-button').addEventListener('click', async () => {
const password = document.getElementById('password').value;
alert(await login(password));
});
阅读全文 »

关于无锁数据结构有很多介绍了,如果想获得开箱即用的方案可以直接找liblfds,不过考虑到liblfds常年没维护,所以很多时候还得自己写,这里记录一下如何用原子操作实现无锁队列。

队列

简单队列

真的是很简单了,就是一个链表,我们使用结构体定义该链表的节点和链表本身

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct queue_node {
struct queue_node* next;
void* data;
};

struct queue {
struct queue_node dummy;
struct queue_node* tail;
};

void init_queue(struct queue* queue) {
queue->dummy.next = NULL;
queue->tail = &queue->dummy;
}
阅读全文 »

众所周知wxWidgets是一个跨平台的GUI库,支持Linux(GTK/X11),Windows和macOS(cocoa),与Qt不同的是,他足够轻量,不需要魔改C++语言本身(qmake说的就是你),而且它调用平台原生API实现GUI,而Qt在Windows上实际上是绘制的界面,所以我打算用wxWidgets来做毕设。

众所周知Windows是现阶段的主流操作系统,而我用来写代码的电脑是mac,所以最终我可能仍然需要提供一个Windows版本的程序,但是我实在是不想在虚拟机上再折腾一套开发环境,所以就想着能不能直接在macOS或者Linux上编译出exe呢?答案是可以的,那就是mingw。

阅读全文 »

项目地址

后端框架跑分

Go有Gin,Java有Tomcat/Spring,Python有Django,PHP本身就是为后端而生,Node.js有http模块,而C/C++……有nginx(?)! 但是众所周知,nginx插件并不好写,而且nginx还要配置文件,实际上也没多少人用nginx插件来写Web后端。

所以我决定来做这件事,我对这个框架的目标是

  • 高性能,既然是用C写,性能一定是优先地位,争取暴打nginx
  • 易用,类似于FaaS的开发和使用体验,如果还能有一个开发用的cli就更好了
  • 灵活,低耦合,可插拔,高度自定义
  • 轻量,少依赖
  • 跨平台,至少支持Linux和macOS
阅读全文 »

也就是优先队列,我们知道STL中提供了一个好用的优先队列priority_queue<T>,C语言中起码有不少库(比如librock)提供了这玩意,所以写这玩意纯属造无意义的轮子。但是我写这玩意主要是因为最近在面试,至少遇到了两次让手写一个堆(不过当时都没写出来,毕竟不会真的有人要手写STL提供的算法和数据结构吧?不会吧?不会吧?),闲着也是闲着,不如锻炼一下,堆还是很好写的。

我写的这个版本用void*模拟泛型,同时能自动扩容,但是缺点也很多,就我自己的感觉是时间复杂度的常数肯定很大,虽然是$O(\log_2 n)$​​​​​,但是有大量的判断,而且插入位置也没有优化,只写了个简单的测试例,总之不推荐在生产环境用(STL不香吗?)。

阅读全文 »