Thank you Stan! On Aug 4, 2015, at 3:07 PM, Stan Lagun <sla...@mirantis.com> wrote:
> Dmitry, this depends on how you're going to use yaql. yaql 1.0 has so called > legacy mode that is a layer on top of yaql that brings nearly full backward > compatibility including some of the things that were wrong in yaql 0.2. Use > this mode when backward compatibility is a must. Without it the following > changes may affect queries written for 0.2: > > 1. There are no more tuples. foo(a => b) will mean now f(a='b') instead of > foo(tuple('a', 'b')) as it was in yaql 0.2. However dict(key1 => value1, key2 > => value2) and several other functions with the same syntax work exactly how > they used to work in 0.2 > 2. Contradictory to the first point there are no more lists. Yaql works on > immutable structures (tuple, frozenset and yaql1 own FrozenDict). All > operations that seem to modify data in fact return modified copies. All input > data will be automatically converted to their immutable versions and > converted back upon completion. This has 2 side effects: a) if you have > custom yaql functions they should follow the same pattern b) even if your > input data were build from tuples etc output will still use lists (e.g. JSON > format) > 3. $dict.key will raise KeyError for missing keys instead of returning None. > Also key must be a valid keyword and cannot start with 2 underscores. There > are many other ways to retrieve dictionary value: $dict.get(value), > $dict.get(value, default), $dict[value], $dict[value, default] > 4. In yaql 0.2 every function could be called as a method. So $x.foo() was > the same as foo($x). In yaql 1.0 it is up to function to decide if it wants > to be a function (foo($x), method ($x.foo()) or extension method (both > syntax). Considering that yaql handles different function overloads > $x.foo() may be a valid expression and execute something completely different > from foo($x). > Most of type-specific functions are declared as a methods. So you no longer > can say toUpper(str) but only str.toUpper() > 5. yaql 0.2 had very few functions. yaql 1.0 has huge (~260 > functions/operators etc) standard library. However several of the 0.2 > functions now have different signature or name, replaced with better > alternative or just accept additional (optional) parameters > 6. $collection[$ > 0] doesn't work anymore. Use $collection.select($ > 0) for > that > > > > Sincerely yours, > Stan Lagun > Principal Software Engineer @ Mirantis > > > On Tue, Aug 4, 2015 at 9:57 PM, Dmitri Zimine <dzim...@stackstorm.com> wrote: > This is great news Alex, was looking forward to it, will be happy to migrate > Mistral. > > Some heads-up on what syntactically changed would be much appreciated to pass > on to our users; > we likely will catch much of them with Mistral tests, but some may bubble up. > > DZ. > > On Jul 27, 2015, at 2:04 AM, Alexander Tivelkov <ativel...@mirantis.com> > wrote: > > > Hi folks, > > > > We are finally ready to release the 1.0.0 version of YAQL. It is a > > huge milestone: the language finally looks the way we initially wanted > > it to look. The engine got completely rewritten, tons of new > > capabilities have been added. Here is a brief (and incomplete) list of > > new features and improvements: > > > > * Support for kwargs and keyword-only args (Py3) > > * Optional function arguments > > * Smart algorithm to find matching function overload without side effects > > * Ability to organize functions into layers > > * Configurable list of operators (left/right associative binary, > > prefix/suffix unary with precedence) > > * No global variables. There can be more than one parser with > > different set of operators simultaneously > > * List literals ([a, b]) > > * Dictionary literals ({ a => b}) > > * Handling of escape characters in string literals > > * Verbatim strings (`...`) and double-quotes ("...") > > * =~ and !~ operators in default configuration (similar to Perl) > > * -> operator to pass context > > * Alternate operator names (for example '*equal' instead of '#operator_=') > > so that it will be possible to have different symbol for particular > > operator > > without breaking standard library that expects operator to have well > > known names > > * Set operations > > * Support for lists and dictionaries as a dictionary keys and set elements > > * New framework to decorate functions > > * Ability to distinguish between functions and methods > > * Switchable naming conventions > > * Unicode support > > * Execution options available to all invoked functions > > * Iterators limitation > > * Ability to limit memory consumption > > * Can work with custom context classes > > * It is possible to extend both parser and set of expression classes > > on user-side > > * It is possible to create user-defined types (also can be used for > > dependency injection) > > * Legacy yaql 0.2.x backward compatibility mode > > * Comprehensive standard library of functions > > * High unit test coverage > > * Delegate and lambda support, including higher order lambdas > > > > etc, etc. > > > > So, this is a big change. > > > > And as it always happens when moving from 0.something to 1.x the > > breaking changes are inevitable. We have included the "backwards > > compatibility mode", but it may not address all the possible concerns. > > > > So. > > We have released a release candidate 1 of yaql 1.0.0 on pypi: [1] > > It includes all the new functionality and is likely to be identical to > > final release (that's why it is RC after all) and we strongly > > encourage all the yaql users (Murano and Mistral first of all) to try > > it and prepare "migration patches" to use it. When the final release > > is out, we'll update the global requirements to yaql >= 1.0.0, which > > is likely to break all your gate checks unless you quickly land a > > migrating patch. > > > > Please email us any concerns or contact me (ativelkov) or Stan Lagun > > (slagun) directly in IRC (#murano) if you need some quick help on yaql > > 1.0 or migrating from 0.2.x > > > > Happy yaqling! > > > > > > [1] https://pypi.python.org/pypi/yaql/1.0.0.0rc1 > > > > > > -- > > Regards, > > Alexander Tivelkov > > > > __________________________________________________________________________ > > OpenStack Development Mailing List (not for usage questions) > > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev