Purple Garden Lexer 性能优化:从 0 到 580MB/s 的速度飞跃

2025-07-14

本文讲述了作者如何优化 Purple Garden 语言的词法分析器,使其速度提升到惊人的 580MB/s。作者通过使用计算 goto、零拷贝零分配字符串、内存分配器接口、令牌驻留和预计算关键字哈希等技术,显著提高了词法分析器的性能。此外,作者还对词法分析器的架构进行了优化,并使用mmap提高了文件读取速度。一系列的优化使得 Purple Garden Lexer 的性能大幅提升,最终实现了从几十毫秒到几毫秒的处理时间,堪称速度的飞跃。

阅读更多

纯C语言实现的JSON解析器:高效、安全且易用

2025-03-01

本文介绍了一个用纯C语言编写的JSON解析器。它采用面向对象的方法,将函数附加到结构体上,提高代码可读性和可维护性。该解析器注重安全,避免了常见的内存泄漏、段错误等问题。此外,它还提供了一个简洁易用的API,并附带了详细的编译和使用说明,以及代码示例。作者还分享了编译C项目的技巧,以及一些代码优化策略,例如使用变长宏来内联生成JSON,以及高效的内存管理方法。

阅读更多
开发 JSON解析

使用 Neovim 和 Treesitter 高亮显示 Lua 中的 Bash 代码片段

2025-01-28

作者编写了一个用于同步其多台设备软件包的工具,其配置文件用 Lua 编写。为了方便阅读和编辑包含 Bash 脚本的 Lua 代码片段,作者使用了 Neovim 和 Treesitter 插件。Treesitter 通过注入功能,根据配置识别 Lua 表格中的 `script` 字段并将其内容识别为 Bash 代码进行高亮显示,提升了代码的可读性和可维护性。文中详细介绍了 Neovim 和 Treesitter 的配置方法,以及自定义查询规则以实现 Bash 代码高亮的功能。

阅读更多
开发 Treesitter

Rust项目sqleibniz集成Lua脚本实现可配置静态SQL分析

2024-12-19

sqleibniz是一个用于SQLite方言的静态SQL分析工具,作者为了增强其可配置性和扩展性,将Lua嵌入其中。文章详细介绍了如何使用mlua库在Rust中与Lua进行交互,包括数据结构的转换、Lua函数的调用以及错误处理。通过Lua脚本,用户可以自定义规则和钩子函数,实现更灵活的静态分析,例如自定义诊断信息和代码风格检查。这使得sqleibniz具备了强大的可扩展性,并提升了用户体验。

阅读更多
开发

我为什么喜欢用 Rust 进行词法分析和语法解析

2024-11-08

作者在用 Rust 编写一个名为 sqleibniz 的 SQL 分析工具,目标是对 SQL 输入执行静态分析,包括语法检查、表、列和函数存在性检查等。作者分享了在使用 Rust 开发词法分析器和语法解析器过程中的经验和发现,着重介绍了 Rust 宏在代码去重方面的强大功能,例如利用宏定义抽象语法树节点,减少代码重复。作者还讲述了如何用 Rust 编写类似 Go 的表格驱动测试,并展示了如何利用 Rust 的模式匹配特性进行字符和Token匹配,以及如何进行错误处理和展示。最后,作者还分享了 Rust 中 Option 类型的一些便捷用法,例如 is_some_and、map 和 map_or 等方法,以及迭代器在字符过滤和检查方面的应用。

阅读更多
26
未分类 Parser

Go 迭代器的乐趣

2024-10-10

这篇文章探讨了 Go 1.23 版本中引入的迭代器功能。作者认为,尽管 Go 的迭代器使用起来很简单,但创建迭代器的过程却相对繁琐,尤其是在需要链接多个操作(如 map、filter、forEach)时。为了解决这个问题,作者创建了一个结构体来封装迭代器,并提供类似 JavaScript 的链式操作方法,从而简化了代码。文章最后展示了如何使用该结构体对切片进行反转、映射和过滤等操作。

阅读更多
26
未分类