Want to contribute? Fork us in GitHub!

Big changes in 0.36.0

It’s been a while since our last blog post. All this time, we were working hard on fixing bugs, creating new objects, and improving EO in general. And here it is - release 0.36.0, which contains many new features. So, this blog post is a summary that highlights the most significant changes.

Rho attribute

The first significant change is related to the special ρ (rho) attribute. A few words about it:

Vertex attribute

The second significant change is related to the ν (vertex) attribute. We got rid of it and made our language simpler.

The purpose of the ν attribute was to uniquely identify an object in the universe. Before the release 0.36.0, every object had such a unique numeric identifier, and EO guaranteed that. However, we decided that giving such badges to objects is not really object-oriented. We don’t want and don’t need to interact with objects relying on whether they have some unique ID. All we want from the object is its behavior, the functionality it provides. So, it just does not matter if an object has some identifier or not; the way it behaves with us is what really matters.

That’s why objects in EO don’t have the ν attribute anymore.

Caching

We’ve changed the logic of object caching in EO.

some-object > cached!

Until now, this ! meant that if we take attributes from the object more than once, they will be calculated only the first time and cached. Sounds good, but it didn’t work as we wanted.

Now, ! means that when a cached object is touched for the first time (for example, an attribute is taken), it’s dataized, converted to bytes, and starts to behave as the bytes. All the next manipulations with the cached object are transferred to the given bytes.

Objects

We’ve done a lot of work to remove redundant objects, redesign some old ones, and introduce new ones.

Grammar

We’ve made EO more strict by making changes in its grammar rules:

# Wrong.
[] > object

  5 > five

  10 > ten

  [] > inner

# Right.
[] > object
  5 > five
  10 > ten

  [] > inner
# This is a good commentary in front of a named abstract object with a length >= 64 characters.
[] > object
  # This comment is optional but has the same requirements as in front of an abstract object.
  while > @
    TRUE
    # This commentary is prohibited and will lead to a parsing exception being thrown.
    [i] (i > @)
# This code won't be parsed.
TRUE.< > vtx
# This code won't be parsed.
TRUE' > copy
some-object > cached!
# The same as
(dataized some-object).as-bytes > cached

That’s it. This is what we were working on for the last 4 months. We’ll try not to make such huge breaks between blog posts in the future. So keep following us!