Eno Blog

You can subscribe to this blog via its RSS feed.

April 1, 2021

This week was dedicated to a complex and important architectural change in libeno: The AST graph now maps node connections through relative memory offsets instead of absolute memory addresses, thereby allowing abritrary reallocation of the graph buffer. What this means is: libeno is now capable to handle arbitrarily large documents, and very efficiently so.

In other important news, over the last weeks I've been secretly writing a pure Rust parser implementation for Eno (secretly only because I didn't get around to write about it, sorry :)). That code currently lives (until I get around repackaging it elsewhere) as the local enolib subcrate inside the faircamp repository (where I am by the way working on a self-hostable, free software alternative to bandcamp, which I'm pretty excited about, and judging by feedback so far, others too!). The Rust parser is not yet complete, but if you need neither associated comments nor copies (which the majority of usecases probably don't) it's perfectly usable for the rest already. (Usage: Call enolib::parse(...), then pattern-match yourself through the result(s), there's not much more to it really!)

Closing remark, given the date: All of this really happened.
(It would be a really weird, unfunny april fool's joke anyhow :))

January 17, 2021

Published an RFC for the conceptual unification of Field, Fieldset and List elements.

January 4, 2021

Published a new revision of the associated comments RFC, specifying top-level comments associated with the document (as already experimentally available in libeno).

December 28, 2020

RSS is the cool kid again - you can now subscribe to eno-lang.org via the shiny new RSS Feed \o/

Also did some extensive housekeeping on the website repository, cleaning up and commiting changes of the last months, began moving assets from resources.eno-lang.org into the root domain to reduce complexity and server maintenance overhead, etc.

December 26, 2020

Moved eno-lang.org to a new server

November 29, 2020

Good news everyone! Over the past months libeno has seen its first tagged and versioned release (0.1.0), and developers on Arch Linux can already get it via the AUR. The sicuit password manager is now officially the first application released out in the wild that puts libeno to the test in a live setting, which will help to drive stability and testing over the coming months. Feature additions have been only sparse over the past months (most notably copying still remains as the last and only unimplemented part of the spec), however to some degree this is actually a direct result of the fact that there is really nothing lacking for productive parsing usage, which is also kinda great to see. In the coming weeks I'd like to mostly work on libeno's test suite, adding examples for various error cases and possibly implementing algorithmic re-runs of existing tests with different whitespace/linebreak-style/(no)-newline-before-EOF permutations to deepen confidence in the soundness of the parser code. Unless there's any big news till then ... see you all in 2021!

June 13, 2020

June 12, 2020

June 11, 2020

June 10, 2020

June 8, 2020

After a busy weekend the first big chunk of the website overhaul is complete! The font selection has been completely redesigned, many subpages were condensed and their content integrated into the new frontpage, some fundamental text blocks describing the essence of eno have been rewritten, the history and future prospects updated, the playground now uses a full screen layout with improved visuals, as does the enolib-playground, and much more. In summary it can be said that eno-lang.org never looked - and worked - this good.

Next up soon for the website I'll be revisiting the documentation pages (guide, specification, library docs) to improve their layout and organization, as well as doing a focused review of responsive behavior and accessibility of the page, to round off the package.

In the meantime I'm now going back to work on the new reference parser, which, I can happily report, has been successfully put into a real-life usecase already, powering config and password store parsing for sicuit, a project I'll be first releasing in a week or so.

May 24, 2020

May 23, 2020

May 1, 2020

Over the last two weeks I've begun work on a new reference parser for eno written in C. Intentions and motivation for this look as follows:

Development is still at an early stage. You can follow the progress on libeno's repository on Codeberg: https://codeberg.org/simonrepp/libeno

January 18, 2020

Eno is now finally getting a schema definition metaformat (by popular request) - after two days of hacking (building on previous efforts from a few months ago) a first prototype for a CLI-based parser generator is now up on github: https://github.com/eno-lang/enocli

Some major loose ends need to be tied up still, but within the next two weeks or so there will likely be a state that is well usable for all the major, obvious usecases. πŸŽ‰

January 17, 2020

January 11, 2020

January 10, 2020

The legacy libraries which have been superseded by enolib (enojs, enopy, enorb) and their respective experimental loader companion packages have reached END OF LIFE with the start of 2020 (after 10 months of deprecation):

January 8, 2020

October 15, 2019

August 30, 2019

August 16, 2019

August 4, 2019

August 3, 2019

With today's additions tree-sitter-eno is feature complete πŸŽ‰ Proof of concept integration into language-eno and ironing out some known edge case issues is up next!

July 31, 2019

July 29, 2019

July 28, 2019

Released enolib 0.8.0, supporting the new empties πŸš€ - see changelog.

July 27, 2019

July 26, 2019

July 24, 2019

July 19, 2019

July 17, 2019

Currently working on resolving numerous smaller but intricate bugs in the syntax highlighting implementations for prism.js and Ace. Additionally about three weeks were spent on getting the tree-sitter C parser implementation to about 80% of completion. The tree-sitter parser will enable the atom plugin for eno to offer perfect code folding as well as rock-solid stability and improved performance. Also through the various bindings it will give everyone a means for super fast basic eno parsing in C, C++, Rust and other low level languages!

June 19, 2019

June 12, 2019

Released enolib 0.7.2 with minor patching and refactoring regarding the semantical analysis of lines triggering parse errors - see changelog.

June 11, 2019

Released enolib 0.7.0 with new, simpler interfaces for requiring additional locales and reporters - this is a breaking change if you are using them - see changelog.

June 8, 2019

Released sublime-eno 0.3.0 for Sublime Text, featuring highlighting differentiation for sections as well as scope terminology updates to comply with the latest language specification.

June 4, 2019

Released vscode-eno 0.3.0 for Visual Studio Code, featuring highlighting differentiation for sections as well as scope terminology updates to comply with the latest language specification.

May 31, 2019

Released language-eno 0.4.3 for Atom, updating some scope terminology in accordance with the latest language specification.

May 29, 2019

Released enolib 0.6.0 with a bunch of API additions, fixes and polish, mostly around element lookups - see changelog.

May 27, 2019

May 17, 2019

May 16, 2019

Published the official deprecation announcement releases for enorb and enorb-exploaders (now superseded by enolib and enotype respectively)

May 10, 2019

Released enolib 0.5.2 with a minor fix on all platforms and a heap of smaller corrections and refactoring in the ruby implementation - changelog.

May 5, 2019

Published a python-only enolib 0.5.1 release with lots of fixes and clean up, including a contribution from Massimo Redaelli (thank you!) - changelog.

May 4, 2019

Released ruby-only enotype release 0.3.1, most prominently including a helper method to obtain all loaders as a hash of procs for easily passing around loaders and registering them with enolib - changelog.

April 22, 2019

Released language-eno 0.4.2 for Atom, including a long planned visual tweak to better differentiate sections and minor scope changes for better convention compliance - changelog.

April 21, 2019

Released enolib for ruby πŸš€

Also published 0.5.0 for javascript and ruby, adding two minor missing section accessors - see changelog.

April 20, 2019

April 16, 2019

April 14, 2019

April 10, 2019

April 7, 2019

April 6, 2019

April 5, 2019

Ported the first half of the latest enolib parsing implementation to Ruby

April 2, 2019

Released enolib 0.4.1 with minor fixes and python package documentation additions - see changelog.

April 1, 2019

Added complete python documentation for enolib

March 31, 2019

πŸš€ Released enolib 0.4.0 for python - package on PyPI

March 30, 2019

March 29, 2019

March 27, 2019

Ported the bulk of the new enolib core architecture and parser implementation to python - some specs already run through and if nothing fundamental gets in the way things are nicely on schedule for an early april release. πŸŽ‰

March 24, 2019

March 23, 2019

March 22, 2019

March 21, 2019

March 20, 2019

March 16, 2019

March 15, 2019

Went out for the world climate strike day, answered lots of great questions and ideas on GitHub and marked all legacy ecosystem javascript packages on npm as deprecated - they will be end of life at the beginning of 2020.

March 13, 2019

The new javascript documentation for enolib is now feature-complete and covers all base functionality.

March 12, 2019

March 10, 2019

March 9, 2019

Released enolib 0.2.0 (changelog) and the new transitional website, everything here is still heavily work in progress right now.

March 3, 2019

Released enolib 0.1.1 with error reporting fixes and two new query methods - see changelog

March 2, 2019

Worked on rebooting the website the last days, splitting it into an archived eno/first version and the soon default final ecosystem branch. Also wrote some of the coming documentation for enolib and did some major redesign work for the final branch of the website.

February 27, 2019

It's shipping day again! πŸŽ‰ The JS implementation for the new flagship enolib library was just released as 0.1.0 on npm, and API documentation is coming the next days. The enolib project is the successor to the existing enojs/enophp/enopy/enorb libraries, uniting them under a single name to reflect their close connection (they practically offer 1:1 the same API on all supported languages) and make them easier to recognize between different platforms. Importantly they also implement the living draft for the final specification and offer a greatly overhauled API design and internal architecture, resulting in more functionality, safety, performance and ultimately also fun. More updates coming soon - stay tuned!

February 21, 2019

Published enotype 0.1.0 πŸŽ‰ on GitHub, npm, PyPI and rubygems

enotype will be the go-to companion library for the upcoming series of eno parsers supporting the final specification. It provides all the standard type loaders that presently are always included with the current eno libraries in a separate package, thereby slimming down the core and making it unopinionated regarding what types are considered standard.

Additionally, as the readme states, it is "A cross-language standard library for types.", meaning it can be used in many other contexts apart from eno as well! The upcoming eno parsers use a simplified model for loader functions - they always only take a string and produce a converted value (or throw an expection), whereas in the current libraries they accept variable numbers of parameters (key, value, internally also a context) in either positional or keyword form dependent on the language.

As you will notice there is hardly any documentation included right now, that however will be tackled alongside work on the prerelease libraries over the next days and weeks.

February 20, 2019

February 18, 2019

February 17, 2019

February 16, 2019

February 15, 2019

February 14, 2019

February 12, 2019

Final day of an 8-day long non-stop fulltime development sprint on the eno libraries! πŸŽ‰

Huge progress was made on a lot of tricky architectural questions for the next generation of eno libraries, restructuring and separation of concerns between the different repositories and projects happened, some 80% of the way to get all 4 existing eno libraries compatible with the final specification was traveled.

The coming weeks will see plenty of cleanup on the results, tying up loose ends and getting everything in shape for gradual release and announcement. Aaand a lot of documentation will need to be written or updated. ;)

February 4, 2019

February 3, 2019

February 2, 2019

January 26, 2019

January 19, 2019

January 16, 2019

January 14, 2019

January 13, 2019

January 12, 2019

January 10, 2019

January 6, 2019

January 4, 2019

January 3, 2019

January 2, 2019

January 1, 2019

December 31, 2018

December 30, 2018

December 25, 2018

December 23, 2018

December 22, 2018

December 21, 2018

December 15, 2018

December 14, 2018

December 11, 2018

December 9, 2018

December 8, 2018

December 7, 2018

December 5, 2018

December 4, 2018

December 2, 2018

December 1, 2018

November 30, 2018

November 8, 2018

November 5, 2018

November 4, 2018

November 3, 2018

November 2, 2018

November 1, 2018

October 31, 2018

October 30, 2018

Today enophp reached feature-complete state! In the coming days the remaining missing parts of the testsuite will be implemented (which will likely entail some bugfixing), alongside some detail considerations around loaders. Also, importantly, the documentation for enophp on eno-lang.org will be set up. After that it's release time!

October 28, 2018

October 27, 2018

October 26, 2018

October 24, 2018

October 23, 2018

After some time off to a) earn money and thereby cross-finance the next months of eno development, b) gather more insights in the currently largest production usecase of eno and c) recharge batteries :) development is now continuing!

