Talk:Euphoria (programming language)
This article is rated C-class on Wikipedia's content assessment scale. It is of interest to the following WikiProjects: | ||||||||||||||||||||||||||||
|
I'm sure this is a worthy subject, but claims like "easier to learn than BASIC" and "fastest interpreted language" are just advertising mumbo-jumbo. Sure, you want to have who designed it and what their goals were, but if I'm looking at an enecylopedia article about a programming language, I want to know who uses it and for what, what it looks like (maybe some sample code?), what actual features it has in plain English, and a link to their website if any.
Actually not just ad mumbo-jumbo, I believe those were specific design goals of the language...I'm having a bit of difficulty wording them objectively though. There are benchmarks and such, but I didn't want to get into technicalities. There's a link to the website at the bottom. If you want sample code, I can accomodate. :) Is it a bit better now?
Euphoria IS an excellent language that is relatively easy to learn, very flexable and seriously powerful. You can combine it's strongly type-checked high level features with any amount of embedded 32-bit machine code and API/Dll calls to make genuine applications in a fraction of the time required to write them in any other language that I am familiar with. The very simple data types that it was designed around can be polymorphed into any object or structure available elsewhere with ease, and the finished product will usually execute faster than anything short of pure ASM or very well written C. The main problem that Euphoria has always had is public relations one. The official website still bears the catch-cry of "Just say no to complicated programming languages". This is a philosophy that I applaude, but an advertizing blunder of biblical proportions that has relegated what is undoubtedly one of the best languages ever devised to the realms of the closet hobbiest. As a result it has barely been used for anything apart from pet hobby projects, and its own internal development. This is a real shame as virtually any commercial application on the market could have been developed in Euphoria in a fracton of the time and therefore a fraction of the cost of doing it in C++, delphi, python, PHP or whatever. It is also extremely reliable and unless you go messing around embedded or external ML will always trap it's own errors and clean up it's own mess. All this being said, until we can give it a face lift, Euphoria is mainly used by 2nd rate backyard programmers to write custom apps that keep track of the humidity in their dog's kennel.
Looks better to me anyway. We can also soon put this under euphoria (programming language) or perhaps euphoria (prog. language), because CliffordAdams has just come out with the latest version of UseMod. --LMS
However
[edit]This is actually a language goal. I also can guarantee you that it's easier to learn than basic.
I have used and participated in the development of this language (and external freeware libraries) for 10 years now, in this time I have never heard anyone say BASIC was easier to learn.
It may also be said that the language construct is simple, yes. But it's impossible to say write a core windows program without using pointers, so yes you use them all the time, and no, the language does not protect you from this. It's an impossibility.
That's a problem with the windows API really, because when I make a windows program in Euphoria, it's subject to exactly the same memory faults and errors as if I had made it in C, it just happens to be about 10 times faster to actually code.
"Not using pointers" etc is not actually a language construct is what I mean, intrinsically it doesn't matter if the language supports pointers or not, the reality is you use them regardless of the support. And just because the language doesn't support them, doesn't mean you get pointer errors because you allocated the memory with the Windows GlobalAlloc() command.
A pointer is really more NOT a language reference. It's just (usually) a 32-bit integer which points to a memory offset. Any language is capable of using this really, and no language can ever protect you from undesired results. HoCkster
I have to agree that Euphoria is easier to learn than BASIC, provided you intend to learn the entire language in each case (not just a subset).
More importantly, Euphoria has fewer built-in limitations (which you also have to learn about, but which are seldom documented :)
As far as speed is concerned, it's easy to prove for yourself that Euphoria is faster than most other interpreted languages in most instances. Of course it's often possible to craft a test which will show that any language X is the fastest for some task, if you choose that task carefully.
But what matters to me is that Euphoria is fast enough to use commercially, and no one asks me if I can "speed up" their applications. If I had to write everything in C (or C++, Delphi, COBOL, Fortran...) I would get 1/3 as much work done, and therefore be making 1/3 as much per hour.
Everyone says everything is easier to learn than BASIC, and then I look at the first line of a sample program and run. I have used FirstBasic and find it fast enough for anything I will ever do but unless the ad is BS the same company has beefed up their PowerBasic Console model to almost the best C compiler speeds. This looks interesting but so doesn't Forth - but as above, the first line of code seems almost mystical ( requires a baseline of knowledge I suppose that makes any language seem easy to the possessor of said knowledge ). BASIC is for us linear thinking dopes ( non ++ anything people ).
EUPHORIA's "Hello, World!"
[edit]puts(1, "Hello, World!\n")
memory
[edit]sure if you're doing a single function program then you will not need to explicitly allocate or deallocate memory. to develop and full application in linux gui's or windows, you have to allocate memory period and be subject to the pitfalls of doing this. who said in euphoria you don't need to allocate or free memory? it supports this explicitly, and thus allows you to use linux .so and windows .dll files and hence have access to the relative api. by saying that euphoria does not need to allocate memory could be interpreted as in a way saying it is less powerful than C, which is a dubious speculation. euphoria supports direct memory allocation in a far more sophisticated manner than c.
If you are interfacing with a decent library then the library will be doing most of the allocating for you, otherwise in Euphoria it will do it for you automatically if you are just dealing with loading bitmaps, reading files and manipulating memory etc. This needs no memory allocation. Where you have to allocate memory is for the smaller things like passing a "string" to a C function. You have to convert it first to a Unicode, Ascii and most often null terminate it to make it "C compatable".
Its not entirely possible in a GUI environment to make a program which does not explicitly allocate memory, maybe your library does all of it for you however, and the code *you* write involves no memory allocation at all.
I've made some Euphoria programs in windows in which the memory allocation amounted to nothing other than the (48 byte) WndClassEx structure, and convering text via SetWindowText to control functions, calling the function then immediately freeing the memory block allocated - on a sliding scale the amount you *have* to allocate is really not what you'd call problematic, or likely to lead to any major pitfalls.
The way *most* people use euphoria, developing programs/utilities etc with an overhead library involve no direct memory manipulation at all, which is why the claim euphoria does not need to allocate memory is so often stated. The Reality is Euphoria only ever *has* to allocate memory when it calls a compiled function in another language, which in turns requires memory to manipulate whatever data it is you are passing to it, as it is presumed you both have read/write access to this same memory block. Which is the simplest way to overcome the many different ways many different languages use memory.
Euphoria can manipulate memory just like C can, just if you don't call C libraries I'd say its a *lot* quicker just to do it in native Euphoria. HoCkster
Note on integer size
[edit]Euphoria uses 31-bit values for integers NOT 32 and this fact is stated repeatedly throughout the official documentation. The 32nd bit designates it as an integer instead of an atom. This is NOT a typo so don't correct this. - DNewhall
Euphoria can, of course, handle 32+bit integers in its atom data type.
- 32+bit isn't entirely accurate. Euphoria can only support 31bit integers, and 64-bit double precision floats. The mantissa is 52-bits. OpenEuphoria probably inherits this limitation. — Preceding unsigned comment added by 108.90.2.142 (talk) 05:44, 4 November 2011 (UTC)
There seems to be some confusion over terminology. Euphoria can store (arithmetical) integers from -9,007,199,254,740,992 to +9,007,199,254,740,992 without loss of precision. When a value is in the range -1,073,741,824 to +1,073,741,823 it is stored in the Euphoria data type known as an integer otherwise they are stored in the data type known as an atom. The integer data type is a more efficient entity and ought to be used for (arithmetical) integers in the subset range mentioned above. When using integers outside that range, such as 32-bit addresses, the atom data type must be used. Furthermore, the 64-bit version of OpenEuphoria is being readied for release, which will significantly extend the range of integers able to be used. DerekP (talk) 00:07, 5 November 2011 (UTC)
Integer Size: further clarification
[edit]Integers are 30 bits in a signed or unsigned direction. Hence integers overload at 2^30 plus or minus, and atoms at 2^40 something plus or minus. Hence the above post is correct that an integer is really 31 bits, but it is forced as a signed variable (you don't get to choose). You can't declare an integer (be it 31 bits) as signed or unsigned so the 31 remaining bits fall into the category as a signed variable. One bit designates the sign, and the remaining 30 bits the actual value of the integer. HoCkster
Integers Overload, Atoms Approximate
[edit]As a further note, Integers Overload, Atoms Approximate. Integers handle exact integer values NOT up until 32 btis, it's been well documented not to use integers for 32 bit numbers (use atoms).... they start to approximate at 2^48 onwards. ~~
What's the big deal?
[edit]Am I missing something here? The article seems to be written by someone who is unaware that programming language development continued after the creation of C. There's a lot of bragging that Euphoria doesn't require pointer or array management and doesn't have static typing, and that's great, but that applies to a wide variety of languages used today.
I see that despite using the term "object" rather liberally, there seem to be no OO facilities at all. I also can't find anything on built-in hash/dictionary support, besides using an enum to index an array. Comparing a scripting language to C is all well and good, but what makes Euphoria better than, say, Python or another dynamic language? —Preceding unsigned comment added by 96.240.116.103 (talk) 16:15, 18 May 2009 (UTC)
- You're missing too much. It looks like you've never really used Euphoria in real world application. Python for example don't get closer to Euphoria's power and simplicity. Lots of staff in Basic, Python, JavaScript, etc. that takes lots of ugly lines to can be written in one or few simple lines in Euphoria, and this is what you're missing here.
- See Lib2 for example, http://rapideuphoria311.free.nf, in math.e for example most routines are operating on ANY kind of object or number, using a single line... this is one thing Python and the rest don't have in common with Euphoria 3. Yet it's just one thing, there is far more.
- For the moment some explanation:
- Euphoria versus Conventional Languages
- "By basing Euphoria on this one, simple, general, recursive data structure, a tremendous amount of the complexity normally found in programming languages has been avoided. The arrays, structures, unions, arrays of records, multidimensional arrays, etc. of other languages can all be easily represented in Euphoria with sequences. So can higher-level structures such as lists, stacks, queues, trees etc.
- Furthermore, in Euphoria you can have sequences of mixed type; you can assign any object to an element of a sequence; and sequences easily grow or shrink in length without your having to worry about storage allocation issues. The exact layout of a data structure does not have to be declared in advance, and can change dynamically as required. It is easy to write generic code, where, for instance, you push or pop a mix of various kinds of data objects using a single stack. Making a flexible list that contains a variety of different kinds of data objects is trivial in Euphoria, but requires dozens of lines of ugly code in other languages.
- Data structure manipulations are very efficient since the Euphoria interpreter will point to large data objects rather than copy them.
- Programming in Euphoria is based entirely on creating and manipulating flexible, dynamic sequences of data. Sequences are *it* - there are no other data structures to learn. You operate in a simple, safe, elastic world of *values*, that is far removed from the rigid, tedious, dangerous world of bits, bytes, pointers and machine crashes.
- Unlike other languages such as LISP and Smalltalk, Euphoria's "garbage collection" of unused storage is a continuous process that never causes random delays in execution of a program, and does not pre-allocate huge regions of memory.
- The language definitions of conventional languages such as C, C++, Ada, etc. are very complex. Most programmers become fluent in only a subset of the language. The ANSI standards for these languages read like complex legal documents.
- You are forced to write different code for different data types simply to copy the data, ask for its current length, concatenate it, compare it etc. The manuals for those languages are packed with routines such as "strcpy", "strncpy", "memcpy", "strcat", "strlen", "strcmp", "memcmp", etc. that each only work on one of the many types of data.
- Much of the complexity surrounds issues of data type. How do you define new types? Which types of data can be mixed? How do you convert one type into another in a way that will keep the compiler happy? When you need to do something requiring flexibility at run-time, you frequently find yourself trying to fake out the compiler.
- In these languages the numeric value 4 (for example) can have a different meaning depending on whether it is an int, a char, a short, a double, an int * etc. In Euphoria, 4 is the atom 4, period. Euphoria has something called types as we shall see later, but it is a much simpler concept.
- Issues of dynamic storage allocation and deallocation consume a great deal of programmer coding time and debugging time in these other languages, and make the resulting programs much harder to understand. Programs that must run continuously often exhibit storage "leaks", since it takes a great deal of discipline to safely and properly free all blocks of storage once they are no longer needed.
- Pointer variables are extensively used. The pointer has been called the "go to" of data structures. It forces programmers to think of data as being bound to a fixed memory location where it can be manipulated in all sorts of low-level, non-portable, tricky ways. A picture of the actual hardware that your program will run on is never far from your mind. Euphoria does not have pointers and does not need them."
- From refman.doc. 82.102.169.204 (talk) 15:40, 5 September 2024 (UTC)
euphoria syntax highlighting lost
[edit]Since the switch from Geshi to Pygments for syntax highlighting (phab:T85794), support for 'euphoria' was unfortunately dropped, which was used only once on this page. The highlighting on this page is manually added. If you want specialised 'euphoria' syntax highlight support again, it will need to be added to Pygments. Alternatively, if there is another language which has similar syntax, we can add that as a fallback. John Vandenberg (chat) 21:11, 18 July 2015 (UTC)
External links modified
[edit]Hello fellow Wikipedians,
I have just modified 4 external links on Euphoria (programming language). Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
- Added archive https://web.archive.org/web/20110716180721/http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=9&fromYear=7&toMonth=9&toYear=7&keywords=atari to http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=9&fromYear=7&toMonth=9&toYear=7&keywords=atari
- Added archive https://web.archive.org/web/20110716180705/http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=A&fromYear=B&toMonth=A&toYear=B&keywords=oct+18+1%3A19 to http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=A&fromYear=B&toMonth=A&toYear=B&keywords=oct+18+1%3A19
- Added archive https://web.archive.org/web/20110716180757/http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=3&fromYear=3&toMonth=3&toYear=3&keywords=13%3A04 to http://www.rapideuphoria.com/cgi-bin/esearch.exu?fromMonth=3&fromYear=3&toMonth=3&toYear=3&keywords=13%3A04
- Added archive https://web.archive.org/web/20080509094445/http://www.usingeuphoria.com/ to http://www.usingeuphoria.com/
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}}
(last update: 5 June 2024).
- If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
- If you found an error with any archives or the URLs themselves, you can fix them with this tool.
Cheers.—InternetArchiveBot (Report bug) 17:46, 24 September 2017 (UTC)
Rapid Euphoria 3.2.2
[edit]Please notice that Rapid Euphoria version 3.2.2 exists and used in FreeDOS version 1.3:
http://rapideuphoria311.free.nf/index.html
https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/repositories/latest/pkg-html/euphoria.html
https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/repositories/1.3/pkg-html/euphoria.html 82.102.169.204 (talk) 08:44, 9 August 2024 (UTC)