Performance

From SmartEiffelWiki

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?

Hopefully, Eiffel has been designed with performance in mind. Furthermore, the SmartEiffel compiler and the associated libraries are expressly designed to associate performance and expressivity.

In 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?

Now, back to the performance aspect, you can see how SmartEiffel behaves on this site (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&regexdna=4&revcomp=3&spectralnorm=5&hello=0&sumcol=1&takfp=1&tcprequest=4) (where code lines count are ignored because it is not a relevant design aspect, as shown above).

SmartEiffel generates highly efficient code, doesn't it? In fact, we have many ideas for improving generated code. This means you can choose SmartEiffel 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 funded!

Other languages