RE: Eu 2.5 suggestions(very useful)
- Posted by Philip Deets <philip1987 at hotmail.com> Feb 15, 2004
- 507 views
CoJaBo wrote: > > > Please tell me what you think. > > CoJaBo wrote: > > I think the other one got lost somewere...Anyway: > Eu 2.5 suggestions(very useful) > Some of the following is missing from Euphoria and would be very > helpful to me and many other programmers. I would like to see this in > Eu 2.5. Please take these into consideration. > > > "eval()" commands: > I would really like to see a way to do an "eval()" type command. > Many other languages have something like this. > Since "dynamic includeing" won't work in eu 2.5 or bounnd programs, > this is a very important feature. > > eval(sequence eval_commands,integer global_type,integer crash) > eval_commands is a sequence of commands > global_type is: > 0-No routines/varibles (even global) exist in main program > 1-Only routines/varibles declared as global exist in main program > 2-All routines/varibles exist in main program > This would help in some programs. > > if crash is true, if it encounters an error (like 1/0) than the > program dies with (or a crash routine, see below) ex.err, otherwise, it > returns an error > code like below > > > Example: > integer a,global_type > sequence eval_commands > > eval_commands=" > include incl_file.e--should allow including(This could be used \n > --instead of complex "dynamic includeing" libraries), \n > --and shouldn't insert the include file here when binding \n > if a then \n > ?a \n > end if \n" > --It would also be helpful to be able to split strings across multiple > lines. > --new lines would be ignored, so still use '\n'. > --So: > --"line 1\n > --line 2" > --would be the same as > --"line 1\nline 2" > > a=7 > global_type=1 > > ?eval(eval_commands,global_type,0) > Displays: > 7(value of a) > 0(eval encountered no errors or an error code) > Couldn't someone work on a library to convert Eu routines to C then to ASM then to machine code to poke into memory? Then the programmer could use call() to run the routines. Maybe a library like this could accomplish the same effect without a change in the language. Watcom is open source now, maybe someone could use the Eu to C translator, then a euphoria version of Watcom to convert the C to ASM, then write there own assembler. I might take this up as a personal project. > ____________________________________________________________ > Crash callback > A way to setup a callback function would allow programs to save user > data before exiting > with ex.err. Programs like Win32Lib IDE, and webservers almost > require this. > > set_crash(integer routine_id) > routine_id is the routine id of the function > it calls the function with an error code(like 5 for divide by 0), > a sequence with info about the error(like a line #, invalid subscript, > ect.) > and a text string with the complete text error message( > "test.ex:3 > attempt to divide by 0") > > if the function returns -1, ignore the error > > Example: > function oncrash(integer err_code,sequence info,sequence msg) > if err_code=34 then--this error can be ignored in this program > return -1 > end if > save_all_important_data() > return 0 > end function > set_crash(routine_id("oncrash")) I have never found a need for this, but some might. > > _________________________________________________ > > Threads in Eu 2.5? > I think threads are needed in Euphoria. The example below would be > fairly easy to use. > Many programs would benifit from this. > procedure new_thread(integer routine_id,sequence params,int priority) > new_thread() starts the thread and returns imediatly. > > routine_id is the routine id for the procedure to run > > params is "params must be a sequence of argument values of length n, > where n is the number of arguments required by the procedure. > If the procedure does not take any arguments then params should be {}." > (copied from manual: call_proc) > > priority is somthing like HIGH, LOW, NORMAL, ABOVENORMAL, ect > > > procedure a() > integer t > t=time() > for z=1 to 1000000+i do > --do something that takes a lot of time here > end for > ?time()-t --a fairly high number > end procedure > > procedure b(integer i) > integer t > t=time() > for z=1 to 1000000+i do > --do something that takes a lot of time here > end for > ?time()-t --a fairly high number > end procedure > > integer tt > tt=time() > new_thread(routine_id("a"),{},ABOVENORMAL) > new_thread(routine_id("b"),{rand(10)},LOW) > ?time()-tt --would display a number near 0 because new_thread() returns > > > imediatly > This would be useful maybe for doing background things such a syntax checking in editors, while not causing a delay in showing a letter when a key is pressed. I think this addition would probably be benificial. > > > __________________________________________________ > > I would like to be able to set the value of a variable like this: > integer > some_extremly_long_variable_name=82,another_extremly_long_variable_name=45 > > > Instead of: > integer > some_extremly_long_variable_name,another_extremly_long_variable_name > some_extremly_long_variable_name=82 > another_extremly_long_variable_name=45 > > This would be much easeyer, especilly with long variable names. > This is already used in constants, so why not with regular variables? I don't like this idea. I know I'm one of the few though. And, I must admit, I don't have any good reason for disliking it. > __________________________________________________ > > Again, PLEASE take these into consideration! > > Tell me what you think. > Just my thoughts, Phil