Bug: 171729671

Clone this repo:
  1. e4e6f0d Add starlarkjson module by Cole Faust · 5 weeks ago main master
  2. 312f9e3 Merge sc-mainline-prod by Xin Li · 2 years ago android13-d4-release android13-d4-s1-release android13-d4-s2-release android13-dev android13-frc-adbd-release android13-frc-art-release android13-frc-cellbroadcast-release android13-frc-conscrypt-release android13-frc-documentsui-release android13-frc-extservices-release android13-frc-ipsec-release android13-frc-media-release android13-frc-media-swcodec-release android13-frc-networking-release android13-frc-neuralnetworks-release android13-frc-odp-release android13-frc-os-statsd-release android13-frc-permission-release android13-frc-resolv-release android13-frc-scheduling-release android13-mainline-adservices-release android13-mainline-appsearch-release android13-mainline-go-adbd-release android13-mainline-go-adservices-release android13-mainline-go-appsearch-release android13-mainline-go-art-release android13-mainline-go-cellbroadcast-release android13-mainline-go-conscrypt-release android13-mainline-go-documentsui-release android13-mainline-go-extservices-release android13-mainline-go-ipsec-release android13-mainline-go-media-release android13-mainline-go-media-swcodec-release android13-mainline-go-mediaprovider-release android13-mainline-go-networking-release android13-mainline-go-neuralnetworks-release android13-mainline-go-odp-release android13-mainline-go-os-statsd-release android13-mainline-go-permission-release android13-mainline-go-resolv-release android13-mainline-go-scheduling-release android13-mainline-go-sdkext-release android13-mainline-go-tethering-release android13-mainline-go-tzdata4-release android13-mainline-go-uwb-release android13-mainline-go-wifi-release android13-mainline-tzdata4-release android13-mainline-uwb-release android13-qpr1-release android13-qpr1-s1-release android13-qpr1-s2-release android13-qpr1-s3-release android13-qpr1-s4-release android13-qpr1-s5-release android13-qpr1-s6-release android13-qpr1-s7-release android13-qpr1-s8-release android13-qpr2-b-s1-release android13-qpr2-release android13-qpr2-s1-release android13-qpr2-s10-release android13-qpr2-s11-release android13-qpr2-s12-release android13-qpr2-s2-release android13-qpr2-s3-release android13-qpr2-s5-release android13-qpr2-s6-release android13-qpr2-s7-release android13-qpr2-s8-release android13-qpr2-s9-release main-16k main-16k-with-phones aml_ads_331131000 aml_ads_331418080 aml_ads_331511020 aml_ads_331611190 aml_ads_331710270 aml_ase_331011020 aml_ase_331112000 aml_go_adb_330913000 aml_go_ads_330913000 aml_go_ads_330915000 aml_go_art_330913000 aml_go_ase_330913000 aml_go_cbr_330912000 aml_go_con_330913000 aml_go_doc_330912000 aml_go_ext_330912000 aml_go_ips_330911000 aml_go_med_330913000 aml_go_mpr_330912000 aml_go_net_330913000 aml_go_neu_330912000 aml_go_odp_330912000 aml_go_odp_330913000 aml_go_per_330912000 aml_go_res_330912000 aml_go_sch_330911000 aml_go_sdk_330810000 aml_go_sta_330911000 aml_go_swc_330913000 aml_go_tet_330914010 aml_go_tz4_330912000 aml_go_uwb_330912000 aml_go_wif_330911000 aml_tz4_331012000 aml_tz4_331012040 aml_tz4_331012050 aml_tz4_331314010 aml_tz4_331314020 aml_tz4_331314030 aml_uwb_330810010 aml_uwb_331015040 aml_uwb_331115000 aml_uwb_331310030 aml_uwb_331410010 aml_uwb_331611010 aml_uwb_331613010 android-13.0.0_r16 android-13.0.0_r17 android-13.0.0_r18 android-13.0.0_r19 android-13.0.0_r20 android-13.0.0_r21 android-13.0.0_r22 android-13.0.0_r23 android-13.0.0_r24 android-13.0.0_r27 android-13.0.0_r28 android-13.0.0_r29 android-13.0.0_r30 android-13.0.0_r32 android-13.0.0_r33 android-13.0.0_r34 android-13.0.0_r35 android-13.0.0_r36 android-13.0.0_r37 android-13.0.0_r38 android-13.0.0_r39 android-13.0.0_r40 android-13.0.0_r41 android-13.0.0_r42 android-13.0.0_r43 android-13.0.0_r44 android-13.0.0_r45 android-13.0.0_r46 android-13.0.0_r47 android-13.0.0_r48 android-13.0.0_r49 android-u-beta-1-gpl t_frc_adb_330444000 t_frc_art_330443060 t_frc_ase_330444010 t_frc_cbr_330443000 t_frc_con_330443020 t_frc_doc_330443000 t_frc_doc_330443060 t_frc_doc_330543000 t_frc_ext_330443000 t_frc_ips_330443010 t_frc_med_330443030 t_frc_net_330443000 t_frc_neu_330443000 t_frc_neu_330443030 t_frc_odp_330442000 t_frc_odp_330442040 t_frc_per_330444010 t_frc_res_330443000 t_frc_sch_330443010 t_frc_sch_330443040 t_frc_sta_330443010 t_frc_swc_330443010 t_frc_swc_330443040 t_frc_tz4_330443010
  3. 9a3dabd Allow Soongs/blueprint's microfactory build starlark-go am: 9ff3db46c2 am: 87b79b8fa6 am: 96856bab52 am: 3f012eaf4c by Sasha Smundak · 2 years, 2 months ago android12-mainline-adbd-release android12-mainline-art-release android12-mainline-captiveportallogin-release android12-mainline-cellbroadcast-release android12-mainline-conscrypt-release android12-mainline-documentsui-release android12-mainline-extservices-release android12-mainline-ipsec-release android12-mainline-media-release android12-mainline-media-swcodec-release android12-mainline-mediaprovider-release android12-mainline-networkstack-release android12-mainline-neuralnetworks-release android12-mainline-permission-release android12-mainline-resolv-release android12-mainline-sdkext-release android12-mainline-statsd-release android12-mainline-tethering-release android12-mainline-wifi-release aml_doc_310851020 aml_mpr_311911090 aml_sdk_311710000 aml_tet_311811050 aml_tz3_311312010 aml_wif_311811030 android-mainline-12.0.0_r1 android-mainline-12.0.0_r10 android-mainline-12.0.0_r100 android-mainline-12.0.0_r101 android-mainline-12.0.0_r102 android-mainline-12.0.0_r103 android-mainline-12.0.0_r104 android-mainline-12.0.0_r105 android-mainline-12.0.0_r106 android-mainline-12.0.0_r107 android-mainline-12.0.0_r108 android-mainline-12.0.0_r109 android-mainline-12.0.0_r11 android-mainline-12.0.0_r110 android-mainline-12.0.0_r113 android-mainline-12.0.0_r114 android-mainline-12.0.0_r115 android-mainline-12.0.0_r116 android-mainline-12.0.0_r117 android-mainline-12.0.0_r118 android-mainline-12.0.0_r119 android-mainline-12.0.0_r12 android-mainline-12.0.0_r120 android-mainline-12.0.0_r121 android-mainline-12.0.0_r122 android-mainline-12.0.0_r123 android-mainline-12.0.0_r124 android-mainline-12.0.0_r125 android-mainline-12.0.0_r126 android-mainline-12.0.0_r13 android-mainline-12.0.0_r14 android-mainline-12.0.0_r15 android-mainline-12.0.0_r16 android-mainline-12.0.0_r17 android-mainline-12.0.0_r18 android-mainline-12.0.0_r19 android-mainline-12.0.0_r2 android-mainline-12.0.0_r20 android-mainline-12.0.0_r21 android-mainline-12.0.0_r22 android-mainline-12.0.0_r23 android-mainline-12.0.0_r24 android-mainline-12.0.0_r25 android-mainline-12.0.0_r26 android-mainline-12.0.0_r27 android-mainline-12.0.0_r28 android-mainline-12.0.0_r29 android-mainline-12.0.0_r3 android-mainline-12.0.0_r30 android-mainline-12.0.0_r31 android-mainline-12.0.0_r32 android-mainline-12.0.0_r33 android-mainline-12.0.0_r34 android-mainline-12.0.0_r35 android-mainline-12.0.0_r37 android-mainline-12.0.0_r38 android-mainline-12.0.0_r39 android-mainline-12.0.0_r40 android-mainline-12.0.0_r41 android-mainline-12.0.0_r42 android-mainline-12.0.0_r43 android-mainline-12.0.0_r44 android-mainline-12.0.0_r45 android-mainline-12.0.0_r46 android-mainline-12.0.0_r47 android-mainline-12.0.0_r48 android-mainline-12.0.0_r49 android-mainline-12.0.0_r5 android-mainline-12.0.0_r50 android-mainline-12.0.0_r51 android-mainline-12.0.0_r52 android-mainline-12.0.0_r53 android-mainline-12.0.0_r56 android-mainline-12.0.0_r57 android-mainline-12.0.0_r58 android-mainline-12.0.0_r59 android-mainline-12.0.0_r6 android-mainline-12.0.0_r60 android-mainline-12.0.0_r61 android-mainline-12.0.0_r62 android-mainline-12.0.0_r63 android-mainline-12.0.0_r64 android-mainline-12.0.0_r65 android-mainline-12.0.0_r66 android-mainline-12.0.0_r67 android-mainline-12.0.0_r68 android-mainline-12.0.0_r69 android-mainline-12.0.0_r7 android-mainline-12.0.0_r70 android-mainline-12.0.0_r71 android-mainline-12.0.0_r72 android-mainline-12.0.0_r73 android-mainline-12.0.0_r74 android-mainline-12.0.0_r75 android-mainline-12.0.0_r76 android-mainline-12.0.0_r77 android-mainline-12.0.0_r78 android-mainline-12.0.0_r79 android-mainline-12.0.0_r8 android-mainline-12.0.0_r80 android-mainline-12.0.0_r81 android-mainline-12.0.0_r82 android-mainline-12.0.0_r83 android-mainline-12.0.0_r84 android-mainline-12.0.0_r85 android-mainline-12.0.0_r86 android-mainline-12.0.0_r87 android-mainline-12.0.0_r88 android-mainline-12.0.0_r89 android-mainline-12.0.0_r9 android-mainline-12.0.0_r90 android-mainline-12.0.0_r91 android-mainline-12.0.0_r92 android-mainline-12.0.0_r93 android-mainline-12.0.0_r94 android-mainline-12.0.0_r95 android-mainline-12.0.0_r96 android-mainline-12.0.0_r97 android-mainline-12.0.0_r98 android-mainline-12.0.0_r99
  4. 9545ffc Allow Soongs/blueprint's microfactory build starlark-go am: 9ff3db46c2 am: 87b79b8fa6 am: 96856bab52 am: 3f012eaf4c by Sasha Smundak · 2 years, 2 months ago
  5. 3f012ea Allow Soongs/blueprint's microfactory build starlark-go am: 9ff3db46c2 am: 87b79b8fa6 am: 96856bab52 by Sasha Smundak · 2 years, 2 months ago android-s-qpr3-beta-1 android-s-v2-beta-3 android-s-v2-preview-1 android-t-preview-1 android12-dev android12-qpr1-d-release android12-qpr1-d-s1-release android12-qpr1-d-s2-release android12-qpr1-d-s3-release android12-qpr1-release android12-qpr3-release android12-qpr3-s1-release android12-qpr3-s2-release android12-qpr3-s3-release android12-qpr3-s4-release android12-qpr3-s5-release android12-qpr3-s6-release android12-qpr3-s7-release android12L-d2-release android12L-d2-s1-release android12L-d2-s2-release android12L-d2-s3-release android12L-d2-s4-release android12L-d2-s5-release android12L-d2-s6-release android12L-d2-s7-release android12L-d2-s8-release android12L-dev android-12.0.0_r16 android-12.0.0_r18 android-12.0.0_r19 android-12.0.0_r20 android-12.0.0_r21 android-12.0.0_r26 android-12.0.0_r27 android-12.0.0_r28 android-12.0.0_r29 android-12.0.0_r32 android-12.1.0_r10 android-12.1.0_r11 android-12.1.0_r12 android-12.1.0_r13 android-12.1.0_r14 android-12.1.0_r15 android-12.1.0_r16 android-12.1.0_r17 android-12.1.0_r18 android-12.1.0_r19 android-12.1.0_r20 android-12.1.0_r21 android-12.1.0_r22 android-12.1.0_r23 android-12.1.0_r24 android-12.1.0_r25 android-12.1.0_r26 android-12.1.0_r7 android-12.1.0_r8 android-12.1.0_r9 android-s-qpr3-beta-1 android-s-v2-beta-2 android-s-v2-beta-3 android-s-v2-preview-1 android-s-v2-preview-2 android-t-beta-3 android-t-preview-1 android-t-preview-2

