summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorNicolas Paul <n@nc0.fr>2023-10-03 08:26:14 +0200
committerNicolas Paul <n@nc0.fr>2023-10-03 16:00:05 +0200
commitf073e3b856eab51681d47ae20459f9aa3c556547 (patch)
tree12fdb63a591daeae00d18e0d735fa2e61a1bc740 /doc
parentd9e79260b9d259827cee2e1a95023342148f0bf5 (diff)
Add Starlark documentation page
An explication of what Starlark is and its uses
Diffstat (limited to 'doc')
-rw-r--r--doc/pages/starlark.md102
1 files changed, 102 insertions, 0 deletions
diff --git a/doc/pages/starlark.md b/doc/pages/starlark.md
index e69de29..14abe35 100644
--- a/doc/pages/starlark.md
+++ b/doc/pages/starlark.md
@@ -0,0 +1,102 @@
+---
+# Copyright Nicolas (2023)
+#
+# * Nicolas Paul
+#
+# This software is a computer program whose purpose is to allow the hosting
+# and sharing of Go modules using a personal domain.
+#
+# This software is governed by the CeCILL license under French law and
+# abiding by the rules of distribution of free software. You can use,
+# modify and/ or redistribute the software under the terms of the CeCILL
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# "http://www.cecill.info".
+#
+# As a counterpart to the access to the source code and rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty and the software's author, the holder of the
+# economic rights, and the successive licensors have only limited
+# liability.
+#
+# In this respect, the user's attention is drawn to the risks associated
+# with loading, using, modifying and/or developing or reproducing the
+# software by the user in light of its specific status of free software,
+# that may mean that it is complicated to manipulate, and that also
+# therefore means that it is reserved for developers and experienced
+# professionals having in-depth computer knowledge. Users are therefore
+# encouraged to load and test the software's suitability as regards their
+# requirements in conditions enabling the security of their systems and/or
+# data to be ensured and, more generally, to use and operate it in the
+# same conditions as regards security.
+#
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL license and that you accept its terms.
+
+title: Starlark
+description: |
+ Starlark is a dialect of Python designed for use as an efficient and
+ powerful configuration language with safety and simplicity in mind.
+---
+
+# Starlark Configuration Language
+
+**Starlark**, formerly known as *Skylark*, is a configuration language designed
+at Google for simplicity, safety and expressivity. Starlark is a dialect of
+Python, removed of some Turing-completness for safety.
+
+Starlark is commonly used within [Bazel](https://bazel.build) and
+[Drone](https://drone.io/).
+The design choices behind Starlark ensures multiple neat properties to the
+language and, by extension, to the configurations you write: determinism,
+hermeticity, parallelism, and simplicity.
+
+Here is an exemple of a Starlark code (courtesy of [Bazel's Starlark repository](https://github.com/bazelbuild/starlark?tab=readme-ov-file#tour)):
+
+```python
+# Define a number
+number = 18
+
+# Define a dictionary
+people = {
+ "Alice": 22,
+ "Bob": 40,
+ "Charlie": 55,
+ "Dave": 14,
+}
+
+names = ", ".join(people.keys()) # Alice, Bob, Charlie, Dave
+
+# Define a function
+def greet(name):
+ """Return a greeting."""
+ return "Hello {}!".format(name)
+
+greeting = greet(names)
+
+above30 = [name for name, age in people.items() if age >= 30]
+print("{} people are above 30.".format(len(above30)))
+
+def fizz_buzz(n):
+ """Print Fizz Buzz numbers from 1 to n."""
+ 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)
+```
+
+## Implementations
+
+SVGU is build upon the Go implementation of Starlark, but other exists.
+We encourage the adoption of Starlark everywhere.
+
+- [Go](https://github.com/google/starlark-go/)
+- [Java (Bazel)](https://github.com/bazelbuild/bazel/tree/master/src/main/java/net/starlark/java)
+- [Rust](https://github.com/facebookexperimental/starlark-rust)
+
+See the [Starlark repository](https://github.com/bazelbuild/starlark/blob/master/users.md)
+for a list of Bazel tools, users, and more.