3个版本
0.1.5 | 2023年9月12日 |
---|---|
0.1.4 | 2023年9月8日 |
0.1.0 | 2023年4月4日 |
#1133 in 过程宏
46 每月下载量
在 6 个crate中使用 (2 直接使用)
22KB
510 行
Goscript
Golang规范的另一种实现,用Rust编写,用于嵌入或包装。
网站
什么是
- 换句话说,这只是Go的另一种风格。
- 它旨在与其他Rust代码一起工作,在这种情况下,您希望为您的库/应用程序用户提供使用“更简单”的语言调用原生(Rust)代码的能力,就像Lua对Redis/WoW或Python对NumPy/Sublime Text所做的那样。
为什么
- 它是Rust的本地语言,您的Rust项目正在寻找一种脚本语言。
- Go很棒且易于使用,您对此很熟悉。
- 对于Rust程序员来说,应该很容易理解编译器助手,作为一个强类型语言,与动态类型语言相比,Goscript的类型检查器在代码库变大的情况下有很大帮助。
如何
何时
- 本readme更新作为alpha版本发布公告。
- 几乎所有语言功能都按规范实现(pre-1.18,即不包括泛型)。
- 部分标准库已移植,但尚未完全工作。
- 除了库之外,还有很多工作要做,例如API清理、文档和大量测试用例。
- 总体而言,尽管通过了数十个测试用例,但仍然被认为存在错误。
- 预计大约一年后会有beta版本发布。
谁
- 电子邮件:
pb01005051
at Gmail. - discord: 加入
常见问题解答
-
这是一个新语言吗?
不,这按定义来说是Go语言。你可以把它看作是Go和Python的混合体,它采用了Go的设计并以Python的方式实现。因此,我认为称其为脚本语言也是公平的。
-
为什么不开发一种新语言呢?
实现一种语言比设计一种语言要简单得多,我不认为自己有能力设计一门人们愿意花时间学习的语言。Go作为脚本语言可能并不完美,但对我来说它已经足够好了。
-
为什么不用Python/Lua(在Rust中使用)?
人们会使用Python/Lua,Goscript可以作为一个合理的替代品,强类型系统可以成为你创造力的朋友而不是敌人。
-
Goscript是快还是慢?
恐怕它可能比你想象的要慢。它是一个没有即时编译(JIT)的基于虚拟机的实现,因此存在性能上限。此外,在性能和项目复杂度之间存在权衡,我们不希望它变得太大,以至于不适合嵌入。目前,你只能期望它具有与Python相当的性能,关于长期优化能走多远,目前还不确定。
-
Goscript支持多线程/并行吗?
不支持,因为多线程支持会损害单线程性能,并且会使实现变得更加困难。我猜这也是Python/Lua不支持并行的原因。不过它通过goroutine提供了出色的并发支持:)。将来也可能通过库的方式支持并行。
-
我们什么时候才能真正使用Goscript?
如前所述,我希望能在一年内使其达到生产就绪的状态。这个项目是三年前开始的,我会尽我所能完成它。
-
我能如何帮助?
- 报告问题。
- 如果是小修,请提交PR。
- 如果您计划贡献复杂更改,请先与我讨论。
只是想看看它是否可以运行Go代码
- 确保您的Rust安装是最新的。
- 克隆此存储库。
- 进入goscript/engine目录。
- 在temp.gos中放入您想要的任何内容。
- 运行
cargo test temp -- --nocapture
- 或者按照test.rs的说明创建一个运行Go代码的可执行文件。
- 如果您的代码无法运行,很抱歉,您可以查看测试文件夹中运行的内容。
Goscript_Readme_中文版
Go语言规范的非官方实现,用于Rust项目的内嵌或封装。
网站
什么?
- 简单来说,它是一种另类的Go语言。
- 其作用是用于其他Rust项目,有时候你需要用一个更简单的语言来封装和调用底层的Rust代码。就像Lua之于Redis/WoW,或者Python之于NumPy/Sublime Text。
为什么?
- 当你的Rust项目需要一个用Rust写的脚本语言时。
- Go语言简单易学且已被广泛使用。
- Rust程序员应该已经体会到编译器是编程助手,作为一个严格类型的语言,Goscript相对于其他动态语言更能帮助你编写出高质量的程序,尤其是在代码量增加时。
什么?
时?
- 本次readme更新可以被视为alpha版本发布。
- 几乎所有的语言特性都已实现(pre-1.18版本,不包括泛型)。
- 移植了部分官方库,但它们还没有完全完善。
- 还有很多其他工作要做,比如API整理,文档,大量完备的测试用例等。
- 总体上,bug可能还不少,但已经可以通过许多测试用例。
- 预计在一年内发布beta版本。
谁?
- 电子邮件:
pb01005051
at Gmail. - discord: 加入
问
-
这是个新语言吗?
不是,因为它实现了Go语言的规范,所以理论上就是Go语言(的一种)。它可以看作是一个Go和Python的混血:用Python语言的实现方式实现了Go语言。因此,你称它为脚本语言也是可以的。
-
为什么不开发新语言呢?
设计一门语言比实现一门语言要难得多,自认为没有能力设计一门语言,其“更好的”语法能够吸引其他程序员学习。Go作为脚本语言可能并不完美,但我觉得已经足够了。
-
为什么不直接使用Python/Lua(在Rust项目中)?
大家都会使用Python/Lua,Goscript只是提供了一个额外的选择,强类型系统可以帮助你编写出更好的代码,而不是限制你。
-
Goscript快还是慢?
可能比你想象的要慢。它是一个没有JIT的基于虚拟机的实现,因此存在性能上限,而且我们需要在性能和复杂度之间找到平衡,不希望它变得太大,以至于不适合嵌入。目前,我们只能期望它具有与Python相当的性能,关于长期优化能走多远,目前还不确定。
-
Goscript支持多线程/并行吗?
不支持,因为多线程支持会降低单线程性能,并且实现起来也更加复杂。我猜这也是Python/Lua不支持并行的原因。不过,它通过goroutine提供了出色的并发支持:)。将来也可能通过库的方式支持并行。
-
什么时候能真正使用?
如前所述,我希望能在一年内达到生产就绪的状态。这个项目是三年前开始的,我会尽我所能完成它。
-
如何参与项目?
- 提issue。
- 小的改动可以直接提交PR。
- 大的改动请先与我讨论。
只想试试运行Go代码
lib.rs
:
这个包是Goscript项目的一部分。更多请参考https://goscript.dev。
这个包为项目提供了一些proc-macros。
依赖项
~1.5MB
~35K SLoC