The EL on GitHub needs the EIFGENs removed from the repo. It's painful! :-)
this was an accident that happened several weeks ago, and has since been corrected. But I double checked in the local and remote copy, and it is still ok.
But thanks for the heads up
regards
FinnianBy being forever locked in to 16.05 means that you not only miss all the improvements since then, but anything that is coming.
The EL on GitHub needs the EIFGENs removed from the repo. It's painful! :-)
Finnian—You are quite welcome!
- It appeared that all of the EL_REFLECTED_* classes needed to be creation constrained to "create default_create end", but several of the descendant classes are based on Generics whose class is deferred, which has no creation procedure (obviously)—so it fails.
This reminds me of one very useful class EL_OBJECT_FACTORY [G] that I wonder if it will present problems implementing as void safe code. A typical routine is
instance_from_alias (a_alias: READABLE_STRING_GENERAL; initialize: PROCEDURE [G]): G
which creates an instance from some alias using {REFLECTOR}.new_instance_of and then initializes it with initialize
- There are a number of classes built around KI_CHARACTER_INPUT_STREAM and KI_CHARACTER_OUTPUT_STREAM,
- where even though the target argument conforms perfectly with the sent object type, the compiler still complains. That's a head scratcher to me. So—in each case, I commented the offending line out and wrapped it in a "check broken_code: False then ... end" so that it would fail if executed.
I think that all of these are appearing because the compiler is being put into Void Safe mode (transitional in this case) and suddenly a bunch of hitherto-unknown conformance issues are cropping up because now the compiler can see them and complain (rightfully so).
All this leads me to believe that the Void Safety process is working because it is revealing possible type conformance bugs in just the EL_base library. Lord only knows what lies beyond.
This is precisely why this very fine library needs to be brought kicking-and-screaming into 19.05 and beyond so all of the bugs the compiler can reveal will be revealed and dealt with.
ALSO—I noted that you have no testing target or ECF with which to exercise the code and prove that the bugs have been beaten out in these revealed areas.
Testing targets are mostly to be found under project test/test.ecf which has about 40 or so test sets. Some of them may need some
maintenance to make them 100% passing.
The reason I keep them there and not in the respective library is
because I can use external classes to help with the testing that are
outside the target library. Also I like the idea
of having a "testing central" where I can browse all the source code in one place.
That's not a good thing. I understand it seems like building test code is an "overhead", but at the end of the day, this seems to be a classic case study of "here-is-why-we-test".
I certainly agree. To develop a class like EL_ZSTRING, would be impossible with a comprehensive set of tests.
But sometimes I opt for a just doing simple regression tests,
either in test.ecf or some example project such as manage-mp3.ecf.
It has
about a dozen CRC-32 regression tests that are manually set by
inspecting outputs. I was able to make substantial
changes to classes related to EL_PATH and then use regressions to
give a reasonable assurance that nothing was broken. Maybe it's a lazy
way to do things compared with having a
proper test suites, but it does save time.
Please don't take this as super-critical of your work! NOT AT ALL! You've built a very fine library and I'd love to see it keep up with the rest of the libraries (like GOBO et al)!!!
OH YES—I did note that to get around conflicts with the most recent GOBO, you've done the only thing you can given the state of EL—you made a copy of the last compatible and working version of GOBO that doesn't break EL.
One of my chores today was to remove those library-copy-dependencies and switch over to the most recent version of GOBO. There ended up being no issues from the EL point of view except a few Void Safe matters that were quickly handled.
All-in-all—I think you or someone on your team ought to be the one to ultimately tackle this.
WHAT-I-CAN-DO—I have this work in a place where I can create a GitHub project for it (e.g. Eiffel-Loop-safe) and then place my code where it is right now (broken and all) and make it available to you to view and tinker with to see what you think.
I was thinking to set up a new project under my github.com account and give you whatever permissions you need to contribute
https://github.com/finnianr/Eiffel-Loop
https://github.com/finnianr/Eiffel-Loop-VS
Please let me know if you'd like me to do that. I don't want to muddy the repo-waters too much and have folks trying to download copies of this still very broken version of EL_base.
I can always put a notice in the readme.md something like
Experimental and transitional repository for void-safe Eiffel-Loop on ES 19.05
For production code use Eiffel-Loop with EiffelStudio 16.05
Thank you Larry for your contributions
Finnian
Below are some examples. I am not saying these are the right choices to make, but they are the ones I made given the compiler errors.
The compiler complained about line #30 not having a Generic Parameter. I think this is now being picked up because of Void Safety and the compiler is doing a more comprehensive type checking and conformance checking job?
There were a ton of the following. In 19.05, we can no longer lazy-set features like "count".
My God, assigning a value to an attribute is now considered lazy !!!
We must either use the "set_item" call or create an assigner, yes? In this case, the compiler was complaining that "count" as a target could not be directly assigned.
There were several instances where features were referenced in "redefinitions", but did not in fact exist! Again—I think with Void Safety turned on, the compiler is smarter at catching such things.
This is a case where the feature "owner" just does not exist at all! Once again—having the code looked at in 19.05 with Void Safety set to Transitional seems to have revealed this, which is another very serious error!
in ES 16.05 owner exists in class MUTEX
feature -- Access owner: like current_thread_id -- Debugging facility to know the THREAD owning Current. The `owner' field might be invalid -- when Current is used with a condition variable.I think what happened here is that the feature once did exist in an ancestor, and then at a later stage I made the feature deferred, but 16.05 considers a redefinition of a deferred feature as harmless.
The following code has two issues:
I am looking at routine item and wondering what on earth is going on because it looks nothing like the code I have
feature -- Access item alias "[]", at alias "@" (i: INTEGER): CHARACTER_32 assign put -- Unicode character at position `i' local c: CHARACTER do c := internal_item (i) if c = Unencoded_character then Result := unencoded_item (i) else Result := codec.as_unicode_character (c) end end
Has github got screwed up or something. I will need to check out a copy of the repository to check.
In the case of prepend_integer etc, they did not exist
in STRING_GENERAL in 16.05
First—the compiler picked up on the fact that the descendant class did not in fact implement these deferred features (above with the "+").
Second—the missing "then" on the "ensure" is just very odd. I have to wonder why the 16.05 compiler is not picking this one up!
Next is another very bizarre error—the compiler picked up on a repeated inheritance issue between "debug_output" and "to_string". The changed code is most likely incorrect and it is the "to_string" that is desired in repeated inheritance. I did not look back to the parent ancestors to discover the reasoning, all I did was "pick-one" to satisfy the compiler.
The idea I work from is to wrap such "questionable choices" in "check False then ... end" code so that it breaks and then write a test to reveal the broken code so it is not forgotten. This is why I complained about not seeing a test target where I could write just such a test to ensure the bug or change is revealed and corrected.
That's the highlights. I think I will stop now as I am out of my depth at this point. Perhaps some of this will make sense to you!
I am a bit alarmed by the source for item. Where did this come from?
regards
Finnian