style95 commented on a change in pull request #4469: Touch-up Action loop 
markdown adjusting grammar/flow
URL: 
https://github.com/apache/incubator-openwhisk/pull/4469#discussion_r280639138
 
 

 ##########
 File path: docs/actions-actionloop.md
 ##########
 @@ -19,57 +19,50 @@
 -->
 # Developing a new Runtime with the ActionLoop proxy
 
-The [runtime specification](actions-new.md) defines the expected behavior of a 
runtime. You can implement a runtime from scratch just following the spec.
+The [runtime specification](actions-new.md) defines the expected behavior of a 
runtime. You can implement a runtime from scratch just following the 
specification.
 
-However, the fastest way to develop a new runtime is reusing the *ActionLoop* 
proxy, that already implements the specification and provides just a few hooks 
to get a fully functional (and *fast*) runtime in a few hours.
+However, the fastest way to develop a new runtime is reusing the *ActionLoop* 
proxy that already implements the specification and provides just a few hooks 
to get a fully functional (and *fast*) runtime in a few hours or less.
 
 ## What is the ActionLoop proxy
 
-The ActionLoop proxy is a runtime "engine", written in Go, originally 
developed specifically to support the Go language. However it was written in a 
pretty generic way, and it has been then adopted also to implement runtimes for 
Swift, PHP, Python, Rust, Java, Ruby and Crystal. Even though it was developed 
with compiled languages in mind it works equally well with scripting languages.
+The ActionLoop proxy is a runtime "engine", written in the [Go programming 
language](https://golang.org/), originally developed specifically to support a 
Go language runtime. However, it was written in a  generic way such that it has 
since been adopted to implement runtimes for Swift, PHP, Python, Rust, Java, 
Ruby and Crystal. Even though it was developed with compiled languages in mind 
it works equally well with scripting languages.
 
-Using it, you can develop a new runtime in a fraction of the time needed for a 
full-fledged runtime, since you have only to write a command line protocol and 
not a fully featured web server, with an amount of corner case to take care.
+Using it, you can develop a new runtime in a fraction of the time needed for a 
authoring full-fledged runtime from scratch. This is due to the fact that you 
have only to write a command line protocol and not a fully featured web server 
(with a small amount of corner case to take care of). The results should also 
produce a runtime that is fairly fast and responsive.  In fact, the ActionLoop 
proxy has also been adopted to improve the performance of existing runtimes 
like Python, Ruby, PHP, and Java where performance has improved by a factor 
between 2x to 20x. 
 
-Also, you will likely get a pretty fast runtime, since it is currently the 
most rapid. It was also adopted to improve performances of existing runtimes, 
that gained from factor 2x to a factor 20x for languages like Python, Ruby, 
PHP, and Java.
+ActionLoop also supports "precompilation". You can use the docker image of the 
runtime to compile your source files in an  action offiline. You will get a ZIP 
file that you can use as an action that is very fast to start because it 
contains only the binaries and not the sources. More information on this 
approach can be found here: [Precompiling Go Sources 
Offline](https://github.com/apache/incubator-openwhisk-runtime-go/blob/master/docs/DEPLOY.md#precompile)
 which describes how to do this for the Go language, but the approach applies 
to any language supported by ActionLoop.
 
-ActionLoop also supports "precompilation". You can take a raw image and use 
the docker image to perform the transformation in action. You will get a zip 
file that you can use as an action that is very fast to start because it 
contains only the binaries and not the sources.
-
-So it is likely are using ActionLoop a better bet than implementing the 
specification from scratch. If you are convinced and want to use it, read on: 
this page is a tutorial on how to write an ActionLoop runtime, using Ruby as an 
example.
+In summary, it is likely that using the ActionLoop is simpler and a "better 
bet" than implementing the specification from scratch. If you are convinced and 
want to use it, then read on. What follows on this page is a tutorial on how to 
write an ActionLoop runtime, using Ruby as an example target language.
 
 ## How to write a new runtime with ActionLoop
 
 The development procedure for ActionLoop requires the following steps:
 
-* building a docker image containing your target language compiler and the 
ActionLoop runtime
-*  writing a simple line-oriented protocol in your target language (converting 
a python example)
-* write (or just adapt the existing) a compilation script for your target 
language
-* write some mandatory tests for your language
-
-To facilitate the process, there is an `actionloop-starter-kit` in the 
devtools repository, that implements a fully working runtime for Python.  It is 
a stripped down version of the real Python runtime (removing some advanced 
details of the real one).
+* building a docker image containing your target language compiler and the 
ActionLoop runtime.
+*  writing a simple line-oriented protocol in your target language.
+* writing a compilation script for your target language.
+* writing some mandatory tests for your language.
 
-So you can implement your runtime translating some Python code in your target 
language. This tutorial shows step by step how to do it writing the Ruby 
runtime. This code is also used in the real Ruby runtime.
+To facilitate the process, there is an `actionloop-starter-kit` in the 
[openwhisk-devtools](https://github.com/apache/incubator-openwhisk-devtools/tree/master/actionloop-starter-kit)
 GitHub repository, that implements a fully working runtime for Python.  It 
contains a stripped-down version of the real Python runtime (with some advanced 
features removed) along with guided, step-by-step instructions on how to 
translate it to a different target runtime language using Ruby as an example.
 
-Using the starter kit, the process becomes:
+In short, the starter kit provides templates you can adapt in creating an 
ActionLoop runtime for each of the steps listed above, these include :
 
 - checking out  the `actionloop-starter-kit` from the 
`incubator-openwhisk-devtools` repository
-- editing the `Dockerfile` to create the target environment for your language
-- rewrite the `launcher.py` in your language
-- edit the `compile` script to compile your action in your target language
-- write the mandatory tests for your language, adapting the 
`ActionLoopPythonBasicTests.scala`
-
-Since we need to show the code you have to translate in some language, we 
picked Python as it is one of the more readable languages, the closer to be 
real-world `pseudo-code`.
+- editing the `Dockerfile` to create the target environment for your target 
language.
+- converting (rewrite) the `launcher.py` script to an equivalent for script 
for your target language.
+- editing the `compile` script to compile your action in your target language.
+- writing the mandatory tests for your target language, by adapting the 
`ActionLoopPythonBasicTests.scala` file.
 
-You need to know a bit of Python to understand the sample `launcher.py`, just 
enough to rewrite it in your target language.
+As a starting language, we chose Python since it is one of the more 
human-readable languages (can be  treated as `pseudo-code`). Do not worry, you 
should only need just enough Python knowledge to be able to rewrite 
`launcher.py` and edit the `compile` script for your target language.
 
-You may need to write some real Python coding to edit the `compile` script, 
but basic knowledge is enough.
+Finally, you will need to update the `ActionLoopPythonBasicTests.scala` test 
file which, although written in the Scala langauge, only serves as a wrapper 
that you will use to embed your target language tests into.
 
-Finally, you do not need to know Scala, even if the tests are embedded in a 
Scala test, as all you need is to embed your tests in the code.
 ## Notation
 
-In this tutorial we have either terminal transcripts to show what you need to 
do at the terminal, or "diffs" to show changes to existing files.
+In each step of this tutorial, we typically show snippets of either terminal 
transcripts (i.e., commands and results) or "diffs" of changes to existing code 
files.
 
-In terminal transcripts, the prefix  `$`  means commands you have to type at 
the terminal; the rest are comments (prefixed with `#`) or sample output you 
should check to verify everything is ok. Generally in a transcript I do not put 
verbatim output of the terminal as it is generally irrelevant.
+Within terminal transcript snippets, comments are prefixed with `#` character 
and commands are prefixed by the `$` character. Lines that follow commands may 
include sample output (from their execution) which can be used to verify 
against results in your local environment. 
 
-When I show changes to existing files, lines without a prefix should be left 
as is, lines  with `-` should be removed and lines with  `+` should be added.
+When snippets show changes to existing source files, lines without a prefix 
should be left "as is", lines  with `-` should be removed and lines with  `+` 
should be added.
 
 Review comment:
   It seems there are 2 whitespaces between `lines` and  `with`.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to