正则写复杂了很麻烦,难写难调试,只需要两个函数,就能用简单正则组合构建复杂正则: 比如输入一个字符串规则,可以使用 `{name}` 引用前面定义的规则: ``` # rules d...
博客广场
基于 LR(1) 和 LALR 的 Parser Generator
最近处理文本比较多,先前想增强下正则,看来不够用了,有同学推荐了我 Pyl 和 Lark,看了两眼,初看还行,但细看有一些不太喜欢的地方,于是刚好春节几天有空,从头写...
使用 LIBLR 解析带注释的 JSON
前文《基于 LR(1) 和 LALR 的 Parser Generator》里介绍了春节期间开发的小玩具 LIBLR ,今天春节最后一天,用它跑一个小例子,解析带注释的 json 文件。由于 python 自...
互联网技术比游戏后端技术领先十年吗?
最近时间线上又起了一场不大不小的论战,做互联网的人觉得游戏服务端发展很慢,同时互联网技术日新月异,似乎觉得互联网技术领先了游戏后端技术十年,这个结论显然是武...
库代码中是否应该检查 malloc 的返回值?
现在网上有很多似是而非的观点,比如 malloc 失败不用处理,直接退出,这样的经验看似很聪明,实际却很局限,比如: 1)嵌入式设备:不是所有设备都能有一个强大的全功...
CD2:SharpDevelop
SharpDevelop 是 .Net Framework 时代最受欢迎的轻量级 IDE,它代替庞大的 Visual Studio使用 C# / VB.Net 开发各种 .Net Framwork 4.5 之前的程序(WinForm,控制台,W...
帧同步游戏中使用 Run-Ahead 隐藏输入延迟
帧同步可以轻松解决高互动的联网游戏(如格斗,RTS 等)的同步问题,但该方案对延迟很敏感,现在一般省内服务器延迟差不多 10-15ms (1帧),跨省一般 40ms (2-3 帧)...
56 行代码用 Python 实现一个 Flex/Lex
作为 Yacc/Bison 的好搭档 Lex/Flex 是一个很方便的工具,可以通过写几行规则就能生成一个新的词法分析器,大到给你的 parser 提供 token 流,小到解析一个配置文件,都...
CD3:Flash 开发宝典
前段时间碰到个经典的 Flash 游戏想玩一下,发现原网站挂了而游戏又需要验证原网站,于是想对其稍加修改,才发现原来可以下载 Flash 相关开发工具的页面已经全停了: 所...
Emake:你见过最简单的 C/C++ 构建工具
CMake 已经成为 C++ 构建工具事实上的标准了,即便觉得它很难用,但项目发布,跨部门协同,基本都以 cmake 为准。尽管你可能觉得其它构建工具更顺手,没问题,你们平时...
CD4:Windows XP 开发宝典
今天互联网上的内容,由于各种原因,正在以越来越快的速度消失,而习惯什么都从网上找的新一代网民们,却并没有备份和记录的习惯及意识。不远的将来,会有一天,当你特...
EditPlus 的配置方法
作为一名编辑器爱好者,EditPlus 是我最喜欢的编辑器之一,超过 NotePad++,它启动速度比它快,打开文件比它快,功能比它强,颜值也比它高,但大小只有 2MB: 用了这么...
Python 的 asyncio 网络性能比 C 写的 Redis 还好?
先前我做过一个 asyncio/gevent 的性能比较《性能测试:asyncio vs gevent vs native epoll》,今天修改了一下 asyncio 的测试程序的消息解析部分,改用 Protocol,发现...
Vim 文本过滤/文字处理插件
我经常有文本处理的需求,例如将 html 转换成纯文本,或者移除 markdown 里的所有连接,或者繁体转换简体。因此我做了一个插件来管理和执行各种外部文本过滤器。 所谓 “...
DOS 经典软件下载
二十多年前的某一天,我盯着资源管理器里很久没用却一直舍不得删除的 UCDOS 文件夹犹豫了半天,最终却为了给硬盘腾点空间一狠心 shift+delete 把他们彻底删除了,当时我...
WinSock 的 select 如何超过 64 个套接字限制?(三种方法)
在做跨平台网络编程时,Windows 下面能够对应 epoll/kevent 这类 reactor 事件模型的 API 只有一个 select,但是却有数量限制,一次传入 select 的 socket 数量不能超过...
WinSock 可以把 SOCKET 类型转换成 int 保存么?
在 Linux/Unix 等 posix 环境中,每个套接字都是一个文件描述符 `fd`,类型是 `int`,使用起来非常方便;但在 Win32 环境中是 `SOCKET` 类型被定义成 `UINT_PTR` ,是一...
异步事件模型的 Self-pipe trick
异步事件模型中有一个重要问题是,当你的 select/poll 循环陷入等待时,没有办法被另外一个线程被唤醒,这导致了一系列问题: 1)在没有 pselect/ppoll 的系统上,信号...
GCC 利用未定义行为进行优化正确么?
说实话,编译器是否该利用 Undefined Behavior 进行优化目前都还是一个争议话题,主要是 gcc 开了个坏头,不予余力的在默认参数下利用 UB 来优化,举个例子,C 语言里带...
要从vim切换到neovim吗?
很多人问我为啥我用 vim 而不用 neovim,这里统一回答下吧我用 vim 就是图 “稳定” 两个字:vim 每个新功能都要加一堆测试,测试覆盖率在 vim9 之前达到 93%,后面开发了...