Detecting the Eu version

new topic     » topic index » view thread      » older message » newer message

Hi all,

recently Derek and Pete (L) posted here some useful code, that allows
a program to detect the current Eu version at runtime. I think it is
especially helpful to use such a functionality in libraries, that
require at least a particular Eu version.

Concerning Eu 2.5, it can look like this:
include machine.e
if routine_id("crash_routine") = -1 then       -- crash_routine() was
   puts(1, "Euphoria 2.5 or later required."   -- introduced in v2.5
         & "\n\nPress Enter ...")
   if getc(0) then end if
   abort(1)
end if

-- In the following some code is used, that will not run on Eu versions
-- prior to 2.5.
sequence s
s = "Hello World?"
s[$] = '!'
puts(1, s)
if getc(0) then end if


Running the above program on Eu versions prior to 2.5, the program will
not crash, but will show the user-defined message, as intended. OK.


The issue I'd like to discuss now is, that I think this might not work
with future Eu versions. Say in Eu 2.6 there will be a new procedure
called new_26_proc(). Then the same approach as above would look
something like this:

if routine_id("new_26_proc") = -1 then
   puts(1, "Euphoria 2.6 or later required."
         & "\n\nPress Enter ...")
   if getc(0) then end if
   abort(1)
end if

new_26_proc()    -- ... or any other code, that will not
                 -- run on Eu versions prior to 2.6.


Using Eu 2.6 or later, the program will work anyway. Using Eu 2.4 or
earlier, the program will show the user-defined message, as intended.

But using Eu 2.5, the program will crash. ATM I don't see any way how
a crash could be prevented in this case. That means when we have say Eu
3.0, version checks at run-time will not work with all versions from 2.5
to 2.9, if the program contains any code that was introduced in a later
Eu version.

Is this true, or are there logical errors in my considerations? If it's
true, I believe even a built-in version() function can't solve the
problem, because such a function will act at run-time rather than at
compile-time, right?
If there is any way to solve this problem, it should be done now in v2.5,
so that there will be no "gap" in detecting the Eu version.

Regards,
   Juergen

-- 
Have you read a good program lately?

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu