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
- Updated/cleaned up the original language design repository and migrated more resources to the specification
June 12, 2020
- Implemented internal AST verification for libeno's examplified spec suite
- Put some heavy thought into how a simple, future-proof public interface for libeno could or should look like
June 11, 2020
- Implemented a proof of concept for systematically testing parsing correctness for libeno
- Implemented assembling of values from line continuations in libeno
June 10, 2020
- Completely overhauled the layout for all documentation pages
- Improved the libraries section on the frontpage
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
- Added detailed implementation notes regarding line continuation behavior to the specification
- Released ace-eno 0.2.2, which adds a missing escaped empty rule
May 23, 2020
- Development of libeno is progressing
nicely and steadily, and as expected it's opened up a good avenue for finally
figuring out the last minute details of eno's specification!
- Today on the side I've also kicked off a process of reworking the website, making it simpler and
more to the point, removing stack bloat and resolving some responsiveness and
probably also accessibility issues that still remain.
- I finished and uploaded revision 2 of the associated comments RFC,
which proposes new, improved whitespace behavior based on research and development over the last months.
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:
- A portable C implementation will compile and run pretty much everywhere,
opening up many possibilities for people to use eno in new contexts.
- Correctly handling unicode text in C is a challenge, the merit of this
however is that it really makes you think about what you're doing and
the process of implementing the eno specification in C might reveal if
there are still flaws in the way eno is specified, leading in the end
to a better parser and a better specification.
- Some fiddly edge case behavior around handling of tabs vs. spaces in the
context of associated comments is not yet adequately specified in the
existing parser implementations. Writing the new reference parser presents
an opportunity to patch up these remaining known minor issues.
- The enolib implementation for Rust is still up in the air, partly due to
the fact that the low level lexing/parsing hasn't turned out all that
convenient to implement in (safe) Rust so far - being able to build a
Rust high level library implementation on a low level C parser foundation
through the FFI seems like a nice avenue to explore.
- While laying the groundwork for eno's schema definition metaformat (along its
companion CLI for generating parsers) earlier this year it became obvious
that availability of the CLI in different environments will be a question
that needs to be adressed. Availability of a C parser would allow
implementing and distributing the CLI tool as a static binary, enabling
easy access on all platforms without specific language runtime requirements.
- The enolib parsers are already among the fastest parsers for structured
plaintext content out there. It's probably more a vanity thing from here
on thus, but faster is always nice: If benchmarks showcasing outstanding
performance (regardless if anyone will ever need it) attract an audience
that later discovers that eno actually excels through its other qualities
as well, that's a nice side effect.
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
- Extended the complete guide to eno with an FAQ entry regarding indentation and whitespace (thanks Nicholas for reporting the absence of that information!)
January 11, 2020
- Released enolib 0.8.2 patch update for javascript, fixing three rare but critical issues in the reporter implementation - see
changelog.
January 10, 2020
- Released sublime-eno 0.4.1 for Sublime Text, fixing a multiline field pattern recognition issue reported by Nicholas Reid - thanks Nicholas!
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):
- Unpublished enopy and enopy-exploaders from pypi.org
- Unpublished enorb and enorb-exploaders from rubygems.org
- Removed the enopy enopy-exploaders repositories from github
- Removed the enorb enorb-exploaders repositories from github
January 8, 2020
- Patrick Thomson contributed a
patch
for tree-sitter-eno that resolves compiler-dependent
compilation issues caused by invalid multi-byte string literal syntax - thanks Patrick!
October 15, 2019
- Released enolib 0.8.1, adding the possibility to explicitly override
the
all_elements_required
state when querying elements through their
optional_*
accessors, plus two bugfixes for python and ruby - see
changelog.
August 30, 2019
- Did some work on establishing a logo/design/visual identity for eno again in the last days π
- Added a small patch for element operator highlighting in ambiguous elements to language-eno
- Testing meanwhile revealed that the external tree-sitter scanner architecture
for multiline field detection will have to be partially rewritten because
although it works perfectly well for static/one-time parse runs, it seems to
not be suitable for iterative parsing runs when the already parsed tree is
updated from a previous state, so there will be some more delay before a
release in the interest of stability (this can crash Atom in certain
scenarios).
August 16, 2019
- Released tree-sitter-eno 0.1.3 with more fixes and improvements - see changelog.
- The tree-sitter integration for language-eno is now pretty much at release candidate status, a few more code folding rules will be added, then it's release time!
August 4, 2019
- Released tree-sitter-eno 0.1.1 with a critical fix for the bindings and from now on packaging only the minimum required files
- Released tree-sitter-eno 0.1.2, patching recognition for empty fieldset entries and list items
- Successfully integrated tree-sitter parsing into language-eno, this will be released in the next days, as soon as any remaining obvious issues with tree-sitter-eno are resolved
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
- Added detailed documentation on error metadata for all enolib implementations
- Pushed onwards with tree-sitter-eno which is now about 90% there
- Contributed back some documentation improvements to tree-sitter π€
July 29, 2019
- Added addendum content (complete example, AST inspection, FAQ) to the enolib documentation for all implementations
- Small code example fixes in the ruby enolib documentation
July 28, 2019
Released enolib 0.8.0, supporting the new empties π - see changelog.
July 27, 2019
- Interactive examples and a guide page on the new empties has been added
- Various other smaller additions, clarifications and updates inside the language guide and interactive examples
July 26, 2019
- Multiple updates to prism-eno, greatly improving multiline field recognition robustness, handling various edge cases, adding support for the new empties and more
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
- Published an RFC for Empties (explicit key-only elements) - an implementation for evaluating this RFC for is already ready and will be released through enolib in the coming days.
- Migrated most of the specification resources in the eno core repository to the eno-lang.org repository (because single source of truth)
- Added portfolio page and color scheme example documents to the interactive eno document browser
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
- Implemented generative, exhaustive lookup testing for the python implementation of enolib
- Added a small correction for explicitly handling document key requests in the python and ruby enolib implementation
- Replaced some accidental python installation snippets in the ruby documentation
May 17, 2019
- Published complete documentation for the enolib ruby implementation
- Improvements and corrections in the javascript and python enolib documentation
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
- enolib's ruby implementation is getting close to release state! After today's effort well over 60% of the spec suite are now passing and we're on track for a release in the next ten days. π
- Also the python enolib implementation was switched to 4-space indentation today (because standards)
April 16, 2019
- Released enolib 0.4.3 with a critical patch for python contributed by ClΓ©ment Pit-Claudel (merci!), as well as minor optimizations - see changelog.
- Ported all of the latest missing element implementations to Ruby
- Ported the latest document element lookup implementation to Ruby
April 14, 2019
- Ported the latest section, element and value element base implementations to Ruby
- Various smaller optimizations and refactoring in the enolib javascript and python implementations
April 10, 2019
- Ported the latest text reporter implementation to Ruby, fixed various other port issues
April 7, 2019
- Ported the latest error reporter base implementation to Ruby
April 6, 2019
- Ported the second half of the parser code, copy resolution, parsing error builders and error selection helpers to Ruby
- Released enolib 0.4.2 with minor fixes and optimizations - see changelog.
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
- More work on getting enolib for python release-ready - well over 50% of the specs are passing as of now and everything's looking good for an early april release!
- Released enolib 0.3.5 for javascript with a minor bugfix and optimizations - see changelog.
March 29, 2019
- Released enolib 0.3.4 for javascript with a multitude of fixes and minor optimizations - see changelog.
- Ported the enolib copy resolver implementation to python and decimated a few hundred port issues all over the codebase - roughly a fifth of the spec suite passes now.
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
- Ported enolib's loader registering and new reporter base implementation to python.
- Added missing documentation for AST inspection in enolib and an FAQ page on direct object serialization (thanks zaiste for the feedback!)
March 23, 2019
- Ported enolib's latest lookup implementation to python.
- Released enolib 0.3.3 for javascript with various lookup and detail fixes - see changelog.
- Implemented exhaustive generative lookup testing over full document ranges for enolib.
March 22, 2019
- Released enotype 0.3.0 for javascript, php, python and ruby with the new IPv4 loader.
- Ported much of the element implementations in enolib to python
- Released enolib 0.3.2 for javascript with minor fixes - see changelog.
March 21, 2019
- Imlemented an IPv4 loader for enotype.
March 20, 2019
- Released enotype 0.2.0 for javascript, php, python and ruby with a new slug loader and new and extensive, generated documentation.
March 16, 2019
- Released enolib 0.3.1 with fixes for index lookup edge cases, also this version is the first to ship with in-code JSDoc documentation, although not complete yet.
- Added implementation details for template namespaces to the specification documents
- Bugfixes for the interactive eno and enolib demos on the website
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
- Lots of new content and restructuring on the website π
March 10, 2019
- Released enolib 0.3.0 which solves an important architectural blocker around touching behavior for copied element hierarchies (changelog).
- Writing documentation, restructuring content and cleaning up the new website.
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!
- Updated benchmarks for the enolib javascript implementation are now available, including test runs that include full document validation and querying.
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
- Full day of detail work on the updated prerelease library element touching behavior and internal implementation.
February 18, 2019
- Published an RFC for excluding fieldsets from section deep merging
- Deep refactoring of javascript prerelease library error generator code, cutting down validation errors by a few hundred lines of code
- Adaptation and extension of the cross-platform error specs for the upcoming prerelease libraries
February 17, 2019
- Revised the associated comments RFC with detailed and updated specification details on whitespace processing
- Implemented the above mentioned whitespace processing rules for the (yet unreleased) javascript prerelease library, plus some object oriented code refactoring
- Optimization work on the javascript prerelease library syntax tree model, achieving significant parser performance gains through on-demand document traversal branch instantiation
February 16, 2019
- Released enophp 0.1.3 with a critical fix for block value construction
- Full-time work on getting the new eno prerelease libraries ready for action
February 15, 2019
February 14, 2019
- A long day of cleanup work after the recent sprint
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
- Finished adaptions for feature-complete final specification support in enojs (a first prerelease will be published soon!) π
February 3, 2019
- Continuing work towards upcoming library prereleases with final specification support
February 2, 2019
January 26, 2019
January 19, 2019
January 16, 2019
January 14, 2019
- Released a completely reengineered language grammar for prism-eno alongside One Dark/Light theme adaptations customized for eno, this is now used on eno-lang.org for all pre-rendered code and notation examples
January 13, 2019
- Published fully updated benchmarks with all the lastest libraries and an extended set of python benchmarks π
- Added a last blog update badge to the index page, plus a fresh color coat
January 12, 2019
- Released vscode-eno 0.2.0 with improved grammar and syntax scope/coloring interplay
January 10, 2019
- Research and progress for the upcoming vscode-eno update
January 6, 2019
- Released sublime-eno 0.2.0 with an improved grammar and sublime default theme customizations for eno
- Released language-eno 0.4.1 with small grammar optimizations and an added screenshot in the readme
January 4, 2019
- Refactoring of website internals to facilitate upcoming features
- Re-evaluated the ruby benchmarks with latest libraries
January 3, 2019
- Upgraded the blog from a generic markup page to a dedicated page generated with semantic data as a prerequisite for further website changes
- Refactoring of website internals to facilitate upcoming features
- Added fieldset reference examples to the language demos
- Mixed patterns spec improvements and corrections for enojs and enorb
January 2, 2019
- Released enophp 0.1.2 with pattern matching core patches and improvements
- Released language-eno 0.4.0 with redesigned custom highlighting based on syntax theme variables and an improved grammar
January 1, 2019
- Work on the upcoming enophp stability release
December 31, 2018
December 30, 2018
- Began porting recent library patches and extending specs for enophp
- Iterative work on refining syntax scopes and matching rules for the atom/sublime eno grammars, including color scheme adaptions
December 25, 2018
- Released enopy 0.9.2 with patches to the grammar matching core
- Ported enojs' extensive grammar matching test suite to enopy as well
- Released language-eno 0.3.4 removing a faulty stray asterisk from a syntax matching rule
- Packaged the completed ace editor eno extension and integrated it on the website π
December 23, 2018
- The language demos now utitilize the freshly finished eno support for Ace editor - enjoy full syntax highlighting inside the in-browser editor!
- Released enorb 0.10.3 with patches and improvements to the grammar matching core
- Released enojs 0.17.2 with an edge case block pattern fix and some escape matching pattern hardening
December 22, 2018
-
Deployed the shiny new document inspector on the language demo page, this should provide great insight into the examples and an easy jumpstart to interactively explore how eno documents work - browse away and enjoy the magic! π§
-
Released enojs 0.17.0 π’
This release introduces a dependency-injection based reporter architecture, which is a breaking change
in case you are specifying a custom reporter in your code - the changelog
provides instructions on what needs to be changed in that case.
The gain of this is the possibility for users to implement custom reporters, consistency with the other eno libraries (which all use
dependency injection for their reporters) and as a collateral bonus it resolves an issue when using parcel
to bundle up eno in a web stack.
-
Yet another enojs release (0.17.1) fixing an issue in the grammar matching core which can lead to a specific invalid line pair getting faultily tokenized instead of triggering an error. The patch will be ported to enophp, enopy and enorb in the next days, which also employ the flawed matching pattern.
-
More refactoring and maintenance on the website internals
December 21, 2018
- Added what if ... ? demos (Cargo.eno, package.eno, .gitlab-ci.eno) to the language demo page
- Began work on eno syntax highlighting support in Ace editor for usage on eno-lang.org - ace-eno π
- Some refactoring and maintenance on the website internals
December 15, 2018
- Implemented a better scaling responsive subnavigation in preparation for upcoming website additions
- There is now a page to interactively try out the language by itself (Thanks to Matt Lewis for his PR and feedback that got this started!)
December 14, 2018
December 11, 2018
- Fleshing out the enors error reporter implementation basis
- Optimizations for line classification in enojs, plus cleaning out stale code
December 9, 2018
- Development and studying for enors
December 8, 2018
- Research and adaptions in enors for the Rust 2018 edition
December 7, 2018
- Added the third RFC for the final eno specification to the eno language repository
- Released language-eno 0.3.3 for Atom which patches a discovered syntax highlighting irregularity.
December 5, 2018
- Adaptations on the frontpage to improve understandability of some of eno's concepts (based on insights from HN - thanks to all commenters!)
- Added the first two RFCs for the final eno specification to the eno language repository
- Arrived at a breakthrough for the first major blocker in the enors implementation π
December 4, 2018
- Research and studying on Rust specific issues for enors
December 2, 2018
- Quality time with and some package preparation tasks for enors
December 1, 2018
- Foundational development work on enors
November 30, 2018
- Development of enors (Rust) officially continues; a rough release schedule will be announced as soon as there is a basis to estimate from. Let's see if there'll be one more present under the christmas tree! π
November 8, 2018
November 5, 2018
- Progress on the ABNF eno specification document - many thanks go to nzen / Nicholas for the contribution!
November 4, 2018
- Major refactoring, cleanup and layout corrections on eno-lang.org
- Detail work and completion of the enophp documentation
- Many collateral corrections in the enojs/py/rb docs
- Implement dynamic loader signatures in enophp
- Wrap up enophp's parse implementation and add specs for it
November 3, 2018
- Initial rough work on the enophp documentation
- Major refactoring, cleanup and layout corrections on eno-lang.org
November 2, 2018
- Implemented all of enophp's built-in loaders and added the complete spec suite for them
- Added lookup call specs, extended section element specs and various bugfixes for enophp
November 1, 2018
- Added specs for all 43 enophp element type mismatch errors, wrapping up the full error spec suite
October 31, 2018
- Added a good third of the enophp validation error generator specs
- Various bugfixes around enophp's error generation
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!
- Completed all of enophp's element implementations
- Added complete specs for all element implementations in enophp
- Various fixes and tweaks throughout the enophp implementation
- Small update to the eno-lang.org api documentation format and generator
October 28, 2018
- Spent some time working on line continuations for the future second/final eno spec
- Completed enophp's EmptyElement implementation including full specs
- Implementation of all enophp validation error generators
- Finish Field implementation in enophp including complete specs
- Complete ListElement implementation in enophp
- Added typehints throughout the enophp codebase
October 27, 2018
- Implemented enophp's resolver component and all error generators
- Added construction/verification scaffolding for all enophp element implementations
- Added a full testsuite for both the resolver and all error generators in enophp
October 26, 2018
- Fully implemented enophp's analyzer component and all analysis error generators
- Added complete specs for all analysis error types in enophp
- Research and major refactoring to accomodate for php language idiosyncracies
October 24, 2018
- Completed the full enophp tokenizer implementation and testsuite
- Various critical bugfixes around enophp's reporter implementations
- Implemented all enophp tokenization error generators plus the complete testsuite
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.
- Heavily improved the still lacking snapshot testing feature basis for the enophp implementation and testsuite.
- Implemented 90% of the standard eno tokenizer testsuite for enophp, plus a handful of bugfixes and general cleanup work
- Added missing support for non-section "noop deep copy" operators for enophp's tokenizer
September 25, 2018
- enophp (in its early stage) received a quick PHP expert audit from Alexander Sulz - thanks!
September 9, 2018
- Implemented all exception types (Error, ParseError, ValidationError) for enophp.
September 2, 2018
- Implemented HTML & Terminal reporting, as well as most of the empty element implementation for enophp.
August 26, 2018
- Implemented base text reporting for enophp, plus some essential snapshot testing prerequisites.
August 22, 2018
- Multiple documented real usecase examples and a Q&A document added to the core repository.
August 19, 2018
August 18, 2018
- Released enorb 0.10.2 with fixes to ensure compatibility with the ruby 2.3 and 2.4 series (changelog) - thanks to Ralf Ebert for reporting the issues!
- Added info badges to the library documentation pages to indicate how the docs can be edited by everyone who'd like to contribute.
- Some work towards completing the eno ABNF specification document.
August 17, 2018
- eno was on the HN frontpage and gained important public exposure - I'd like to say thanks to everyone who helped spread the word, asked fantastic questions and all the encouragement, PRs and reports that followed in the wake! These were intense and important 48 hours, now the steady work on eno and the ecosystem continues.
August 15, 2018
August 13, 2018
- Released enorb 0.10.1 with a bugfix addressing an undefined element link for block lookups (changelog).
- Released enopy 0.9.1 with a bugfix addressing an undefined element link for block lookups, as well as yet unreleased optimizations (changelog).
August 9, 2018
- Released enojs 0.16.1 with a bugfix addressing an undefined element link for block lookups, as well as yet unreleased optimizations (changelog).
August 4, 2018
July 28, 2018
- Officially kicked off development for the rust library implementation - enors.
- Rebooted the eno core language repository as the central collection point for all specification documents.
- Authored a new terminology document, describing the entire terminology employed by the eno language.
- Some more rust implementation basic research.
July 27, 2018
- Some early research for the planned rust implementation.
July 26, 2018
July 25, 2018
- Did a first production study of one of the eno logo designs in blender.
July 24, 2018
- Added some light performance optimizations for structural validation in enojs and enopy.
- Spent a late hour sketching possible eno logo designs.
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.
- Updated the advanced language guide on the website to use the new fieldset terminology.
- Released eno-locales 0.8.0, adapting all error messages to the new terminology - see changelog.
- Released enorb 0.9.0 with the new message catalog, fieldset API methods and a shorter base error class name - see changelog.
- Released enopy 0.8.0 with the new message catalog and fieldset API methods - see changelog.
- Released enojs 0.15.0 with the new message catalog and fieldset API methods - see changelog.
July 20, 2018
- Released enopy 0.7.0 with stability contributions from Dan Haiduc and a name change for the base error class - see changelog.
July 18, 2018
- Published the color schemes repository, with further work on the color scheme meta format and a sublime generator.
- Research and experimentation on how to circumvent Atom's missing generic support for syntax-specific color scheme support.
July 17, 2018
- Started work on a themes project for unified eno syntax theme development for all editors, drafted an enokai theme.
July 15, 2018
July 14, 2018
- Lots and lots of small corrections and updates on the website (big thanks to Michael Schwanzer!).
- Released enopy 0.6.2 with string pseudo loaders, also enopy now maintains a changelog.
July 13, 2018
- Released the vscode-eno language support package for Visual Studio Code.
- Released enopy 0.6.1 with a new date loader and various loader corrections.
- Put on some fresh paint and updated the website color scheme, as well as new plugin pages with screenshots.
- Added a paragraph on language stability and the development plan to the language page.
July 11, 2018
- Released enorb 0.8.1 with a new date loader and corrections for the lat/lng loader.
- Adopted the new average ips based perfomance metrics for the enorb optimization tooling and did some housekeeping for the specs suite.
- Did some speculative research and experimentation on the possibility (or maybe rather, likelihood) of an eno Java library.
- Graduated enopy and enorb into regular release status due to coverage degree and acquired stability from fixes ported between all implementations.
- Major website update: New frontpage, structural changes, some new quick tour content for the language, mobile version layout improvements and fixes.
July 10, 2018
- Released enojs 0.14.1 with a new date loader and corrections for the lat/lng loader.
- Completely refactored all specs for the enorb loaders.
- Rebooted the enojs-exploaders package as purely experimental sidetrack to the now available core loaders (with a single new 'slug' loader for now).
July 9, 2018
- Released enorb 0.8.0 with the new core loader API and dynamic loader signatures, see the updated documentation.
- Released enojs 0.14.0 with the new core loader API, see the updated documentation.
- Released enopy 0.6.0 with the new core loader API, see the updated documentation.
- Updated the frontpage introduction video to showcase the new core loader API.
July 8, 2018
- Worked on the internal architecture for the upcoming new core loader APIs, allowing e.g. calls like
document.boolean('publish')
.
July 7, 2018
July 6, 2018
- Released enojs 0.13.1 with light optimizations, minor fixes and including the new commaSeparated core loader.
- Added remaining dependency resolution test coverage for enojs and cleaned up some older specs, global coverage is now up at 96%.
- Published a new eno introduction video on the frontpage.
- Released enorb 0.7.2 with optimizations for structural validation and the new CommaSeparated loader.
- Did some research and initial tests for getting branch coverage metrics in enorb.
- Released enopy 0.5.1 with the new comma_separated core loader.
July 5, 2018
- Released enopy 0.5.0, now also providing core loaders for important types out-of-the-box, including the new datetime loader. See the full documentation.
- Released enorb 0.7.1, which now also offers a datetime core loader.
- Implemented comma-separated value core loaders for all eno implementations
July 4, 2018
- Released enojs 0.13.0 and enorb 0.7.0, now providing core loaders for important types out-of-the-box! See the full documentation for enojs and enorb.
- The enojs core loaders now also include a datetime loader based on the formats described in https://www.w3.org/TR/NOTE-datetime.
- Resolved some potential bottlenecks around list insertions in the enopy implementation, introduced performance measurements based on average ips instead of total duration.
July 3, 2018
- Released enojs 0.12.0, enopy 0.4.0 and enorb 0.5.0, which implement eno's added language support for (new)line continuations on dictionary entries and list items.
- Added complete test coverage for enorb's tokenization as isolated snapshot tests.
- Released enorb 0.6.0 which also adopts the same regex-based tokenization logic used by enojs and enopy - no performance changes found but it fixes multiple issues.
- Released enopy 0.4.1 with fixes for older tokenization regressions.
July 2, 2018
- Released enopy 0.3.1 with a few fixes for section methods.
- Further extended the enopy test suite, bringing coverage up to 90%.
July 1, 2018
- Added more isolated tokenizer snapshot tests and element implementation tests for enojs, coverage now up at 95%.
- Released enojs 0.11.1 with some small fixes for older undiscovered range indexing glitches
- Added more isolated tokenizer snapshot tests for enopy, coverage now up at 87%.
- Released enopy 0.3.0 which adopts the unified regex grammar tokenizer architecture from enojs, resulting in 1-1.2x speed gains.
- Updated benchmarks with enopy 0.3.0 and ruamel.yaml 0.15.42, with the latter now explicitly using the libyaml based engine.
June 30, 2018
- Released enojs 0.11.0 with a new single-pass tokenizer and much lighter memory and allocation footprint
- Added more isolated tokenizer snapshot tests for enojs to ensure regression-safety.
- Re-run the benchmarks, enojs now performs 7x faster than the fastest yaml parser in the content heavy benchmark.
June 29, 2018
- Brought test coverage for enopy up to 83% with tons of tests added for error implementations, dependency resolution, reporters, and more.
- Graduated enopy from Alpha to Beta with release 0.2.10, which includes collected fixes from the last two days.
- Added the last missing validation error implementations for enorb, alongside specs - released with 0.4.8.
June 28, 2018
- Added unit tests for enopy's tokenization, analysis and resolution error implementations and the Dictionary element implementation, coverage is now up at 52%.
- Fixed a minor issue in enopy's duplicate dictionary entry error implementation.
- Added tons of unit tests to enojs (especially covering error implementations), test suite coverage is now up at 93%.
- Released enojs 0.10.6 with various big and small fixes from the last days.
- Updated the benchmark report with better visual scaling at the top ranking performance field, as well as added explanations.
- Added some test scenarios with wide effect for enorb's html and terminal reporters, catalog messages, as well as the dependency resolver, coverage now up at 93%.
- Released enorb 0.4.7 with a critical fix for the html reporter.
June 27, 2018
- Performance optimization release enorb 0.4.6, adressing post-opening block consumption and later allocation with 1.25x speed decreases-3x speed gains, updated benchmarks.
- Released enopy 0.2.8 with a fix for a regression in enopy tokenization, set up a tokenization snapshot test scenario for future prevention.
- Added comprehensive unit tests for enopy's
List
class, released yet another enopy patch release (0.2.9) addressing an older, undiscovered regression.
June 26, 2018
- Started collecting and evaluating test coverage for all eno implementations (currently 66% for enojs, 37% for enopy and 80% for enorb)
- Added some specs for enojs'
Value
class and a fix for a discovered regression.
- Officially graduated enorb from Alpha to Beta status due to coverage and observed stability during usage in the last week.
- Performance optimization release enopy 0.2.7, adressing post-opening block consumption and later allocation with 1-2.7x speed gains, updated benchmarks.
June 25, 2018
June 24, 2018
- An enorb-exploaders gem is now available as well (with the same featureset as its js/py siblings).
- Improved clarity for some first impression texts on the frontpage (thanks to Dan Haiduc for feedback!).
- New benchmark report at github.com/eno-lang/benchmarks with an additional scenario added that evaluates performance for content-heavy data.
June 23, 2018
- An experimental enopy loaders package is now available too (with the same featureset as its js sibling).
- Refactored the test structure for enopy, test coverage for enopy's
Value
class added, released 0.2.4 with small fixes.
June 22, 2018
- The website now has a dev blog and more contact options. γ½(^o^)γ
- Two enojs core error implementations (invalid/missing value) have been greatly overhauled and additional tests were added. (0.10.5)
- enojs now only bundles runtime files
- The interactive demos at eno-lang.org/demo now offer emulated, interactive python and ruby code examples as well
- The benchmark suite at github.com/eno-lang/benchmarks has been expanded from 2 to 5 scenarios, visual fidelity of the full report has been increased
- The experimental enojs loaders package now features
color
, json
and url
loaders.
June 21, 2018
- An extensive benchmark suite is now available at github.com/eno-lang/benchmarks, it evaluates eno library performance across all supported languages, also in relation to popular yaml and toml parsers