引言
Quirrel 是一种快速、高级的命令式 OO 编程语言,旨在成为一种轻量级但功能强大的脚本工具,适合游戏等应用程序的大小、内存带宽和实时要求。
Quirrel 在任何 C++ 应用程序中都有简单的集成和绑定。
Quirrel 具有类似 C/Java/C++ 的语法,具有清晰、丰富和简单的类型系统, 但是该语言与 Python/Lua/JavaScript 一样具有非常动态的性质。 易于上手,同时比 Lua 和 JS 安全得多,具有与 Lua 相同的性能。
它基于 Squirrel Script 语言 (http://www.squirrel-lang.org/),但经过修改后更安全、更严格、更快速。 Quirrel 与原来的 Squirrel 不兼容 (参见 Diff from original),但转换通常很容易完成。
Quirrel 提供了广泛的功能,如动态类型、高阶函数、生成器、尾递归、异常处理、courutines、自动内存管理,同时将编译器和虚拟机融入大约 6k 行 C++ 代码中。
Repository 在 https://github.com/GaijinEntertainment/quirrel 上可用,欢迎您的 PR 和反馈!
更多关于 Quirrel 的详情
Quirrel 是一种成熟的脚本语言,用于数十个游戏和其他应用程序(包括 Web 服务器和嵌入式平台),安装量达数亿次。 它被创建为可嵌入到 C/C++ 应用程序中的语言,具有简单的绑定和清晰的心智模型。
Quirrel 对于具有 C、C++、JavaScript 或 Python 经验的人来说既熟悉又方便。 它有一个小而简单但足够的:ref:types system <datatypes_and_values>:浮点型和整数类型(不仅仅是 ‘numeric’)、内置表、类和数组、函数、闭包、生成器和协程(以及 null、string 和 boolean 类型)。 在大多数情况下,如何绑定本机代码、函数类、如何调用本机代码和使用本机类型是完全显而易见的。 当然,数组索引从 0 开始。 对于编程和绑定的 C++ 程序员来说,这是 Quirrel 语言的主要思想之一 Python 和 JavaScript 不是轻量级的,也不容易嵌入;JS 也臭名昭著的类型系统及其所有隐含性。 另一方面,Lua 和 Quirrel 一样小,但由于与 C/C++ 的许多差异,它经常让有经验的程序员感到困惑。
Quirrel 有一个健壮且可预测的:ref:memory model <embedding_memory_management>。 在大多数情况下,使用引用计数,您永远不会在运行时出现意外冻结以及可预测的内存消耗。 但是,我们计划添加没有引用计数的 GC 内存管理,因为它在某些使用语言的方式上可能更有益(当你在单独的线程中总是有足够的计算时间来管理内存时,它可以让你的延迟更少)
Quirrel 支持与:ref:`coroutines <threads>`的并发。
Quirrel想要安全。将 Squirrel 进化成 Quirrel 的主要目的是让它更安全。 作为一种动态语言,就其本质而言并不意味着您可以更加安全。 安全性来自不同的小的语法和语义更改,允许更多的编译时验证和显式验证,使代码不那么模糊,对读者和作者来说更清晰。 诸如表格和数组的’let’ Named bindings declaration, :ref:`freezing <builtin_functions>`和导入,弃用修改类,重新定义表键等,以及实现静态分析器,有助于防止许多错误并允许代码更严格。
Quirrel的速度很快。 它至少和 Lua 一样快(在编译和运行时),但有一些调整有时更接近没有 JIT 的 LuaJit。 我们还将实现基于 AST 的编译器,并在 AST 上进行优化,使代码实时变得更快(这也将使代码更安全并增加宏的功能)。 类提示允许类与 Wren 或 LuaJIT 中一样快。