diff options
author | Alan Donovan <adonovan@google.com> | 2017-10-02 10:10:28 -0400 |
---|---|---|
committer | Alan Donovan <adonovan@google.com> | 2017-10-02 10:10:28 -0400 |
commit | 312d1a5b5a9c50204aee186aeca0b7dbbd3eaaa0 (patch) | |
tree | b766f2d515a7a3abcb0ebc6da796e04ab9739a97 /README.md | |
download | starlark-go-312d1a5b5a9c50204aee186aeca0b7dbbd3eaaa0.tar.gz |
skylark: create GitHub repository from google3@170697745
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..b9583fa --- /dev/null +++ b/README.md @@ -0,0 +1,139 @@ + +<!-- This file is the project homepage at github.com/google/skylark --> + +# Skylark in Go + +This is the home of the _Skylark in Go_ project. +Skylark in Go is an interpreter for Skylark, implemented in Go. + +Skylark 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 Skylark threads execute in parallel, so +Skylark workloads scale well on parallel machines. +Skylark 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 Skylark 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, Skylark was originally developed for the +[Bazel build tool](https://bazel.build). +Bazel uses Skylark 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](https://docs.bazel.build/versions/master/skylark/language.html), +through which Bazel is extended with custom logic to support new +languages and compilers. + + +## Documentation + +* Language definition: [doc/spec.md](doc/spec.md) + +* About the Go implementation: [doc/impl.md](doc/impl.md) + +* API documentation: [godoc.org/github.com/google/skylark](https://godoc.org/github.com/google/skylark) + +* Mailing list: [skylark-go](https://groups.google.com/forum/#!forum/skylark-go) + +* Issue tracker: [https://github.com/google/skylark/issues](https://github.com/google/skylark/issues) + +### Getting started + +Build the code: + +```shell +$ go get github.com/google/skylark +$ go build github.com/google/skylark/cmd/skylark +``` + +Run the interpreter: + +``` +$ cat coins.sky +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(), cmp=lambda x, y: coins[x] - coins[y]))) + +$ ./skylark -lambda coins.sky +By name: dime, nickel, penny, quarter +By value: penny, nickel, dime, quarter +``` + +Interact with the read-eval-print loop (REPL): + +``` +$ ./skylark +>>> def fibonacci(n): +... res = 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] +>>> +``` + +### Contributing + +We welcome submissions but please let us know what you're working on +if you want to change or add to the Skylark repository. + +Before undertaking to write something new for the Skylark 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 Skylark strives to +match the behavior of the Java implementation used by Bazel. +For that reason, proposals to change the language itself should +generally be directed to the Bazel team, 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](https://cla.developers.google.com/about/google-individual), +which can be completed online. +If your organization is the copyright holder, the organization will +need to agree to the [corporate contributor license agreement](https://cla.developers.google.com/about/google-corporate). +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. + + +### Credits + +Skylark was designed and implemented in Java by Laurent Le Brun, +Dmitry Lomov, Jon Brandvin, and Damien Martin-Guillerez, 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 + +Skylark in Go is Copyright (c) 2017 The Bazel Authors. +All rights reserved. + +It is provided under an Apache license. + +The name "Skylark" is a code name of the Bazel project. +We plan to rename the language before the end of 2017 to reflect its +applicability to projects unrelated to Bazel. + +Skylark in Go is not an official Google product. |