I’ve been reading about this f# and it seems its a language designed from the ground up to do very complex algorithmic mathematics with the simplest syntax possible and with the best performance.
You know everyone says that managed code can never be as fast as unmanaged code, but is that really true? Maybe not generic managed code. But it seems to me in the instance of F#, its possible to write a managed code implementation to deal with specific things just as fast as C.
It used to be that you would write all your performance critical mathematical algorithmic stuff in C, and then call those unmanaged libraries from C#. But with F#, maybe now its more ideal to write performance critical stuff in F#? I think thats what microsoft is going for with this…
as long as you use mono it does not matter as mono is that slow compared to MS.NET that F# will always lose
I agree with Dewy on Fortran or if you want something else thats likely even faster and is complex enough learn C + OpenCL or C + CUDA (or Fortran + CUDA) then it does not matter if C is fast or not cause the gpu will be faster than the cpu no matter what
Also you need to think that a JIT normally can have more information about the running system and perform optimizations at run-time (if it is del engineered and smart enough) so in some things a JIT can beat a C compiler. And even more… if you really want fast computations, you should start seeing CUDA or OpenCL (I think).
This. The biggest benefit to virtualization is that you compile on the end-user’s machine, and if you’re compiling directly to machine code anyway, since you have information about your target machine, the compiler can optimize better for it. Of course, with these languages, they run on top of these virtual machines that attempt to manage memory and create a sandbox, so they will not be faster than C in most cases.
The point of JIT like you said for compilers “and if you’re compiling directly to machine code anyway, since you have information about your target machine, the compiler can optimize better for it.” that is for a JIT to do the same but not only for the target machine, but to the running program itself a JIT not only know the target machine, but can take action at runtime it can know the real paths that are most used, and so on (sure not all JIT are as advanced as they could be… but some day…). Just wait ;).
By the way, I return to CUDA and OpenCL if you really want fast math, simulations and things like that.