Starlark in Go

Travis CI GoDoc

This is the home of the Starlark in Go project. Starlark in Go is an interpreter for Starlark, implemented in Go. Starlark was formerly known as Skylark. The new import path for Go packages is "go.starlark.net/starlark".

Starlark is a dialect of Python intended for use as a configuration language. Like Python, it is an untyped dynamic language with high-level data types, first-class functions with lexical scope, and garbage collection. Unlike CPython, independent Starlark threads execute in parallel, so Starlark workloads scale well on parallel machines. Starlark is a small and simple language with a familiar and highly readable syntax. You can use it as an expressive notation for structured data, defining functions to eliminate repetition, or you can use it to add scripting capabilities to an existing application.

A Starlark interpreter is typically embedded within a larger application, and the application may define additional domain-specific functions and data types beyond those provided by the core language. For example, Starlark was originally developed for the Bazel build tool. Bazel uses Starlark as the notation both for its BUILD files (like Makefiles, these declare the executables, libraries, and tests in a directory) and for its macro language, through which Bazel is extended with custom logic to support new languages and compilers.

Documentation

Getting started

Build the code:

# check out the code and dependencies,
# and install interpreter in $GOPATH/bin
$ go get -u go.starlark.net/cmd/starlark

Run the interpreter:

$ cat coins.star
coins = {
  'dime': 10,
  'nickel': 5,
  'penny': 1,
  'quarter': 25,
}
print('By name:\t' + ', '.join(sorted(coins.keys())))
print('By value:\t' + ', '.join(sorted(coins.keys(), key=coins.get)))

