Re: Wishlist
- Posted by Irv Mullins <irvm at ellijay.com> Jun 27, 2001
- 528 views
On Monday 25 June 2001 13:37, kbochert at ix.netcom.com wrote: > MY WISHLIST: > > 1-- Variable initialization: > integer x = 5 > ... > function foo () > sequence s = "" > ... Yes, no doubt about it. I continually get messages such as: test.exu:3780 variable s has not been assigned a value --> see ex.err because I declared, but forgot to initialize, s. Were it possible to do this on the same line as the declaration, I might just remember. Also, it makes code clearer. > 2-- continue statement: > goes to start of for or while loop There are instances where this can simplify code, which otherwise would require deeper if... then nesting. A qualified yes from me. > 3-- Pass-by-reference: > procedure foo (reference p1) > ... > integer x > foo (&x) -- x may be changed Useful, but the wrong syntax, in my opinion. You have lost the type of p1, so it is in effect always treated as an object. No more automatic type checking. Perhaps better would be to use: procedure foo (integer x) .... blah... x +=1 then call it like this: foo (varying x) -- I know, it sounds too much like COBOL.:{ There's too much chance of forgetting the &, or including it accidentally, and having "unexpected results". Plus its meaning is not immediately obvious, and worst of all , it looks like C! However, this has been requested before, and Rob has not shown much interest it implementing it, which leads me to believe that something about the internal workings of Euphoria would make that operation either difficult, or wasteful of time or memory. (in other words, not a good tradeoff) > 4-- Enhanced '?' > If a sequence contains all ascii characters, output it as string. Amen. And use the same function in the debugger. > 5-- Enhanced standard library(s), possibly built-in > string functions > regular expressions > isAscii () etc. > containers Yep. These things already exist, thanks to all the contributors. It would just be a matter of organizing them a bit, documenting and stamping them all. Maybe Rob doesn't have time for all that. All volunteers take one step backward. > 6-- slicing shorthands: > seq[2..] => seq[2..length(seq)] > seq[i..-3] => seq[i..length(seq-3)] > seq = [2..] => seq = seq[2..length(seq)] > seq += "a" => seq = append (seq, "a") Also frequently suggested. Your version adds a possible syntax checking problem, in that seq[2..] could *easily* be a typo - you just forgot to finish the range. Therefore, I suggest using a character that isn't used for anything else - the tilde - to indicate "to end" or "from beginning", as in seq[2~] or seq[~14} -- seq[~] would be an error. Means the same to me, but it's really hard to confuse the tilde with two dots, or to type a tilde when you meant to type ..4. And as Carl pointed out, there is a definite problem with the seq += "a", a notation that confuses me anyway. It looks like a math function, maybe you want to add the ascii value of "a" to each atom in the sequence? 'append' may be wordy, but at least its meaning is clear. > 7-- File-local definitions should override globals Breaks too much code, unless you're talking about adding a 'local' keyword, as in 'local integer x', in which case I'm in favor of it. The question would then become, is global x still accessible? Seems not, at least not without a means of qualifying them, local.x = 12, or my:x = 12 (urk - ever seen perl? You need a keyboard which has a 'my' key) > 8-- Common utilities: > boolean > FALSE > TRUE > STDERR > STDIN > STDOUT Why not? If it weren't for the fact that just about everybody has already defined TRUE and FALSE in their code, this would be fine. Which still leaves me wondering why they weren't an integral part of Euphoria from the beginning? > 9-- function indexing > s = command_line()[2] Another one that may be difficult to implement, but there are sure a lot of places where such a thing would be helpful. year = date()[D_YEAR], for example. But this doesn't go far enough, IMHO. Here's the kind of code we really need a replacement for: sequence now now = date() now = now[2] & now[3] & now[1]+1900 All that just to get the Month, Day and Year! Sheesh.... how about: now = date(M,D,Y) where M,D, and Y have a special meaning within function date() independent of any M, D or Y we may have declared in our programs? > 10- Namespaces > include get.e as G > x = G:get () Enought has been said about this one. > 11- pathlists > command line and/or .cfg file gives search paths > for include files like: ".;c:\mylibs" > SO that executing 'exw prog args' would cause Euphoria to > check 'prog.cfg' for pssible include paths. OK. That hasn't been a problem for me, but perhaps it has for others. > 12- flags > command line and/or .cfg file gives flags > exw test warn=3 -- run and set 'warn' to 3 > test.cfg: > warn = 6 -- default 'warn' > srcpth = ".;c:\temp" > ... > 13- def > replaces function or procedure Don't like this. There are very good reasons for having functions and procedures as entirely separate beasts. def is not definitive enough for me. > 14- structures > a sequence with named and typed indexes. > struct X { > integer a, > sequence b > } > struct X a => sequence a a = {0,""} > a.b = "?" => a[2] = "?" > s = append(s, X) => s= append(s,{0,""}) Apparently un-doable with Euphoria as it stands. As far as I have been able to determine, there's no way to retain the type of a member of a sequence. So type checking items within a sequence wouldn't be possible. That still leaves the pressing need for a convenient way to REFER to members of a sequence, as you mention above. > 15- Block comments Yes, but let's improve on that: Here's what I find myself doing. -- I write several lines of text, either a disclaimer, copyright, or such, -- to appear as comments. Later I need to put this same text into -- a window, or display it on the screen.. In its form as comments, I can't do that. I have to write it all over again, using "quotes, line feeds, \ttabs, and continuation characters to assign \n" & " the text to a variable. \n\n" Now, this is not a big thing, but why not simply have a command (the keyword is up for discussion) which in effect says: Euphoria, everything from this point on until the end command is to be treated like the <pre> </pre> tags in html - a preformatted piece of text. Assign it to the variable specified, and move on - there's noting to see here..... Example: pretext disclaimer = This program is copyright 2001 by Irv Mullins <irvm at ellijay.com> who bears no responsibility for its use. If your hair falls out, your cat gets pregnant, or your kids get poison ivy, it's not my fault. So there! end pretext Everything, including the leading spaces and linefeeds, gets copied as is into the variable 'disclaimer', to be used where necessary. It's put in once instead of twice, and in more readable form, to boot. > 16- Exceptions > throw () causes returns until caught > much like Java 'unchecked' exceptions. > > function x () > throw (type, arg) > ... > function y () > ... > return 0 > catch (type) > ... > end Such a thing is needed. Maybe there is an even better way? > 17- Automatic 'Result' > Have each function automatically declare the object 'Result' > which is returned by default. (Much like Eiffel). > Then the following is legal > function pi () > Result = 3.14 > end function I'm not sure I understand the advantage this has over simply putting 'return 3.14' as the final line in the function. Please elaborate. Regards, Irv