Declarative WHILE: nested example
Previous post
by @yegor256 explained declarative WHILE nature.
Let’s examine more complex example when while
objects are nested.
Previous post
by @yegor256 explained declarative WHILE nature.
Let’s examine more complex example when while
objects are nested.
In the recently released version 0.28.14
we’ve changed the iterating algorithm of the
bool.while
object. Until now,
by our mistake, it was imperative. Now, it’s
declarative.
The difference is in the result of its dataization.
The previous imperative version was “returning” a data object.
The new declarative one returns the latest body of the loop (without dataization!).
The difference is huge (thanks to it, many of our tests broke).
In the recently released version 0.28.14 we introduced a new language feature, which is called “object adoption” — because it allows changing of an object’s parent. Every object in EO has a parent object, which is set to it when it’s born (either formed or copied). Until the recent release it was not possible to change the parent object using EO language. However, it was possible to do this from inside an atom (through Java). Now, there is no special API inside Java, but the feature is available through EO.
There are “atoms” in EO language, which are objects implemented by
the runtime platform, not by a composition of other EO objects. Most
notable examples of atoms are int.plus
, float.times
, and
bool.while
. Here is a quick intruction to creating your own
atoms.
As described in this blog post
place
step of EO build process copies compiled files from dependencies’ JARs
into target/classes
folder to have them in classpath during compilation later.
You can check PlaceMojo
class for exact logic of this step.
All copied files are registered within “placed catalog,” which is normally stored as
target/eo/placed.csv
file.
Let’s consider structure of the catalog in more details.
As in all other programming languages, an object while
is used to iterate over a set of statements while a condition is true.
In EO this object not only does this,
but is also dataized. And the result of such dataization was the number of iterations
performed. Now this behavior has changed: the result of such dataization can now
be any object (depending on the condition).
It can be divided into two parts: when the condition is TRUE
and when the condition
is FALSE
.
EO parser is written in ANTLR4, Java, and XSL. It is packaged as a multi-module Maven project, in objectionary/eo GitHub repository. In order to compile an EO program to Java you may either use our Maven plugin or our eoc command line toolkit. Moreover, you can also use our parser programmatically in order to generate XMIR from EO. Here is how you do it in your Java/Kotlin/Clojure/Groovy/etc. project.