1. euFAQ request for comment
- Posted by Ray Smith <smithr at ix.net.au> Apr 09, 2002
- 368 views
Hi, I have "started" getting a FAQ ready for Euphoria and was hoping a few people can check out my initial few Questions/Answers. To have a preview look at: http://rays-web.com/test/eufaq.htm I'm just after some global type comments at this stage. Note: The rest of my site isn't ready yet so don't be surprised to see very little else by following any links! :) Thanks, Ray Smith http://rays-web.com
2. Re: euFAQ request for comment
- Posted by Kat <gertie at PELL.NET> Apr 09, 2002
- 375 views
On 10 Apr 2002, at 2:12, Ray Smith wrote: > > Hi, > > I have "started" getting a FAQ ready for Euphoria and was hoping a > few people can check out my initial few Questions/Answers. > > To have a preview look at: > > http://rays-web.com/test/eufaq.htm > > I'm just after some global type comments at this stage. /me hands Ray a Round Tuit so he can spell-check the page asap! Kat
3. Re: euFAQ request for comment
- Posted by euman at bellsouth.net Apr 10, 2002
- 366 views
Ray, looking good! I stopped in for a minute but I cant think of anything you left out. Euman euman at bellsouth.net ...if the US Government were ever to get really serious about Internet security, the top players in Microsoft's management hierarchy would find themselves handcuffed, blindfolded, led onto a tarmac within some obscure Air Force base, and shot. -- Thomas C Greene (http://www.theregister.co.uk/content/55/23223.html) -- Kat will like this one! ----- Original Message ----- From: "Chris Bensler" <bensler at mail.com> To: "EUforum" <EUforum at topica.com> Sent: Wednesday, April 10, 2002 2:41 AM Subject: RE: euFAQ request for comment > > > Ray Smith wrote: > > Hi, > > > > I have "started" getting a FAQ ready for Euphoria and was hoping a > > few people can check out my initial few Questions/Answers. > > > > To have a preview look at: > > > > http://rays-web.com/test/eufaq.htm > > > > I'm just after some global type comments at this stage. > > > > Note: The rest of my site isn't ready yet so don't be surprised to > > see very little else by following any links! :) > > > > Thanks, > > > > Ray Smith > > http://rays-web.com > > > > Looking Good Ray, > > I think that you should point out that those are your opinions. In > particular 1.7. Everyone will have a different opinion of what features > are prevelant and which are missing. > > I don't agree that EU lacks OOP. It lacks native OOP support, but > there are quite a few good OOP libraries in the archives. Same for DB > support, but I don't even agree that it should be supported natively. > > I think cdecl_ DLL support should be in there, and COM support. > > > Chris > > > >
4. Re: euFAQ request for comment
- Posted by euman at bellsouth.net Apr 10, 2002
- 358 views
Matt its unfortunate that CDECL support doesnt work.... let me rephrase that, I cant get it to work so I doubt a newby will. although, I think my problem with your library is because my .dll is compiled as Diamond-API which may be totally different than a standard cdecl. Euman euman at bellsouth.net ...if the US Government were ever to get really serious about Internet security, the top players in Microsoft's management hierarchy would find themselves handcuffed, blindfolded, led onto a tarmac within some obscure Air Force base, and shot. -- Thomas C Greene (http://www.theregister.co.uk/content/55/23223.html) -- Kat will like this one! ----- Original Message ----- From: "Matthew Lewis" <matthewwalkerlewis at YAHOO.COM> To: "EUforum" <EUforum at topica.com> Sent: Wednesday, April 10, 2002 5:38 AM > > -----Original Message----- > > From: Chris Bensler [mailto:bensler at mail.com] > > > I think that you should point out that those are your opinions. In > > particular 1.7. Everyone will have a different opinion of > > what features > > are prevelant and which are missing. > > > > I don't agree that EU lacks OOP. It lacks native OOP support, but > > there are quite a few good OOP libraries in the archives. Same for DB > > support, but I don't even agree that it should be supported natively. > > > > I think cdecl_ DLL support should be in there, and COM support. > > Which are also supported through libraries in the archives. :) > > Matt Lewis
5. Re: euFAQ request for comment
- Posted by petelomax at blueyonder.co.uk Apr 11, 2002
- 372 views
On Wed, 10 Apr 2002 02:12:58 +0000, Ray Smith <smithr at ix.net.au> wrote: >I have "started" getting a FAQ ready for Euphoria and was hoping a >few people can check out my initial few Questions/Answers. What are the limitations of the free public domain edition? Tracing allows you to single-step through each line of code (starting at a particular line or when a specific condition is detected). The public domain version disables this feature once your program exceeds 300 statements. Profiling allows you to record the number of times each line of code is executed, or the percentage of time spent executing each line of code. You can then use this information to improve the performance of your program. In the public domain edition, this feature is completely disabled. Otherwise, the free public domain edition is fully functional with no time limitations. How do I search the archives? You can search for a particular application or library by visiting http://www.rapideuphoria.com/archive.htm and typing in search keywords, for example "mp3" lists three entries: an mp3 filename sorter, a wrapper for WinAmp, and a utility to add tags to mp3 files. You can search the archived message board for any topic discussed since 1998 by visiting http://www.rapideuphoria.com/listserv.htm and entering keywords for the topic to see what has been said about it in the past. Pete
6. Re: euFAQ request for comment
- Posted by petelomax at blueyonder.co.uk Apr 11, 2002
- 370 views
Oops, since 1996 I meant.
7. Re: euFAQ request for comment
- Posted by euman at bellsouth.net Apr 12, 2002
- 369 views
----- Original Message ----- From: "Ray Smith" <smithr at ix.net.au> To: "EUforum" <EUforum at topica.com> Subject: euFAQ request for comment > > Hi, > > I have "started" getting a FAQ ready for Euphoria and was hoping a > few people can check out my initial few Questions/Answers. Hi Ray I found this in some old stuff I have and thought you might find it to be of use in your FAQ . I did not write this and do not want any recognition. Introduction This article was written to provide a complete and comprehensive perspective on the programming language Euphoria, unlike most articles, which seem very ignorant towards most elegance of Euphoria. Euphoria is a 32-bit programming language currently available for both the win32 and the dos32 platform. It doesn't have many "bells and whistles", but has a very fanatic group of users. It has both a shareware version and a low-priced complete version. The only limitation of the shareware version is the 300-statement limit on extensive explanation when a run-time error occurs. Unfortunately most people take a look at Euphoria, and put it in the category "scripting languages" or maybe once in a while somebody actually tries it and then considers it to be a good alternative to basic. However, most people do not give Euphoria a good chance to prove itself nor do they think about its elegance at all. Placing Euphoria Euphoria is a third generation language; you have to tell it how to solve a programming problem. Although some programming languages claim to be of the fourth generation, they are usually not. Euphoria itself has only claimed to be a functional language. It does not claim to be object oriented but I have to disagree with that. It does not force you to program object-oriented nor does it have any specific syntax that would distinguish object-oriented code from procedural code. Yet, its scope rules and flexible data structures allow you to simulate any method of programming including object-oriented. Not because there are specific object-oriented statements, but because you can do a lot with a few statements in Euphoria. You could consider Euphoria to be more than object-oriented, because you have a lot of freedom of programming style. In my honest opinion, you have more freedom of programming style than you will have with any other language. That is indeed only because of the flexible and generic language definition. The only one to force a certain data structure is the programmer itself. Euphoria is a bit more system-specific than, for example, Java. Although the documentation clearly points out which routines are system dependent. Unlike all the other routines, misuse of these routines can, of course, cause a crash, which will usually be caught by the built-in memory extender or generate a protection fault in windows. Like Java, Euphoria is interpretive language, and does not need any compilation at all. It will therefore never crash, but always end your program with a clear message identifying what went wrong, why it went wrong and usually what you could do to fix it. However because of its interpretive nature, some errors are not caught before the code is executed, like a division by a zero valued constant, which some compilers do point out as an error during compilation. Unlike most interpreters, Euphoria is extremely fast, however this is due not only to its speed per statement, but also by the fewer statements you need to perform generic tasks. At first sight, Euphoria looks like a scripting language, an alternative to basic or another lisp clone. Those first sights are right, but not complete. Euphoria can be used as a scripting language, because of its interpretive nature and because you can have statements on the upper level. The 92 statements are very close to real English and Euphoria syntax does not include any weird acronyms or symbols, although at some places, technical or more common expressions are used. There is no need to add to the complex jargon of programming, and they didn't. It is a lot faster than basic, has generic routines, nice debugging features and is easy to install. Therefore it is a great teaching language, and allows novice programmers to try out lots of stuff, without confusing them too much. As for lisp, at some times Euphoria does appear to have stolen some of Lisp's nifty tricks. Nevertheless, most lisp clones are put in a shame by Euphoria's performance. In addition, it even simplified some of Lisp's childish and strange ways of handling things. Strings are handled, as a separate data type by Lisp, while Euphoria considers them to be sequences (a one-dimensional array) containing ASCII values, so there is no need for special string manipulation routines. You can use the standard manipulation methods you also use for any other sequence. Structure of a program Statements can be called, but always require the appropriate fixed number of arguments. Functions can be called, like statements, but have to assign or use the returned value. You are not allowed to discard the value, you have to at least assign it to something. You can use a dummy variable if you do wish to do so. This is so you, and anyone else seeing your code, will always be aware that you are discarding a value. Variables can be local to a routine, local to a file, or global. When you define a variable to be local to a routine, its memory will be released at the end of a routine call. There is no way to declare a variable static to a routine, but those declared local to a file are always static and their memory is not released until the interpreter can determine that they are no longer in use. Variables always have to be declared and initialized before they can be used, unlike certain other languages, i.e. BASIC, they are not quietly set to zero, you will always be able to see which variable a certain routine, or file is using. Routines can be declared local to a file or global. You can call a routine recursively, but for mutual-recursion, routine pointers are to be used. There are also a few built-in routines, but routines for graphics, mouse, sorting, and pattern matching are provided as include files. An 'include' file is just a normal Euphoria program, but all globally defined routines are exportable. If it contains top-level statements, they will be executed at the point where the file is included. A top-level statement can include other files, but not inside any statement block. There is thus no way to choose the file you wish to include at run-time. You can also declare a variable as a constant. The value can be calculated in real-time, but once the constant is declared the value is locked-in. You are not allowed to tell Euphoria of what type a certain constant is. The data type will be determined when you lock-in the value. Constants can only be declared local to a file or global. Because they can not be declared inside of routines, the interpreter still has the opportunity to put the values strait into your code, and thereby eliminating all overhead. Variables and data types Euphoria only knows two data types: the sequence, and the atom. An atom is numeric value that will automatically use more memory when its value no longer fits in the reserved memory. A sequence is a list of objects. If you don't want your value to be converted to a floating-point value, because you can't afford to loose any precision, you can limit this for a variable by declaring it as 'integer'. However, an integer in Euphoria can only contain 31-bit integer values. In addition, if you want, for example, a routine to be able to work with both sequences and atoms, you can declare the variable as an 'object'. That way, the variable can represent a sequence as well as an atom. Sequences can contain other sequences and atoms. It can be subscripted & sliced. Any calculation performed on a sequence will be performed on all of its elements. Any calculation with two sequences requires the sequences to be of the same length. It will then perform the calculation with the respective elements of each sequence. The result will be a sequence of the same length, containing the results of each individual calculation. This also occurs when you compare two sequences, or when you compare a sequence with an atom. Here is an example, which might make things more clear for you: Sequence 'foo' contains: 1, 2, 3, 4, 5, 6 'foo' adding 2 makes: 3, 4, 5, 6, 7, 8 'foo' adding 'foo' makes: 6, 8, 10, 12, 14, 16 'foo' < 10 evaluates: 1,1,0,0,0,0 Sequence 'bar' contains: 5,5,5 Slicing bar from 1 to 2 adding 3 makes bar: 8,8,5 The 2nd element of 'foo' adding bar makes foo: 1, { 10, 10, 7 }, 3, 4, 5, 6 Foo adding 4 makes foo: 5, {14, 14, 11 }, 7, 8, 9, 10 Characters are considered atoms, strings are considered sequences with atoms and arrays are considered sequences with sequences and eventually atoms. Sequences need not be pre-build like most languages do with arrays. They can however grow and shrink in real-time. You have built-in functions to append and 'prepend' elements to a sequence and you have the '&' operator to combine two sequences or a sequence and an atom. You can only slice and subscript variables, but not expressions like a function result or an evaluation. You would be discarding returned information, which is not allowed. It usually is illegal to slice or subscript a sequence out of its bounds. However there are certain cases where this is allowed, for example when you slice from the first element to last element minus 1, which would sometimes mean, slicing from '1' to '-1'. That expression would be legal. There are more cases like this where Euphoria shows off its elegance. But you have to take my word for it. Debugging First, we will discuss error prevention. Syntax errors are avoided by using straightforward English words. Even statement blocks begin with 'do' and end with 'end function/procedure/type/while/for'. Custom types can be used to avoid logical errors. Logical errors can usually be blamed at certain variables containing values that they are not supposed to have, which sometimes result in a logical- and sometimes in a run-time error. Types are one-argument-functions, which name you can use to declare a variable. Whenever the value of the variable changes the function is called and a type-check error will occur when that function returns false. You can use such a function to make sure that a certain variable contains at least a legal value if not the desired value. You can turn this type checking on and off at the top-level. If an error does occur, you will get a nice English message from Euphoria, and a file named 'EX.ERR' is generated which contains a list of all variables and their values in a friendly and readable format. If you had tracing on you will also find the last 25 lines traced by the interpreter. Both the file and the message will have a suggestion to fix the error if appropriate. You can also trace your program, lookup some values of variables, and see your program working step by step. You can turn tracing on and off through a statement, so you can determine at run-time if you want to go into trace mode. You could for example check a variable for that value that seems to generate some error and then activate the trace mode. You have to specify which sections you want to trace. Therefore, you do not have to step through code that already works. Those lines excluded in trace-mode will be executed without waiting for a key-press. It seems to me, that Euphoria's tracing capabilities are quite extensive and puts other tracers in a shame. The trace-mode even has syntax coloring! Platforms Currently, there are two platforms available: Win32 and Dos32. Both run in 32-bit protected mode and have access to all the computers memory: conventional, extended and virtual. The Dos32 platform will make its own swap-file for virtual memory if it is not running under Windows 95. The different platforms are provided within one package. It will contain only two executables. These are the interpreters for each platform. There are more tools available, but they are all provided as Euphoria source code and can be executed by either interpreter. You will find many example programs, a complete developing environment and some other useful tools. The Dos32 platform has platform-specific routines for manual allocation, de-allocation, poking, peeking and calling machine code. The Win32 platform has platform-specific routines for message-boxes, creating windows and calling DLL's. Thankfully, extensive libraries to do all the window-magic are already available. You really do not want to write a windows-based program by manually calling zillions of DLL functions. All programs not using platform-specific routines will work on both platforms. Platform specific routines will not generate an error on the other platform unless they are actually executed. You can lookup the platform by calling the platform function and choose which statement you want to execute based upon the value returned by the platform function. Distribution You can distribute your programs royalty-free in three ways. You can provide the source code and the public domain version of the interpreter. This is quite an efficient way if you have multiple programs. However, if you do not want people to see the source code, you could shroud your program. Shrouding will combine the main program file and all include files into one file. All keywords will be tokenized, all comments removed and all variables and local routine names will be renamed to short cryptic names. You can even optionally hide all the strings and have your code encrypted. In addition, if you only have one program to distribute, you could make an executable by binding it. Binding will combine the shrouded version of your program with the interpreter into one executable. Conclusion Any programming style is possible due to the flexibility of sequences. You could for example, program in a truly object oriented manner by keeping all the declarations within a file local except for one global function, named after the class. That function gets a message as argument, and uses handles for different instances. The instance-specific data of those instances can be looked up in a local sequence with the handle. Nevertheless, there are many more (practical) ways to program object oriented in Euphoria. Euphoria can serve as a great teaching language, hiding all the pointers and machine specific garbage, so you can concentrate on algorithms and programming styles. Euphoria is a great scripting language, because the syntax is almost completely English. You do not need to use any weird format. You are not forced to use routines. You do not need to compile. Euphoria is great for small programs. You can quickly make solid, safe code in Euphoria fast, that is easy maintainable and does not need extensive debugging and bug-checking before you can be certain it will work. Euphoria is great for big commercial programs. Those pieces that need the extra performance compiled languages give you, can be coded in machine code or put in a DLL. Your program will be developed fast, and there will be little time needed to catch all the bugs. Consider a bug-free program developed in one-fifth of the time it would take in C++. Not to mention all the time spent on getting those damn bugs out. I do not have to tell you how much money this can save a company. In addition, the company's name will be known for its solid programs. Your programs need not be followed by 200 bug-fixes later. Because Euphoria code is so generic, you can use your code repeatedly. The executable file will be relatively small. It will be almost impossible for someone to hack your program. And, as stated before, you can distribute your program royalty-free. Because of its simplicity and lack of numerous "bells and whistles", Euphoria is often dismissed by professional and amateur programmers. There are currently only a small number of users worldwide. That means there are relatively few people who can maintain your Euphoria code, something most clients do not appreciate. The only way this situation can change is for more people to begin using Euphoria. More information "The Official Euphoria Programming Page": http://members.aol.com/FilesEU "Pete's Euphoria Zone": http://www.harborside.com/home/x/xseal/euphoria/ "Irv's Euphoria Archive": http://www.mindspring.com/~mountains/ "The Euphoria Consortium": http://frontpage.cdc.net/blackdog/ "A beginners guide to Euphoria": http://www.geocities.com/SiliconValley/Vista/4346/ Author The article has been written by a 16 years Old Dutch Euphorian using some suggestions that Irv Mullins made. This article may be freely published in unchanged form. Although I would appreciate being notified first. Ralf Nieuwenhuijsen Nieuwen at xs4all.nl Euman euman at bellsouth.net ...if the US Government were ever to get really serious about Internet security, the top players in Microsoft's management hierarchy would find themselves handcuffed, blindfolded, led onto a tarmac within some obscure Air Force base, and shot. -- Thomas C Greene (http://www.theregister.co.uk/content/55/23223.html) -- Kat will like this one!