ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

iOS.Build.Bazel.2-Starlark

2022-09-06 21:34:24  阅读:272  来源: 互联网

标签:Bazel.2 iOS Starlark BUILD https Go starlark Ref


Starlark: Introduction

 

1. What's Starlark? 

"Starlark is the domain-specific language people use to configure and extend Bazel.

It's conceived as a restricted subset of Python

It is not Turing-complete, which discourages some (but not all) users from trying to accomplish

general programming tasks within the language." Ref[1]

 

"Starlark is implemented in the com.google.devtools.build.lib.syntax package" Ref[1]

 

1.1 Starlark and Python3

Ref[2]

Starlark的语法受Python3语法的启发。

 

1.2 Starlark的实现

Ref[6]

Starlark有多种实现: Go, Java, Rust。

 

2. 可变性 

Ref[2]

 

 

3. BUILD vs. .bzl files

Ref[2]

BUILD通过调用规则(rule)来注册目标(target)。

.bzl 文件为常量、规则、宏、函数提供定义。

 

在BUILD文件中, 原生函数(Native functions)和原生规则(Native rules)是全局符号。

.bzl 文件需要使用原生模块(Native module)来加载原生函数、原生规则。

 

3.1 BUILD文件的限制

BUILD文件中不允许:

A. 声明函数

B. 使用*args和**kwargs

 

4. Starlark vs. Python

Ref[2]

4.1 Starlark的约束

1. 全局变量是不可变的。

2. for语句不能出现在顶级作用域。可以在函数中使用for语句。在BUILD文件中,for语句可以出现在列表推导中。

3. if语句不能出现在顶级作用域。但是if表达式可以,例如: "first = data[0] if len(data) > 0 else None"

4. 在遍历字典时,顺序是明确的。

5. 递归不被允许。

6. Int类型是32位有符号整数。如果溢出,会抛出Error。

7. 在迭代中修改集合(Collection)会产生Error。

8. 只有相等性测试(equality tests)被允许跨越类型。其它比较操作符在跨越类型时会产生Error。

5 == "5" # will return false
5 < 'foo'  # will throw an error

 

9. 元组中,尾部逗号只有在小括号之间时是合法的。

10. 字典字面常量不允许有重复的key。

11. 字符串使用双引号来表示。

12. 字符串不允许遍历。

 

 

 


Reference

1. Starlark

https://bazel.build/contribute/codebase#starlark

 

2. Starlark Language

https://bazel.build/rules/language

 

3. Starlark in Go

Starlark in Go: the Starlark configuration language, implemented in Go

https://github.com/google/starlark-go

 

4. API Overview

https://bazel.build/rules/lib/starlark-overview

 

5. Starlark Language Specification

https://github.com/bazelbuild/starlark/blob/master/spec.md

 

6. Starlark implementations, tools, and users 

https://github.com/bazelbuild/starlark/blob/master/users.md

 

标签:Bazel.2,iOS,Starlark,BUILD,https,Go,starlark,Ref
来源: https://www.cnblogs.com/cwgk/p/16658689.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有