$ starlark coins.star
By name:	dime, nickel, penny, quarter
By value:	penny, nickel, dime, quarter

Interact with the read-eval-print loop (REPL):

$ starlark
>>> def fibonacci(n):
...    res = list(range(n))
...    for i in res[2:]:
...        res[i] = res[i-2] + res[i-1]
...    return res
...
>>> fibonacci(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
>>>

When you have finished, type Ctrl-D to close the REPL's input stream.

Embed the interpreter in your Go program:

import "go.starlark.net/starlark"

// Execute Starlark program in a file.
thread := &starlark.Thread{Name: "my thread"}
globals, err := starlark.ExecFile(thread, "fibonacci.star", nil, nil)
if err != nil { ... }

// Retrieve a module global.
fibonacci := globals["fibonacci"]

// Call Starlark function from Go.
v, err := starlark.Call(thread, fibonacci, starlark.Tuple{starlark.MakeInt(10)}, nil)
if err != nil { ... }
fmt.Printf("fibonacci(10) = %v\n", v) // fibonacci(10) = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

See starlark/example_test.go for more examples.

Contributing

We welcome submissions but please let us know what you're working on if you want to change or add to the Starlark repository.

Before undertaking to write something new for the Starlark project, please file an issue or claim an existing issue. All significant changes to the language or to the interpreter's Go API must be discussed before they can be accepted. This gives all participants a chance to validate the design and to avoid duplication of effort.

Despite some differences, the Go implementation of Starlark strives to match the behavior of the Java implementation used by Bazel and maintained by the Bazel team. For that reason, proposals to change the language itself should generally be directed to the Starlark site, not to the maintainers of this project. Only once there is consensus that a language change is desirable may its Go implementation proceed.

We use GitHub pull requests for contributions.

Please complete Google's contributor license agreement (CLA) before sending your first change to the project. If you are the copyright holder, you will need to agree to the individual contributor license agreement, which can be completed online. If your organization is the copyright holder, the organization will need to agree to the corporate contributor license agreement. If the copyright holder for your contribution has already completed the agreement in connection with another Google open source project, it does not need to be completed again.

Stability

We reserve the right to make breaking language and API changes at this stage in the project, although we will endeavor to keep them to a minimum. Once the Bazel team has finalized the version 1 language specification, we will be more rigorous with interface stability.

Credits

Starlark was designed and implemented in Java by Ulf Adams, Lukács Berki, Jon Brandvein, John Field, Laurent Le Brun, Dmitry Lomov, Damien Martin-Guillerez, Vladimir Moskva, and Florian Weikert, standing on the shoulders of the Python community. The Go implementation was written by Alan Donovan and Jay Conrod; its scanner was derived from one written by Russ Cox.

Legal

Starlark in Go is Copyright (c) 2018 The Bazel Authors. All rights reserved.

It is provided under a 3-clause BSD license: LICENSE.

Starlark in Go is not an official Google product.