KristalBASIC 2.2 发布说明(2026年6月20日)

计划和实施的更新

=> 完全独立的核心(核心解耦合):
已从编译器核心(Lexer、Parser、CodeGen)中完全移除硬编码的游戏引擎(Raylib)依赖项。 KristalBASIC 现在已被转换为一个通用、模块化和独立的编程语言。


=> 模块化指令和标准库(@OBJECT):
代替之前计划的@INCLUDE结构,@OBJECT指令已被添加,完全整合了外部.kbas文件到编译过程中。Raylib函数,如窗口、绘制和3D摄像机,已完全解耦合并重构为一个标准库模块“lib/raylib.kbas”。


=> 直接C代码集成(外部C):
现在支持独立的“外部C”块以链接外部库。可以使用三重引号(""")直接将多行原始文本块(C/C++头文件和源代码)写入KBas代码中。


=> 新语言特性(const和十六进制):
已添加“const”关键字到语言核心。常量赋值自然地传递到C后端。另外,已添加十六进制数字支持(如0xFFFFFF),以简化颜色和字节赋值。已创建隔离环境以防止宏名称与C库冲突。


=> void支持:
已添加void到语言的数据类型。它现在可以用来标准方式中函数不返回值的函数。解析器和CodeGen将识别void类型并正确生成其C等价。


=> OOP(new、this)和静态类解析:
在C转换期间,静态类现在生成为一个全局C结构实例,从而允许使用像PlayerState.pitch = ...这样的操作直接操作此全局实例。“new”关键字的动态内存分配(kbc_alloc)代码生成已修复。当使用“this”关键字时,它现在正确引用传递给方法的隐藏THIS指针。


=> 综合内存管理器和作用域(垃圾收集器)优化:
KristalBASIC的内存管理架构(作用域管理器)已被根本改善。已解决静态分配的C字符串(while、if)循环块内的内存泄漏问题(0xC0000374)。KBC内存管理器现在可以安全地隔离不由动态kbc_alloc产生的指针,并且由于kbc_str_dup的集成,来自外部Win32 API调用的字符串将自动清除而无内存泄漏。


=> 本机Windows API(Win32)集成:
已编写lib/win32/win32api.kbas核心库,提供从KristalBASIC无需任何额外的外部DLL或C库就可以访问Windows操作系统的全局访问权限。支持的本机模块:

  • 交互式消息盒子(MessageBox)
  • 系统、RAM、CPU和监视器读取
  • 控制台读写(CON_READ、CON_WRITE),光标和颜色设置
  • 文件/目录操作,Windows注册表读写
  • 剪贴板管理和WAV音频文件播放
  • 进程和互斥体管理
  • 高级窗口效果:无边框全屏和透明层次窗口功能已添加!

=> KristalENGINE IDE & I/O重定向(管道)兼容性:
已检测到当应用程序从开发环境(KristalENGINE IDE)运行时,标准I/O通道会被重定向到管道流中。已解决WriteConsole和ReadConsole在IDE环境中进入无限循环的问题;它们现在自动降级到WriteFile和ReadFile,从而允许游戏安全地在IDE的日志面板中运行。另外,已开发独立的CON_OPEN功能以供需要终端的游戏强制分离IDE绑定并打开一个新的干净控制台窗口。


=> 安全的字符串比较架构:
已添加STR_EQ内建(本机)比较函数到操作符逻辑中。已建立安全的桥接(绑定)到C侧的strcmp命令,以在循环条件中使用(例如if (STR_EQ(choice, "1"))),消除了指针模糊性。


=> 场景结构清理:
已清理场景相关的逻辑构造在项目和编译器中。


=> AST级别参数安全性:
已在AST级别增加了安全性,以便捕获错误使用,如InputSystem.playerInput(PlayerState);(将1个参数传递给期望0个参数的函数),直接由kbc.exe捕获而不是C编译器,向用户提供有意义的错误消息。


For KristalBASIC 2.2 => GitHub Repo

开发者: EREN KOÇAKGÖL。