Hi,<br><br>Intel Fortran is an excellent Fortran compiler. Why is Fortran still better than C and C++?<br>- some rules are different, like arrays passed to functions are ALWAYS supposed to be independent in Fortran, whereas in C, you have to add a restrict keyword<br>
- due to the last fact, Fortran is a language where its compiler could do more work (vectorization, autoparallelization...)<br>- Fortran 95 has an excellent array support, which is not currently available in C/C++ (perhaps with ArBB?)<br>
<br>Nevertheless, when you know C++ correctly, when you want to do something really efficient, you don't use Fortran. You can be as efficient as in C++, and you can do fancy stuff (I/O, network...). Class and templates are also better supported in C++.<br>
<br>Matthieu<br><br><div class="gmail_quote">2011/3/14 Sebastian Haase <span dir="ltr"><<a href="mailto:seb.haase@gmail.com">seb.haase@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
On Mon, Mar 14, 2011 at 9:24 PM, Ondrej Certik <<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>> wrote:<br>
> Hi Sturla,<br>
><br>
> On Tue, Mar 8, 2011 at 6:25 AM, Sturla Molden <<a href="mailto:sturla@molden.no">sturla@molden.no</a>> wrote:<br>
>> Den 08.03.2011 05:05, skrev Dan Halbert:<br>
>>> Thanks, that's a good suggestion. I have not written Fortran since 1971,<br>
>>> but it's come a long way. I was a little worried about the row-major vs<br>
>>> column-major issue, but perhaps that can be handled just by remembering<br>
>>> to reverse the subscript order between C and Fortran.<br>
>><br>
>> In practice this is not a problem. Most numerical libraries for C assume<br>
>> Fortran-ordering, even OpenGL assumes Fortran-ordering. People program<br>
>> MEX files for Matlab in C all the time. Fortran-ordering is assumed in<br>
>> MEX files too.<br>
>><br>
>> In ANSI C, array bounds must be known at compile time, so a Fortran<br>
>> routine with the interface<br>
>><br>
>>     subroutine foobar( lda, A )<br>
>>         integer lda<br>
>>         double precision A(lda,*)<br>
>>     end subroutine<br>
>><br>
>> will usually be written like<br>
>><br>
>>     void foobar( int lda, double A[]);<br>
>><br>
>> in C, ignoring different calling convention for lda.<br>
>><br>
>> Now we would index A(row,col) in Fortran and A[row + col*lda] in C. Is<br>
>> that too difficult to remember?<br>
>><br>
>> In ANSI C the issue actually only arises with small "array of arrays"<br>
>> having static shape, or convoluted contructs like "pointer to an array<br>
>> of pointers to arrays". Just avoid those and stay with 1D arrays in C --<br>
>> do the 1D to 2D mapping in you mind.<br>
>><br>
>> In C99 arrays are allowed to have dynamic size, which mean we can do<br>
>><br>
>>    void foobar( int lda, double *pA )<br>
>>    {<br>
>>       typedef double row_t [lda];<br>
>>       vector_t *A = (vector_t*)((void*)&pA[0]);<br>
>><br>
>> Here we must index A[k][i] to match A(i,k) in Fortran. I still have not<br>
>> seen anyone use C99 like this, so I think it is merely theoretical.<br>
>><br>
>> Chances are if you know how to do this with C99, you also know how to<br>
>> get the subscripts right. If you are afraid to forget "to reverse the<br>
>> subscript order between C and Fortran", it just tells me you don't<br>
>> really know what you are doing when using C, and should probably use<br>
>> something else.<br>
>><br>
>> Why not Cython? It has "native support" for NumPy arrays.<br>
>><br>
>> Personally I prefer Fortran 95, but that is merely a matter of taste.<br>
><br>
> +1 to all that you wrote about Fortran. I am pretty much switching to<br>
> it from C/C++ for all my numerical work, and then I use Cython to call<br>
> it from Python, as well as cmake for the build system.<br>
><br>
> Ondrej<br>
<br>
<br>
Hi,<br>
this is quite amazing...<br>
Sturla has been writing so much about Fortran recently, and Ondrej now<br>
says he has done the move from C/C++ to Fortran -- I thought Fortran<br>
was dead ... !?   ;-)<br>
What am I missing here ?<br>
Apparently (from what I was able to read-up so far) there is a BIG<br>
difference between FORTRAN 77 and F95.<br>
But isn't gcc or gfortran still only supporting F77 ?<br>
How about IntelCC's Fortran ?  Is that superior?<br>
Do you guys have any info / blogs / docs where one could get an<br>
up-to-date picture?<br>
Like:<br>
1. How about debugging - does gdb work or is there somthing better ?<br>
2. How is the move of the F77 community to F95 in general ?   How many<br>
people / projects are switching.<br>
3. Or is the move rather going like Fortran 77 -> C -> Python -><br>
Fortran 95   !?  ;-)<br>
<br>
Thanks,<br>
<font color="#888888">Sebastian Haase<br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Information System Engineer, Ph.D.<br>Blog: <a href="http://matt.eifelle.com" target="_blank">http://matt.eifelle.com</a><br>LinkedIn: <a href="http://www.linkedin.com/in/matthieubrucher" target="_blank">http://www.linkedin.com/in/matthieubrucher</a><br>