Difference between revisions of "Performance"
Hzwakenberg (talk | contribs) |
Hzwakenberg (talk | contribs) m (Alioth link no longer in existence, removed corresponding paragraph) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
Eiffel is a beautiful method and language, based on strong and elegant principles. But, what interest (except intellectual pleasure) would you have in using a wonderful language with poor performance for writing your programs? |
Eiffel is a beautiful method and language, based on strong and elegant principles. But, what interest (except intellectual pleasure) would you have in using a wonderful language with poor performance for writing your programs? |
||
− | + | Luckily, Eiffel has been designed with performance in mind. Furthermore, the Liberty Eiffel compiler in particular and the associated libraries are expressly designed to combine performance with expressivity. |
|
In the Eiffel language, expressivity is in the power of concepts. For example multiple inheritance and genericity are very powerful concepts, as are static type and dynamic type. This means that properly designed programs will be made with small code, this is '''global code compactness'''. On the other hand, there is '''no local code compactness'''. The Eiffel spirit is to make your code as legible as possible, because it is written once but is read many, many times (code is designed for change and reuse). So there is no point in using many unreadable abbreviations or symbols in order to save some keystrokes. Of course Eiffel code with its standard formatting rules needs many lines where other languages only need one line. The purpose is to achieve '''legibility''' because that is a prerequisite for code maintenance and reuse. |
In the Eiffel language, expressivity is in the power of concepts. For example multiple inheritance and genericity are very powerful concepts, as are static type and dynamic type. This means that properly designed programs will be made with small code, this is '''global code compactness'''. On the other hand, there is '''no local code compactness'''. The Eiffel spirit is to make your code as legible as possible, because it is written once but is read many, many times (code is designed for change and reuse). So there is no point in using many unreadable abbreviations or symbols in order to save some keystrokes. Of course Eiffel code with its standard formatting rules needs many lines where other languages only need one line. The purpose is to achieve '''legibility''' because that is a prerequisite for code maintenance and reuse. |
||
Line 14: | Line 14: | ||
Good luck to anyone who wants to understand this program in the ''dc'' language, reuse it, improve it or anything else! For the curious, you can run ''dc'' on any UNIX-like system and paste this code; it will print the prime number decomposition of the first value, which is 1000 here. How can you know the principles used here? Does the algorithm search from 2 each time? Does the program stop when the square root has been reached? |
Good luck to anyone who wants to understand this program in the ''dc'' language, reuse it, improve it or anything else! For the curious, you can run ''dc'' on any UNIX-like system and paste this code; it will print the prime number decomposition of the first value, which is 1000 here. How can you know the principles used here? Does the algorithm search from 2 each time? Does the program stop when the square root has been reached? |
||
+ | Liberty Eiffel generates highly efficient code, doesn't it? In fact, we have many ideas for improving generated code. This means you can choose Liberty Eiffel now and expect your code to run even faster under future releases of the compiler! |
||
− | Now, back to the performance aspect, you can see how LibertyEiffel behaves on [http://shootout.alioth.debian.org/benchmark.php?test=all&lang=all&calc=Calculate&xfullcpu=1&xmem=1&xloc=&ackermann=1&binarytrees=5&chameneos=5&message=4&fannkuch=3&fasta=3&harmonic=1&knucleotide=5&mandelbrot=4&nbody=3&nsieve=3&nsievebits=2&pidigits=2&random=1®exdna=4&revcomp=3&spectralnorm=5&hello=0&sumcol=1&takfp=1&tcprequest=4 this site] (where code lines count are ignored because it is not a relevant design aspect, as shown above). |
||
+ | The main areas for improvement are generating code for dynamic linking, flow analysis and garbage collector. Of course, these projects will be much helped if they were funded! |
||
− | NOTE: currently alioth.debian.org does not publish any data<br>pertaining to any Eiffel compiler. Perhaps we could take the<br>old SE code, improve on it where possible and re-submit..? /HZ |
||
− | |||
− | LibertyEiffel generates highly efficient code, doesn't it? In fact, we have many ideas for improving generated code. This means you can choose LibertyEiffel now and expect your code to run even faster under future releases of the compiler! |
||
− | |||
− | The main areas for improvement are generated code for dynamic linking, flow analysis and garbage collector. Of course, these projects will be much helped if they are [[Donations|funded]]! |
Latest revision as of 13:43, 3 January 2022
Very High Performance Programs
Eiffel is a beautiful method and language, based on strong and elegant principles. But, what interest (except intellectual pleasure) would you have in using a wonderful language with poor performance for writing your programs?
Luckily, Eiffel has been designed with performance in mind. Furthermore, the Liberty Eiffel compiler in particular and the associated libraries are expressly designed to combine performance with expressivity.
In the Eiffel language, expressivity is in the power of concepts. For example multiple inheritance and genericity are very powerful concepts, as are static type and dynamic type. This means that properly designed programs will be made with small code, this is global code compactness. On the other hand, there is no local code compactness. The Eiffel spirit is to make your code as legible as possible, because it is written once but is read many, many times (code is designed for change and reuse). So there is no point in using many unreadable abbreviations or symbols in order to save some keystrokes. Of course Eiffel code with its standard formatting rules needs many lines where other languages only need one line. The purpose is to achieve legibility because that is a prerequisite for code maintenance and reuse.
To convince you, I'll just give one example:
1000[p]s2[lip/dli%0=1dvsr]s12sid2%0=13sidvsr[dli%0=1lrli2+dsi!>.]ds.xd1<2
Good luck to anyone who wants to understand this program in the dc language, reuse it, improve it or anything else! For the curious, you can run dc on any UNIX-like system and paste this code; it will print the prime number decomposition of the first value, which is 1000 here. How can you know the principles used here? Does the algorithm search from 2 each time? Does the program stop when the square root has been reached?
Liberty Eiffel generates highly efficient code, doesn't it? In fact, we have many ideas for improving generated code. This means you can choose Liberty Eiffel now and expect your code to run even faster under future releases of the compiler!
The main areas for improvement are generating code for dynamic linking, flow analysis and garbage collector. Of course, these projects will be much helped if they were funded!