You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bummer, turns out that due to multiple branches of perl (e.g. even minor version for stable branch and odd for development branch), we cannot simply iterate %delta by sorted key (release version). For example, $delta{'5.017'} is data against 5.016, not against the latest 5.016 release (5.016003).
Because Module::CoreList::More's functions iterate %delta in a single pass (wrongly assuming it was a linear "linked list") they can give wrong result, for example:
Module::CoreList::More->is_core("Module::CoreList", 2.76, 5.017) # returns true, which is wrong
This is because, Module::CoreList was updated to 2.76 in perl 5.01602. Meanwhile, perl 5.17 still contains Module::CoreList 2.67. Because Module::CoreList::More iterates %delta by release version, it processes 5.017 after 5.01602 and 5.01603. When it should've processed 5.017 after 5.016.
To keep the performance advantage, one solution for this is, I think, is to create another data structure, e.g. %delta_sorted_by_release which contains the delta data sorted by release version. So we can still iterate the structure in a single pass. Also, if we do this, another optimization (early loop exit) also cannot be done because the assumption that module version monotonically increases as release version increases no longer holds (or to be exact, never holds anyway).
The text was updated successfully, but these errors were encountered:
Bummer, turns out that due to multiple branches of perl (e.g. even minor version for stable branch and odd for development branch), we cannot simply iterate %delta by sorted key (release version). For example, $delta{'5.017'} is data against 5.016, not against the latest 5.016 release (5.016003).
Because Module::CoreList::More's functions iterate %delta in a single pass (wrongly assuming it was a linear "linked list") they can give wrong result, for example:
but
This is because, Module::CoreList was updated to 2.76 in perl 5.01602. Meanwhile, perl 5.17 still contains Module::CoreList 2.67. Because Module::CoreList::More iterates %delta by release version, it processes 5.017 after 5.01602 and 5.01603. When it should've processed 5.017 after 5.016.
To keep the performance advantage, one solution for this is, I think, is to create another data structure, e.g. %delta_sorted_by_release which contains the delta data sorted by release version. So we can still iterate the structure in a single pass. Also, if we do this, another optimization (early loop exit) also cannot be done because the assumption that module version monotonically increases as release version increases no longer holds (or to be exact, never holds anyway).
The text was updated successfully, but these errors were encountered: