run starlark 有了上面的知识,可以开始了解Go写的Starlark语言的解释器了。 https://github.com/google/starlark-go 进入starlark交互界面 [root@localhost ~]# go get -u go.starlark.net/cmd /starlark [root@localhost ~]# starlark Welcome to Starlark (go.starlark.net) >>> 直接运行starlark脚本 [root 脚本嵌入Go代码 下面的内容是在Go代码中嵌入了starlark脚本,可以看到Go的main方法不仅执行了starlark脚本,还获取了starlark的函数并在Go中调用starlark函数和给starlark & Go & Bazel 上面的章节都是单单Starlark语言,比较容易入门,有了一点点python语法就可以很快上手Starlark语言和运行Starlark语言。
bazel的编译中使用了Starlark语言,这种语言类似于python语言,详细内容可以参考 :https://docs.bazel.build/versions/4.2.1/skylark/language.html 一、Starlark语言简介: 语法格式如下所示: load(":foo.bzl", "var", "fct") # loads `var`, and `fct` from `. 二、envoy里面的例子 Envoy里面的WORKSPACE里面就使用了Starlark语言,如下所示: $ pwd /Users/XXXX/envoy $ cat WORKSPACE workspace
Starlight wraps google’s Go implementation of the starlark python dialect (most notably found in the For the purposes of this article, to avoid confusion between starlight (my package) and starlark (the Starlight is a wrapper on top of that, which makes it so much easier to use starlark-go. you want to get information out of starlark and into Go. Passing an *http.Request into a starlark script?
比如 starlark-go 文档中认为用 go 实现 vm 效率并没有优势,但是目前 starlark-go 的实现也是 vm (docs 比较陈旧,代码已经是 vm 实现了) 扩展 使用上面点任何一种内核实现 ,形成了 starlark-go-lib, 在这个包里面,我提供了类似 gopher-luar 的基础设施,使得给 starlark-go 做一个第三方包变得极其容易,比如下面的例子, 使用很简单的代码就给 starlark-go 提供了 http 等很多第三方包: func InstallAllExampleModule(d starlark.StringDict) { for _, v := range 最终使用示例如下: [20211021205013.png] 更多 gopher-luar 和 starlark-go-lib 已经把在 gopher-lua 和 starlark-go 中使用 go 当然可以做得更好,我们可以支持类似 import 的语句,自动下载第三方包,并作语法分析,生成到 gopher-lua 和 starlark-go 中作为第三方包,逻辑上并不困难。
https://github.com/pretzelhammer/rust-blog/blob/master/posts/tour-of-rusts-standard-library-traits.md Starlark -- Facebook 用 Rust 重新实现了 Starlark 这门编程语言 Starlark 是 Google 开发的类似于 Python3 的一门编程语言,主要用在 Google 自己的构建工具 Starlark 目前有三种实现,一种是 Go,一种是 Java,另外一种就是现在这个项目,使用 Rust 实现。Rust 的初版是 Google 实现的,现在给了 Facebook。 链接:https://developers.facebook.com/blog/post/2021/04/08/rust-starlark-library/ Github: https://github.com /facebookexperimental/starlark-rust robusta - 一个方便生成 JNI 交互代码的库 有了他就可以避免写那些繁琐冗长的 Java JNI 函数名了!
在学习更高级的概念之前,先了解以下几个知识点: 了解 BUILD 和 .bzl 文件中使用的 Starlark 语言。 宏和规则(Macros and rules)。 Starlark 语言 参考 https://www.backendcloud.cn/2022/07/01/bazel-starlark/ 宏和规则(Macros and rules) 宏是实例化规则的函数
过去几年涌现出大量旨在生成配置的领域特定语言 (DSL),即配置语言:HCL,Dhall,Jsonnet,Starlark,CUE,Nickel,KCL,Pkl,以及其他。我敢肯定至少有15种。 事实上,其中一些语言最初是为特定工具创建的,例如 Terraform 的 HCL,Bazel 的 Starlark Bazel,Nix 包管理器的 Nickel Nix 包管理器,以及 KusionStack Starlark 是一种可嵌入的 Python 方言,对于熟悉 Python 的人来说很熟悉。Jsonnet 是JSON 的超集。Nickel 中的类型是可选的。Pkl……等等。 } ] } ] } } } } Starlark deployment configuration deployment = make_deployment() def main(ctx): """Main entry point for Starlark
Typescript, JavaScript, Python, Java, Go): 4200 个星标 Tanka(jsonnet): 2300 个星标 Kapitan(多语言): 1800 个星标 Ytt(starlark 另一方面,GPPL 工具可能比受限的方言(如 Starlark)更受欢迎,Starlark 最近似乎在较少的新的工具中使用。
= struct( array_literal = _array_literal, quote = _quote,)language-python复制代码 array_literal将starlark paths.bzl Skylib有相当的内容是paython基础库的starlark重新实现。paths.bzl就是os.path的重新实现。
2 背景 Starlark Configurations 是 Bazel 的 API,用于自定义项目的构建方式。 使用 Starlark Configurations 可以让你: 定义项目自己的编译标志,而不再需要 --define 对于规则,可以实现默认的编译配置 不像传统的 --cpu 、--copt 、--compilation_mode
一、Kurtosis 核心价值Kurtosis 是一款基于 Starlark 脚本语言的临时化包执行工具,专为开发者打造零配置的应用程序测试环境。
Tilt 使用称为 Starlark 的 Python 方言的 Tiltfile 进行配置。Tiltfile 是 Tilt 使用的配置文件,用于定义在开发过程中如何构建、部署和管理应用程序。 限制 采用 Tilt 可能需要额外的学习,特别是对于不熟悉 Starlark Python 方言的开发人员。了解并编写 Tiltfile 可能对于没有这种语言经验的人来说有挑战性。 由于 Tilt 使用 Starlark 作为其配置语言,它可能不提供与使用广泛采用的 YAML 等广泛采用的配置格式的其他工具相同的灵活性和广泛的语言支持。
Bazel 和 Buck 有一些相似之处,包括相似的目录结构和命令行调用,最重要的是使用相同的配置语言 Starlark,这在某种程度上简化了构建配置的迁移。
负责高度定制版本的工具,如 pylint 和 black; 为 pybind11 做出贡献,并维护 C++ 集成工具; 开发和维护 Python 的构建系统规则,包括付出巨大努力将 Python 规则转移到纯 Starlark
负责高度定制版本的工具,如 pylint 和 black; 为 pybind11 做出贡献,并维护 C++ 集成工具; 开发和维护 Python 的构建系统规则,包括付出巨大努力将 Python 规则转移到纯 Starlark
新系统利用了以下 3 个概念: 针对.xml 和.properties 文件的 Jinja 模板,与集群无关 Starlark 在部署前为不同类别 / 类型的集群生成配置 节点部署期间的运行时环境变量( 磁盘挂载、JVM 设置等)注入 图 7:Starlark 文件定义不同集群类型的配置 我们将模板和 Starlark 文件中总共 66,000 多行的 200 多个.xml 配置文件减少到了约 4,500
跨平台 需要手动处理 优秀(生成器模式) 优秀 依赖管理 基本 较好 优秀 构建速度 快 中等(生成+构建) 快(增量构建优秀) 语法 自己的语法 CMakeLists.txt Python-like/Starlark
- 我们开发并维护了Python的构建系统规则,包括一个重大项目,即将Python规则完全迁移到Starlark代码,使其不再依赖于Blaze/Bazel的核心引擎。
starlark-rust : starlark 语言的 Rust 实现 Tensorflow, Envoy, Kubernetes, KubeVirt 等等大型项目都是用 Bazel 构建的,要参与开发这些项目或者基于这些项目做开发 Starlark 是一门配置语言,设计之初是为了作为 Bazel 的配置语言,Starlark语法类似 Python,但不是Python,保持语言类似于 Python 可以减少学习曲线,使语义对用户更加明显 与 Python 显著不同的地方在于,独立的 Starlark 线程是并行执行的,因此 Starlark 工作负载在并行机器上可以很好地伸缩。 starlark-rust[320] 是 Meta(原 facebook) 团队对 Starlark 语言的 Rust 实现。 : https://github.com/facebookexperimental/starlark-rust/ [321] KCL: https://github.com/KusionStack/KCLVM
Starlark:这种方案并非去掉 GIL,而是一门兼容部分 Python 语法,并发执行字节码的新语言。它目前用于 Google Bazel 编译系统,我个人认为这是一个非常有意思的未来趋势。