Commit 0f1ecfc3398655eb2ea8cf30551385857d42b777
1 parent
b6686674
Final pass.
Showing
3 changed files
with
61 additions
and
60 deletions
introduction.tex
| @@ -19,7 +19,7 @@ Today programmers are forced to anticipate these changing conditions at | @@ -19,7 +19,7 @@ Today programmers are forced to anticipate these changing conditions at | ||
| 19 | development time and implement the required adaptation themselves. | 19 | development time and implement the required adaptation themselves. |
| 20 | Figure~\ref{fig-example-if} shows an example of an Android app attempting to | 20 | Figure~\ref{fig-example-if} shows an example of an Android app attempting to |
| 21 | adapt to the device's battery level by establishing regular- and low-battery | 21 | adapt to the device's battery level by establishing regular- and low-battery |
| 22 | -code paths, with the latter attempting to save energy, possibly by utilizing | 22 | +code paths, with the latter attempting to save energy---possibly by utilizing |
| 23 | a slower but more energy-efficient algorithm, computing an approximate | 23 | a slower but more energy-efficient algorithm, computing an approximate |
| 24 | result, or deferring the computation. | 24 | result, or deferring the computation. |
| 25 | 25 | ||
| @@ -28,22 +28,22 @@ important is perhaps the least obvious: it is unclear that the different code | @@ -28,22 +28,22 @@ important is perhaps the least obvious: it is unclear that the different code | ||
| 28 | paths achieve the desired result. There may be no differences between the | 28 | paths achieve the desired result. There may be no differences between the |
| 29 | alternatives (neither conserves energy), the alternative designed to conserve | 29 | alternatives (neither conserves energy), the alternative designed to conserve |
| 30 | energy may actually consume more due to bugs or incorrect assumptions, or the | 30 | energy may actually consume more due to bugs or incorrect assumptions, or the |
| 31 | -result may also depend on some other factor not considered by the programmer, | ||
| 32 | -such as the type of network the device is currently using. | 31 | +outcome may depend on other factors not considered by the programmer, such as |
| 32 | +the type of network the device is currently using. | ||
| 33 | 33 | ||
| 34 | -In addition, adaptive programming frequently requires arbitrary decision | ||
| 35 | -thresholds chosen before deployment. Even if the two code paths shown in | 34 | +In addition, attempts at pre-deployment adaptation frequently produce |
| 35 | +arbitrary decision thresholds. Even if the two code paths in | ||
| 36 | Figure~\ref{fig-example-if} achieve the desired result, it is unclear what | 36 | Figure~\ref{fig-example-if} achieve the desired result, it is unclear what |
| 37 | -the threshold for choosing a path should be, whether a single threshold | ||
| 38 | -will work for all users, and whether the threshold should depend on | ||
| 39 | -other factors such as how frequently the app is used. | 37 | +battery level threshold should trigger the energy-saving path, whether a |
| 38 | +single threshold will work for all users, and whether the threshold should | ||
| 39 | +depend on other factors such as how frequently the app is used. | ||
| 40 | 40 | ||
| 41 | \begin{figure}[t] | 41 | \begin{figure}[t] |
| 42 | \begin{minted}[fontsize=\footnotesize]{java} | 42 | \begin{minted}[fontsize=\footnotesize]{java} |
| 43 | if (plugged == false && batteryLevel < 10) { | 43 | if (plugged == false && batteryLevel < 10) { |
| 44 | - // Attempt to save energy | 44 | + // Try to save energy |
| 45 | } else { | 45 | } else { |
| 46 | - // Don't attempt to save energy | 46 | + // Don't try to save energy |
| 47 | } | 47 | } |
| 48 | \end{minted} | 48 | \end{minted} |
| 49 | 49 | ||
| @@ -61,64 +61,66 @@ only for certain users, only on certain devices, or never.} | @@ -61,64 +61,66 @@ only for certain users, only on certain devices, or never.} | ||
| 61 | 61 | ||
| 62 | Finally, the current approach to adaptation fails to support post-deployment | 62 | Finally, the current approach to adaptation fails to support post-deployment |
| 63 | testing. While it is possible to enable flexibility, runtime adaptation, and | 63 | testing. While it is possible to enable flexibility, runtime adaptation, and |
| 64 | -split testing using the languages typically used to program mobile systems, | ||
| 65 | -these common tasks require writing large amounts of error-prone boilerplate | ||
| 66 | -code, including APIs to adjust values at runtime and code to retrieve | ||
| 67 | -settings from remote servers. | ||
| 68 | - | ||
| 69 | -The root of the problem is that \textbf{today's languages force programmers to | ||
| 70 | -be certain at a moment when they cannot be}: at development time. While this | ||
| 71 | -problem is endemic to existing programming languages, when developing mobile | ||
| 72 | -apps it is magnified by the amount of variation developers must confront. Our | ||
| 73 | -solution is simple: (1) provide developers with a way to express | ||
| 74 | -\textit{structured uncertainty}, and (2) use the resulting flexibility to | ||
| 75 | -enable a large array of downstream tools for resolving uncertainty by | ||
| 76 | -choosing from the alternatives provided by the developer. | 64 | +split testing using the languages currently used to program mobile systems, |
| 65 | +these tasks require writing large amounts of error-prone boilerplate code | ||
| 66 | +that retrieves settings from remote servers and adjusts values at runtime. | ||
| 67 | + | ||
| 68 | +The root of the problem is that \textbf{today's languages force programmers | ||
| 69 | +to be certain at a moment when they cannot be: at development time.} While | ||
| 70 | +this problem is endemic to existing programming languages, when developing | ||
| 71 | +mobile apps it is magnified by the amount of variation developers must | ||
| 72 | +confront. Our solution is simple: (1) provide developers with a way to | ||
| 73 | +express \textit{structured uncertainty}, and (2) use the resulting | ||
| 74 | +flexibility to enable a large array of downstream tools for resolving | ||
| 75 | +uncertainty by choosing from the alternatives provided by the developer. | ||
| 77 | 76 | ||
| 78 | \begin{figure}[t] | 77 | \begin{figure}[t] |
| 79 | 78 | ||
| 80 | \begin{minted}[fontsize=\footnotesize]{java} | 79 | \begin{minted}[fontsize=\footnotesize]{java} |
| 81 | maybe { | 80 | maybe { |
| 82 | - // Attempt to save energy | 81 | + // Try to save energy (Alternative 1) |
| 83 | } or { | 82 | } or { |
| 84 | - // Don't attempt to save energy | 83 | + // Don't to save energy (Alternative 2) |
| 85 | } | 84 | } |
| 86 | \end{minted} | 85 | \end{minted} |
| 87 | 86 | ||
| 88 | -\vspace*{-0.1in} | 87 | +\vspace*{-0.2in} |
| 89 | 88 | ||
| 90 | -\caption{\small\textbf{Example \texttt{maybe} Statement.} The programmer provides | ||
| 91 | -multiple equivalent alternatives. The system determines how to choose between | ||
| 92 | -them at runtime.} | 89 | +\caption{\small\textbf{Example \texttt{maybe} Statement.} The programmer |
| 90 | +provides multiple alternatives. The system determines how to choose between | ||
| 91 | +them.} | ||
| 93 | 92 | ||
| 94 | \label{fig-example-maybe} | 93 | \label{fig-example-maybe} |
| 95 | 94 | ||
| 96 | -\vspace*{-0.1in} | 95 | +\vspace*{-0.2in} |
| 97 | 96 | ||
| 98 | \end{figure} | 97 | \end{figure} |
| 99 | 98 | ||
| 100 | -In this paper, we present a novel a language construct for expressing | ||
| 101 | -structured uncertainty: the \texttt{maybe} statement. Unlike previous | ||
| 102 | -approaches to adaptation that relied on language support, \texttt{maybe} does | ||
| 103 | -not encourage programmers to provide more information about their app to | ||
| 104 | -allow the compiler to improve performance or guarantee correctness. Rather, | ||
| 105 | -\texttt{maybe} allows the programmer to express and structure uncertainty by | ||
| 106 | -providing two or more different \textit{alternatives} implementing multiple | ||
| 107 | -approaches to runtime adaptation, possibly by making the same | ||
| 108 | -energy-performance or energy-accuracy tradeoffs described previously. | ||
| 109 | -Conceptually, \texttt{maybe} extends the process of compilation and | ||
| 110 | -optimization to include post-deployment testing while also enabling flexible | ||
| 111 | -adaptation that may produce per-user, per-device, or time-varying solutions. | 99 | +\sloppypar{In this paper, we present a novel a language construct for |
| 100 | +expressing structured uncertainty: the \texttt{maybe} statement. Unlike | ||
| 101 | +previous approaches to adaptation that relied on language support, | ||
| 102 | +\texttt{maybe} does not encourage programmers to provide more information | ||
| 103 | +about their app to allow the compiler to improve performance or guarantee | ||
| 104 | +correctness. Rather, \texttt{maybe} allows the programmer to express and | ||
| 105 | +structure uncertainty by providing two or more different | ||
| 106 | +\textit{alternatives} implementing multiple approaches to runtime adaptation. | ||
| 107 | +Together, multiple alternatives can produce the same energy-performance or | ||
| 108 | +energy-accuracy tradeoffs described previously. Conceptually, \texttt{maybe} | ||
| 109 | +extends the process of compilation and optimization to include | ||
| 110 | +post-deployment testing while also enabling flexible adaptation that may | ||
| 111 | +produce per-user, per-device, or time-varying decisions.} | ||
| 112 | 112 | ||
| 113 | Figure~\ref{fig-example-maybe} shows how our earlier example can be easily | 113 | Figure~\ref{fig-example-maybe} shows how our earlier example can be easily |
| 114 | -rewritten using a \texttt{maybe} statement. Unlike the previous example | ||
| 115 | -\texttt{maybe}, does not rely on the developer to implement a decision process | ||
| 116 | -or correctly anticipate the effects of each alternative. Instead, the | 114 | +rewritten using a \texttt{maybe} statement. Unlike the previous example, |
| 115 | +\texttt{maybe} does not rely on the developer to implement a decision process | ||
| 116 | +or correctly predict the effects of each alternative. Instead, the | ||
| 117 | \texttt{maybe} system makes runtime choices about which alternative to use by | 117 | \texttt{maybe} system makes runtime choices about which alternative to use by |
| 118 | measuring the tradeoffs produced by each alternative and (in this case) | 118 | measuring the tradeoffs produced by each alternative and (in this case) |
| 119 | -activating an energy-saving alternative when appropriate. All the developer | ||
| 120 | -has to do is provide alternatives when they are unsure what to do; the | ||
| 121 | -\texttt{maybe} system does the rest. | 119 | +activating an energy-saving alternative when appropriate. When they are |
| 120 | +unsure what to do, all developers have to do is provide alternatives; the | ||
| 121 | +\texttt{maybe} system does the rest. \texttt{maybe} allows developers to | ||
| 122 | +respond to uncertainty with flexibility, which is used to enable | ||
| 123 | +testing-driven adaptation. | ||
| 122 | 124 | ||
| 123 | The rest of our paper is structured as follows. We begin by providing a more | 125 | The rest of our paper is structured as follows. We begin by providing a more |
| 124 | complete description of the \texttt{maybe} statement in | 126 | complete description of the \texttt{maybe} statement in |
maybe.tex
| @@ -30,13 +30,13 @@ maybe { | @@ -30,13 +30,13 @@ maybe { | ||
| 30 | 30 | ||
| 31 | \end{minted} | 31 | \end{minted} |
| 32 | 32 | ||
| 33 | -\vspace*{-0.1in} | 33 | +\vspace*{-0.2in} |
| 34 | 34 | ||
| 35 | \caption{\small\textbf{More \texttt{maybe} Statements}} | 35 | \caption{\small\textbf{More \texttt{maybe} Statements}} |
| 36 | 36 | ||
| 37 | \label{fig-maybeexamples} | 37 | \label{fig-maybeexamples} |
| 38 | 38 | ||
| 39 | -\vspace*{-0.15in} | 39 | +\vspace*{-0.2in} |
| 40 | 40 | ||
| 41 | \end{figure} | 41 | \end{figure} |
| 42 | 42 | ||
| @@ -60,14 +60,14 @@ alternatives are specified, the system chooses one to execute; if only one | @@ -60,14 +60,14 @@ alternatives are specified, the system chooses one to execute; if only one | ||
| 60 | alternative is specified, the system chooses whether or not to execute it. | 60 | alternative is specified, the system chooses whether or not to execute it. |
| 61 | Single-alternative \texttt{maybe} statements can encapsulate or reorganize | 61 | Single-alternative \texttt{maybe} statements can encapsulate or reorganize |
| 62 | logic that does not affect correctness, but may (or may not) produce some | 62 | logic that does not affect correctness, but may (or may not) produce some |
| 63 | -desirable objective. | 63 | +desirable outcome. |
| 64 | 64 | ||
| 65 | Figure~\ref{fig-maybeexamples} shows several extensions of the \texttt{maybe} | 65 | Figure~\ref{fig-maybeexamples} shows several extensions of the \texttt{maybe} |
| 66 | statement providing syntactic sugar. \texttt{maybe} function annotations | 66 | statement providing syntactic sugar. \texttt{maybe} function annotations |
| 67 | allow uncertainty to be expressed at the function level, with the | 67 | allow uncertainty to be expressed at the function level, with the |
| 68 | alternatives consisting of multiple function definitions with identical | 68 | alternatives consisting of multiple function definitions with identical |
| 69 | -signatures. Finally, \texttt{maybe} statements that require custom evaluation | ||
| 70 | -logic can include an \texttt{evaluate} block as shown in the final example. | 69 | +signatures. \texttt{maybe} statements that require custom evaluation logic |
| 70 | +can include an \texttt{evaluate} block as shown in the final example. | ||
| 71 | \texttt{evaluate} blocks provide app-specific \textit{a posteriori} logic to | 71 | \texttt{evaluate} blocks provide app-specific \textit{a posteriori} logic to |
| 72 | evaluate the selected alternative. The \texttt{evaluate} block must return a | 72 | evaluate the selected alternative. The \texttt{evaluate} block must return a |
| 73 | single JSON object with two components: (1) a positive integer | 73 | single JSON object with two components: (1) a positive integer |
| @@ -80,11 +80,11 @@ While it should be possible to nest \texttt{maybe} statements, it may require | @@ -80,11 +80,11 @@ While it should be possible to nest \texttt{maybe} statements, it may require | ||
| 80 | compiler support to provide guarantees about how \texttt{maybe} decisions are | 80 | compiler support to provide guarantees about how \texttt{maybe} decisions are |
| 81 | maintained across multiple code blocks. As we gain more experience with our | 81 | maintained across multiple code blocks. As we gain more experience with our |
| 82 | rewrite-based prototype, described next in Section~\ref{sec-certainty}, we | 82 | rewrite-based prototype, described next in Section~\ref{sec-certainty}, we |
| 83 | -will revisit the question of nesting in future compiler-driven \texttt{maybe} | 83 | +will revisit the question of nesting in future compiler-based \texttt{maybe} |
| 84 | systems. | 84 | systems. |
| 85 | 85 | ||
| 86 | -\sloppypar{As a final remark, note that structured uncertainty is not | ||
| 87 | -randomness. Randomness weights multiple options statically---there is no | ||
| 88 | -right or wrong choice. In contrast, the \texttt{maybe} statement indicates | ||
| 89 | -that during any given execution one alternative may be the right | ||
| 90 | -choice---even if the developer or system cannot yet identify it.} | 86 | +As a final remark, note that structured uncertainty is not randomness. |
| 87 | +Randomness weights multiple options statically---there is no right or wrong | ||
| 88 | +decision. In contrast, the \texttt{maybe} statement indicates that during any | ||
| 89 | +given execution one alternative may better than the others. The goal of the | ||
| 90 | +system is to determine which one. |
paper.tex
| @@ -82,7 +82,6 @@ Jinghao Shi, Guru Prasad Srinivasa, and Lukasz Ziarek} | @@ -82,7 +82,6 @@ Jinghao Shi, Guru Prasad Srinivasa, and Lukasz Ziarek} | ||
| 82 | \input{conclusion.tex} | 82 | \input{conclusion.tex} |
| 83 | 83 | ||
| 84 | {\scriptsize | 84 | {\scriptsize |
| 85 | -\balance | ||
| 86 | \renewcommand{\baselinestretch}{0.8} | 85 | \renewcommand{\baselinestretch}{0.8} |
| 87 | \bibliographystyle{acm} | 86 | \bibliographystyle{acm} |
| 88 | \bibliography{references} | 87 | \bibliography{references} |