Getting the enophp implementation feature-complete in november is the current development target, with the enors (rust) implementation coming up next on the roadmap, likely to commence around december.

September 25, 2018

September 9, 2018

September 2, 2018

August 26, 2018

August 22, 2018

August 19, 2018

August 18, 2018

August 17, 2018

August 15, 2018

August 13, 2018

August 9, 2018

August 4, 2018

July 28, 2018

July 27, 2018

July 26, 2018

July 25, 2018

July 24, 2018

July 22, 2018

July 21, 2018

Dictionary elements are now called Fieldset elements. This change was long in the making, addressing a few issues and improving a few aspects of the original terminology, e.g.: Conceptually, sections are dictionaries as well (in the generic sense of the term), so this was rather ambiguous. Fieldset indicates the strong relation to fields - it's really just a way of grouping fields - whereas dictionary possibly indicated some larger, non-existant difference. Fieldset as a term also hints at fieldsets in HTML and forms in general, which is also desired because it's a more user-facing and user-friendly wording and concept.

Note that in the eno language context this is purely a non-functional change, it only modifies how the language construct is referred to in documentation, error messages, and by the APIs, but it does not change the way fieldsets/dictionaries work in any way.

July 20, 2018

July 18, 2018

July 17, 2018

July 15, 2018

July 14, 2018

July 13, 2018

July 11, 2018

July 10, 2018

July 9, 2018

July 8, 2018

July 7, 2018

July 6, 2018

July 5, 2018

July 4, 2018

July 3, 2018

July 2, 2018

July 1, 2018

June 30, 2018

June 29, 2018

June 28, 2018

June 27, 2018

June 26, 2018

June 25, 2018

June 24, 2018

June 23, 2018

June 22, 2018

June 21, 2018