首页 抖音推荐文章正文

我喜欢golang&python所以我推荐starlark

抖音推荐 2025年08月04日 23:25 2 admin


我喜欢golang&python所以我推荐starlark

Starlark语言概述
Starlark是一种小型编程语言,设计为Python的简化变体,主要用于嵌入式集成到应用程序中。有人或许会称其为“语法类似Python的Lua”,但我认为它有许多值得探讨的独特之处。该语言现已开源,并被广泛应用于其他应用程序和公司。作为Starlark的设计与实现负责人,我希望进一步分享它的细节。

语言概览
以下是一个代码示例:

def fizz_buzz(n):  """打印从1到n的Fizz Buzz数列。"""  for i in range(1, n + 1):    s = ""    if i % 3 == 0:      s += "Fizz"    if i % 5 == 0:      s += "Buzz"    print(s if s else i)fizz_buzz(20)

我曾说过它看起来像Python。实际上,这段代码既符合Python 3语法,也是有效的Starlark代码。

与Python类似,Starlark是一种动态类型语言,支持高级数据类型、具有词法作用域的一等函数及垃圾回收。但它比Python简单得多,且不支持大部分Python特性。

根据我在拥有数万开发者的大型代码库中的经验,大多数人无需专门学习即可直接使用该语言。

设计原则
Starlark的设计遵循以下原则:

  1. 确定性评估
    相同代码多次执行结果一致。而在Python中,若代码依赖id()、hash()等函数输出、遍历哈希表、存在竞态条件或测量执行时间,结果将不确定。
  2. 封闭执行
    代码执行时无法访问文件系统、网络,甚至无法获取当前日期。这允许安全执行不可信代码。
  3. 并行评估
    Python中模块按导入顺序逐一求值,可能产生副作用;而Starlark支持模块安全并行加载,跨模块共享数据变为不可变,确保线程安全。
  4. 简单性
    语言设计精简,规范文档简短,概念有限,新用户可快速上手。我们移除了Python中多个易出错的设计。
  5. 工具友好性
    随着代码库增长,自动分析和编辑Starlark代码至关重要。过度动态的语言难以重构和迁移,而
    Starlark的静态分析更易实现,保证性更强
  6. 类Python语法
    Python语法广为人知,
    Starlark的设计旨在降低学习曲线,使用户更易理解语义。

Starlark提供了诸多保证,这是它与其他主流语言的核心差异。有人可能认为避免非确定性等问题很简单,但实际在大型代码库中这些问题屡见不鲜。

与Python的区别

Starlark远比Python简单。其标准库极简,仅包含约30个函数、少量类型及列表、字符串、字典的方法。当然,宿主应用程序可嵌入Starlark时提供额外功能。

主要差异包括:

  • 无异常、while循环、yield、is运算符、反射机制
  • 全局变量不可重新赋值
  • 迭代顺序始终明确
  • 禁用隐式字符串拼接

更多细节可参考语言设计文档。

应用场景

Starlark常被用作扩展语言(类似Lua)或配置语言。它可作为库集成到其他应用程序中。目前有三种不同语言的实现:

  • Java实现(Bazel代码库的一部分):最初版本,用于Bazel和部分Google项目,但接口不稳定。
  • Rust实现:facebookexperimental/starlark-rust,由Facebook维护,用于其构建系统Buck及内部工具。
  • Go实现:google/starlark-go,被IBM、Stripe(skycfg)、Chromium(lucicfg)、Cruise Automation(isopod)、Go调试器Delve等众多开源项目和公司采用。

为何创建Starlark?

历史上,Google代码库完全基于Makefile构建。随着代码量增长,开发者开始用Python脚本生成Makefile,采用声明式语法。2007年Bazel诞生,依赖Python解释器解析构建脚本。然而,面对可扩展性、性能和维护挑战,我们需要一种提供更强保证的语言。2015年,Laurent Le Brun启动了Starlark的设计与实现,并于2017年将Google内部数十万份Python构建脚本迁移至Starlark。为平滑过渡,尽力保持语言与Python的相似性。

了解更多我的知识体系

对我分享的文章或者资料干兴趣的读者都可以通过购买专栏建立链接,我会把多年整理的技术资料一并奉上。

发表评论

泰日号Copyright Your WebSite.Some Rights Reserved. 网站地图 备案号:川ICP备66666666号 Z-BlogPHP强力驱动