From ee6b674966cf667207bb85cb0646e305e259377a Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 11 Mar 2014 11:44:00 -0400 Subject: [PATCH] Add introduction to the setting system. --- src/sphinx/Architecture/Core-Principles.rst | 61 +++++++++++++++++- .../Architecture/overview-setting-example.png | Bin 0 -> 29366 bytes 2 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/sphinx/Architecture/overview-setting-example.png diff --git a/src/sphinx/Architecture/Core-Principles.rst b/src/sphinx/Architecture/Core-Principles.rst index 2f101c6ee..843828468 100644 --- a/src/sphinx/Architecture/Core-Principles.rst +++ b/src/sphinx/Architecture/Core-Principles.rst @@ -63,8 +63,63 @@ done through the ``Setting[_]`` sequence. Introduction to Settings ======================== -TODO - Discuss ``Setting[_]`` +A Setting represents the means of constructing the value of one particular ``AttributeKey[_]`` in the ``AttributeMap`` of build state. A setting consists of two pieces: -TODO - Transition into ``Task[_]`` +1. The ``AttributeKey[T]`` where the value of the setting should be assigned. +2. An ``Intialize[T]`` object which is able to construct the value for this setting. -TODO - Transition into ``InputTask[_]`` \ No newline at end of file +Sbt's intiialization time is basically just taking a sequence of these ``Setting[_]`` objects and running their initialization objects and then storing the value into the ``AttributeMap``. This means overwriting an exisitng value at a key is as easy as appending a +``Setting[_]`` to the end of the sequence which does so. + +Where it gets interesting is that ``Initialize[T]`` can depend on other ``AttributeKey[_]``s in the build state. Each ``Initialize[_]`` +can pull values from any ``AttributeKey[_]`` in the build state's ``AttributeMap`` to compute its value. Sbt ensures a few things +when it comes to ``Initialize[_]`` dependencies: + +1. There can be no circular dependencies +2. If one ``Initialize[_]`` depends on another ``Initialize[_]`` key, then *all* associated ``Initialize[_]`` blocks for that key must + have run before we load the value. + +The above image shows a bit of what's expLet's look at what gets stored for the setting :: + + normalizedName := normalize(name.value) + + + +.. Note: This image comes from a google drawing: https://docs.google.com/a/typesafe.com/drawings/d/1hvE89XVrQiXdSBsgaQgQGTmcO44EBZPg4_0WxKXU7Pw/edit +.. Feel free to request access to modify as appropriate. + +.. image:: overview-setting-example.png + + +Here, a ``Setting[_]`` is constructed that understands it depends on the value in the ``name`` AttributeKey. Its intiialize block first grabs the value of the ``name`` key, then runs the function normalize on it to compute its value. + +This represents the core mechanism of how to construct sbt's build state. Conceptually, at some point we have a graph of dependencies +and initialization functions which we can use to construct the first build state. Once this is completed, we can then start to process +user requests. + + + +Introduction to Tasks +===================== + +The next layer in sbt is around these user request, or tasks. When a user configures a build, they are defining a set of repeatable +tasks that they can run on their project. Things like ``compile`` or ``test``. These tasks *also* have a dependency graph, where +e.g. the ``test`` task requires that ``compile`` has run before it can successfully execute. + +Sbt's defines a class ``Task[T]``. The ``T`` type parameter represents the type of data returned by a task. Remember the tenenats of +sbt? "All things have types" and "Dependencies are explicit" both hold true for tasks. Sbt promotes a style of task dependencies that +is closer to functional programming: Return data for your users rather than using shared mutable state. + +Most build tools communciate over the filesystem, and indeed sbt, by necessity, does some of this. However, for stable parallelization it is far better to keep tasks isolated on the filesystem and communicate directly through types. + +Similarly to how a ``Setting[_]`` stores both dependencies and an initialization function, a ``Task[_]`` stores both its +``Task[_]``dependencies and its behavior (a function). + + + + +TODO - More on ``Task[_]`` + +TODO - Transition into ``InputTask[_]``, rehash Command + +TODO - Tansition into Scope. \ No newline at end of file diff --git a/src/sphinx/Architecture/overview-setting-example.png b/src/sphinx/Architecture/overview-setting-example.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bbcb2090dae99decd255775bd61f9781214f56 GIT binary patch literal 29366 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 literal 0 HcmV?d00001