当前位置: 首页 > news >正文

自制编程语言:挑战与乐趣并存,10000 行 C++ 代码实现多项功能,未来规划丰富!

自制编程语言:比想象中容易,也更具挑战

2026 年 5 月 6 日。去年 12 月中旬,作者开始打造自己的编程语言,目前距生产级质量有差距,但已编写约 1000 行代码的蒙特卡罗路径追踪器。项目暂停,作者分享相关内容。作者声明并非专业编程语言设计师或编译器实现者,此语言不旨在取代 C/C++/Rust 等,也不确定能否广泛应用,只是享受过程。

引言

为何是现在?作者从事编程约 17 年,此时决定开发新语言,是因三个因素交汇:一直想打造真正面向生产环境的语言;开发的大型游戏适合模组开发,自定义编程语言是简单解决方案;2025 年 12 月 Matt Godbolt 推出的系列让作者燃起研究汇编的兴趣。

模组开发:作者对模组开发有三点考虑,包括直接处理组件指针迭代、实现沙箱化、简化开发。常见选择如 Lua 沙箱化困难,C++ 模组分发和沙箱化有问题,且这些问题也适用于 Rust 等语言。

设计目标:作者期望语言与 C 无缝互操作、可进行底层操作、实用且符合人体工程学、易于沙箱化、编译器占用空间小、编译快速、真正跨平台、速度合理、避免简单复制 C++。

语言特性

概述:语言暂用名 `pslang`,是命令式、立即求值、按值调用的底层编程语言,有静态、严格和标称的类型系统。介绍了作用域、基本类型、数字字面量、数组、函数类型、指针、结构体、内存布局、空类型、变量、函数、声明顺序、控制流、外部函数、类型转换、运算符等特性。

编译器架构:项目拆分为 `types`、`ast`、`parser`、`ir`、`interpreter`、`jit` 等库,解释器和编译器是使用这些库的命令行应用程序,嵌入语言只需 `parser` 和 `jit` 库。

解析器:使用 Bison 解析器生成器,有词法分析器语法和解析器语法,修复了语法中的移进 - 归约冲突,生成 C++ 解析器类解决了多文件解析问题,解析器输出是表示解析文件 AST 的 C++ 对象。

缩进处理:因缩进使语法非上下文无关,采取将每行作为独立语句解析并附带缩进级别数字,通过简单线性处理解决作用域问题。

类型检查:解析完成后,先解析所有标识符,再检查和推断所有类型。

解释器:目前是“树遍历解释器”,处于不稳定状态,计划用 IR 重写。无法执行 `foreign` 函数,可输出内部状态用于调试。

编译器版本 1:2026 年 1 月为 M1 Mac 架构编写 JIT 编译器,编译器高层部分较直接,但涉及特定平台问题较棘手,生成指令时自己编写以精简编译器。

Aarch64 架构特性:Aarch64 指令为 32 位,常量处理、栈操作、调用约定等方面有特殊情况,增加了编译器的复杂度。

中间表示(IR):为复用代码、简化编译器编写和添加优化,使用类似 SSA 的 IR,但允许节点重新赋值且不使用 phi 节点。IR 处理结构体较棘手,有特殊节点处理嵌套字段。

编译器版本 2:使用 IR 重写 Aarch64 编译器,分为 AST -> IR 编译器和 IR -> Aarch64 编译器,后者目前较差,但预计使用寄存器分配器后会改善。

未来规划

编译器/解释器方面:计划使用标准线性扫描分配器,添加常量传播、算术简化等 IR 优化,重写 IR 解释器,支持生成可执行文件,支持 DWARF 调试信息格式进行调试。

语言特性方面:文档未完整提及。

http://www.jsqmd.com/news/790839/

相关文章:

  • [具身智能-632]:语音数据存储格式,一口气讲透(通俗 + 工程版)
  • SingleFile:一键保存完整网页的终极解决方案,告别碎片化保存烦恼
  • WindowResizer完整指南:如何强制调整任意Windows窗口大小
  • caj2pdf:3步轻松将知网CAJ文献转为可编辑PDF
  • CAPL脚本调试实录:diagGenerateKeyFromSeed参数填错,我的UDS安全解锁为什么总失败?
  • [具身智能-633]:语音 PCM 超通俗精讲(嵌入式 / 树莓派 / RK3588 专用)
  • SuperDuper框架:AI模型与数据库的无缝集成与向量搜索实践
  • 为Claude Code配置Taotoken解决封号与Token不足问题
  • 基于Simulink的SVG无功补偿装置谐波治理仿真​
  • N_m3u8DL-RE:如何5分钟掌握跨平台流媒体下载与解密核心技术?
  • 别再乱调字体了!Qt界面开发中QSS字体属性(font-family, size, weight)的实战避坑指南
  • CVT算法实战踩坑记:从点云到三角网格,我遇到的三个‘坑’及填坑方案
  • TikTok评论采集终极指南:3步轻松获取完整评论数据,无需编程技能
  • AI原生持续集成实战手册(SITS 2026 CI/CD for LLM全栈适配白皮书)
  • [具身智能-634]:语音全链路:通道 → PCM 编码 → 传输格式 → 存储格式 → WAV 文件
  • 2026新式酸奶饮品模式爆火,健康与口感成为竞争关键点 - 博客湾
  • 为什么ChatGPT Enterprise没敢用SITS 2026?——对话状态持久化设计中的3个IEEE标准冲突点(附合规改造路径)
  • NadirRouter/NadirClaw:高性能网络数据采集与智能代理路由实战指南
  • 独立开发者如何利用Taotoken管理多个个人项目的AI调用成本
  • TikTokCommentScraper:创新智能的抖音评论自动化采集解决方案,让数据驱动决策变得简单
  • 第51篇:Vibe Coding时代:LangGraph + 权限系统实战,解决 Agent 谁都能改代码、调用工具的安全问题
  • with open() 打开文件 文件被占用 except PermissionError
  • 深度测评2026年三星SDI电池和三星道达尔化工原料权威榜单
  • BurpMCP:基于MCP协议实现AI辅助渗透测试的实践指南
  • 3步实现Illustrator到Photoshop的矢量图层转换:为什么Ai2Psd是设计师必备工具?
  • 给数字IC新人的保姆级指南:用PrimeTime(PT)做STA到底在分析什么?
  • [具身智能-635]:不同常规音频文件,差别在于对数据的压缩,但都是时域波形
  • 从Qclaw-old项目考古看旧代码库的技术价值与重构实践
  • 5分钟快速诊断Windows热键冲突:Hotkey Detective完整使用指南
  • Python开发者快速集成Gemini API:HanaokaYuzu/Gemini-API工具包实战指南